diff --git a/docs/data/hsDocs.json b/docs/data/hsDocs.json index 6759e41..c23386c 100644 --- a/docs/data/hsDocs.json +++ b/docs/data/hsDocs.json @@ -5817,7 +5817,7 @@ "sources": [ { "fileName": "view/Parts.ts", - "line": 142, + "line": 145, "character": 26 } ] @@ -6238,7 +6238,7 @@ "sources": [ { "fileName": "view/Parts.ts", - "line": 203, + "line": 206, "character": 22 } ] @@ -6389,7 +6389,7 @@ "sources": [ { "fileName": "view/Parts.ts", - "line": 151, + "line": 154, "character": 20 } ] diff --git a/docs/data/src/hsDocs/coverage/coverage-final.json b/docs/data/src/hsDocs/coverage/coverage-final.json index a82599c..f9e477c 100644 --- a/docs/data/src/hsDocs/coverage/coverage-final.json +++ b/docs/data/src/hsDocs/coverage/coverage-final.json @@ -5,6 +5,6 @@ ,"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/MainComment.ts": {"path":"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/MainComment.ts","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":63}},"1":{"start":{"line":7,"column":0},"end":{"line":7,"column":38}},"2":{"start":{"line":8,"column":0},"end":{"line":8,"column":40}},"3":{"start":{"line":18,"column":24},"end":{"line":18,"column":26}},"4":{"start":{"line":19,"column":4},"end":{"line":23,"column":5}},"5":{"start":{"line":20,"column":8},"end":{"line":20,"column":71}},"6":{"start":{"line":21,"column":8},"end":{"line":21,"column":50}},"7":{"start":{"line":22,"column":8},"end":{"line":22,"column":52}},"8":{"start":{"line":24,"column":4},"end":{"line":24,"column":42}},"9":{"start":{"line":17,"column":0},"end":{"line":25,"column":1}},"10":{"start":{"line":36,"column":24},"end":{"line":36,"column":26}},"11":{"start":{"line":37,"column":4},"end":{"line":47,"column":5}},"12":{"start":{"line":38,"column":8},"end":{"line":38,"column":71}},"13":{"start":{"line":39,"column":8},"end":{"line":44,"column":9}},"14":{"start":{"line":40,"column":12},"end":{"line":40,"column":56}},"15":{"start":{"line":41,"column":12},"end":{"line":43,"column":13}},"16":{"start":{"line":42,"column":16},"end":{"line":42,"column":76}},"17":{"start":{"line":45,"column":8},"end":{"line":45,"column":50}},"18":{"start":{"line":46,"column":8},"end":{"line":46,"column":52}},"19":{"start":{"line":48,"column":4},"end":{"line":48,"column":42}},"20":{"start":{"line":35,"column":0},"end":{"line":49,"column":1}},"21":{"start":{"line":61,"column":16},"end":{"line":61,"column":39}},"22":{"start":{"line":62,"column":4},"end":{"line":62,"column":61}},"23":{"start":{"line":62,"column":24},"end":{"line":62,"column":59}},"24":{"start":{"line":63,"column":4},"end":{"line":65,"column":5}},"25":{"start":{"line":64,"column":8},"end":{"line":64,"column":91}},"26":{"start":{"line":64,"column":39},"end":{"line":64,"column":87}},"27":{"start":{"line":64,"column":70},"end":{"line":64,"column":86}},"28":{"start":{"line":66,"column":4},"end":{"line":66,"column":80}},"29":{"start":{"line":67,"column":4},"end":{"line":67,"column":65}},"30":{"start":{"line":74,"column":15},"end":{"line":74,"column":30}},"31":{"start":{"line":75,"column":4},"end":{"line":78,"column":7}},"32":{"start":{"line":82,"column":4},"end":{"line":95,"column":8}},"33":{"start":{"line":83,"column":12},"end":{"line":94,"column":13}},"34":{"start":{"line":89,"column":24},"end":{"line":89,"column":34}},"35":{"start":{"line":90,"column":25},"end":{"line":93,"column":19}},"36":{"start":{"line":99,"column":4},"end":{"line":107,"column":8}},"37":{"start":{"line":100,"column":8},"end":{"line":106,"column":9}},"38":{"start":{"line":101,"column":32},"end":{"line":101,"column":42}},"39":{"start":{"line":102,"column":21},"end":{"line":105,"column":15}},"40":{"start":{"line":111,"column":4},"end":{"line":118,"column":7}},"41":{"start":{"line":112,"column":8},"end":{"line":117,"column":10}},"42":{"start":{"line":133,"column":17},"end":{"line":133,"column":24}},"43":{"start":{"line":136,"column":21},"end":{"line":136,"column":22}},"44":{"start":{"line":137,"column":23},"end":{"line":150,"column":19}},"45":{"start":{"line":143,"column":32},"end":{"line":143,"column":38}},"46":{"start":{"line":144,"column":24},"end":{"line":144,"column":32}},"47":{"start":{"line":145,"column":16},"end":{"line":145,"column":95}},"48":{"start":{"line":146,"column":16},"end":{"line":146,"column":95}},"49":{"start":{"line":147,"column":16},"end":{"line":147,"column":114}},"50":{"start":{"line":151,"column":8},"end":{"line":151,"column":56}},"51":{"start":{"line":154,"column":4},"end":{"line":154,"column":74}},"52":{"start":{"line":155,"column":4},"end":{"line":155,"column":59}}},"fnMap":{"0":{"name":"commentLong","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":27}},"loc":{"start":{"line":17,"column":35},"end":{"line":25,"column":1}}},"1":{"name":"comment","decl":{"start":{"line":35,"column":16},"end":{"line":35,"column":23}},"loc":{"start":{"line":35,"column":44},"end":{"line":49,"column":1}}},"2":{"name":"textOrShortTextOrDescription","decl":{"start":{"line":60,"column":9},"end":{"line":60,"column":37}},"loc":{"start":{"line":60,"column":64},"end":{"line":68,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":64,"column":25},"end":{"line":64,"column":26}},"loc":{"start":{"line":64,"column":37},"end":{"line":64,"column":88}}},"4":{"name":"returns","decl":{"start":{"line":73,"column":9},"end":{"line":73,"column":16}},"loc":{"start":{"line":73,"column":43},"end":{"line":79,"column":1}}},"5":{"name":"commentRemainder","decl":{"start":{"line":81,"column":9},"end":{"line":81,"column":25}},"loc":{"start":{"line":81,"column":37},"end":{"line":96,"column":1}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":82,"column":42},"end":{"line":82,"column":43}},"loc":{"start":{"line":82,"column":54},"end":{"line":95,"column":5}}},"7":{"name":"otherCommentTags","decl":{"start":{"line":98,"column":9},"end":{"line":98,"column":25}},"loc":{"start":{"line":98,"column":37},"end":{"line":108,"column":1}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":99,"column":54},"end":{"line":99,"column":55}},"loc":{"start":{"line":99,"column":66},"end":{"line":107,"column":5}}},"9":{"name":"mainCommentParams","decl":{"start":{"line":110,"column":9},"end":{"line":110,"column":26}},"loc":{"start":{"line":110,"column":37},"end":{"line":119,"column":1}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":111,"column":52},"end":{"line":111,"column":53}},"loc":{"start":{"line":112,"column":8},"end":{"line":117,"column":10}}},"11":{"name":"prettifyCode","decl":{"start":{"line":131,"column":9},"end":{"line":131,"column":21}},"loc":{"start":{"line":131,"column":51},"end":{"line":156,"column":1}}},"12":{"name":"braceIndenting","decl":{"start":{"line":135,"column":13},"end":{"line":135,"column":27}},"loc":{"start":{"line":135,"column":39},"end":{"line":152,"column":5}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":142,"column":17},"end":{"line":142,"column":18}},"loc":{"start":{"line":142,"column":30},"end":{"line":148,"column":13}}}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":4},"end":{"line":23,"column":5}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":23,"column":5}},{"start":{"line":19,"column":4},"end":{"line":23,"column":5}}]},"1":{"loc":{"start":{"line":35,"column":39},"end":{"line":35,"column":44}},"type":"default-arg","locations":[{"start":{"line":35,"column":39},"end":{"line":35,"column":44}}]},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":47,"column":5}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":47,"column":5}},{"start":{"line":37,"column":4},"end":{"line":47,"column":5}}]},"3":{"loc":{"start":{"line":39,"column":8},"end":{"line":44,"column":9}},"type":"if","locations":[{"start":{"line":39,"column":8},"end":{"line":44,"column":9}},{"start":{"line":39,"column":8},"end":{"line":44,"column":9}}]},"4":{"loc":{"start":{"line":41,"column":12},"end":{"line":43,"column":13}},"type":"if","locations":[{"start":{"line":41,"column":12},"end":{"line":43,"column":13}},{"start":{"line":41,"column":12},"end":{"line":43,"column":13}}]},"5":{"loc":{"start":{"line":61,"column":16},"end":{"line":61,"column":33}},"type":"binary-expr","locations":[{"start":{"line":61,"column":16},"end":{"line":61,"column":33}},{"start":{"line":61,"column":37},"end":{"line":61,"column":39}}]},"6":{"loc":{"start":{"line":62,"column":4},"end":{"line":62,"column":61}},"type":"if","locations":[{"start":{"line":62,"column":4},"end":{"line":62,"column":61}},{"start":{"line":62,"column":4},"end":{"line":62,"column":61}}]},"7":{"loc":{"start":{"line":62,"column":39},"end":{"line":62,"column":51}},"type":"binary-expr","locations":[{"start":{"line":62,"column":39},"end":{"line":62,"column":51}},{"start":{"line":62,"column":55},"end":{"line":62,"column":57}}]},"8":{"loc":{"start":{"line":63,"column":4},"end":{"line":65,"column":5}},"type":"if","locations":[{"start":{"line":63,"column":4},"end":{"line":65,"column":5}},{"start":{"line":63,"column":4},"end":{"line":65,"column":5}}]},"9":{"loc":{"start":{"line":64,"column":39},"end":{"line":64,"column":87}},"type":"if","locations":[{"start":{"line":64,"column":39},"end":{"line":64,"column":87}},{"start":{"line":64,"column":39},"end":{"line":64,"column":87}}]},"10":{"loc":{"start":{"line":66,"column":66},"end":{"line":66,"column":68}},"type":"cond-expr","locations":[{"start":{"line":66,"column":66},"end":{"line":66,"column":68}},{"start":{"line":66,"column":71},"end":{"line":66,"column":78}}]},"11":{"loc":{"start":{"line":75,"column":47},"end":{"line":75,"column":49}},"type":"cond-expr","locations":[{"start":{"line":75,"column":47},"end":{"line":75,"column":49}},{"start":{"line":75,"column":51},"end":{"line":78,"column":5}}]},"12":{"loc":{"start":{"line":84,"column":16},"end":{"line":84,"column":28}},"type":"switch","locations":[{"start":{"line":84,"column":16},"end":{"line":84,"column":28}},{"start":{"line":85,"column":16},"end":{"line":85,"column":33}},{"start":{"line":86,"column":16},"end":{"line":86,"column":28}},{"start":{"line":87,"column":16},"end":{"line":87,"column":35}},{"start":{"line":88,"column":16},"end":{"line":89,"column":34}},{"start":{"line":90,"column":16},"end":{"line":93,"column":20}}]},"13":{"loc":{"start":{"line":99,"column":32},"end":{"line":99,"column":34}},"type":"cond-expr","locations":[{"start":{"line":99,"column":32},"end":{"line":99,"column":34}},{"start":{"line":99,"column":37},"end":{"line":107,"column":6}}]},"14":{"loc":{"start":{"line":101,"column":12},"end":{"line":101,"column":42}},"type":"switch","locations":[{"start":{"line":101,"column":12},"end":{"line":101,"column":42}},{"start":{"line":102,"column":12},"end":{"line":105,"column":15}}]},"15":{"loc":{"start":{"line":114,"column":57},"end":{"line":114,"column":59}},"type":"cond-expr","locations":[{"start":{"line":114,"column":57},"end":{"line":114,"column":59}},{"start":{"line":115,"column":16},"end":{"line":115,"column":107}}]},"16":{"loc":{"start":{"line":115,"column":49},"end":{"line":115,"column":82}},"type":"cond-expr","locations":[{"start":{"line":115,"column":49},"end":{"line":115,"column":82}},{"start":{"line":115,"column":85},"end":{"line":115,"column":87}}]},"17":{"loc":{"start":{"line":147,"column":91},"end":{"line":147,"column":97}},"type":"cond-expr","locations":[{"start":{"line":147,"column":91},"end":{"line":147,"column":97}},{"start":{"line":147,"column":98},"end":{"line":147,"column":107}}]}},"s":{"0":2,"1":2,"2":2,"3":7,"4":7,"5":7,"6":7,"7":7,"8":7,"9":2,"10":15,"11":15,"12":15,"13":15,"14":1,"15":1,"16":1,"17":15,"18":15,"19":15,"20":2,"21":22,"22":22,"23":10,"24":22,"25":6,"26":10,"27":1,"28":22,"29":22,"30":22,"31":22,"32":22,"33":34,"34":33,"35":1,"36":1,"37":2,"38":0,"39":2,"40":1,"41":1,"42":22,"43":5,"44":5,"45":49,"46":49,"47":49,"48":49,"49":49,"50":5,"51":22,"52":22},"f":{"0":7,"1":15,"2":22,"3":10,"4":22,"5":22,"6":34,"7":1,"8":2,"9":1,"10":1,"11":22,"12":5,"13":49},"b":{"0":[7,0],"1":[1],"2":[15,0],"3":[1,14],"4":[1,0],"5":[22,5],"6":[10,12],"7":[10,0],"8":[6,16],"9":[1,9],"10":[14,8],"11":[22,0],"12":[6,23,33,33,33,1],"13":[0,1],"14":[0,2],"15":[1,0],"16":[0,0],"17":[11,38]}} ,"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/MainDetail.ts": {"path":"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/MainDetail.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":75}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":75}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":49}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":52}},"4":{"start":{"line":5,"column":0},"end":{"line":9,"column":46}},"5":{"start":{"line":17,"column":21},"end":{"line":17,"column":41}},"6":{"start":{"line":18,"column":22},"end":{"line":18,"column":44}},"7":{"start":{"line":19,"column":8},"end":{"line":19,"column":37}},"8":{"start":{"line":21,"column":21},"end":{"line":21,"column":86}},"9":{"start":{"line":22,"column":8},"end":{"line":22,"column":46}},"10":{"start":{"line":15,"column":0},"end":{"line":24,"column":1}},"11":{"start":{"line":33,"column":4},"end":{"line":38,"column":5}},"12":{"start":{"line":34,"column":8},"end":{"line":34,"column":50}},"13":{"start":{"line":35,"column":8},"end":{"line":37,"column":9}},"14":{"start":{"line":36,"column":12},"end":{"line":36,"column":36}},"15":{"start":{"line":39,"column":4},"end":{"line":39,"column":21}},"16":{"start":{"line":47,"column":16},"end":{"line":47,"column":55}},"17":{"start":{"line":48,"column":4},"end":{"line":52,"column":7}},"18":{"start":{"line":60,"column":16},"end":{"line":60,"column":55}},"19":{"start":{"line":61,"column":4},"end":{"line":63,"column":7}},"20":{"start":{"line":72,"column":4},"end":{"line":72,"column":85}},"21":{"start":{"line":76,"column":4},"end":{"line":90,"column":5}},"22":{"start":{"line":77,"column":8},"end":{"line":82,"column":11}},"23":{"start":{"line":78,"column":41},"end":{"line":78,"column":71}},"24":{"start":{"line":79,"column":41},"end":{"line":79,"column":72}},"25":{"start":{"line":80,"column":41},"end":{"line":80,"column":72}},"26":{"start":{"line":81,"column":41},"end":{"line":81,"column":73}},"27":{"start":{"line":83,"column":11},"end":{"line":90,"column":5}},"28":{"start":{"line":84,"column":8},"end":{"line":84,"column":73}},"29":{"start":{"line":85,"column":11},"end":{"line":90,"column":5}},"30":{"start":{"line":86,"column":8},"end":{"line":86,"column":43}},"31":{"start":{"line":87,"column":8},"end":{"line":87,"column":50}},"32":{"start":{"line":89,"column":8},"end":{"line":89,"column":37}},"33":{"start":{"line":94,"column":18},"end":{"line":94,"column":102}},"34":{"start":{"line":94,"column":35},"end":{"line":94,"column":101}},"35":{"start":{"line":95,"column":4},"end":{"line":95,"column":92}},"36":{"start":{"line":96,"column":4},"end":{"line":96,"column":41}},"37":{"start":{"line":100,"column":31},"end":{"line":100,"column":64}},"38":{"start":{"line":100,"column":45},"end":{"line":100,"column":64}},"39":{"start":{"line":101,"column":31},"end":{"line":101,"column":65}},"40":{"start":{"line":101,"column":44},"end":{"line":101,"column":65}},"41":{"start":{"line":102,"column":31},"end":{"line":102,"column":65}},"42":{"start":{"line":102,"column":45},"end":{"line":102,"column":65}},"43":{"start":{"line":103,"column":21},"end":{"line":115,"column":5}},"44":{"start":{"line":116,"column":15},"end":{"line":116,"column":65}},"45":{"start":{"line":117,"column":21},"end":{"line":117,"column":92}},"46":{"start":{"line":117,"column":36},"end":{"line":117,"column":92}},"47":{"start":{"line":119,"column":20},"end":{"line":124,"column":79}},"48":{"start":{"line":122,"column":29},"end":{"line":122,"column":76}},"49":{"start":{"line":123,"column":29},"end":{"line":123,"column":78}},"50":{"start":{"line":124,"column":26},"end":{"line":124,"column":78}},"51":{"start":{"line":125,"column":22},"end":{"line":130,"column":103}},"52":{"start":{"line":128,"column":29},"end":{"line":128,"column":76}},"53":{"start":{"line":129,"column":29},"end":{"line":129,"column":76}},"54":{"start":{"line":130,"column":26},"end":{"line":130,"column":102}},"55":{"start":{"line":132,"column":20},"end":{"line":132,"column":57}},"56":{"start":{"line":133,"column":20},"end":{"line":133,"column":37}},"57":{"start":{"line":134,"column":4},"end":{"line":136,"column":5}},"58":{"start":{"line":135,"column":8},"end":{"line":135,"column":134}},"59":{"start":{"line":137,"column":4},"end":{"line":139,"column":5}},"60":{"start":{"line":138,"column":8},"end":{"line":138,"column":135}},"61":{"start":{"line":140,"column":4},"end":{"line":140,"column":119}},"62":{"start":{"line":144,"column":4},"end":{"line":155,"column":50}},"63":{"start":{"line":144,"column":10},"end":{"line":153,"column":11}},"64":{"start":{"line":155,"column":15},"end":{"line":155,"column":30}},"65":{"start":{"line":155,"column":31},"end":{"line":155,"column":48}},"66":{"start":{"line":159,"column":4},"end":{"line":161,"column":54}},"67":{"start":{"line":160,"column":38},"end":{"line":160,"column":110}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":4},"end":{"line":16,"column":16}},"loc":{"start":{"line":16,"column":28},"end":{"line":23,"column":5}}},"1":{"name":"getOverview","decl":{"start":{"line":32,"column":9},"end":{"line":32,"column":20}},"loc":{"start":{"line":32,"column":43},"end":{"line":40,"column":1}}},"2":{"name":"itemDoc","decl":{"start":{"line":46,"column":9},"end":{"line":46,"column":16}},"loc":{"start":{"line":46,"column":24},"end":{"line":53,"column":1}}},"3":{"name":"overviewDoc","decl":{"start":{"line":59,"column":9},"end":{"line":59,"column":20}},"loc":{"start":{"line":59,"column":28},"end":{"line":64,"column":1}}},"4":{"name":"title","decl":{"start":{"line":71,"column":9},"end":{"line":71,"column":14}},"loc":{"start":{"line":71,"column":31},"end":{"line":73,"column":1}}},"5":{"name":"members","decl":{"start":{"line":75,"column":9},"end":{"line":75,"column":16}},"loc":{"start":{"line":75,"column":33},"end":{"line":91,"column":1}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":78,"column":30},"end":{"line":78,"column":31}},"loc":{"start":{"line":78,"column":41},"end":{"line":78,"column":71}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":79,"column":30},"end":{"line":79,"column":31}},"loc":{"start":{"line":79,"column":41},"end":{"line":79,"column":72}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":80,"column":30},"end":{"line":80,"column":31}},"loc":{"start":{"line":80,"column":41},"end":{"line":80,"column":72}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":81,"column":30},"end":{"line":81,"column":31}},"loc":{"start":{"line":81,"column":41},"end":{"line":81,"column":73}}},"10":{"name":"parameter","decl":{"start":{"line":93,"column":9},"end":{"line":93,"column":18}},"loc":{"start":{"line":93,"column":38},"end":{"line":97,"column":1}}},"11":{"name":"(anonymous_11)","decl":{"start":{"line":94,"column":24},"end":{"line":94,"column":25}},"loc":{"start":{"line":94,"column":35},"end":{"line":94,"column":101}}},"12":{"name":"member","decl":{"start":{"line":99,"column":9},"end":{"line":99,"column":15}},"loc":{"start":{"line":99,"column":68},"end":{"line":141,"column":1}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":100,"column":31},"end":{"line":100,"column":32}},"loc":{"start":{"line":100,"column":45},"end":{"line":100,"column":64}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":101,"column":31},"end":{"line":101,"column":32}},"loc":{"start":{"line":101,"column":44},"end":{"line":101,"column":65}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":102,"column":31},"end":{"line":102,"column":32}},"loc":{"start":{"line":102,"column":45},"end":{"line":102,"column":65}}},"16":{"name":"(anonymous_16)","decl":{"start":{"line":117,"column":21},"end":{"line":117,"column":22}},"loc":{"start":{"line":117,"column":36},"end":{"line":117,"column":92}}},"17":{"name":"(anonymous_17)","decl":{"start":{"line":122,"column":16},"end":{"line":122,"column":17}},"loc":{"start":{"line":122,"column":29},"end":{"line":122,"column":76}}},"18":{"name":"(anonymous_18)","decl":{"start":{"line":123,"column":16},"end":{"line":123,"column":17}},"loc":{"start":{"line":123,"column":29},"end":{"line":123,"column":78}}},"19":{"name":"(anonymous_19)","decl":{"start":{"line":124,"column":13},"end":{"line":124,"column":14}},"loc":{"start":{"line":124,"column":26},"end":{"line":124,"column":78}}},"20":{"name":"(anonymous_20)","decl":{"start":{"line":128,"column":16},"end":{"line":128,"column":17}},"loc":{"start":{"line":128,"column":29},"end":{"line":128,"column":76}}},"21":{"name":"(anonymous_21)","decl":{"start":{"line":129,"column":16},"end":{"line":129,"column":17}},"loc":{"start":{"line":129,"column":29},"end":{"line":129,"column":76}}},"22":{"name":"(anonymous_22)","decl":{"start":{"line":130,"column":13},"end":{"line":130,"column":14}},"loc":{"start":{"line":130,"column":26},"end":{"line":130,"column":102}}},"23":{"name":"itemDescriptor","decl":{"start":{"line":143,"column":9},"end":{"line":143,"column":23}},"loc":{"start":{"line":143,"column":40},"end":{"line":156,"column":1}}},"24":{"name":"itemChild","decl":{"start":{"line":158,"column":9},"end":{"line":158,"column":18}},"loc":{"start":{"line":158,"column":35},"end":{"line":162,"column":1}}},"25":{"name":"(anonymous_25)","decl":{"start":{"line":160,"column":27},"end":{"line":160,"column":28}},"loc":{"start":{"line":160,"column":38},"end":{"line":160,"column":110}}}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":21},"end":{"line":21,"column":44}},"type":"binary-expr","locations":[{"start":{"line":21,"column":21},"end":{"line":21,"column":44}},{"start":{"line":21,"column":48},"end":{"line":21,"column":86}}]},"1":{"loc":{"start":{"line":21,"column":56},"end":{"line":21,"column":79}},"type":"binary-expr","locations":[{"start":{"line":21,"column":56},"end":{"line":21,"column":79}},{"start":{"line":21,"column":83},"end":{"line":21,"column":85}}]},"2":{"loc":{"start":{"line":33,"column":4},"end":{"line":38,"column":5}},"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":38,"column":5}},{"start":{"line":33,"column":4},"end":{"line":38,"column":5}}]},"3":{"loc":{"start":{"line":33,"column":8},"end":{"line":33,"column":19}},"type":"binary-expr","locations":[{"start":{"line":33,"column":8},"end":{"line":33,"column":19}},{"start":{"line":33,"column":23},"end":{"line":33,"column":33}}]},"4":{"loc":{"start":{"line":35,"column":8},"end":{"line":37,"column":9}},"type":"if","locations":[{"start":{"line":35,"column":8},"end":{"line":37,"column":9}},{"start":{"line":35,"column":8},"end":{"line":37,"column":9}}]},"5":{"loc":{"start":{"line":47,"column":32},"end":{"line":47,"column":49}},"type":"cond-expr","locations":[{"start":{"line":47,"column":32},"end":{"line":47,"column":49}},{"start":{"line":47,"column":52},"end":{"line":47,"column":55}}]},"6":{"loc":{"start":{"line":60,"column":32},"end":{"line":60,"column":49}},"type":"cond-expr","locations":[{"start":{"line":60,"column":32},"end":{"line":60,"column":49}},{"start":{"line":60,"column":52},"end":{"line":60,"column":55}}]},"7":{"loc":{"start":{"line":76,"column":4},"end":{"line":90,"column":5}},"type":"if","locations":[{"start":{"line":76,"column":4},"end":{"line":90,"column":5}},{"start":{"line":76,"column":4},"end":{"line":90,"column":5}}]},"8":{"loc":{"start":{"line":83,"column":11},"end":{"line":90,"column":5}},"type":"if","locations":[{"start":{"line":83,"column":11},"end":{"line":90,"column":5}},{"start":{"line":83,"column":11},"end":{"line":90,"column":5}}]},"9":{"loc":{"start":{"line":85,"column":11},"end":{"line":90,"column":5}},"type":"if","locations":[{"start":{"line":85,"column":11},"end":{"line":90,"column":5}},{"start":{"line":85,"column":11},"end":{"line":90,"column":5}}]},"10":{"loc":{"start":{"line":85,"column":15},"end":{"line":85,"column":23}},"type":"binary-expr","locations":[{"start":{"line":85,"column":15},"end":{"line":85,"column":23}},{"start":{"line":85,"column":27},"end":{"line":85,"column":47}}]},"11":{"loc":{"start":{"line":116,"column":15},"end":{"line":116,"column":36}},"type":"binary-expr","locations":[{"start":{"line":116,"column":15},"end":{"line":116,"column":36}},{"start":{"line":116,"column":40},"end":{"line":116,"column":65}}]},"12":{"loc":{"start":{"line":117,"column":36},"end":{"line":117,"column":50}},"type":"binary-expr","locations":[{"start":{"line":117,"column":36},"end":{"line":117,"column":50}},{"start":{"line":117,"column":55},"end":{"line":117,"column":71}},{"start":{"line":117,"column":75},"end":{"line":117,"column":91}}]},"13":{"loc":{"start":{"line":122,"column":36},"end":{"line":122,"column":54}},"type":"cond-expr","locations":[{"start":{"line":122,"column":36},"end":{"line":122,"column":54}},{"start":{"line":122,"column":57},"end":{"line":122,"column":76}}]},"14":{"loc":{"start":{"line":123,"column":36},"end":{"line":123,"column":55}},"type":"cond-expr","locations":[{"start":{"line":123,"column":36},"end":{"line":123,"column":55}},{"start":{"line":123,"column":58},"end":{"line":123,"column":78}}]},"15":{"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":54}},"type":"cond-expr","locations":[{"start":{"line":128,"column":36},"end":{"line":128,"column":54}},{"start":{"line":128,"column":57},"end":{"line":128,"column":76}}]},"16":{"loc":{"start":{"line":129,"column":36},"end":{"line":129,"column":54}},"type":"cond-expr","locations":[{"start":{"line":129,"column":36},"end":{"line":129,"column":54}},{"start":{"line":129,"column":57},"end":{"line":129,"column":76}}]},"17":{"loc":{"start":{"line":132,"column":26},"end":{"line":132,"column":34}},"type":"cond-expr","locations":[{"start":{"line":132,"column":26},"end":{"line":132,"column":34}},{"start":{"line":132,"column":35},"end":{"line":132,"column":57}}]},"18":{"loc":{"start":{"line":133,"column":26},"end":{"line":133,"column":34}},"type":"cond-expr","locations":[{"start":{"line":133,"column":26},"end":{"line":133,"column":34}},{"start":{"line":133,"column":35},"end":{"line":133,"column":37}}]},"19":{"loc":{"start":{"line":134,"column":4},"end":{"line":136,"column":5}},"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":136,"column":5}},{"start":{"line":134,"column":4},"end":{"line":136,"column":5}}]},"20":{"loc":{"start":{"line":137,"column":4},"end":{"line":139,"column":5}},"type":"if","locations":[{"start":{"line":137,"column":4},"end":{"line":139,"column":5}},{"start":{"line":137,"column":4},"end":{"line":139,"column":5}}]},"21":{"loc":{"start":{"line":140,"column":38},"end":{"line":140,"column":55}},"type":"cond-expr","locations":[{"start":{"line":140,"column":38},"end":{"line":140,"column":55}},{"start":{"line":140,"column":56},"end":{"line":140,"column":58}}]},"22":{"loc":{"start":{"line":140,"column":68},"end":{"line":140,"column":85}},"type":"cond-expr","locations":[{"start":{"line":140,"column":68},"end":{"line":140,"column":85}},{"start":{"line":140,"column":86},"end":{"line":140,"column":88}}]},"23":{"loc":{"start":{"line":158,"column":32},"end":{"line":158,"column":35}},"type":"default-arg","locations":[{"start":{"line":158,"column":32},"end":{"line":158,"column":35}}]},"24":{"loc":{"start":{"line":160,"column":8},"end":{"line":160,"column":111}},"type":"cond-expr","locations":[{"start":{"line":160,"column":8},"end":{"line":160,"column":111}},{"start":{"line":161,"column":8},"end":{"line":161,"column":53}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":6,"6":6,"7":6,"8":6,"9":6,"10":1,"11":6,"12":2,"13":2,"14":2,"15":4,"16":4,"17":4,"18":2,"19":2,"20":4,"21":4,"22":2,"23":6,"24":6,"25":6,"26":6,"27":2,"28":2,"29":0,"30":0,"31":0,"32":0,"33":2,"34":4,"35":2,"36":2,"37":24,"38":64,"39":24,"40":32,"41":24,"42":32,"43":24,"44":24,"45":24,"46":16,"47":24,"48":32,"49":16,"50":8,"51":24,"52":0,"53":0,"54":0,"55":24,"56":24,"57":24,"58":0,"59":24,"60":6,"61":24,"62":16,"63":16,"64":0,"65":0,"66":12,"67":4},"f":{"0":6,"1":6,"2":4,"3":2,"4":4,"5":4,"6":6,"7":6,"8":6,"9":6,"10":2,"11":4,"12":24,"13":64,"14":32,"15":32,"16":16,"17":32,"18":16,"19":8,"20":0,"21":0,"22":0,"23":16,"24":12,"25":4},"b":{"0":[6,4],"1":[4,0],"2":[2,4],"3":[6,4],"4":[2,0],"5":[2,2],"6":[0,2],"7":[2,2],"8":[2,0],"9":[0,0],"10":[0,0],"11":[24,0],"12":[16,16,4],"13":[16,16],"14":[8,8],"15":[0,0],"16":[0,0],"17":[12,12],"18":[12,12],"19":[0,24],"20":[6,18],"21":[12,12],"22":[12,12],"23":[12],"24":[4,8]}} ,"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/MainExample.ts": {"path":"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/MainExample.ts","statementMap":{"0":{"start":{"line":75,"column":0},"end":{"line":75,"column":47}},"1":{"start":{"line":76,"column":0},"end":{"line":76,"column":47}},"2":{"start":{"line":77,"column":0},"end":{"line":77,"column":47}},"3":{"start":{"line":78,"column":0},"end":{"line":78,"column":47}},"4":{"start":{"line":79,"column":0},"end":{"line":79,"column":47}},"5":{"start":{"line":80,"column":0},"end":{"line":80,"column":45}},"6":{"start":{"line":81,"column":0},"end":{"line":81,"column":45}},"7":{"start":{"line":82,"column":0},"end":{"line":82,"column":45}},"8":{"start":{"line":84,"column":16},"end":{"line":91,"column":1}},"9":{"start":{"line":89,"column":11},"end":{"line":89,"column":67}},"10":{"start":{"line":90,"column":11},"end":{"line":90,"column":67}},"11":{"start":{"line":110,"column":49},"end":{"line":110,"column":51}},"12":{"start":{"line":127,"column":21},"end":{"line":127,"column":41}},"13":{"start":{"line":128,"column":14},"end":{"line":128,"column":36}},"14":{"start":{"line":129,"column":4},"end":{"line":133,"column":5}},"15":{"start":{"line":130,"column":8},"end":{"line":130,"column":53}},"16":{"start":{"line":131,"column":8},"end":{"line":131,"column":34}},"17":{"start":{"line":132,"column":8},"end":{"line":132,"column":40}},"18":{"start":{"line":134,"column":4},"end":{"line":136,"column":5}},"19":{"start":{"line":135,"column":8},"end":{"line":135,"column":79}},"20":{"start":{"line":138,"column":24},"end":{"line":138,"column":76}},"21":{"start":{"line":139,"column":23},"end":{"line":139,"column":103}},"22":{"start":{"line":139,"column":39},"end":{"line":139,"column":103}},"23":{"start":{"line":146,"column":18},"end":{"line":149,"column":5}},"24":{"start":{"line":148,"column":53},"end":{"line":148,"column":92}},"25":{"start":{"line":150,"column":4},"end":{"line":150,"column":130}},"26":{"start":{"line":126,"column":0},"end":{"line":151,"column":1}},"27":{"start":{"line":154,"column":21},"end":{"line":154,"column":41}},"28":{"start":{"line":155,"column":4},"end":{"line":166,"column":7}},"29":{"start":{"line":155,"column":44},"end":{"line":155,"column":57}},"30":{"start":{"line":157,"column":8},"end":{"line":165,"column":9}},"31":{"start":{"line":158,"column":29},"end":{"line":158,"column":96}},"32":{"start":{"line":159,"column":12},"end":{"line":159,"column":70}},"33":{"start":{"line":159,"column":46},"end":{"line":159,"column":69}},"34":{"start":{"line":160,"column":12},"end":{"line":160,"column":24}},"35":{"start":{"line":163,"column":12},"end":{"line":163,"column":48}},"36":{"start":{"line":164,"column":12},"end":{"line":164,"column":25}},"37":{"start":{"line":173,"column":4},"end":{"line":186,"column":6}},"38":{"start":{"line":179,"column":27},"end":{"line":181,"column":44}},"39":{"start":{"line":191,"column":4},"end":{"line":191,"column":50}},"40":{"start":{"line":196,"column":4},"end":{"line":196,"column":73}},"41":{"start":{"line":205,"column":15},"end":{"line":205,"column":40}},"42":{"start":{"line":206,"column":17},"end":{"line":206,"column":55}},"43":{"start":{"line":208,"column":4},"end":{"line":210,"column":6}},"44":{"start":{"line":209,"column":8},"end":{"line":209,"column":43}},"45":{"start":{"line":212,"column":4},"end":{"line":227,"column":7}},"46":{"start":{"line":212,"column":31},"end":{"line":226,"column":11}},"47":{"start":{"line":228,"column":4},"end":{"line":228,"column":15}},"48":{"start":{"line":236,"column":17},"end":{"line":236,"column":52}},"49":{"start":{"line":237,"column":4},"end":{"line":247,"column":5}},"50":{"start":{"line":239,"column":8},"end":{"line":244,"column":9}},"51":{"start":{"line":239,"column":14},"end":{"line":239,"column":38}},"52":{"start":{"line":241,"column":12},"end":{"line":241,"column":56}},"53":{"start":{"line":242,"column":12},"end":{"line":242,"column":43}},"54":{"start":{"line":243,"column":12},"end":{"line":243,"column":33}},"55":{"start":{"line":246,"column":8},"end":{"line":246,"column":63}},"56":{"start":{"line":248,"column":4},"end":{"line":248,"column":15}},"57":{"start":{"line":249,"column":4},"end":{"line":249,"column":15}},"58":{"start":{"line":253,"column":4},"end":{"line":253,"column":47}},"59":{"start":{"line":254,"column":4},"end":{"line":254,"column":19}},"60":{"start":{"line":264,"column":17},"end":{"line":264,"column":19}},"61":{"start":{"line":265,"column":16},"end":{"line":265,"column":56}},"62":{"start":{"line":266,"column":4},"end":{"line":269,"column":5}},"63":{"start":{"line":267,"column":19},"end":{"line":267,"column":38}},"64":{"start":{"line":268,"column":8},"end":{"line":268,"column":38}},"65":{"start":{"line":270,"column":4},"end":{"line":276,"column":7}},"66":{"start":{"line":271,"column":21},"end":{"line":271,"column":35}},"67":{"start":{"line":272,"column":24},"end":{"line":272,"column":38}},"68":{"start":{"line":273,"column":8},"end":{"line":273,"column":37}},"69":{"start":{"line":274,"column":8},"end":{"line":274,"column":37}},"70":{"start":{"line":275,"column":8},"end":{"line":275,"column":22}},"71":{"start":{"line":277,"column":4},"end":{"line":277,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":89,"column":11},"end":{"line":89,"column":22}},"loc":{"start":{"line":89,"column":11},"end":{"line":89,"column":67}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":90,"column":11},"end":{"line":90,"column":22}},"loc":{"start":{"line":90,"column":11},"end":{"line":90,"column":67}}},"2":{"name":"example","decl":{"start":{"line":126,"column":16},"end":{"line":126,"column":23}},"loc":{"start":{"line":126,"column":36},"end":{"line":151,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":139,"column":23},"end":{"line":139,"column":24}},"loc":{"start":{"line":139,"column":39},"end":{"line":139,"column":103}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":148,"column":24},"end":{"line":148,"column":25}},"loc":{"start":{"line":148,"column":53},"end":{"line":148,"column":92}}},"5":{"name":"createExecuteScript","decl":{"start":{"line":153,"column":9},"end":{"line":153,"column":28}},"loc":{"start":{"line":153,"column":64},"end":{"line":167,"column":1}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":155,"column":36},"end":{"line":155,"column":39}},"loc":{"start":{"line":155,"column":44},"end":{"line":155,"column":57}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":156,"column":10},"end":{"line":156,"column":11}},"loc":{"start":{"line":156,"column":19},"end":{"line":166,"column":5}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":159,"column":32},"end":{"line":159,"column":33}},"loc":{"start":{"line":159,"column":46},"end":{"line":159,"column":69}}},"9":{"name":"initDesc","decl":{"start":{"line":172,"column":9},"end":{"line":172,"column":17}},"loc":{"start":{"line":172,"column":39},"end":{"line":187,"column":1}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":179,"column":21},"end":{"line":179,"column":23}},"loc":{"start":{"line":179,"column":27},"end":{"line":181,"column":44}}},"11":{"name":"getNewID","decl":{"start":{"line":190,"column":9},"end":{"line":190,"column":17}},"loc":{"start":{"line":190,"column":17},"end":{"line":192,"column":1}}},"12":{"name":"addExample","decl":{"start":{"line":195,"column":9},"end":{"line":195,"column":19}},"loc":{"start":{"line":195,"column":41},"end":{"line":197,"column":1}}},"13":{"name":"addExampleStructure","decl":{"start":{"line":204,"column":9},"end":{"line":204,"column":28}},"loc":{"start":{"line":204,"column":50},"end":{"line":229,"column":1}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":208,"column":23},"end":{"line":208,"column":24}},"loc":{"start":{"line":208,"column":42},"end":{"line":210,"column":5}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":212,"column":25},"end":{"line":212,"column":27}},"loc":{"start":{"line":212,"column":31},"end":{"line":226,"column":11}}},"16":{"name":"executeScript","decl":{"start":{"line":235,"column":9},"end":{"line":235,"column":22}},"loc":{"start":{"line":235,"column":44},"end":{"line":250,"column":1}}},"17":{"name":"executeError","decl":{"start":{"line":252,"column":9},"end":{"line":252,"column":21}},"loc":{"start":{"line":252,"column":27},"end":{"line":255,"column":1}}},"18":{"name":"getCommentDescriptor","decl":{"start":{"line":263,"column":9},"end":{"line":263,"column":29}},"loc":{"start":{"line":263,"column":67},"end":{"line":278,"column":1}}},"19":{"name":"(anonymous_19)","decl":{"start":{"line":270,"column":83},"end":{"line":270,"column":91}},"loc":{"start":{"line":270,"column":103},"end":{"line":276,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":129,"column":4},"end":{"line":133,"column":5}},"type":"if","locations":[{"start":{"line":129,"column":4},"end":{"line":133,"column":5}},{"start":{"line":129,"column":4},"end":{"line":133,"column":5}}]},"1":{"loc":{"start":{"line":134,"column":4},"end":{"line":136,"column":5}},"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":136,"column":5}},{"start":{"line":134,"column":4},"end":{"line":136,"column":5}}]},"2":{"loc":{"start":{"line":138,"column":25},"end":{"line":138,"column":64}},"type":"binary-expr","locations":[{"start":{"line":138,"column":25},"end":{"line":138,"column":64}},{"start":{"line":138,"column":69},"end":{"line":138,"column":76}}]},"3":{"loc":{"start":{"line":138,"column":36},"end":{"line":138,"column":52}},"type":"cond-expr","locations":[{"start":{"line":138,"column":36},"end":{"line":138,"column":52}},{"start":{"line":138,"column":55},"end":{"line":138,"column":64}}]},"4":{"loc":{"start":{"line":139,"column":59},"end":{"line":139,"column":78}},"type":"cond-expr","locations":[{"start":{"line":139,"column":59},"end":{"line":139,"column":78}},{"start":{"line":139,"column":80},"end":{"line":139,"column":103}}]},"5":{"loc":{"start":{"line":146,"column":39},"end":{"line":146,"column":41}},"type":"cond-expr","locations":[{"start":{"line":146,"column":39},"end":{"line":146,"column":41}},{"start":{"line":147,"column":20},"end":{"line":149,"column":5}}]},"6":{"loc":{"start":{"line":205,"column":15},"end":{"line":205,"column":32}},"type":"binary-expr","locations":[{"start":{"line":205,"column":15},"end":{"line":205,"column":32}},{"start":{"line":205,"column":36},"end":{"line":205,"column":40}}]},"7":{"loc":{"start":{"line":237,"column":4},"end":{"line":247,"column":5}},"type":"if","locations":[{"start":{"line":237,"column":4},"end":{"line":247,"column":5}},{"start":{"line":237,"column":4},"end":{"line":247,"column":5}}]},"8":{"loc":{"start":{"line":266,"column":4},"end":{"line":269,"column":5}},"type":"if","locations":[{"start":{"line":266,"column":4},"end":{"line":269,"column":5}},{"start":{"line":266,"column":4},"end":{"line":269,"column":5}}]},"9":{"loc":{"start":{"line":266,"column":8},"end":{"line":266,"column":13}},"type":"binary-expr","locations":[{"start":{"line":266,"column":8},"end":{"line":266,"column":13}},{"start":{"line":266,"column":17},"end":{"line":266,"column":25}}]}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":3,"6":3,"7":3,"8":3,"9":3,"10":3,"11":3,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":0,"23":1,"24":0,"25":1,"26":3,"27":1,"28":1,"29":6,"30":1,"31":1,"32":1,"33":0,"34":1,"35":0,"36":0,"37":1,"38":0,"39":2,"40":1,"41":1,"42":1,"43":1,"44":0,"45":1,"46":0,"47":1,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":1,"62":1,"63":0,"64":0,"65":1,"66":0,"67":0,"68":0,"69":0,"70":0,"71":1},"f":{"0":3,"1":3,"2":1,"3":0,"4":0,"5":1,"6":6,"7":1,"8":0,"9":1,"10":0,"11":2,"12":1,"13":1,"14":0,"15":0,"16":0,"17":0,"18":1,"19":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[1,0],"6":[1,1],"7":[0,0],"8":[0,1],"9":[1,0]}} -,"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/Parts.ts": {"path":"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/Parts.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":62}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":36}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":65}},"4":{"start":{"line":4,"column":80},"end":{"line":4,"column":93}},"5":{"start":{"line":6,"column":19},"end":{"line":6,"column":30}},"6":{"start":{"line":11,"column":31},"end":{"line":11,"column":53}},"7":{"start":{"line":12,"column":23},"end":{"line":25,"column":5}},"8":{"start":{"line":26,"column":4},"end":{"line":35,"column":6}},"9":{"start":{"line":28,"column":22},"end":{"line":28,"column":27}},"10":{"start":{"line":29,"column":23},"end":{"line":29,"column":36}},"11":{"start":{"line":30,"column":12},"end":{"line":31,"column":55}},"12":{"start":{"line":30,"column":38},"end":{"line":30,"column":47}},"13":{"start":{"line":31,"column":19},"end":{"line":31,"column":53}},"14":{"start":{"line":32,"column":12},"end":{"line":32,"column":99}},"15":{"start":{"line":32,"column":86},"end":{"line":32,"column":97}},"16":{"start":{"line":33,"column":12},"end":{"line":33,"column":107}},"17":{"start":{"line":10,"column":0},"end":{"line":36,"column":1}},"18":{"start":{"line":39,"column":4},"end":{"line":39,"column":50}},"19":{"start":{"line":38,"column":0},"end":{"line":40,"column":1}},"20":{"start":{"line":43,"column":4},"end":{"line":43,"column":107}},"21":{"start":{"line":42,"column":0},"end":{"line":44,"column":1}},"22":{"start":{"line":48,"column":4},"end":{"line":48,"column":91}},"23":{"start":{"line":47,"column":0},"end":{"line":49,"column":1}},"24":{"start":{"line":52,"column":4},"end":{"line":60,"column":7}},"25":{"start":{"line":55,"column":12},"end":{"line":58,"column":14}},"26":{"start":{"line":51,"column":0},"end":{"line":61,"column":1}},"27":{"start":{"line":64,"column":4},"end":{"line":73,"column":5}},"28":{"start":{"line":65,"column":21},"end":{"line":65,"column":63}},"29":{"start":{"line":66,"column":8},"end":{"line":66,"column":102}},"30":{"start":{"line":67,"column":8},"end":{"line":70,"column":11}},"31":{"start":{"line":72,"column":8},"end":{"line":72,"column":59}},"32":{"start":{"line":63,"column":0},"end":{"line":74,"column":1}},"33":{"start":{"line":77,"column":19},"end":{"line":77,"column":58}},"34":{"start":{"line":78,"column":4},"end":{"line":89,"column":5}},"35":{"start":{"line":79,"column":19},"end":{"line":79,"column":66}},"36":{"start":{"line":80,"column":22},"end":{"line":80,"column":43}},"37":{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},"38":{"start":{"line":82,"column":12},"end":{"line":82,"column":38}},"39":{"start":{"line":84,"column":8},"end":{"line":86,"column":10}},"40":{"start":{"line":88,"column":8},"end":{"line":88,"column":51}},"41":{"start":{"line":76,"column":0},"end":{"line":90,"column":1}},"42":{"start":{"line":102,"column":4},"end":{"line":102,"column":102}},"43":{"start":{"line":101,"column":0},"end":{"line":103,"column":1}},"44":{"start":{"line":109,"column":18},"end":{"line":109,"column":47}},"45":{"start":{"line":109,"column":32},"end":{"line":109,"column":47}},"46":{"start":{"line":111,"column":8},"end":{"line":111,"column":69}},"47":{"start":{"line":114,"column":14},"end":{"line":114,"column":16}},"48":{"start":{"line":115,"column":4},"end":{"line":135,"column":5}},"49":{"start":{"line":116,"column":8},"end":{"line":124,"column":9}},"50":{"start":{"line":117,"column":12},"end":{"line":123,"column":16}},"51":{"start":{"line":117,"column":56},"end":{"line":123,"column":14}},"52":{"start":{"line":125,"column":8},"end":{"line":134,"column":9}},"53":{"start":{"line":126,"column":28},"end":{"line":126,"column":34}},"54":{"start":{"line":130,"column":16},"end":{"line":130,"column":57}},"55":{"start":{"line":131,"column":16},"end":{"line":131,"column":54}},"56":{"start":{"line":132,"column":16},"end":{"line":132,"column":22}},"57":{"start":{"line":133,"column":21},"end":{"line":133,"column":73}},"58":{"start":{"line":136,"column":4},"end":{"line":136,"column":44}},"59":{"start":{"line":108,"column":0},"end":{"line":137,"column":1}},"60":{"start":{"line":143,"column":4},"end":{"line":148,"column":5}},"61":{"start":{"line":144,"column":18},"end":{"line":144,"column":82}},"62":{"start":{"line":145,"column":8},"end":{"line":145,"column":46}},"63":{"start":{"line":147,"column":8},"end":{"line":147,"column":15}},"64":{"start":{"line":142,"column":0},"end":{"line":149,"column":1}},"65":{"start":{"line":153,"column":8},"end":{"line":191,"column":9}},"66":{"start":{"line":154,"column":36},"end":{"line":154,"column":46}},"67":{"start":{"line":155,"column":36},"end":{"line":155,"column":112}},"68":{"start":{"line":157,"column":36},"end":{"line":161,"column":39}},"69":{"start":{"line":159,"column":80},"end":{"line":159,"column":110}},"70":{"start":{"line":163,"column":36},"end":{"line":163,"column":137}},"71":{"start":{"line":164,"column":36},"end":{"line":164,"column":90}},"72":{"start":{"line":165,"column":36},"end":{"line":165,"column":145}},"73":{"start":{"line":165,"column":110},"end":{"line":165,"column":141}},"74":{"start":{"line":166,"column":49},"end":{"line":166,"column":56}},"75":{"start":{"line":167,"column":36},"end":{"line":172,"column":37}},"76":{"start":{"line":168,"column":56},"end":{"line":168,"column":79}},"77":{"start":{"line":169,"column":40},"end":{"line":171,"column":93}},"78":{"start":{"line":169,"column":69},"end":{"line":169,"column":146}},"79":{"start":{"line":170,"column":45},"end":{"line":171,"column":93}},"80":{"start":{"line":170,"column":69},"end":{"line":170,"column":128}},"81":{"start":{"line":171,"column":69},"end":{"line":171,"column":91}},"82":{"start":{"line":173,"column":36},"end":{"line":173,"column":84}},"83":{"start":{"line":175,"column":36},"end":{"line":186,"column":37}},"84":{"start":{"line":176,"column":40},"end":{"line":183,"column":47}},"85":{"start":{"line":180,"column":52},"end":{"line":180,"column":101}},"86":{"start":{"line":185,"column":40},"end":{"line":185,"column":59}},"87":{"start":{"line":187,"column":36},"end":{"line":187,"column":85}},"88":{"start":{"line":188,"column":21},"end":{"line":188,"column":56}},"89":{"start":{"line":189,"column":21},"end":{"line":189,"column":48}},"90":{"start":{"line":190,"column":21},"end":{"line":190,"column":35}},"91":{"start":{"line":194,"column":4},"end":{"line":200,"column":52}},"92":{"start":{"line":195,"column":7},"end":{"line":199,"column":11}},"93":{"start":{"line":200,"column":17},"end":{"line":200,"column":30}},"94":{"start":{"line":200,"column":31},"end":{"line":200,"column":50}},"95":{"start":{"line":151,"column":0},"end":{"line":201,"column":1}},"96":{"start":{"line":204,"column":17},"end":{"line":204,"column":42}},"97":{"start":{"line":205,"column":4},"end":{"line":205,"column":55}},"98":{"start":{"line":206,"column":4},"end":{"line":206,"column":45}},"99":{"start":{"line":203,"column":0},"end":{"line":207,"column":1}}},"fnMap":{"0":{"name":"flags","decl":{"start":{"line":10,"column":16},"end":{"line":10,"column":21}},"loc":{"start":{"line":10,"column":49},"end":{"line":36,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":27,"column":35},"end":{"line":27,"column":36}},"loc":{"start":{"line":27,"column":48},"end":{"line":34,"column":9}}},"2":{"name":"kindString","decl":{"start":{"line":38,"column":16},"end":{"line":38,"column":26}},"loc":{"start":{"line":38,"column":34},"end":{"line":40,"column":1}}},"3":{"name":"itemName","decl":{"start":{"line":42,"column":16},"end":{"line":42,"column":24}},"loc":{"start":{"line":42,"column":41},"end":{"line":44,"column":1}}},"4":{"name":"itemTooltip","decl":{"start":{"line":47,"column":16},"end":{"line":47,"column":27}},"loc":{"start":{"line":47,"column":35},"end":{"line":49,"column":1}}},"5":{"name":"extensionOf","decl":{"start":{"line":51,"column":16},"end":{"line":51,"column":27}},"loc":{"start":{"line":51,"column":35},"end":{"line":61,"column":1}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":54,"column":40},"end":{"line":54,"column":41}},"loc":{"start":{"line":55,"column":12},"end":{"line":58,"column":14}}},"7":{"name":"inheritedFrom","decl":{"start":{"line":63,"column":16},"end":{"line":63,"column":29}},"loc":{"start":{"line":63,"column":37},"end":{"line":74,"column":1}}},"8":{"name":"sourceLink","decl":{"start":{"line":76,"column":16},"end":{"line":76,"column":26}},"loc":{"start":{"line":76,"column":34},"end":{"line":90,"column":1}}},"9":{"name":"libLink","decl":{"start":{"line":101,"column":16},"end":{"line":101,"column":23}},"loc":{"start":{"line":101,"column":70},"end":{"line":103,"column":1}}},"10":{"name":"signature","decl":{"start":{"line":108,"column":16},"end":{"line":108,"column":25}},"loc":{"start":{"line":108,"column":40},"end":{"line":137,"column":1}}},"11":{"name":"(anonymous_11)","decl":{"start":{"line":109,"column":18},"end":{"line":109,"column":19}},"loc":{"start":{"line":109,"column":32},"end":{"line":109,"column":47}}},"12":{"name":"optional","decl":{"start":{"line":110,"column":13},"end":{"line":110,"column":21}},"loc":{"start":{"line":110,"column":32},"end":{"line":112,"column":5}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":117,"column":35},"end":{"line":117,"column":36}},"loc":{"start":{"line":117,"column":56},"end":{"line":123,"column":14}}},"14":{"name":"defaultVal","decl":{"start":{"line":142,"column":16},"end":{"line":142,"column":26}},"loc":{"start":{"line":142,"column":44},"end":{"line":149,"column":1}}},"15":{"name":"type","decl":{"start":{"line":151,"column":16},"end":{"line":151,"column":20}},"loc":{"start":{"line":151,"column":38},"end":{"line":201,"column":1}}},"16":{"name":"_type","decl":{"start":{"line":152,"column":13},"end":{"line":152,"column":18}},"loc":{"start":{"line":152,"column":25},"end":{"line":192,"column":5}}},"17":{"name":"(anonymous_17)","decl":{"start":{"line":159,"column":59},"end":{"line":159,"column":60}},"loc":{"start":{"line":159,"column":80},"end":{"line":159,"column":110}}},"18":{"name":"(anonymous_18)","decl":{"start":{"line":165,"column":89},"end":{"line":165,"column":90}},"loc":{"start":{"line":165,"column":110},"end":{"line":165,"column":141}}},"19":{"name":"(anonymous_19)","decl":{"start":{"line":179,"column":79},"end":{"line":179,"column":80}},"loc":{"start":{"line":180,"column":52},"end":{"line":180,"column":101}}},"20":{"name":"makeID","decl":{"start":{"line":203,"column":16},"end":{"line":203,"column":22}},"loc":{"start":{"line":203,"column":46},"end":{"line":207,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":47},"end":{"line":10,"column":49}},"type":"default-arg","locations":[{"start":{"line":10,"column":47},"end":{"line":10,"column":49}}]},"1":{"loc":{"start":{"line":26,"column":47},"end":{"line":26,"column":49}},"type":"cond-expr","locations":[{"start":{"line":26,"column":47},"end":{"line":26,"column":49}},{"start":{"line":27,"column":8},"end":{"line":34,"column":10}}]},"2":{"loc":{"start":{"line":30,"column":12},"end":{"line":31,"column":55}},"type":"if","locations":[{"start":{"line":30,"column":12},"end":{"line":31,"column":55}},{"start":{"line":30,"column":12},"end":{"line":31,"column":55}}]},"3":{"loc":{"start":{"line":32,"column":12},"end":{"line":32,"column":99}},"type":"if","locations":[{"start":{"line":32,"column":12},"end":{"line":32,"column":99}},{"start":{"line":32,"column":12},"end":{"line":32,"column":99}}]},"4":{"loc":{"start":{"line":32,"column":16},"end":{"line":32,"column":33}},"type":"binary-expr","locations":[{"start":{"line":32,"column":16},"end":{"line":32,"column":33}},{"start":{"line":32,"column":37},"end":{"line":32,"column":82}}]},"5":{"loc":{"start":{"line":33,"column":41},"end":{"line":33,"column":49}},"type":"cond-expr","locations":[{"start":{"line":33,"column":41},"end":{"line":33,"column":49}},{"start":{"line":33,"column":51},"end":{"line":33,"column":74}}]},"6":{"loc":{"start":{"line":33,"column":60},"end":{"line":33,"column":69}},"type":"cond-expr","locations":[{"start":{"line":33,"column":60},"end":{"line":33,"column":69}},{"start":{"line":33,"column":70},"end":{"line":33,"column":74}}]},"7":{"loc":{"start":{"line":33,"column":89},"end":{"line":33,"column":98}},"type":"cond-expr","locations":[{"start":{"line":33,"column":89},"end":{"line":33,"column":98}},{"start":{"line":33,"column":101},"end":{"line":33,"column":105}}]},"8":{"loc":{"start":{"line":43,"column":49},"end":{"line":43,"column":57}},"type":"cond-expr","locations":[{"start":{"line":43,"column":49},"end":{"line":43,"column":57}},{"start":{"line":43,"column":60},"end":{"line":43,"column":105}}]},"9":{"loc":{"start":{"line":52,"column":60},"end":{"line":52,"column":69}},"type":"cond-expr","locations":[{"start":{"line":52,"column":60},"end":{"line":52,"column":69}},{"start":{"line":52,"column":72},"end":{"line":60,"column":5}}]},"10":{"loc":{"start":{"line":57,"column":52},"end":{"line":57,"column":56}},"type":"cond-expr","locations":[{"start":{"line":57,"column":52},"end":{"line":57,"column":56}},{"start":{"line":57,"column":58},"end":{"line":57,"column":60}}]},"11":{"loc":{"start":{"line":64,"column":4},"end":{"line":73,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":73,"column":5}},{"start":{"line":64,"column":4},"end":{"line":73,"column":5}}]},"12":{"loc":{"start":{"line":77,"column":32},"end":{"line":77,"column":46}},"type":"cond-expr","locations":[{"start":{"line":77,"column":32},"end":{"line":77,"column":46}},{"start":{"line":77,"column":49},"end":{"line":77,"column":58}}]},"13":{"loc":{"start":{"line":78,"column":4},"end":{"line":89,"column":5}},"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":89,"column":5}},{"start":{"line":78,"column":4},"end":{"line":89,"column":5}}]},"14":{"loc":{"start":{"line":79,"column":20},"end":{"line":79,"column":35}},"type":"binary-expr","locations":[{"start":{"line":79,"column":20},"end":{"line":79,"column":35}},{"start":{"line":79,"column":39},"end":{"line":79,"column":41}}]},"15":{"loc":{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},{"start":{"line":81,"column":8},"end":{"line":83,"column":9}}]},"16":{"loc":{"start":{"line":109,"column":39},"end":{"line":109,"column":43}},"type":"cond-expr","locations":[{"start":{"line":109,"column":39},"end":{"line":109,"column":43}},{"start":{"line":109,"column":45},"end":{"line":109,"column":47}}]},"17":{"loc":{"start":{"line":111,"column":44},"end":{"line":111,"column":63}},"type":"cond-expr","locations":[{"start":{"line":111,"column":44},"end":{"line":111,"column":63}},{"start":{"line":111,"column":66},"end":{"line":111,"column":68}}]},"18":{"loc":{"start":{"line":111,"column":16},"end":{"line":111,"column":21}},"type":"binary-expr","locations":[{"start":{"line":111,"column":16},"end":{"line":111,"column":21}},{"start":{"line":111,"column":25},"end":{"line":111,"column":41}}]},"19":{"loc":{"start":{"line":115,"column":4},"end":{"line":135,"column":5}},"type":"if","locations":[{"start":{"line":115,"column":4},"end":{"line":135,"column":5}},{"start":{"line":115,"column":4},"end":{"line":135,"column":5}}]},"20":{"loc":{"start":{"line":116,"column":8},"end":{"line":124,"column":9}},"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":124,"column":9}},{"start":{"line":116,"column":8},"end":{"line":124,"column":9}}]},"21":{"loc":{"start":{"line":126,"column":12},"end":{"line":126,"column":34}},"type":"switch","locations":[{"start":{"line":126,"column":12},"end":{"line":126,"column":34}},{"start":{"line":127,"column":12},"end":{"line":127,"column":26}},{"start":{"line":128,"column":12},"end":{"line":128,"column":28}},{"start":{"line":129,"column":12},"end":{"line":132,"column":22}},{"start":{"line":133,"column":12},"end":{"line":133,"column":73}}]},"22":{"loc":{"start":{"line":143,"column":4},"end":{"line":148,"column":5}},"type":"if","locations":[{"start":{"line":143,"column":4},"end":{"line":148,"column":5}},{"start":{"line":143,"column":4},"end":{"line":148,"column":5}}]},"23":{"loc":{"start":{"line":143,"column":8},"end":{"line":143,"column":9}},"type":"binary-expr","locations":[{"start":{"line":143,"column":8},"end":{"line":143,"column":9}},{"start":{"line":143,"column":13},"end":{"line":143,"column":27}}]},"24":{"loc":{"start":{"line":154,"column":12},"end":{"line":154,"column":46}},"type":"switch","locations":[{"start":{"line":154,"column":12},"end":{"line":154,"column":46}},{"start":{"line":155,"column":12},"end":{"line":155,"column":112}},{"start":{"line":157,"column":12},"end":{"line":161,"column":39}},{"start":{"line":162,"column":12},"end":{"line":162,"column":29}},{"start":{"line":163,"column":12},"end":{"line":163,"column":137}},{"start":{"line":164,"column":12},"end":{"line":164,"column":90}},{"start":{"line":165,"column":12},"end":{"line":165,"column":145}},{"start":{"line":166,"column":12},"end":{"line":173,"column":84}},{"start":{"line":174,"column":12},"end":{"line":187,"column":85}},{"start":{"line":188,"column":12},"end":{"line":190,"column":35}}]},"25":{"loc":{"start":{"line":159,"column":85},"end":{"line":159,"column":89}},"type":"cond-expr","locations":[{"start":{"line":159,"column":85},"end":{"line":159,"column":89}},{"start":{"line":159,"column":90},"end":{"line":159,"column":99}}]},"26":{"loc":{"start":{"line":163,"column":83},"end":{"line":163,"column":125}},"type":"cond-expr","locations":[{"start":{"line":163,"column":83},"end":{"line":163,"column":125}},{"start":{"line":163,"column":128},"end":{"line":163,"column":135}}]},"27":{"loc":{"start":{"line":165,"column":115},"end":{"line":165,"column":120}},"type":"cond-expr","locations":[{"start":{"line":165,"column":115},"end":{"line":165,"column":120}},{"start":{"line":165,"column":121},"end":{"line":165,"column":130}}]},"28":{"loc":{"start":{"line":167,"column":36},"end":{"line":172,"column":37}},"type":"if","locations":[{"start":{"line":167,"column":36},"end":{"line":172,"column":37}},{"start":{"line":167,"column":36},"end":{"line":172,"column":37}}]},"29":{"loc":{"start":{"line":169,"column":40},"end":{"line":171,"column":93}},"type":"if","locations":[{"start":{"line":169,"column":40},"end":{"line":171,"column":93}},{"start":{"line":169,"column":40},"end":{"line":171,"column":93}}]},"30":{"loc":{"start":{"line":170,"column":45},"end":{"line":171,"column":93}},"type":"if","locations":[{"start":{"line":170,"column":45},"end":{"line":171,"column":93}},{"start":{"line":170,"column":45},"end":{"line":171,"column":93}}]},"31":{"loc":{"start":{"line":175,"column":36},"end":{"line":186,"column":37}},"type":"if","locations":[{"start":{"line":175,"column":36},"end":{"line":186,"column":37}},{"start":{"line":175,"column":36},"end":{"line":186,"column":37}}]},"32":{"loc":{"start":{"line":176,"column":75},"end":{"line":176,"column":100}},"type":"cond-expr","locations":[{"start":{"line":176,"column":75},"end":{"line":176,"column":100}},{"start":{"line":177,"column":44},"end":{"line":183,"column":46}}]},"33":{"loc":{"start":{"line":180,"column":57},"end":{"line":180,"column":61}},"type":"cond-expr","locations":[{"start":{"line":180,"column":57},"end":{"line":180,"column":61}},{"start":{"line":180,"column":62},"end":{"line":180,"column":71}}]},"34":{"loc":{"start":{"line":195,"column":33},"end":{"line":195,"column":35}},"type":"cond-expr","locations":[{"start":{"line":195,"column":33},"end":{"line":195,"column":35}},{"start":{"line":195,"column":37},"end":{"line":199,"column":9}}]},"35":{"loc":{"start":{"line":204,"column":26},"end":{"line":204,"column":37}},"type":"cond-expr","locations":[{"start":{"line":204,"column":26},"end":{"line":204,"column":37}},{"start":{"line":204,"column":40},"end":{"line":204,"column":42}}]},"36":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":32}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":32}},{"start":{"line":205,"column":36},"end":{"line":205,"column":38}}]},"37":{"loc":{"start":{"line":206,"column":26},"end":{"line":206,"column":32}},"type":"cond-expr","locations":[{"start":{"line":206,"column":26},"end":{"line":206,"column":32}},{"start":{"line":206,"column":35},"end":{"line":206,"column":44}}]}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":3,"6":20,"7":20,"8":20,"9":39,"10":39,"11":39,"12":3,"13":36,"14":39,"15":3,"16":39,"17":3,"18":16,"19":3,"20":16,"21":3,"22":1,"23":3,"24":17,"25":1,"26":3,"27":17,"28":1,"29":1,"30":1,"31":16,"32":3,"33":18,"34":18,"35":14,"36":14,"37":14,"38":1,"39":14,"40":4,"41":3,"42":150,"43":3,"44":16,"45":16,"46":16,"47":16,"48":16,"49":16,"50":6,"51":16,"52":16,"53":0,"54":6,"55":6,"56":6,"57":10,"58":16,"59":3,"60":36,"61":4,"62":4,"63":32,"64":3,"65":38,"66":2,"67":1,"68":1,"69":1,"70":27,"71":1,"72":1,"73":0,"74":3,"75":3,"76":1,"77":1,"78":0,"79":1,"80":1,"81":0,"82":3,"83":1,"84":1,"85":0,"86":0,"87":1,"88":1,"89":1,"90":1,"91":40,"92":40,"93":0,"94":0,"95":3,"96":16,"97":16,"98":16,"99":3},"f":{"0":20,"1":39,"2":16,"3":16,"4":1,"5":17,"6":1,"7":17,"8":18,"9":150,"10":16,"11":16,"12":16,"13":16,"14":36,"15":40,"16":38,"17":1,"18":0,"19":0,"20":16},"b":{"0":[19],"1":[1,19],"2":[3,36],"3":[3,36],"4":[39,9],"5":[4,35],"6":[3,32],"7":[4,35],"8":[0,16],"9":[16,1],"10":[0,1],"11":[1,16],"12":[14,4],"13":[14,4],"14":[14,1],"15":[1,13],"16":[10,6],"17":[0,16],"18":[16,16],"19":[16,0],"20":[6,10],"21":[0,2,6,6,10],"22":[4,32],"23":[36,36],"24":[2,1,1,26,27,1,1,3,1,1],"25":[0,1],"26":[1,26],"27":[0,0],"28":[1,2],"29":[0,1],"30":[1,0],"31":[1,0],"32":[0,1],"33":[0,0],"34":[4,36],"35":[16,0],"36":[16,0],"37":[16,0]}} +,"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/Parts.ts": {"path":"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/Parts.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":62}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":36}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":65}},"4":{"start":{"line":4,"column":80},"end":{"line":4,"column":93}},"5":{"start":{"line":6,"column":19},"end":{"line":6,"column":30}},"6":{"start":{"line":11,"column":31},"end":{"line":11,"column":53}},"7":{"start":{"line":12,"column":23},"end":{"line":25,"column":5}},"8":{"start":{"line":26,"column":4},"end":{"line":35,"column":6}},"9":{"start":{"line":28,"column":22},"end":{"line":28,"column":27}},"10":{"start":{"line":29,"column":23},"end":{"line":29,"column":36}},"11":{"start":{"line":30,"column":12},"end":{"line":31,"column":55}},"12":{"start":{"line":30,"column":38},"end":{"line":30,"column":47}},"13":{"start":{"line":31,"column":19},"end":{"line":31,"column":53}},"14":{"start":{"line":32,"column":12},"end":{"line":32,"column":99}},"15":{"start":{"line":32,"column":86},"end":{"line":32,"column":97}},"16":{"start":{"line":33,"column":12},"end":{"line":33,"column":107}},"17":{"start":{"line":10,"column":0},"end":{"line":36,"column":1}},"18":{"start":{"line":39,"column":4},"end":{"line":39,"column":50}},"19":{"start":{"line":38,"column":0},"end":{"line":40,"column":1}},"20":{"start":{"line":43,"column":4},"end":{"line":43,"column":107}},"21":{"start":{"line":42,"column":0},"end":{"line":44,"column":1}},"22":{"start":{"line":48,"column":4},"end":{"line":48,"column":91}},"23":{"start":{"line":47,"column":0},"end":{"line":49,"column":1}},"24":{"start":{"line":52,"column":4},"end":{"line":60,"column":7}},"25":{"start":{"line":55,"column":12},"end":{"line":58,"column":14}},"26":{"start":{"line":51,"column":0},"end":{"line":61,"column":1}},"27":{"start":{"line":64,"column":4},"end":{"line":73,"column":5}},"28":{"start":{"line":65,"column":21},"end":{"line":65,"column":63}},"29":{"start":{"line":66,"column":8},"end":{"line":66,"column":102}},"30":{"start":{"line":67,"column":8},"end":{"line":70,"column":11}},"31":{"start":{"line":72,"column":8},"end":{"line":72,"column":59}},"32":{"start":{"line":63,"column":0},"end":{"line":74,"column":1}},"33":{"start":{"line":77,"column":19},"end":{"line":77,"column":58}},"34":{"start":{"line":78,"column":4},"end":{"line":89,"column":5}},"35":{"start":{"line":79,"column":19},"end":{"line":79,"column":66}},"36":{"start":{"line":80,"column":22},"end":{"line":80,"column":43}},"37":{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},"38":{"start":{"line":82,"column":12},"end":{"line":82,"column":38}},"39":{"start":{"line":84,"column":8},"end":{"line":86,"column":10}},"40":{"start":{"line":88,"column":8},"end":{"line":88,"column":51}},"41":{"start":{"line":76,"column":0},"end":{"line":90,"column":1}},"42":{"start":{"line":102,"column":4},"end":{"line":102,"column":102}},"43":{"start":{"line":101,"column":0},"end":{"line":103,"column":1}},"44":{"start":{"line":109,"column":18},"end":{"line":109,"column":47}},"45":{"start":{"line":109,"column":32},"end":{"line":109,"column":47}},"46":{"start":{"line":111,"column":8},"end":{"line":111,"column":69}},"47":{"start":{"line":114,"column":14},"end":{"line":114,"column":16}},"48":{"start":{"line":115,"column":4},"end":{"line":138,"column":5}},"49":{"start":{"line":116,"column":8},"end":{"line":124,"column":9}},"50":{"start":{"line":117,"column":12},"end":{"line":123,"column":16}},"51":{"start":{"line":117,"column":56},"end":{"line":123,"column":14}},"52":{"start":{"line":125,"column":8},"end":{"line":137,"column":9}},"53":{"start":{"line":126,"column":28},"end":{"line":126,"column":34}},"54":{"start":{"line":133,"column":16},"end":{"line":133,"column":57}},"55":{"start":{"line":134,"column":16},"end":{"line":134,"column":54}},"56":{"start":{"line":135,"column":16},"end":{"line":135,"column":22}},"57":{"start":{"line":136,"column":21},"end":{"line":136,"column":73}},"58":{"start":{"line":139,"column":4},"end":{"line":139,"column":44}},"59":{"start":{"line":108,"column":0},"end":{"line":140,"column":1}},"60":{"start":{"line":146,"column":4},"end":{"line":151,"column":5}},"61":{"start":{"line":147,"column":18},"end":{"line":147,"column":82}},"62":{"start":{"line":148,"column":8},"end":{"line":148,"column":46}},"63":{"start":{"line":150,"column":8},"end":{"line":150,"column":15}},"64":{"start":{"line":145,"column":0},"end":{"line":152,"column":1}},"65":{"start":{"line":156,"column":8},"end":{"line":194,"column":9}},"66":{"start":{"line":157,"column":36},"end":{"line":157,"column":46}},"67":{"start":{"line":158,"column":36},"end":{"line":158,"column":112}},"68":{"start":{"line":160,"column":36},"end":{"line":164,"column":39}},"69":{"start":{"line":162,"column":80},"end":{"line":162,"column":110}},"70":{"start":{"line":166,"column":36},"end":{"line":166,"column":137}},"71":{"start":{"line":167,"column":36},"end":{"line":167,"column":90}},"72":{"start":{"line":168,"column":36},"end":{"line":168,"column":145}},"73":{"start":{"line":168,"column":110},"end":{"line":168,"column":141}},"74":{"start":{"line":169,"column":49},"end":{"line":169,"column":56}},"75":{"start":{"line":170,"column":36},"end":{"line":175,"column":37}},"76":{"start":{"line":171,"column":56},"end":{"line":171,"column":79}},"77":{"start":{"line":172,"column":40},"end":{"line":174,"column":93}},"78":{"start":{"line":172,"column":69},"end":{"line":172,"column":146}},"79":{"start":{"line":173,"column":45},"end":{"line":174,"column":93}},"80":{"start":{"line":173,"column":69},"end":{"line":173,"column":128}},"81":{"start":{"line":174,"column":69},"end":{"line":174,"column":91}},"82":{"start":{"line":176,"column":36},"end":{"line":176,"column":84}},"83":{"start":{"line":178,"column":36},"end":{"line":189,"column":37}},"84":{"start":{"line":179,"column":40},"end":{"line":186,"column":47}},"85":{"start":{"line":183,"column":52},"end":{"line":183,"column":101}},"86":{"start":{"line":188,"column":40},"end":{"line":188,"column":59}},"87":{"start":{"line":190,"column":36},"end":{"line":190,"column":85}},"88":{"start":{"line":191,"column":21},"end":{"line":191,"column":56}},"89":{"start":{"line":192,"column":21},"end":{"line":192,"column":48}},"90":{"start":{"line":193,"column":21},"end":{"line":193,"column":35}},"91":{"start":{"line":197,"column":4},"end":{"line":203,"column":52}},"92":{"start":{"line":198,"column":7},"end":{"line":202,"column":11}},"93":{"start":{"line":203,"column":17},"end":{"line":203,"column":30}},"94":{"start":{"line":203,"column":31},"end":{"line":203,"column":50}},"95":{"start":{"line":154,"column":0},"end":{"line":204,"column":1}},"96":{"start":{"line":207,"column":17},"end":{"line":207,"column":42}},"97":{"start":{"line":208,"column":4},"end":{"line":208,"column":55}},"98":{"start":{"line":209,"column":4},"end":{"line":209,"column":45}},"99":{"start":{"line":206,"column":0},"end":{"line":210,"column":1}}},"fnMap":{"0":{"name":"flags","decl":{"start":{"line":10,"column":16},"end":{"line":10,"column":21}},"loc":{"start":{"line":10,"column":49},"end":{"line":36,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":27,"column":35},"end":{"line":27,"column":36}},"loc":{"start":{"line":27,"column":48},"end":{"line":34,"column":9}}},"2":{"name":"kindString","decl":{"start":{"line":38,"column":16},"end":{"line":38,"column":26}},"loc":{"start":{"line":38,"column":34},"end":{"line":40,"column":1}}},"3":{"name":"itemName","decl":{"start":{"line":42,"column":16},"end":{"line":42,"column":24}},"loc":{"start":{"line":42,"column":41},"end":{"line":44,"column":1}}},"4":{"name":"itemTooltip","decl":{"start":{"line":47,"column":16},"end":{"line":47,"column":27}},"loc":{"start":{"line":47,"column":35},"end":{"line":49,"column":1}}},"5":{"name":"extensionOf","decl":{"start":{"line":51,"column":16},"end":{"line":51,"column":27}},"loc":{"start":{"line":51,"column":35},"end":{"line":61,"column":1}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":54,"column":40},"end":{"line":54,"column":41}},"loc":{"start":{"line":55,"column":12},"end":{"line":58,"column":14}}},"7":{"name":"inheritedFrom","decl":{"start":{"line":63,"column":16},"end":{"line":63,"column":29}},"loc":{"start":{"line":63,"column":37},"end":{"line":74,"column":1}}},"8":{"name":"sourceLink","decl":{"start":{"line":76,"column":16},"end":{"line":76,"column":26}},"loc":{"start":{"line":76,"column":34},"end":{"line":90,"column":1}}},"9":{"name":"libLink","decl":{"start":{"line":101,"column":16},"end":{"line":101,"column":23}},"loc":{"start":{"line":101,"column":70},"end":{"line":103,"column":1}}},"10":{"name":"signature","decl":{"start":{"line":108,"column":16},"end":{"line":108,"column":25}},"loc":{"start":{"line":108,"column":40},"end":{"line":140,"column":1}}},"11":{"name":"(anonymous_11)","decl":{"start":{"line":109,"column":18},"end":{"line":109,"column":19}},"loc":{"start":{"line":109,"column":32},"end":{"line":109,"column":47}}},"12":{"name":"optional","decl":{"start":{"line":110,"column":13},"end":{"line":110,"column":21}},"loc":{"start":{"line":110,"column":32},"end":{"line":112,"column":5}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":117,"column":35},"end":{"line":117,"column":36}},"loc":{"start":{"line":117,"column":56},"end":{"line":123,"column":14}}},"14":{"name":"defaultVal","decl":{"start":{"line":145,"column":16},"end":{"line":145,"column":26}},"loc":{"start":{"line":145,"column":44},"end":{"line":152,"column":1}}},"15":{"name":"type","decl":{"start":{"line":154,"column":16},"end":{"line":154,"column":20}},"loc":{"start":{"line":154,"column":38},"end":{"line":204,"column":1}}},"16":{"name":"_type","decl":{"start":{"line":155,"column":13},"end":{"line":155,"column":18}},"loc":{"start":{"line":155,"column":25},"end":{"line":195,"column":5}}},"17":{"name":"(anonymous_17)","decl":{"start":{"line":162,"column":59},"end":{"line":162,"column":60}},"loc":{"start":{"line":162,"column":80},"end":{"line":162,"column":110}}},"18":{"name":"(anonymous_18)","decl":{"start":{"line":168,"column":89},"end":{"line":168,"column":90}},"loc":{"start":{"line":168,"column":110},"end":{"line":168,"column":141}}},"19":{"name":"(anonymous_19)","decl":{"start":{"line":182,"column":79},"end":{"line":182,"column":80}},"loc":{"start":{"line":183,"column":52},"end":{"line":183,"column":101}}},"20":{"name":"makeID","decl":{"start":{"line":206,"column":16},"end":{"line":206,"column":22}},"loc":{"start":{"line":206,"column":46},"end":{"line":210,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":47},"end":{"line":10,"column":49}},"type":"default-arg","locations":[{"start":{"line":10,"column":47},"end":{"line":10,"column":49}}]},"1":{"loc":{"start":{"line":26,"column":47},"end":{"line":26,"column":49}},"type":"cond-expr","locations":[{"start":{"line":26,"column":47},"end":{"line":26,"column":49}},{"start":{"line":27,"column":8},"end":{"line":34,"column":10}}]},"2":{"loc":{"start":{"line":30,"column":12},"end":{"line":31,"column":55}},"type":"if","locations":[{"start":{"line":30,"column":12},"end":{"line":31,"column":55}},{"start":{"line":30,"column":12},"end":{"line":31,"column":55}}]},"3":{"loc":{"start":{"line":32,"column":12},"end":{"line":32,"column":99}},"type":"if","locations":[{"start":{"line":32,"column":12},"end":{"line":32,"column":99}},{"start":{"line":32,"column":12},"end":{"line":32,"column":99}}]},"4":{"loc":{"start":{"line":32,"column":16},"end":{"line":32,"column":33}},"type":"binary-expr","locations":[{"start":{"line":32,"column":16},"end":{"line":32,"column":33}},{"start":{"line":32,"column":37},"end":{"line":32,"column":82}}]},"5":{"loc":{"start":{"line":33,"column":41},"end":{"line":33,"column":49}},"type":"cond-expr","locations":[{"start":{"line":33,"column":41},"end":{"line":33,"column":49}},{"start":{"line":33,"column":51},"end":{"line":33,"column":74}}]},"6":{"loc":{"start":{"line":33,"column":60},"end":{"line":33,"column":69}},"type":"cond-expr","locations":[{"start":{"line":33,"column":60},"end":{"line":33,"column":69}},{"start":{"line":33,"column":70},"end":{"line":33,"column":74}}]},"7":{"loc":{"start":{"line":33,"column":89},"end":{"line":33,"column":98}},"type":"cond-expr","locations":[{"start":{"line":33,"column":89},"end":{"line":33,"column":98}},{"start":{"line":33,"column":101},"end":{"line":33,"column":105}}]},"8":{"loc":{"start":{"line":43,"column":49},"end":{"line":43,"column":57}},"type":"cond-expr","locations":[{"start":{"line":43,"column":49},"end":{"line":43,"column":57}},{"start":{"line":43,"column":60},"end":{"line":43,"column":105}}]},"9":{"loc":{"start":{"line":52,"column":60},"end":{"line":52,"column":69}},"type":"cond-expr","locations":[{"start":{"line":52,"column":60},"end":{"line":52,"column":69}},{"start":{"line":52,"column":72},"end":{"line":60,"column":5}}]},"10":{"loc":{"start":{"line":57,"column":52},"end":{"line":57,"column":56}},"type":"cond-expr","locations":[{"start":{"line":57,"column":52},"end":{"line":57,"column":56}},{"start":{"line":57,"column":58},"end":{"line":57,"column":60}}]},"11":{"loc":{"start":{"line":64,"column":4},"end":{"line":73,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":73,"column":5}},{"start":{"line":64,"column":4},"end":{"line":73,"column":5}}]},"12":{"loc":{"start":{"line":77,"column":32},"end":{"line":77,"column":46}},"type":"cond-expr","locations":[{"start":{"line":77,"column":32},"end":{"line":77,"column":46}},{"start":{"line":77,"column":49},"end":{"line":77,"column":58}}]},"13":{"loc":{"start":{"line":78,"column":4},"end":{"line":89,"column":5}},"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":89,"column":5}},{"start":{"line":78,"column":4},"end":{"line":89,"column":5}}]},"14":{"loc":{"start":{"line":79,"column":20},"end":{"line":79,"column":35}},"type":"binary-expr","locations":[{"start":{"line":79,"column":20},"end":{"line":79,"column":35}},{"start":{"line":79,"column":39},"end":{"line":79,"column":41}}]},"15":{"loc":{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},{"start":{"line":81,"column":8},"end":{"line":83,"column":9}}]},"16":{"loc":{"start":{"line":109,"column":39},"end":{"line":109,"column":43}},"type":"cond-expr","locations":[{"start":{"line":109,"column":39},"end":{"line":109,"column":43}},{"start":{"line":109,"column":45},"end":{"line":109,"column":47}}]},"17":{"loc":{"start":{"line":111,"column":44},"end":{"line":111,"column":63}},"type":"cond-expr","locations":[{"start":{"line":111,"column":44},"end":{"line":111,"column":63}},{"start":{"line":111,"column":66},"end":{"line":111,"column":68}}]},"18":{"loc":{"start":{"line":111,"column":16},"end":{"line":111,"column":21}},"type":"binary-expr","locations":[{"start":{"line":111,"column":16},"end":{"line":111,"column":21}},{"start":{"line":111,"column":25},"end":{"line":111,"column":41}}]},"19":{"loc":{"start":{"line":115,"column":4},"end":{"line":138,"column":5}},"type":"if","locations":[{"start":{"line":115,"column":4},"end":{"line":138,"column":5}},{"start":{"line":115,"column":4},"end":{"line":138,"column":5}}]},"20":{"loc":{"start":{"line":116,"column":8},"end":{"line":124,"column":9}},"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":124,"column":9}},{"start":{"line":116,"column":8},"end":{"line":124,"column":9}}]},"21":{"loc":{"start":{"line":126,"column":12},"end":{"line":126,"column":34}},"type":"switch","locations":[{"start":{"line":126,"column":12},"end":{"line":126,"column":34}},{"start":{"line":127,"column":12},"end":{"line":127,"column":26}},{"start":{"line":128,"column":12},"end":{"line":128,"column":28}},{"start":{"line":129,"column":12},"end":{"line":129,"column":31}},{"start":{"line":130,"column":12},"end":{"line":130,"column":35}},{"start":{"line":131,"column":12},"end":{"line":131,"column":25}},{"start":{"line":132,"column":12},"end":{"line":135,"column":22}},{"start":{"line":136,"column":12},"end":{"line":136,"column":73}}]},"22":{"loc":{"start":{"line":146,"column":4},"end":{"line":151,"column":5}},"type":"if","locations":[{"start":{"line":146,"column":4},"end":{"line":151,"column":5}},{"start":{"line":146,"column":4},"end":{"line":151,"column":5}}]},"23":{"loc":{"start":{"line":146,"column":8},"end":{"line":146,"column":9}},"type":"binary-expr","locations":[{"start":{"line":146,"column":8},"end":{"line":146,"column":9}},{"start":{"line":146,"column":13},"end":{"line":146,"column":27}}]},"24":{"loc":{"start":{"line":157,"column":12},"end":{"line":157,"column":46}},"type":"switch","locations":[{"start":{"line":157,"column":12},"end":{"line":157,"column":46}},{"start":{"line":158,"column":12},"end":{"line":158,"column":112}},{"start":{"line":160,"column":12},"end":{"line":164,"column":39}},{"start":{"line":165,"column":12},"end":{"line":165,"column":29}},{"start":{"line":166,"column":12},"end":{"line":166,"column":137}},{"start":{"line":167,"column":12},"end":{"line":167,"column":90}},{"start":{"line":168,"column":12},"end":{"line":168,"column":145}},{"start":{"line":169,"column":12},"end":{"line":176,"column":84}},{"start":{"line":177,"column":12},"end":{"line":190,"column":85}},{"start":{"line":191,"column":12},"end":{"line":193,"column":35}}]},"25":{"loc":{"start":{"line":162,"column":85},"end":{"line":162,"column":89}},"type":"cond-expr","locations":[{"start":{"line":162,"column":85},"end":{"line":162,"column":89}},{"start":{"line":162,"column":90},"end":{"line":162,"column":99}}]},"26":{"loc":{"start":{"line":166,"column":83},"end":{"line":166,"column":125}},"type":"cond-expr","locations":[{"start":{"line":166,"column":83},"end":{"line":166,"column":125}},{"start":{"line":166,"column":128},"end":{"line":166,"column":135}}]},"27":{"loc":{"start":{"line":168,"column":115},"end":{"line":168,"column":120}},"type":"cond-expr","locations":[{"start":{"line":168,"column":115},"end":{"line":168,"column":120}},{"start":{"line":168,"column":121},"end":{"line":168,"column":130}}]},"28":{"loc":{"start":{"line":170,"column":36},"end":{"line":175,"column":37}},"type":"if","locations":[{"start":{"line":170,"column":36},"end":{"line":175,"column":37}},{"start":{"line":170,"column":36},"end":{"line":175,"column":37}}]},"29":{"loc":{"start":{"line":172,"column":40},"end":{"line":174,"column":93}},"type":"if","locations":[{"start":{"line":172,"column":40},"end":{"line":174,"column":93}},{"start":{"line":172,"column":40},"end":{"line":174,"column":93}}]},"30":{"loc":{"start":{"line":173,"column":45},"end":{"line":174,"column":93}},"type":"if","locations":[{"start":{"line":173,"column":45},"end":{"line":174,"column":93}},{"start":{"line":173,"column":45},"end":{"line":174,"column":93}}]},"31":{"loc":{"start":{"line":178,"column":36},"end":{"line":189,"column":37}},"type":"if","locations":[{"start":{"line":178,"column":36},"end":{"line":189,"column":37}},{"start":{"line":178,"column":36},"end":{"line":189,"column":37}}]},"32":{"loc":{"start":{"line":179,"column":75},"end":{"line":179,"column":100}},"type":"cond-expr","locations":[{"start":{"line":179,"column":75},"end":{"line":179,"column":100}},{"start":{"line":180,"column":44},"end":{"line":186,"column":46}}]},"33":{"loc":{"start":{"line":183,"column":57},"end":{"line":183,"column":61}},"type":"cond-expr","locations":[{"start":{"line":183,"column":57},"end":{"line":183,"column":61}},{"start":{"line":183,"column":62},"end":{"line":183,"column":71}}]},"34":{"loc":{"start":{"line":198,"column":33},"end":{"line":198,"column":35}},"type":"cond-expr","locations":[{"start":{"line":198,"column":33},"end":{"line":198,"column":35}},{"start":{"line":198,"column":37},"end":{"line":202,"column":9}}]},"35":{"loc":{"start":{"line":207,"column":26},"end":{"line":207,"column":37}},"type":"cond-expr","locations":[{"start":{"line":207,"column":26},"end":{"line":207,"column":37}},{"start":{"line":207,"column":40},"end":{"line":207,"column":42}}]},"36":{"loc":{"start":{"line":208,"column":24},"end":{"line":208,"column":32}},"type":"binary-expr","locations":[{"start":{"line":208,"column":24},"end":{"line":208,"column":32}},{"start":{"line":208,"column":36},"end":{"line":208,"column":38}}]},"37":{"loc":{"start":{"line":209,"column":26},"end":{"line":209,"column":32}},"type":"cond-expr","locations":[{"start":{"line":209,"column":26},"end":{"line":209,"column":32}},{"start":{"line":209,"column":35},"end":{"line":209,"column":44}}]}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":3,"6":20,"7":20,"8":20,"9":39,"10":39,"11":39,"12":3,"13":36,"14":39,"15":3,"16":39,"17":3,"18":16,"19":3,"20":16,"21":3,"22":1,"23":3,"24":17,"25":1,"26":3,"27":17,"28":1,"29":1,"30":1,"31":16,"32":3,"33":18,"34":18,"35":14,"36":14,"37":14,"38":1,"39":14,"40":4,"41":3,"42":150,"43":3,"44":16,"45":16,"46":16,"47":16,"48":16,"49":16,"50":6,"51":16,"52":16,"53":0,"54":12,"55":12,"56":12,"57":4,"58":16,"59":3,"60":36,"61":4,"62":4,"63":32,"64":3,"65":38,"66":2,"67":1,"68":1,"69":1,"70":27,"71":1,"72":1,"73":0,"74":3,"75":3,"76":1,"77":1,"78":0,"79":1,"80":1,"81":0,"82":3,"83":1,"84":1,"85":0,"86":0,"87":1,"88":1,"89":1,"90":1,"91":40,"92":40,"93":0,"94":0,"95":3,"96":16,"97":16,"98":16,"99":3},"f":{"0":20,"1":39,"2":16,"3":16,"4":1,"5":17,"6":1,"7":17,"8":18,"9":150,"10":16,"11":16,"12":16,"13":16,"14":36,"15":40,"16":38,"17":1,"18":0,"19":0,"20":16},"b":{"0":[19],"1":[1,19],"2":[3,36],"3":[3,36],"4":[39,9],"5":[4,35],"6":[3,32],"7":[4,35],"8":[0,16],"9":[16,1],"10":[0,1],"11":[1,16],"12":[14,4],"13":[14,4],"14":[14,1],"15":[1,13],"16":[10,6],"17":[0,16],"18":[16,16],"19":[16,0],"20":[6,10],"21":[0,2,6,6,8,10,12,4],"22":[4,32],"23":[36,36],"24":[2,1,1,26,27,1,1,3,1,1],"25":[0,1],"26":[1,26],"27":[0,0],"28":[1,2],"29":[0,1],"30":[1,0],"31":[1,0],"32":[0,1],"33":[0,0],"34":[4,36],"35":[16,0],"36":[16,0],"37":[16,0]}} ,"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/Tooltip.ts": {"path":"/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/Tooltip.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":62}},"1":{"start":{"line":5,"column":4},"end":{"line":5,"column":83}},"2":{"start":{"line":3,"column":0},"end":{"line":6,"column":1}}},"fnMap":{"0":{"name":"tooltip","decl":{"start":{"line":3,"column":16},"end":{"line":3,"column":23}},"loc":{"start":{"line":3,"column":64},"end":{"line":6,"column":1}}}},"branchMap":{},"s":{"0":3,"1":1,"2":3},"f":{"0":1},"b":{}} } diff --git a/docs/data/src/hsDocs/coverage/index.html b/docs/data/src/hsDocs/coverage/index.html index 4ab8824..649d942 100644 --- a/docs/data/src/hsDocs/coverage/index.html +++ b/docs/data/src/hsDocs/coverage/index.html @@ -25,9 +25,9 @@

400/450
- 77.32% + 77.53% Branches - 242/313 + 245/316
86.89% @@ -76,8 +76,8 @@

86.6% 323/373 - 75.29% - 198/263 + 75.56% + 201/266 84.16% 85/101 88.34% diff --git a/docs/data/src/hsDocs/coverage/lcov-report/index.html b/docs/data/src/hsDocs/coverage/lcov-report/index.html index 4ab8824..649d942 100644 --- a/docs/data/src/hsDocs/coverage/lcov-report/index.html +++ b/docs/data/src/hsDocs/coverage/lcov-report/index.html @@ -25,9 +25,9 @@

400/450

- 77.32% + 77.53% Branches - 242/313 + 245/316
86.89% @@ -76,8 +76,8 @@

86.6% 323/373 - 75.29% - 198/263 + 75.56% + 201/266 84.16% 85/101 88.34% diff --git a/docs/data/src/hsDocs/coverage/lcov.info b/docs/data/src/hsDocs/coverage/lcov.info index 5ec4e62..66b47b3 100644 --- a/docs/data/src/hsDocs/coverage/lcov.info +++ b/docs/data/src/hsDocs/coverage/lcov.info @@ -823,13 +823,13 @@ FN:108,signature FN:109,(anonymous_11) FN:110,optional FN:117,(anonymous_13) -FN:142,defaultVal -FN:151,type -FN:152,_type -FN:159,(anonymous_17) -FN:165,(anonymous_18) -FN:179,(anonymous_19) -FN:203,makeID +FN:145,defaultVal +FN:154,type +FN:155,_type +FN:162,(anonymous_17) +FN:168,(anonymous_18) +FN:182,(anonymous_19) +FN:206,makeID FNF:21 FNH:19 FNDA:20,flags @@ -903,47 +903,47 @@ DA:116,16 DA:117,16 DA:125,16 DA:126,0 -DA:130,6 -DA:131,6 -DA:132,6 -DA:133,10 -DA:136,16 -DA:142,3 -DA:143,36 -DA:144,4 -DA:145,4 -DA:147,32 -DA:151,3 -DA:153,38 -DA:154,2 -DA:155,1 -DA:157,1 -DA:159,1 -DA:163,27 -DA:164,1 -DA:165,1 -DA:166,3 -DA:167,3 +DA:133,12 +DA:134,12 +DA:135,12 +DA:136,4 +DA:139,16 +DA:145,3 +DA:146,36 +DA:147,4 +DA:148,4 +DA:150,32 +DA:154,3 +DA:156,38 +DA:157,2 +DA:158,1 +DA:160,1 +DA:162,1 +DA:166,27 +DA:167,1 DA:168,1 -DA:169,1 -DA:170,1 -DA:171,0 -DA:173,3 -DA:175,1 -DA:176,1 -DA:180,0 -DA:185,0 -DA:187,1 -DA:188,1 -DA:189,1 +DA:169,3 +DA:170,3 +DA:171,1 +DA:172,1 +DA:173,1 +DA:174,0 +DA:176,3 +DA:178,1 +DA:179,1 +DA:183,0 +DA:188,0 DA:190,1 -DA:194,40 -DA:195,40 -DA:200,0 -DA:203,3 -DA:204,16 -DA:205,16 -DA:206,16 +DA:191,1 +DA:192,1 +DA:193,1 +DA:197,40 +DA:198,40 +DA:203,0 +DA:206,3 +DA:207,16 +DA:208,16 +DA:209,16 LF:91 LH:86 BRDA:10,0,0,19 @@ -991,49 +991,52 @@ BRDA:126,21,0,0 BRDA:126,21,1,2 BRDA:126,21,2,6 BRDA:126,21,3,6 -BRDA:126,21,4,10 -BRDA:143,22,0,4 -BRDA:143,22,1,32 -BRDA:143,23,0,36 -BRDA:143,23,1,36 -BRDA:154,24,0,2 -BRDA:154,24,1,1 -BRDA:154,24,2,1 -BRDA:154,24,3,26 -BRDA:154,24,4,27 -BRDA:154,24,5,1 -BRDA:154,24,6,1 -BRDA:154,24,7,3 -BRDA:154,24,8,1 -BRDA:154,24,9,1 -BRDA:159,25,0,0 -BRDA:159,25,1,1 -BRDA:163,26,0,1 -BRDA:163,26,1,26 -BRDA:165,27,0,0 -BRDA:165,27,1,0 -BRDA:167,28,0,1 -BRDA:167,28,1,2 -BRDA:169,29,0,0 -BRDA:169,29,1,1 -BRDA:170,30,0,1 -BRDA:170,30,1,0 -BRDA:175,31,0,1 -BRDA:175,31,1,0 -BRDA:176,32,0,0 -BRDA:176,32,1,1 -BRDA:180,33,0,0 -BRDA:180,33,1,0 -BRDA:195,34,0,4 -BRDA:195,34,1,36 -BRDA:204,35,0,16 -BRDA:204,35,1,0 -BRDA:205,36,0,16 -BRDA:205,36,1,0 -BRDA:206,37,0,16 -BRDA:206,37,1,0 -BRF:86 -BRH:69 +BRDA:126,21,4,8 +BRDA:126,21,5,10 +BRDA:126,21,6,12 +BRDA:126,21,7,4 +BRDA:146,22,0,4 +BRDA:146,22,1,32 +BRDA:146,23,0,36 +BRDA:146,23,1,36 +BRDA:157,24,0,2 +BRDA:157,24,1,1 +BRDA:157,24,2,1 +BRDA:157,24,3,26 +BRDA:157,24,4,27 +BRDA:157,24,5,1 +BRDA:157,24,6,1 +BRDA:157,24,7,3 +BRDA:157,24,8,1 +BRDA:157,24,9,1 +BRDA:162,25,0,0 +BRDA:162,25,1,1 +BRDA:166,26,0,1 +BRDA:166,26,1,26 +BRDA:168,27,0,0 +BRDA:168,27,1,0 +BRDA:170,28,0,1 +BRDA:170,28,1,2 +BRDA:172,29,0,0 +BRDA:172,29,1,1 +BRDA:173,30,0,1 +BRDA:173,30,1,0 +BRDA:178,31,0,1 +BRDA:178,31,1,0 +BRDA:179,32,0,0 +BRDA:179,32,1,1 +BRDA:183,33,0,0 +BRDA:183,33,1,0 +BRDA:198,34,0,4 +BRDA:198,34,1,36 +BRDA:207,35,0,16 +BRDA:207,35,1,0 +BRDA:208,36,0,16 +BRDA:208,36,1,0 +BRDA:209,37,0,16 +BRDA:209,37,1,0 +BRF:89 +BRH:72 end_of_record TN: SF:/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/Tooltip.ts diff --git a/docs/data/src/hsDocs/coverage/src/view/Parts.ts.html b/docs/data/src/hsDocs/coverage/src/view/Parts.ts.html index ea7e6cd..43a3ec9 100644 --- a/docs/data/src/hsDocs/coverage/src/view/Parts.ts.html +++ b/docs/data/src/hsDocs/coverage/src/view/Parts.ts.html @@ -25,9 +25,9 @@

92/100

- 80.23% + 80.9% Branches - 69/86 + 72/89
90.48% @@ -249,7 +249,10 @@

204 205 206 -2073x +207 +208 +209 +2103x 3x 3x 3x @@ -378,10 +381,13 @@

      -6x -6x -6x -10x +  +  +  +12x +12x +12x +4x     16x @@ -584,6 +590,9 @@

case 'Method': case 'Function': case 'Constructor': + case 'External module': + case 'Class': + case 'Variable': sig.unshift(m('span.hs-item-name', '(')); sig.push(m('span.hs-item-name', ')')); break; diff --git a/docs/data/src/hsDocs/coverage/src/view/index.html b/docs/data/src/hsDocs/coverage/src/view/index.html index dc34fb6..9212744 100644 --- a/docs/data/src/hsDocs/coverage/src/view/index.html +++ b/docs/data/src/hsDocs/coverage/src/view/index.html @@ -25,9 +25,9 @@

323/373

- 75.29% + 75.56% Branches - 198/263 + 201/266
84.16% @@ -128,8 +128,8 @@

92% 92/100 - 80.23% - 69/86 + 80.9% + 72/89 90.48% 19/21 94.51% diff --git a/docs/data/src/hsDocs/view/Parts.html b/docs/data/src/hsDocs/view/Parts.html index 39b0dfd..041a3f2 100644 --- a/docs/data/src/hsDocs/view/Parts.html +++ b/docs/data/src/hsDocs/view/Parts.html @@ -150,83 +150,86 @@

src/view/Parts.ts

 127            case 'Method':

 128            case 'Function'

 129            case 'Constructor'

-

 130                sig.unshift(m('span.hs-item-name''('));

-

 131                sig.push(m('span.hs-item-name'')'));

-

 132                break;

-

 133            default: log.warn(`unexpected kindString ${mdl.kindString}`);

-

 134        }

-

 135    }

-

 136    return m('span.hs-item-signature', sig);

-

 137}

-

 138

-

 139/**

-

 140 * adds a default value, if defined

-

 141 */

-

 142export function defaultVal(s:any, lib:string): Vnode {

-

 143    if (s && s.defaultValue) {

-

 144        let val = ` = ${s.defaultValue}`.replace(/{/gi, '{ ').replace(/}/gi, ' }');

-

 145        return m('span.hs-item-default', val);

-

 146    } else {

-

 147        return;

-

 148    }        

-

 149}

-

 150

-

 151export function type(t:any, lib:string) {

-

 152    function _type(tt:any):any {

-

 153        switch (tt.type) {

-

 154            case undefined:         return '';

-

 155            case 'array':           return m('span.hs-item-type-array', ['Array<', _type(tt.elementType), '>']);

-

 156                                    

-

 157            case 'tuple':           return m('span.hs-item-type-tuple', [

-

 158                                        '[ ',

-

 159                                        ...tt.elements.map((e:any, i:number) => [i>0?', ':undefined, _type(e)]),

-

 160                                        ' ]'

-

 161                                    ]);

-

 162            case 'intrinsic':

-

 163            case 'instrinct':       return m('span.hs-item-type-instrinct', tt.id? libLink('span', lib, tt.fullPath, tt.name) : tt.name); 

-

 164            case 'stringLiteral':   return m('span.hs-item-type-string-literal', tt.type); 

-

 165            case 'union':           return m('span.hs-item-type-union', [...tt.types.map((e:any, i:number) => [i>0?' | ':undefined, _type(e)])]);

-

 166            case 'reference':       let refRes = tt.name;

-

 167                                    if (tt.id) {

-

 168                                        const typeRef = DocSets.get(lib, tt.id);

-

 169                                        if (typeRef.typeArguments) { refRes = typeRef.name+'<'+ typeRef.typeArguments.map(_type).join(', ') + '>'; }

-

 170                                        else if (typeRef.id)       { refRes = libLink('a', lib, typeRef.fullPath, typeRef.name); }

-

 171                                        else                       { refRes = typeRef.name; }

-

 172                                    }

-

 173                                    return m('span.hs-item-type-reference', refRes);

-

 174            case 'reflection':      let rflRes;

-

 175                                    if (tt.declaration) {

-

 176                                        rflRes = !tt.declaration.children? tt.declaration.kindString :

-

 177                                            m('span.hs-item-reflection', [

-

 178                                                '{ ',

-

 179                                                ...tt.declaration.children.map((c:any, i:number) => 

-

 180                                                    [i>0?', ':undefined, c.name, ': ', _type(c.type)]

-

 181                                                ),

-

 182                                                ' }'

-

 183                                            ]);

-

 184                                    } else {

-

 185                                        rflRes = 'UNKNOWN';

-

 186                                    }

-

 187                                    return m('span.hs-item-type-reflection', rflRes);

-

 188            default: log.warn('unknown type '+ tt.type);

-

 189                     log.warn(log.inspect(t,3));

-

 190                     return t.type;

-

 191        }

-

 192    }

-

 193

-

 194    try {

-

 195       return m('span', !t.type? '': [

-

 196           m('span.hs-item-name',':'), 

-

 197           m('span.hs-item-sig-type', _type(t.type)),

-

 198           defaultVal(t, lib)

-

 199        ]);

-

 200    } catch(e) { log.error(e); log.error(e.trace); }

-

 201}

-

 202

-

 203export function makeID(section:string, mdl:any) {

-

 204    let result = section? section+'_' : '';

-

 205    result = (result + (mdl.name || '')).toLowerCase();

-

 206    return (result!=='')? result : undefined;

-

 207}

+

 130            case 'External module'

+

 131            case 'Class'

+

 132            case 'Variable'

+

 133                sig.unshift(m('span.hs-item-name''('));

+

 134                sig.push(m('span.hs-item-name'')'));

+

 135                break;

+

 136            default: log.warn(`unexpected kindString ${mdl.kindString}`);

+

 137        }

+

 138    }

+

 139    return m('span.hs-item-signature', sig);

+

 140}

+

 141

+

 142/**

+

 143 * adds a default value, if defined

+

 144 */

+

 145export function defaultVal(s:any, lib:string): Vnode {

+

 146    if (s && s.defaultValue) {

+

 147        let val = ` = ${s.defaultValue}`.replace(/{/gi, '{ ').replace(/}/gi, ' }');

+

 148        return m('span.hs-item-default', val);

+

 149    } else {

+

 150        return;

+

 151    }        

+

 152}

+

 153

+

 154export function type(t:any, lib:string) {

+

 155    function _type(tt:any):any {

+

 156        switch (tt.type) {

+

 157            case undefined:         return '';

+

 158            case 'array':           return m('span.hs-item-type-array', ['Array<', _type(tt.elementType), '>']);

+

 159                                    

+

 160            case 'tuple':           return m('span.hs-item-type-tuple', [

+

 161                                        '[ ',

+

 162                                        ...tt.elements.map((e:any, i:number) => [i>0?', ':undefined, _type(e)]),

+

 163                                        ' ]'

+

 164                                    ]);

+

 165            case 'intrinsic':

+

 166            case 'instrinct':       return m('span.hs-item-type-instrinct', tt.id? libLink('span', lib, tt.fullPath, tt.name) : tt.name); 

+

 167            case 'stringLiteral':   return m('span.hs-item-type-string-literal', tt.type); 

+

 168            case 'union':           return m('span.hs-item-type-union', [...tt.types.map((e:any, i:number) => [i>0?' | ':undefined, _type(e)])]);

+

 169            case 'reference':       let refRes = tt.name;

+

 170                                    if (tt.id) {

+

 171                                        const typeRef = DocSets.get(lib, tt.id);

+

 172                                        if (typeRef.typeArguments) { refRes = typeRef.name+'<'+ typeRef.typeArguments.map(_type).join(', ') + '>'; }

+

 173                                        else if (typeRef.id)       { refRes = libLink('a', lib, typeRef.fullPath, typeRef.name); }

+

 174                                        else                       { refRes = typeRef.name; }

+

 175                                    }

+

 176                                    return m('span.hs-item-type-reference', refRes);

+

 177            case 'reflection':      let rflRes;

+

 178                                    if (tt.declaration) {

+

 179                                        rflRes = !tt.declaration.children? tt.declaration.kindString :

+

 180                                            m('span.hs-item-reflection', [

+

 181                                                '{ ',

+

 182                                                ...tt.declaration.children.map((c:any, i:number) => 

+

 183                                                    [i>0?', ':undefined, c.name, ': ', _type(c.type)]

+

 184                                                ),

+

 185                                                ' }'

+

 186                                            ]);

+

 187                                    } else {

+

 188                                        rflRes = 'UNKNOWN';

+

 189                                    }

+

 190                                    return m('span.hs-item-type-reflection', rflRes);

+

 191            default: log.warn('unknown type '+ tt.type);

+

 192                     log.warn(log.inspect(t,3));

+

 193                     return t.type;

+

 194        }

+

 195    }

+

 196

+

 197    try {

+

 198       return m('span', !t.type? '': [

+

 199           m('span.hs-item-name',':'), 

+

 200           m('span.hs-item-sig-type', _type(t.type)),

+

 201           defaultVal(t, lib)

+

 202        ]);

+

 203    } catch(e) { log.error(e); log.error(e.trace); }

+

 204}

+

 205

+

 206export function makeID(section:string, mdl:any) {

+

 207    let result = section? section+'_' : '';

+

 208    result = (result + (mdl.name || '')).toLowerCase();

+

 209    return (result!=='')? result : undefined;

+

 210}

\ No newline at end of file diff --git a/docs/data/src/lcov.info b/docs/data/src/lcov.info index 5ec4e62..66b47b3 100644 --- a/docs/data/src/lcov.info +++ b/docs/data/src/lcov.info @@ -823,13 +823,13 @@ FN:108,signature FN:109,(anonymous_11) FN:110,optional FN:117,(anonymous_13) -FN:142,defaultVal -FN:151,type -FN:152,_type -FN:159,(anonymous_17) -FN:165,(anonymous_18) -FN:179,(anonymous_19) -FN:203,makeID +FN:145,defaultVal +FN:154,type +FN:155,_type +FN:162,(anonymous_17) +FN:168,(anonymous_18) +FN:182,(anonymous_19) +FN:206,makeID FNF:21 FNH:19 FNDA:20,flags @@ -903,47 +903,47 @@ DA:116,16 DA:117,16 DA:125,16 DA:126,0 -DA:130,6 -DA:131,6 -DA:132,6 -DA:133,10 -DA:136,16 -DA:142,3 -DA:143,36 -DA:144,4 -DA:145,4 -DA:147,32 -DA:151,3 -DA:153,38 -DA:154,2 -DA:155,1 -DA:157,1 -DA:159,1 -DA:163,27 -DA:164,1 -DA:165,1 -DA:166,3 -DA:167,3 +DA:133,12 +DA:134,12 +DA:135,12 +DA:136,4 +DA:139,16 +DA:145,3 +DA:146,36 +DA:147,4 +DA:148,4 +DA:150,32 +DA:154,3 +DA:156,38 +DA:157,2 +DA:158,1 +DA:160,1 +DA:162,1 +DA:166,27 +DA:167,1 DA:168,1 -DA:169,1 -DA:170,1 -DA:171,0 -DA:173,3 -DA:175,1 -DA:176,1 -DA:180,0 -DA:185,0 -DA:187,1 -DA:188,1 -DA:189,1 +DA:169,3 +DA:170,3 +DA:171,1 +DA:172,1 +DA:173,1 +DA:174,0 +DA:176,3 +DA:178,1 +DA:179,1 +DA:183,0 +DA:188,0 DA:190,1 -DA:194,40 -DA:195,40 -DA:200,0 -DA:203,3 -DA:204,16 -DA:205,16 -DA:206,16 +DA:191,1 +DA:192,1 +DA:193,1 +DA:197,40 +DA:198,40 +DA:203,0 +DA:206,3 +DA:207,16 +DA:208,16 +DA:209,16 LF:91 LH:86 BRDA:10,0,0,19 @@ -991,49 +991,52 @@ BRDA:126,21,0,0 BRDA:126,21,1,2 BRDA:126,21,2,6 BRDA:126,21,3,6 -BRDA:126,21,4,10 -BRDA:143,22,0,4 -BRDA:143,22,1,32 -BRDA:143,23,0,36 -BRDA:143,23,1,36 -BRDA:154,24,0,2 -BRDA:154,24,1,1 -BRDA:154,24,2,1 -BRDA:154,24,3,26 -BRDA:154,24,4,27 -BRDA:154,24,5,1 -BRDA:154,24,6,1 -BRDA:154,24,7,3 -BRDA:154,24,8,1 -BRDA:154,24,9,1 -BRDA:159,25,0,0 -BRDA:159,25,1,1 -BRDA:163,26,0,1 -BRDA:163,26,1,26 -BRDA:165,27,0,0 -BRDA:165,27,1,0 -BRDA:167,28,0,1 -BRDA:167,28,1,2 -BRDA:169,29,0,0 -BRDA:169,29,1,1 -BRDA:170,30,0,1 -BRDA:170,30,1,0 -BRDA:175,31,0,1 -BRDA:175,31,1,0 -BRDA:176,32,0,0 -BRDA:176,32,1,1 -BRDA:180,33,0,0 -BRDA:180,33,1,0 -BRDA:195,34,0,4 -BRDA:195,34,1,36 -BRDA:204,35,0,16 -BRDA:204,35,1,0 -BRDA:205,36,0,16 -BRDA:205,36,1,0 -BRDA:206,37,0,16 -BRDA:206,37,1,0 -BRF:86 -BRH:69 +BRDA:126,21,4,8 +BRDA:126,21,5,10 +BRDA:126,21,6,12 +BRDA:126,21,7,4 +BRDA:146,22,0,4 +BRDA:146,22,1,32 +BRDA:146,23,0,36 +BRDA:146,23,1,36 +BRDA:157,24,0,2 +BRDA:157,24,1,1 +BRDA:157,24,2,1 +BRDA:157,24,3,26 +BRDA:157,24,4,27 +BRDA:157,24,5,1 +BRDA:157,24,6,1 +BRDA:157,24,7,3 +BRDA:157,24,8,1 +BRDA:157,24,9,1 +BRDA:162,25,0,0 +BRDA:162,25,1,1 +BRDA:166,26,0,1 +BRDA:166,26,1,26 +BRDA:168,27,0,0 +BRDA:168,27,1,0 +BRDA:170,28,0,1 +BRDA:170,28,1,2 +BRDA:172,29,0,0 +BRDA:172,29,1,1 +BRDA:173,30,0,1 +BRDA:173,30,1,0 +BRDA:178,31,0,1 +BRDA:178,31,1,0 +BRDA:179,32,0,0 +BRDA:179,32,1,1 +BRDA:183,33,0,0 +BRDA:183,33,1,0 +BRDA:198,34,0,4 +BRDA:198,34,1,36 +BRDA:207,35,0,16 +BRDA:207,35,1,0 +BRDA:208,36,0,16 +BRDA:208,36,1,0 +BRDA:209,37,0,16 +BRDA:209,37,1,0 +BRF:89 +BRH:72 end_of_record TN: SF:/Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/dev/hsApps/hsDocs/src/view/Tooltip.ts diff --git a/docs/hsDocs.js b/docs/hsDocs.js index c8fa6af..7b50fc2 100644 --- a/docs/hsDocs.js +++ b/docs/hsDocs.js @@ -86,6 +86,28949 @@ /************************************************************************/ /******/ ({ +/***/ "../../../node_modules/d3-array/src/array.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/array.js ***! + \*****************************************************************************************************/ +/*! exports provided: slice, map */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; }); +var array = Array.prototype; + +var slice = array.slice; +var map = array.map; + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/ascending.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/ascending.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/bisect.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/bisect.js ***! + \******************************************************************************************************/ +/*! exports provided: bisectRight, bisectLeft, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bisectRight", function() { return bisectRight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bisectLeft", function() { return bisectLeft; }); +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "../../../node_modules/d3-array/src/ascending.js"); +/* harmony import */ var _bisector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bisector */ "../../../node_modules/d3-array/src/bisector.js"); + + + +var ascendingBisect = Object(_bisector__WEBPACK_IMPORTED_MODULE_1__["default"])(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"]); +var bisectRight = ascendingBisect.right; +var bisectLeft = ascendingBisect.left; +/* harmony default export */ __webpack_exports__["default"] = (bisectRight); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/bisector.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/bisector.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "../../../node_modules/d3-array/src/ascending.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(compare) { + if (compare.length === 1) compare = ascendingComparator(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +}); + +function ascendingComparator(f) { + return function(d, x) { + return Object(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"])(f(d), x); + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/constant.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/constant.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/cross.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/cross.js ***! + \*****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _pairs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pairs */ "../../../node_modules/d3-array/src/pairs.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(values0, values1, reduce) { + var n0 = values0.length, + n1 = values1.length, + values = new Array(n0 * n1), + i0, + i1, + i, + value0; + + if (reduce == null) reduce = _pairs__WEBPACK_IMPORTED_MODULE_0__["pair"]; + + for (i0 = i = 0; i0 < n0; ++i0) { + for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { + values[i] = reduce(value0, values1[i1]); + } + } + + return values; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/descending.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/descending.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/deviation.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/deviation.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _variance__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./variance */ "../../../node_modules/d3-array/src/variance.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(array, f) { + var v = Object(_variance__WEBPACK_IMPORTED_MODULE_0__["default"])(array, f); + return v ? Math.sqrt(v) : v; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/extent.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/extent.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { + var n = values.length, + i = -1, + value, + min, + max; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + min = max = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null) { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + } + + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + min = max = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null) { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + } + + return [min, max]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/histogram.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/histogram.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-array/src/array.js"); +/* harmony import */ var _bisect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bisect */ "../../../node_modules/d3-array/src/bisect.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-array/src/constant.js"); +/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./extent */ "../../../node_modules/d3-array/src/extent.js"); +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./identity */ "../../../node_modules/d3-array/src/identity.js"); +/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./range */ "../../../node_modules/d3-array/src/range.js"); +/* harmony import */ var _ticks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ticks */ "../../../node_modules/d3-array/src/ticks.js"); +/* harmony import */ var _threshold_sturges__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./threshold/sturges */ "../../../node_modules/d3-array/src/threshold/sturges.js"); + + + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var value = _identity__WEBPACK_IMPORTED_MODULE_4__["default"], + domain = _extent__WEBPACK_IMPORTED_MODULE_3__["default"], + threshold = _threshold_sturges__WEBPACK_IMPORTED_MODULE_7__["default"]; + + function histogram(data) { + var i, + n = data.length, + x, + values = new Array(n); + + for (i = 0; i < n; ++i) { + values[i] = value(data[i], i, data); + } + + var xz = domain(values), + x0 = xz[0], + x1 = xz[1], + tz = threshold(values, x0, x1); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + tz = Object(_ticks__WEBPACK_IMPORTED_MODULE_6__["tickStep"])(x0, x1, tz); + tz = Object(_range__WEBPACK_IMPORTED_MODULE_5__["default"])(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive + } + + // Remove any thresholds outside the domain. + var m = tz.length; + while (tz[0] <= x0) tz.shift(), --m; + while (tz[m - 1] > x1) tz.pop(), --m; + + var bins = new Array(m + 1), + bin; + + // Initialize bins. + for (i = 0; i <= m; ++i) { + bin = bins[i] = []; + bin.x0 = i > 0 ? tz[i - 1] : x0; + bin.x1 = i < m ? tz[i] : x1; + } + + // Assign data to bins by value, ignoring any outside the domain. + for (i = 0; i < n; ++i) { + x = values[i]; + if (x0 <= x && x <= x1) { + bins[Object(_bisect__WEBPACK_IMPORTED_MODULE_1__["default"])(tz, x, 0, m)].push(data[i]); + } + } + + return bins; + } + + histogram.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_), histogram) : value; + }; + + histogram.domain = function(_) { + return arguments.length ? (domain = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])([_[0], _[1]]), histogram) : domain; + }; + + histogram.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_)) : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_), histogram) : threshold; + }; + + return histogram; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/identity.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/identity.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return x; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: bisect, bisectRight, bisectLeft, ascending, bisector, cross, descending, deviation, extent, histogram, thresholdFreedmanDiaconis, thresholdScott, thresholdSturges, max, mean, median, merge, min, pairs, permute, quantile, range, scan, shuffle, sum, ticks, tickIncrement, tickStep, transpose, variance, zip */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _bisect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bisect */ "../../../node_modules/d3-array/src/bisect.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisect", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisectRight", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__["bisectRight"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisectLeft", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__["bisectLeft"]; }); + +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending */ "../../../node_modules/d3-array/src/ascending.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ascending", function() { return _ascending__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _bisector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bisector */ "../../../node_modules/d3-array/src/bisector.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisector", function() { return _bisector__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _cross__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cross */ "../../../node_modules/d3-array/src/cross.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cross", function() { return _cross__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _descending__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./descending */ "../../../node_modules/d3-array/src/descending.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "descending", function() { return _descending__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _deviation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./deviation */ "../../../node_modules/d3-array/src/deviation.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "deviation", function() { return _deviation__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./extent */ "../../../node_modules/d3-array/src/extent.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "extent", function() { return _extent__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _histogram__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./histogram */ "../../../node_modules/d3-array/src/histogram.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "histogram", function() { return _histogram__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _threshold_freedmanDiaconis__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./threshold/freedmanDiaconis */ "../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdFreedmanDiaconis", function() { return _threshold_freedmanDiaconis__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _threshold_scott__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./threshold/scott */ "../../../node_modules/d3-array/src/threshold/scott.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdScott", function() { return _threshold_scott__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _threshold_sturges__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./threshold/sturges */ "../../../node_modules/d3-array/src/threshold/sturges.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdSturges", function() { return _threshold_sturges__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _max__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./max */ "../../../node_modules/d3-array/src/max.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return _max__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _mean__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./mean */ "../../../node_modules/d3-array/src/mean.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mean", function() { return _mean__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _median__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./median */ "../../../node_modules/d3-array/src/median.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "median", function() { return _median__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./merge */ "../../../node_modules/d3-array/src/merge.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _merge__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony import */ var _min__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./min */ "../../../node_modules/d3-array/src/min.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return _min__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _pairs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./pairs */ "../../../node_modules/d3-array/src/pairs.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return _pairs__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony import */ var _permute__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./permute */ "../../../node_modules/d3-array/src/permute.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "permute", function() { return _permute__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./quantile */ "../../../node_modules/d3-array/src/quantile.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quantile", function() { return _quantile__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./range */ "../../../node_modules/d3-array/src/range.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "range", function() { return _range__WEBPACK_IMPORTED_MODULE_19__["default"]; }); + +/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./scan */ "../../../node_modules/d3-array/src/scan.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return _scan__WEBPACK_IMPORTED_MODULE_20__["default"]; }); + +/* harmony import */ var _shuffle__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./shuffle */ "../../../node_modules/d3-array/src/shuffle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shuffle", function() { return _shuffle__WEBPACK_IMPORTED_MODULE_21__["default"]; }); + +/* harmony import */ var _sum__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sum */ "../../../node_modules/d3-array/src/sum.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sum", function() { return _sum__WEBPACK_IMPORTED_MODULE_22__["default"]; }); + +/* harmony import */ var _ticks__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ticks */ "../../../node_modules/d3-array/src/ticks.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ticks", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickIncrement", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__["tickIncrement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickStep", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__["tickStep"]; }); + +/* harmony import */ var _transpose__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./transpose */ "../../../node_modules/d3-array/src/transpose.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transpose", function() { return _transpose__WEBPACK_IMPORTED_MODULE_24__["default"]; }); + +/* harmony import */ var _variance__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./variance */ "../../../node_modules/d3-array/src/variance.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "variance", function() { return _variance__WEBPACK_IMPORTED_MODULE_25__["default"]; }); + +/* harmony import */ var _zip__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./zip */ "../../../node_modules/d3-array/src/zip.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _zip__WEBPACK_IMPORTED_MODULE_26__["default"]; }); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/max.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/max.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { + var n = values.length, + i = -1, + value, + max; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + max = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null && value > max) { + max = value; + } + } + } + } + } + + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + max = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null && value > max) { + max = value; + } + } + } + } + } + + return max; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/mean.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/mean.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-array/src/number.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { + var n = values.length, + m = n, + i = -1, + value, + sum = 0; + + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(values[i]))) sum += value; + else --m; + } + } + + else { + while (++i < n) { + if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(valueof(values[i], i, values)))) sum += value; + else --m; + } + } + + if (m) return sum / m; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/median.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/median.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "../../../node_modules/d3-array/src/ascending.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-array/src/number.js"); +/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./quantile */ "../../../node_modules/d3-array/src/quantile.js"); + + + + +/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { + var n = values.length, + i = -1, + value, + numbers = []; + + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_1__["default"])(values[i]))) { + numbers.push(value); + } + } + } + + else { + while (++i < n) { + if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_1__["default"])(valueof(values[i], i, values)))) { + numbers.push(value); + } + } + } + + return Object(_quantile__WEBPACK_IMPORTED_MODULE_2__["default"])(numbers.sort(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"]), 0.5); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/merge.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/merge.js ***! + \*****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(arrays) { + var n = arrays.length, + m, + i = -1, + j = 0, + merged, + array; + + while (++i < n) j += arrays[i].length; + merged = new Array(j); + + while (--n >= 0) { + array = arrays[n]; + m = array.length; + while (--m >= 0) { + merged[--j] = array[m]; + } + } + + return merged; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/min.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/min.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { + var n = values.length, + i = -1, + value, + min; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + min = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null && min > value) { + min = value; + } + } + } + } + } + + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + min = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null && min > value) { + min = value; + } + } + } + } + } + + return min; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/number.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/number.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return x === null ? NaN : +x; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/pairs.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/pairs.js ***! + \*****************************************************************************************************/ +/*! exports provided: default, pair */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pair", function() { return pair; }); +/* harmony default export */ __webpack_exports__["default"] = (function(array, f) { + if (f == null) f = pair; + var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); + while (i < n) pairs[i] = f(p, p = array[++i]); + return pairs; +}); + +function pair(a, b) { + return [a, b]; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/permute.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/permute.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(array, indexes) { + var i = indexes.length, permutes = new Array(i); + while (i--) permutes[i] = array[indexes[i]]; + return permutes; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/quantile.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/quantile.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-array/src/number.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(values, p, valueof) { + if (valueof == null) valueof = _number__WEBPACK_IMPORTED_MODULE_0__["default"]; + if (!(n = values.length)) return; + if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); + if (p >= 1) return +valueof(values[n - 1], n - 1, values); + var n, + i = (n - 1) * p, + i0 = Math.floor(i), + value0 = +valueof(values[i0], i0, values), + value1 = +valueof(values[i0 + 1], i0 + 1, values); + return value0 + (value1 - value0) * (i - i0); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/range.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/range.js ***! + \*****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/scan.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/scan.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "../../../node_modules/d3-array/src/ascending.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(values, compare) { + if (!(n = values.length)) return; + var n, + i = 0, + j = 0, + xi, + xj = values[j]; + + if (compare == null) compare = _ascending__WEBPACK_IMPORTED_MODULE_0__["default"]; + + while (++i < n) { + if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { + xj = xi, j = i; + } + } + + if (compare(xj, xj) === 0) return j; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/shuffle.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/shuffle.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(array, i0, i1) { + var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), + t, + i; + + while (m) { + i = Math.random() * m-- | 0; + t = array[m + i0]; + array[m + i0] = array[i + i0]; + array[i + i0] = t; + } + + return array; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/sum.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/sum.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { + var n = values.length, + i = -1, + value, + sum = 0; + + if (valueof == null) { + while (++i < n) { + if (value = +values[i]) sum += value; // Note: zero and null are equivalent. + } + } + + else { + while (++i < n) { + if (value = +valueof(values[i], i, values)) sum += value; + } + } + + return sum; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js": +/*!**************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/threshold/freedmanDiaconis.js ***! + \**************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array */ "../../../node_modules/d3-array/src/array.js"); +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ascending */ "../../../node_modules/d3-array/src/ascending.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../number */ "../../../node_modules/d3-array/src/number.js"); +/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../quantile */ "../../../node_modules/d3-array/src/quantile.js"); + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function(values, min, max) { + values = _array__WEBPACK_IMPORTED_MODULE_0__["map"].call(values, _number__WEBPACK_IMPORTED_MODULE_2__["default"]).sort(_ascending__WEBPACK_IMPORTED_MODULE_1__["default"]); + return Math.ceil((max - min) / (2 * (Object(_quantile__WEBPACK_IMPORTED_MODULE_3__["default"])(values, 0.75) - Object(_quantile__WEBPACK_IMPORTED_MODULE_3__["default"])(values, 0.25)) * Math.pow(values.length, -1 / 3))); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/threshold/scott.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/threshold/scott.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _deviation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../deviation */ "../../../node_modules/d3-array/src/deviation.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(values, min, max) { + return Math.ceil((max - min) / (3.5 * Object(_deviation__WEBPACK_IMPORTED_MODULE_0__["default"])(values) * Math.pow(values.length, -1 / 3))); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/threshold/sturges.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/threshold/sturges.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(values) { + return Math.ceil(Math.log(values.length) / Math.LN2) + 1; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/ticks.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/ticks.js ***! + \*****************************************************************************************************/ +/*! exports provided: default, tickIncrement, tickStep */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tickIncrement", function() { return tickIncrement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tickStep", function() { return tickStep; }); +var e10 = Math.sqrt(50), + e5 = Math.sqrt(10), + e2 = Math.sqrt(2); + +/* harmony default export */ __webpack_exports__["default"] = (function(start, stop, count) { + var reverse, + i = -1, + n, + ticks, + step; + + stop = +stop, start = +start, count = +count; + if (start === stop && count > 0) return [start]; + if (reverse = stop < start) n = start, start = stop, stop = n; + if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; + + if (step > 0) { + start = Math.ceil(start / step); + stop = Math.floor(stop / step); + ticks = new Array(n = Math.ceil(stop - start + 1)); + while (++i < n) ticks[i] = (start + i) * step; + } else { + start = Math.floor(start * step); + stop = Math.ceil(stop * step); + ticks = new Array(n = Math.ceil(start - stop + 1)); + while (++i < n) ticks[i] = (start - i) / step; + } + + if (reverse) ticks.reverse(); + + return ticks; +}); + +function tickIncrement(start, stop, count) { + var step = (stop - start) / Math.max(0, count), + power = Math.floor(Math.log(step) / Math.LN10), + error = step / Math.pow(10, power); + return power >= 0 + ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) + : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); +} + +function tickStep(start, stop, count) { + var step0 = Math.abs(stop - start) / Math.max(0, count), + step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), + error = step0 / step1; + if (error >= e10) step1 *= 10; + else if (error >= e5) step1 *= 5; + else if (error >= e2) step1 *= 2; + return stop < start ? -step1 : step1; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/transpose.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/transpose.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./min */ "../../../node_modules/d3-array/src/min.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(matrix) { + if (!(n = matrix.length)) return []; + for (var i = -1, m = Object(_min__WEBPACK_IMPORTED_MODULE_0__["default"])(matrix, length), transpose = new Array(m); ++i < m;) { + for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { + row[j] = matrix[j][i]; + } + } + return transpose; +}); + +function length(d) { + return d.length; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/variance.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/variance.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-array/src/number.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { + var n = values.length, + m = 0, + i = -1, + mean = 0, + value, + delta, + sum = 0; + + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(values[i]))) { + delta = value - mean; + mean += delta / ++m; + sum += delta * (value - mean); + } + } + } + + else { + while (++i < n) { + if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(valueof(values[i], i, values)))) { + delta = value - mean; + mean += delta / ++m; + sum += delta * (value - mean); + } + } + } + + if (m > 1) return sum / (m - 1); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-array/src/zip.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-array/src/zip.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _transpose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transpose */ "../../../node_modules/d3-array/src/transpose.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_transpose__WEBPACK_IMPORTED_MODULE_0__["default"])(arguments); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-axis/src/array.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-axis/src/array.js ***! + \****************************************************************************************************/ +/*! exports provided: slice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +var slice = Array.prototype.slice; + + +/***/ }), + +/***/ "../../../node_modules/d3-axis/src/axis.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-axis/src/axis.js ***! + \***************************************************************************************************/ +/*! exports provided: axisTop, axisRight, axisBottom, axisLeft */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "axisTop", function() { return axisTop; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "axisRight", function() { return axisRight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "axisBottom", function() { return axisBottom; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "axisLeft", function() { return axisLeft; }); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-axis/src/array.js"); +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity */ "../../../node_modules/d3-axis/src/identity.js"); + + + +var top = 1, + right = 2, + bottom = 3, + left = 4, + epsilon = 1e-6; + +function translateX(x) { + return "translate(" + (x + 0.5) + ",0)"; +} + +function translateY(y) { + return "translate(0," + (y + 0.5) + ")"; +} + +function number(scale) { + return function(d) { + return +scale(d); + }; +} + +function center(scale) { + var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset. + if (scale.round()) offset = Math.round(offset); + return function(d) { + return +scale(d) + offset; + }; +} + +function entering() { + return !this.__axis; +} + +function axis(orient, scale) { + var tickArguments = [], + tickValues = null, + tickFormat = null, + tickSizeInner = 6, + tickSizeOuter = 6, + tickPadding = 3, + k = orient === top || orient === left ? -1 : 1, + x = orient === left || orient === right ? "x" : "y", + transform = orient === top || orient === bottom ? translateX : translateY; + + function axis(context) { + var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, + format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : _identity__WEBPACK_IMPORTED_MODULE_1__["default"]) : tickFormat, + spacing = Math.max(tickSizeInner, 0) + tickPadding, + range = scale.range(), + range0 = +range[0] + 0.5, + range1 = +range[range.length - 1] + 0.5, + position = (scale.bandwidth ? center : number)(scale.copy()), + selection = context.selection ? context.selection() : context, + path = selection.selectAll(".domain").data([null]), + tick = selection.selectAll(".tick").data(values, scale).order(), + tickExit = tick.exit(), + tickEnter = tick.enter().append("g").attr("class", "tick"), + line = tick.select("line"), + text = tick.select("text"); + + path = path.merge(path.enter().insert("path", ".tick") + .attr("class", "domain") + .attr("stroke", "currentColor")); + + tick = tick.merge(tickEnter); + + line = line.merge(tickEnter.append("line") + .attr("stroke", "currentColor") + .attr(x + "2", k * tickSizeInner)); + + text = text.merge(tickEnter.append("text") + .attr("fill", "currentColor") + .attr(x, k * spacing) + .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); + + if (context !== selection) { + path = path.transition(context); + tick = tick.transition(context); + line = line.transition(context); + text = text.transition(context); + + tickExit = tickExit.transition(context) + .attr("opacity", epsilon) + .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); }); + + tickEnter + .attr("opacity", epsilon) + .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); }); + } + + tickExit.remove(); + + path + .attr("d", orient === left || orient == right + ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1) + : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1)); + + tick + .attr("opacity", 1) + .attr("transform", function(d) { return transform(position(d)); }); + + line + .attr(x + "2", k * tickSizeInner); + + text + .attr(x, k * spacing) + .text(format); + + selection.filter(entering) + .attr("fill", "none") + .attr("font-size", 10) + .attr("font-family", "sans-serif") + .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); + + selection + .each(function() { this.__axis = position; }); + } + + axis.scale = function(_) { + return arguments.length ? (scale = _, axis) : scale; + }; + + axis.ticks = function() { + return tickArguments = _array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(arguments), axis; + }; + + axis.tickArguments = function(_) { + return arguments.length ? (tickArguments = _ == null ? [] : _array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_), axis) : tickArguments.slice(); + }; + + axis.tickValues = function(_) { + return arguments.length ? (tickValues = _ == null ? null : _array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_), axis) : tickValues && tickValues.slice(); + }; + + axis.tickFormat = function(_) { + return arguments.length ? (tickFormat = _, axis) : tickFormat; + }; + + axis.tickSize = function(_) { + return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; + }; + + axis.tickSizeInner = function(_) { + return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; + }; + + axis.tickSizeOuter = function(_) { + return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; + }; + + axis.tickPadding = function(_) { + return arguments.length ? (tickPadding = +_, axis) : tickPadding; + }; + + return axis; +} + +function axisTop(scale) { + return axis(top, scale); +} + +function axisRight(scale) { + return axis(right, scale); +} + +function axisBottom(scale) { + return axis(bottom, scale); +} + +function axisLeft(scale) { + return axis(left, scale); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-axis/src/identity.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-axis/src/identity.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return x; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-axis/src/index.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-axis/src/index.js ***! + \****************************************************************************************************/ +/*! exports provided: axisTop, axisRight, axisBottom, axisLeft */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _axis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./axis */ "../../../node_modules/d3-axis/src/axis.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisTop", function() { return _axis__WEBPACK_IMPORTED_MODULE_0__["axisTop"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisRight", function() { return _axis__WEBPACK_IMPORTED_MODULE_0__["axisRight"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisBottom", function() { return _axis__WEBPACK_IMPORTED_MODULE_0__["axisBottom"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisLeft", function() { return _axis__WEBPACK_IMPORTED_MODULE_0__["axisLeft"]; }); + + + + +/***/ }), + +/***/ "../../../node_modules/d3-brush/src/brush.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-brush/src/brush.js ***! + \*****************************************************************************************************/ +/*! exports provided: brushSelection, brushX, brushY, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brushSelection", function() { return brushSelection; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brushX", function() { return brushX; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brushY", function() { return brushY; }); +/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "../../../node_modules/d3-dispatch/src/index.js"); +/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-drag */ "../../../node_modules/d3-drag/src/index.js"); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-transition */ "../../../node_modules/d3-transition/src/index.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-brush/src/constant.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event */ "../../../node_modules/d3-brush/src/event.js"); +/* harmony import */ var _noevent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./noevent */ "../../../node_modules/d3-brush/src/noevent.js"); + + + + + + + + + +var MODE_DRAG = {name: "drag"}, + MODE_SPACE = {name: "space"}, + MODE_HANDLE = {name: "handle"}, + MODE_CENTER = {name: "center"}; + +var X = { + name: "x", + handles: ["e", "w"].map(type), + input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; }, + output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } +}; + +var Y = { + name: "y", + handles: ["n", "s"].map(type), + input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; }, + output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } +}; + +var XY = { + name: "xy", + handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type), + input: function(xy) { return xy; }, + output: function(xy) { return xy; } +}; + +var cursors = { + overlay: "crosshair", + selection: "move", + n: "ns-resize", + e: "ew-resize", + s: "ns-resize", + w: "ew-resize", + nw: "nwse-resize", + ne: "nesw-resize", + se: "nwse-resize", + sw: "nesw-resize" +}; + +var flipX = { + e: "w", + w: "e", + nw: "ne", + ne: "nw", + se: "sw", + sw: "se" +}; + +var flipY = { + n: "s", + s: "n", + nw: "sw", + ne: "se", + se: "ne", + sw: "nw" +}; + +var signsX = { + overlay: +1, + selection: +1, + n: null, + e: +1, + s: null, + w: -1, + nw: -1, + ne: +1, + se: +1, + sw: -1 +}; + +var signsY = { + overlay: +1, + selection: +1, + n: -1, + e: null, + s: +1, + w: null, + nw: -1, + ne: -1, + se: +1, + sw: +1 +}; + +function type(t) { + return {type: t}; +} + +// Ignore right-click, since that should open the context menu. +function defaultFilter() { + return !d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].button; +} + +function defaultExtent() { + var svg = this.ownerSVGElement || this; + return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; +} + +// Like d3.local, but with the name “__brush” rather than auto-generated. +function local(node) { + while (!node.__brush) if (!(node = node.parentNode)) return; + return node.__brush; +} + +function empty(extent) { + return extent[0][0] === extent[1][0] + || extent[0][1] === extent[1][1]; +} + +function brushSelection(node) { + var state = node.__brush; + return state ? state.dim.output(state.selection) : null; +} + +function brushX() { + return brush(X); +} + +function brushY() { + return brush(Y); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return brush(XY); +}); + +function brush(dim) { + var extent = defaultExtent, + filter = defaultFilter, + listeners = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])(brush, "start", "brush", "end"), + handleSize = 6, + touchending; + + function brush(group) { + var overlay = group + .property("__brush", initialize) + .selectAll(".overlay") + .data([type("overlay")]); + + overlay.enter().append("rect") + .attr("class", "overlay") + .attr("pointer-events", "all") + .attr("cursor", cursors.overlay) + .merge(overlay) + .each(function() { + var extent = local(this).extent; + Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this) + .attr("x", extent[0][0]) + .attr("y", extent[0][1]) + .attr("width", extent[1][0] - extent[0][0]) + .attr("height", extent[1][1] - extent[0][1]); + }); + + group.selectAll(".selection") + .data([type("selection")]) + .enter().append("rect") + .attr("class", "selection") + .attr("cursor", cursors.selection) + .attr("fill", "#777") + .attr("fill-opacity", 0.3) + .attr("stroke", "#fff") + .attr("shape-rendering", "crispEdges"); + + var handle = group.selectAll(".handle") + .data(dim.handles, function(d) { return d.type; }); + + handle.exit().remove(); + + handle.enter().append("rect") + .attr("class", function(d) { return "handle handle--" + d.type; }) + .attr("cursor", function(d) { return cursors[d.type]; }); + + group + .each(redraw) + .attr("fill", "none") + .attr("pointer-events", "all") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)") + .on("mousedown.brush touchstart.brush", started); + } + + brush.move = function(group, selection) { + if (group.selection) { + group + .on("start.brush", function() { emitter(this, arguments).beforestart().start(); }) + .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); }) + .tween("brush", function() { + var that = this, + state = that.__brush, + emit = emitter(that, arguments), + selection0 = state.selection, + selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent), + i = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_2__["interpolate"])(selection0, selection1); + + function tween(t) { + state.selection = t === 1 && empty(selection1) ? null : i(t); + redraw.call(that); + emit.brush(); + } + + return selection0 && selection1 ? tween : tween(1); + }); + } else { + group + .each(function() { + var that = this, + args = arguments, + state = that.__brush, + selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent), + emit = emitter(that, args).beforestart(); + + Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(that); + state.selection = selection1 == null || empty(selection1) ? null : selection1; + redraw.call(that); + emit.start().brush().end(); + }); + } + }; + + function redraw() { + var group = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this), + selection = local(this).selection; + + if (selection) { + group.selectAll(".selection") + .style("display", null) + .attr("x", selection[0][0]) + .attr("y", selection[0][1]) + .attr("width", selection[1][0] - selection[0][0]) + .attr("height", selection[1][1] - selection[0][1]); + + group.selectAll(".handle") + .style("display", null) + .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; }) + .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; }) + .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; }) + .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; }); + } + + else { + group.selectAll(".selection,.handle") + .style("display", "none") + .attr("x", null) + .attr("y", null) + .attr("width", null) + .attr("height", null); + } + } + + function emitter(that, args) { + return that.__brush.emitter || new Emitter(that, args); + } + + function Emitter(that, args) { + this.that = that; + this.args = args; + this.state = that.__brush; + this.active = 0; + } + + Emitter.prototype = { + beforestart: function() { + if (++this.active === 1) this.state.emitter = this, this.starting = true; + return this; + }, + start: function() { + if (this.starting) this.starting = false, this.emit("start"); + return this; + }, + brush: function() { + this.emit("brush"); + return this; + }, + end: function() { + if (--this.active === 0) delete this.state.emitter, this.emit("end"); + return this; + }, + emit: function(type) { + Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["customEvent"])(new _event__WEBPACK_IMPORTED_MODULE_6__["default"](brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]); + } + }; + + function started() { + if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches) { if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].changedTouches.length < d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches.length) return Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["default"])(); } + else if (touchending) return; + if (!filter.apply(this, arguments)) return; + + var that = this, + type = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].target.__data__.type, + mode = (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].altKey ? MODE_CENTER : MODE_HANDLE), + signX = dim === Y ? null : signsX[type], + signY = dim === X ? null : signsY[type], + state = local(that), + extent = state.extent, + selection = state.selection, + W = extent[0][0], w0, w1, + N = extent[0][1], n0, n1, + E = extent[1][0], e0, e1, + S = extent[1][1], s0, s1, + dx, + dy, + moving, + shifting = signX && signY && d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].shiftKey, + lockX, + lockY, + point0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(that), + point = point0, + emit = emitter(that, arguments).beforestart(); + + if (type === "overlay") { + state.selection = selection = [ + [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]], + [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0] + ]; + } else { + w0 = selection[0][0]; + n0 = selection[0][1]; + e0 = selection[1][0]; + s0 = selection[1][1]; + } + + w1 = w0; + n1 = n0; + e1 = e0; + s1 = s0; + + var group = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(that) + .attr("pointer-events", "none"); + + var overlay = group.selectAll(".overlay") + .attr("cursor", cursors[type]); + + if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches) { + group + .on("touchmove.brush", moved, true) + .on("touchend.brush touchcancel.brush", ended, true); + } else { + var view = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view) + .on("keydown.brush", keydowned, true) + .on("keyup.brush", keyupped, true) + .on("mousemove.brush", moved, true) + .on("mouseup.brush", ended, true); + + Object(d3_drag__WEBPACK_IMPORTED_MODULE_1__["dragDisable"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view); + } + + Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["nopropagation"])(); + Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(that); + redraw.call(that); + emit.start(); + + function moved() { + var point1 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(that); + if (shifting && !lockX && !lockY) { + if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true; + else lockX = true; + } + point = point1; + moving = true; + Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["default"])(); + move(); + } + + function move() { + var t; + + dx = point[0] - point0[0]; + dy = point[1] - point0[1]; + + switch (mode) { + case MODE_SPACE: + case MODE_DRAG: { + if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; + if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; + break; + } + case MODE_HANDLE: { + if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; + else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; + if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; + else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; + break; + } + case MODE_CENTER: { + if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); + if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); + break; + } + } + + if (e1 < w1) { + signX *= -1; + t = w0, w0 = e0, e0 = t; + t = w1, w1 = e1, e1 = t; + if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); + } + + if (s1 < n1) { + signY *= -1; + t = n0, n0 = s0, s0 = t; + t = n1, n1 = s1, s1 = t; + if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); + } + + if (state.selection) selection = state.selection; // May be set by brush.move! + if (lockX) w1 = selection[0][0], e1 = selection[1][0]; + if (lockY) n1 = selection[0][1], s1 = selection[1][1]; + + if (selection[0][0] !== w1 + || selection[0][1] !== n1 + || selection[1][0] !== e1 + || selection[1][1] !== s1) { + state.selection = [[w1, n1], [e1, s1]]; + redraw.call(that); + emit.brush(); + } + } + + function ended() { + Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["nopropagation"])(); + if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches) { + if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches.length) return; + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! + group.on("touchmove.brush touchend.brush touchcancel.brush", null); + } else { + Object(d3_drag__WEBPACK_IMPORTED_MODULE_1__["dragEnable"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view, moving); + view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); + } + group.attr("pointer-events", "all"); + overlay.attr("cursor", cursors.overlay); + if (state.selection) selection = state.selection; // May be set by brush.move (on start)! + if (empty(selection)) state.selection = null, redraw.call(that); + emit.end(); + } + + function keydowned() { + switch (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].keyCode) { + case 16: { // SHIFT + shifting = signX && signY; + break; + } + case 18: { // ALT + if (mode === MODE_HANDLE) { + if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; + if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; + mode = MODE_CENTER; + move(); + } + break; + } + case 32: { // SPACE; takes priority over ALT + if (mode === MODE_HANDLE || mode === MODE_CENTER) { + if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; + if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; + mode = MODE_SPACE; + overlay.attr("cursor", cursors.selection); + move(); + } + break; + } + default: return; + } + Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["default"])(); + } + + function keyupped() { + switch (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].keyCode) { + case 16: { // SHIFT + if (shifting) { + lockX = lockY = shifting = false; + move(); + } + break; + } + case 18: { // ALT + if (mode === MODE_CENTER) { + if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; + if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; + mode = MODE_HANDLE; + move(); + } + break; + } + case 32: { // SPACE + if (mode === MODE_SPACE) { + if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].altKey) { + if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; + if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; + mode = MODE_CENTER; + } else { + if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; + if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; + mode = MODE_HANDLE; + } + overlay.attr("cursor", cursors[type]); + move(); + } + break; + } + default: return; + } + Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["default"])(); + } + } + + function initialize() { + var state = this.__brush || {selection: null}; + state.extent = extent.apply(this, arguments); + state.dim = dim; + return state; + } + + brush.extent = function(_) { + return arguments.length ? (extent = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent; + }; + + brush.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])(!!_), brush) : filter; + }; + + brush.handleSize = function(_) { + return arguments.length ? (handleSize = +_, brush) : handleSize; + }; + + brush.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? brush : value; + }; + + return brush; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-brush/src/constant.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-brush/src/constant.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-brush/src/event.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-brush/src/event.js ***! + \*****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(target, type, selection) { + this.target = target; + this.type = type; + this.selection = selection; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-brush/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-brush/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: brush, brushX, brushY, brushSelection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _brush__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./brush */ "../../../node_modules/d3-brush/src/brush.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brush", function() { return _brush__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushX", function() { return _brush__WEBPACK_IMPORTED_MODULE_0__["brushX"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushY", function() { return _brush__WEBPACK_IMPORTED_MODULE_0__["brushY"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushSelection", function() { return _brush__WEBPACK_IMPORTED_MODULE_0__["brushSelection"]; }); + + + + +/***/ }), + +/***/ "../../../node_modules/d3-brush/src/noevent.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-brush/src/noevent.js ***! + \*******************************************************************************************************/ +/*! exports provided: nopropagation, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nopropagation", function() { return nopropagation; }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); + + +function nopropagation() { + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].preventDefault(); + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-chord/src/array.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-chord/src/array.js ***! + \*****************************************************************************************************/ +/*! exports provided: slice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +var slice = Array.prototype.slice; + + +/***/ }), + +/***/ "../../../node_modules/d3-chord/src/chord.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-chord/src/chord.js ***! + \*****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-chord/src/math.js"); + + + +function compareValue(compare) { + return function(a, b) { + return compare( + a.source.value + a.target.value, + b.source.value + b.target.value + ); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var padAngle = 0, + sortGroups = null, + sortSubgroups = null, + sortChords = null; + + function chord(matrix) { + var n = matrix.length, + groupSums = [], + groupIndex = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(n), + subgroupIndex = [], + chords = [], + groups = chords.groups = new Array(n), + subgroups = new Array(n * n), + k, + x, + x0, + dx, + i, + j; + + // Compute the sum. + k = 0, i = -1; while (++i < n) { + x = 0, j = -1; while (++j < n) { + x += matrix[i][j]; + } + groupSums.push(x); + subgroupIndex.push(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(n)); + k += x; + } + + // Sort groups… + if (sortGroups) groupIndex.sort(function(a, b) { + return sortGroups(groupSums[a], groupSums[b]); + }); + + // Sort subgroups… + if (sortSubgroups) subgroupIndex.forEach(function(d, i) { + d.sort(function(a, b) { + return sortSubgroups(matrix[i][a], matrix[i][b]); + }); + }); + + // Convert the sum to scaling factor for [0, 2pi]. + // TODO Allow start and end angle to be specified? + // TODO Allow padding to be specified as percentage? + k = Object(_math__WEBPACK_IMPORTED_MODULE_1__["max"])(0, _math__WEBPACK_IMPORTED_MODULE_1__["tau"] - padAngle * n) / k; + dx = k ? padAngle : _math__WEBPACK_IMPORTED_MODULE_1__["tau"] / n; + + // Compute the start and end angle for each group and subgroup. + // Note: Opera has a bug reordering object literal properties! + x = 0, i = -1; while (++i < n) { + x0 = x, j = -1; while (++j < n) { + var di = groupIndex[i], + dj = subgroupIndex[di][j], + v = matrix[di][dj], + a0 = x, + a1 = x += v * k; + subgroups[dj * n + di] = { + index: di, + subindex: dj, + startAngle: a0, + endAngle: a1, + value: v + }; + } + groups[di] = { + index: di, + startAngle: x0, + endAngle: x, + value: groupSums[di] + }; + x += dx; + } + + // Generate chords for each (non-empty) subgroup-subgroup link. + i = -1; while (++i < n) { + j = i - 1; while (++j < n) { + var source = subgroups[j * n + i], + target = subgroups[i * n + j]; + if (source.value || target.value) { + chords.push(source.value < target.value + ? {source: target, target: source} + : {source: source, target: target}); + } + } + } + + return sortChords ? chords.sort(sortChords) : chords; + } + + chord.padAngle = function(_) { + return arguments.length ? (padAngle = Object(_math__WEBPACK_IMPORTED_MODULE_1__["max"])(0, _), chord) : padAngle; + }; + + chord.sortGroups = function(_) { + return arguments.length ? (sortGroups = _, chord) : sortGroups; + }; + + chord.sortSubgroups = function(_) { + return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; + }; + + chord.sortChords = function(_) { + return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; + }; + + return chord; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-chord/src/constant.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-chord/src/constant.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-chord/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-chord/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: chord, ribbon */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _chord__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chord */ "../../../node_modules/d3-chord/src/chord.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "chord", function() { return _chord__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _ribbon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ribbon */ "../../../node_modules/d3-chord/src/ribbon.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ribbon", function() { return _ribbon__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-chord/src/math.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-chord/src/math.js ***! + \****************************************************************************************************/ +/*! exports provided: cos, sin, pi, halfPi, tau, max */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cos", function() { return cos; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sin", function() { return sin; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pi", function() { return pi; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "halfPi", function() { return halfPi; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tau", function() { return tau; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; }); +var cos = Math.cos; +var sin = Math.sin; +var pi = Math.PI; +var halfPi = pi / 2; +var tau = pi * 2; +var max = Math.max; + + +/***/ }), + +/***/ "../../../node_modules/d3-chord/src/ribbon.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-chord/src/ribbon.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-chord/src/array.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-chord/src/constant.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-chord/src/math.js"); +/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-path */ "../../../node_modules/d3-path/src/index.js"); + + + + + +function defaultSource(d) { + return d.source; +} + +function defaultTarget(d) { + return d.target; +} + +function defaultRadius(d) { + return d.radius; +} + +function defaultStartAngle(d) { + return d.startAngle; +} + +function defaultEndAngle(d) { + return d.endAngle; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var source = defaultSource, + target = defaultTarget, + radius = defaultRadius, + startAngle = defaultStartAngle, + endAngle = defaultEndAngle, + context = null; + + function ribbon() { + var buffer, + argv = _array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(arguments), + s = source.apply(this, argv), + t = target.apply(this, argv), + sr = +radius.apply(this, (argv[0] = s, argv)), + sa0 = startAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], + sa1 = endAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], + sx0 = sr * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(sa0), + sy0 = sr * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(sa0), + tr = +radius.apply(this, (argv[0] = t, argv)), + ta0 = startAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], + ta1 = endAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"]; + + if (!context) context = buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_3__["path"])(); + + context.moveTo(sx0, sy0); + context.arc(0, 0, sr, sa0, sa1); + if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr? + context.quadraticCurveTo(0, 0, tr * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(ta0), tr * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(ta0)); + context.arc(0, 0, tr, ta0, ta1); + } + context.quadraticCurveTo(0, 0, sx0, sy0); + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; + } + + ribbon.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : radius; + }; + + ribbon.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : startAngle; + }; + + ribbon.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : endAngle; + }; + + ribbon.source = function(_) { + return arguments.length ? (source = _, ribbon) : source; + }; + + ribbon.target = function(_) { + return arguments.length ? (target = _, ribbon) : target; + }; + + ribbon.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), ribbon) : context; + }; + + return ribbon; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-collection/src/entries.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-collection/src/entries.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(map) { + var entries = []; + for (var key in map) entries.push({key: key, value: map[key]}); + return entries; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-collection/src/index.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-collection/src/index.js ***! + \**********************************************************************************************************/ +/*! exports provided: nest, set, map, keys, values, entries */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _nest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./nest */ "../../../node_modules/d3-collection/src/nest.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "nest", function() { return _nest__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./set */ "../../../node_modules/d3-collection/src/set.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "set", function() { return _set__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./map */ "../../../node_modules/d3-collection/src/map.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return _map__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./keys */ "../../../node_modules/d3-collection/src/keys.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "keys", function() { return _keys__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _values__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./values */ "../../../node_modules/d3-collection/src/values.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "values", function() { return _values__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _entries__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./entries */ "../../../node_modules/d3-collection/src/entries.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "entries", function() { return _entries__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-collection/src/keys.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-collection/src/keys.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(map) { + var keys = []; + for (var key in map) keys.push(key); + return keys; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-collection/src/map.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-collection/src/map.js ***! + \********************************************************************************************************/ +/*! exports provided: prefix, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prefix", function() { return prefix; }); +var prefix = "$"; + +function Map() {} + +Map.prototype = map.prototype = { + constructor: Map, + has: function(key) { + return (prefix + key) in this; + }, + get: function(key) { + return this[prefix + key]; + }, + set: function(key, value) { + this[prefix + key] = value; + return this; + }, + remove: function(key) { + var property = prefix + key; + return property in this && delete this[property]; + }, + clear: function() { + for (var property in this) if (property[0] === prefix) delete this[property]; + }, + keys: function() { + var keys = []; + for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); + return keys; + }, + values: function() { + var values = []; + for (var property in this) if (property[0] === prefix) values.push(this[property]); + return values; + }, + entries: function() { + var entries = []; + for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); + return entries; + }, + size: function() { + var size = 0; + for (var property in this) if (property[0] === prefix) ++size; + return size; + }, + empty: function() { + for (var property in this) if (property[0] === prefix) return false; + return true; + }, + each: function(f) { + for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); + } +}; + +function map(object, f) { + var map = new Map; + + // Copy constructor. + if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); + + // Index array by numeric index or specified key function. + else if (Array.isArray(object)) { + var i = -1, + n = object.length, + o; + + if (f == null) while (++i < n) map.set(i, object[i]); + else while (++i < n) map.set(f(o = object[i], i, object), o); + } + + // Convert object to map. + else if (object) for (var key in object) map.set(key, object[key]); + + return map; +} + +/* harmony default export */ __webpack_exports__["default"] = (map); + + +/***/ }), + +/***/ "../../../node_modules/d3-collection/src/nest.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-collection/src/nest.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ "../../../node_modules/d3-collection/src/map.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var keys = [], + sortKeys = [], + sortValues, + rollup, + nest; + + function apply(array, depth, createResult, setResult) { + if (depth >= keys.length) { + if (sortValues != null) array.sort(sortValues); + return rollup != null ? rollup(array) : array; + } + + var i = -1, + n = array.length, + key = keys[depth++], + keyValue, + value, + valuesByKey = Object(_map__WEBPACK_IMPORTED_MODULE_0__["default"])(), + values, + result = createResult(); + + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { + values.push(value); + } else { + valuesByKey.set(keyValue, [value]); + } + } + + valuesByKey.each(function(values, key) { + setResult(result, key, apply(values, depth, createResult, setResult)); + }); + + return result; + } + + function entries(map, depth) { + if (++depth > keys.length) return map; + var array, sortKey = sortKeys[depth - 1]; + if (rollup != null && depth >= keys.length) array = map.entries(); + else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); + return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; + } + + return nest = { + object: function(array) { return apply(array, 0, createObject, setObject); }, + map: function(array) { return apply(array, 0, createMap, setMap); }, + entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, + key: function(d) { keys.push(d); return nest; }, + sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, + sortValues: function(order) { sortValues = order; return nest; }, + rollup: function(f) { rollup = f; return nest; } + }; +}); + +function createObject() { + return {}; +} + +function setObject(object, key, value) { + object[key] = value; +} + +function createMap() { + return Object(_map__WEBPACK_IMPORTED_MODULE_0__["default"])(); +} + +function setMap(map, key, value) { + map.set(key, value); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-collection/src/set.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-collection/src/set.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ "../../../node_modules/d3-collection/src/map.js"); + + +function Set() {} + +var proto = _map__WEBPACK_IMPORTED_MODULE_0__["default"].prototype; + +Set.prototype = set.prototype = { + constructor: Set, + has: proto.has, + add: function(value) { + value += ""; + this[_map__WEBPACK_IMPORTED_MODULE_0__["prefix"] + value] = value; + return this; + }, + remove: proto.remove, + clear: proto.clear, + values: proto.keys, + size: proto.size, + empty: proto.empty, + each: proto.each +}; + +function set(object, f) { + var set = new Set; + + // Copy constructor. + if (object instanceof Set) object.each(function(value) { set.add(value); }); + + // Otherwise, assume it’s an array. + else if (object) { + var i = -1, n = object.length; + if (f == null) while (++i < n) set.add(object[i]); + else while (++i < n) set.add(f(object[i], i, object)); + } + + return set; +} + +/* harmony default export */ __webpack_exports__["default"] = (set); + + +/***/ }), + +/***/ "../../../node_modules/d3-collection/src/values.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-collection/src/values.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(map) { + var values = []; + for (var key in map) values.push(map[key]); + return values; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-color/src/color.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-color/src/color.js ***! + \*****************************************************************************************************/ +/*! exports provided: Color, darker, brighter, default, rgbConvert, rgb, Rgb, hslConvert, hsl */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "darker", function() { return darker; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brighter", function() { return brighter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return color; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbConvert", function() { return rgbConvert; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgb", function() { return rgb; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Rgb", function() { return Rgb; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hslConvert", function() { return hslConvert; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hsl", function() { return hsl; }); +/* harmony import */ var _define__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define */ "../../../node_modules/d3-color/src/define.js"); + + +function Color() {} + +var darker = 0.7; +var brighter = 1 / darker; + +var reI = "\\s*([+-]?\\d+)\\s*", + reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", + reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", + reHex3 = /^#([0-9a-f]{3})$/, + reHex6 = /^#([0-9a-f]{6})$/, + reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), + reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), + reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), + reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), + reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), + reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); + +var named = { + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aqua: 0x00ffff, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + bisque: 0xffe4c4, + black: 0x000000, + blanchedalmond: 0xffebcd, + blue: 0x0000ff, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + cyan: 0x00ffff, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgreen: 0x006400, + darkgrey: 0xa9a9a9, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkslategrey: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dimgrey: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + fuchsia: 0xff00ff, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + gray: 0x808080, + green: 0x008000, + greenyellow: 0xadff2f, + grey: 0x808080, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgray: 0xd3d3d3, + lightgreen: 0x90ee90, + lightgrey: 0xd3d3d3, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightslategrey: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + lime: 0x00ff00, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + magenta: 0xff00ff, + maroon: 0x800000, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + navy: 0x000080, + oldlace: 0xfdf5e6, + olive: 0x808000, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + purple: 0x800080, + rebeccapurple: 0x663399, + red: 0xff0000, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + silver: 0xc0c0c0, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + slategrey: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + teal: 0x008080, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + white: 0xffffff, + whitesmoke: 0xf5f5f5, + yellow: 0xffff00, + yellowgreen: 0x9acd32 +}; + +Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Color, color, { + displayable: function() { + return this.rgb().displayable(); + }, + hex: function() { + return this.rgb().hex(); + }, + toString: function() { + return this.rgb() + ""; + } +}); + +function color(format) { + var m; + format = (format + "").trim().toLowerCase(); + return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 + : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 + : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) + : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) + : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) + : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) + : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) + : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) + : named.hasOwnProperty(format) ? rgbn(named[format]) + : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) + : null; +} + +function rgbn(n) { + return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); +} + +function rgba(r, g, b, a) { + if (a <= 0) r = g = b = NaN; + return new Rgb(r, g, b, a); +} + +function rgbConvert(o) { + if (!(o instanceof Color)) o = color(o); + if (!o) return new Rgb; + o = o.rgb(); + return new Rgb(o.r, o.g, o.b, o.opacity); +} + +function rgb(r, g, b, opacity) { + return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); +} + +function Rgb(r, g, b, opacity) { + this.r = +r; + this.g = +g; + this.b = +b; + this.opacity = +opacity; +} + +Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Rgb, rgb, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + rgb: function() { + return this; + }, + displayable: function() { + return (0 <= this.r && this.r <= 255) + && (0 <= this.g && this.g <= 255) + && (0 <= this.b && this.b <= 255) + && (0 <= this.opacity && this.opacity <= 1); + }, + hex: function() { + return "#" + hex(this.r) + hex(this.g) + hex(this.b); + }, + toString: function() { + var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); + return (a === 1 ? "rgb(" : "rgba(") + + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + + (a === 1 ? ")" : ", " + a + ")"); + } +})); + +function hex(value) { + value = Math.max(0, Math.min(255, Math.round(value) || 0)); + return (value < 16 ? "0" : "") + value.toString(16); +} + +function hsla(h, s, l, a) { + if (a <= 0) h = s = l = NaN; + else if (l <= 0 || l >= 1) h = s = NaN; + else if (s <= 0) h = NaN; + return new Hsl(h, s, l, a); +} + +function hslConvert(o) { + if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Color)) o = color(o); + if (!o) return new Hsl; + if (o instanceof Hsl) return o; + o = o.rgb(); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + h = NaN, + s = max - min, + l = (max + min) / 2; + if (s) { + if (r === max) h = (g - b) / s + (g < b) * 6; + else if (g === max) h = (b - r) / s + 2; + else h = (r - g) / s + 4; + s /= l < 0.5 ? max + min : 2 - max - min; + h *= 60; + } else { + s = l > 0 && l < 1 ? 0 : h; + } + return new Hsl(h, s, l, o.opacity); +} + +function hsl(h, s, l, opacity) { + return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); +} + +function Hsl(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Hsl, hsl, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = this.h % 360 + (this.h < 0) * 360, + s = isNaN(h) || isNaN(this.s) ? 0 : this.s, + l = this.l, + m2 = l + (l < 0.5 ? l : 1 - l) * s, + m1 = 2 * l - m2; + return new Rgb( + hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), + hsl2rgb(h, m1, m2), + hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), + this.opacity + ); + }, + displayable: function() { + return (0 <= this.s && this.s <= 1 || isNaN(this.s)) + && (0 <= this.l && this.l <= 1) + && (0 <= this.opacity && this.opacity <= 1); + } +})); + +/* From FvD 13.37, CSS Color Module Level 3 */ +function hsl2rgb(h, m1, m2) { + return (h < 60 ? m1 + (m2 - m1) * h / 60 + : h < 180 ? m2 + : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 + : m1) * 255; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-color/src/cubehelix.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-color/src/cubehelix.js ***! + \*********************************************************************************************************/ +/*! exports provided: default, Cubehelix */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return cubehelix; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Cubehelix", function() { return Cubehelix; }); +/* harmony import */ var _define__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define */ "../../../node_modules/d3-color/src/define.js"); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-color/src/color.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-color/src/math.js"); + + + + +var A = -0.14861, + B = +1.78277, + C = -0.29227, + D = -0.90649, + E = +1.97294, + ED = E * D, + EB = E * B, + BC_DA = B * C - D * A; + +function cubehelixConvert(o) { + if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); + if (!(o instanceof _color__WEBPACK_IMPORTED_MODULE_1__["Rgb"])) o = Object(_color__WEBPACK_IMPORTED_MODULE_1__["rgbConvert"])(o); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), + bl = b - l, + k = (E * (g - l) - C * bl) / D, + s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 + h = s ? Math.atan2(k, bl) * _math__WEBPACK_IMPORTED_MODULE_2__["rad2deg"] - 120 : NaN; + return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); +} + +function cubehelix(h, s, l, opacity) { + return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); +} + +function Cubehelix(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Cubehelix, cubehelix, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(_color__WEBPACK_IMPORTED_MODULE_1__["Color"], { + brighter: function(k) { + k = k == null ? _color__WEBPACK_IMPORTED_MODULE_1__["brighter"] : Math.pow(_color__WEBPACK_IMPORTED_MODULE_1__["brighter"], k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? _color__WEBPACK_IMPORTED_MODULE_1__["darker"] : Math.pow(_color__WEBPACK_IMPORTED_MODULE_1__["darker"], k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = isNaN(this.h) ? 0 : (this.h + 120) * _math__WEBPACK_IMPORTED_MODULE_2__["deg2rad"], + l = +this.l, + a = isNaN(this.s) ? 0 : this.s * l * (1 - l), + cosh = Math.cos(h), + sinh = Math.sin(h); + return new _color__WEBPACK_IMPORTED_MODULE_1__["Rgb"]( + 255 * (l + a * (A * cosh + B * sinh)), + 255 * (l + a * (C * cosh + D * sinh)), + 255 * (l + a * (E * cosh)), + this.opacity + ); + } +})); + + +/***/ }), + +/***/ "../../../node_modules/d3-color/src/define.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-color/src/define.js ***! + \******************************************************************************************************/ +/*! exports provided: default, extend */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; }); +/* harmony default export */ __webpack_exports__["default"] = (function(constructor, factory, prototype) { + constructor.prototype = factory.prototype = prototype; + prototype.constructor = constructor; +}); + +function extend(parent, definition) { + var prototype = Object.create(parent.prototype); + for (var key in definition) prototype[key] = definition[key]; + return prototype; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-color/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-color/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: color, rgb, hsl, lab, hcl, lch, gray, cubehelix */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-color/src/color.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "color", function() { return _color__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rgb", function() { return _color__WEBPACK_IMPORTED_MODULE_0__["rgb"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hsl", function() { return _color__WEBPACK_IMPORTED_MODULE_0__["hsl"]; }); + +/* harmony import */ var _lab__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lab */ "../../../node_modules/d3-color/src/lab.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lab", function() { return _lab__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hcl", function() { return _lab__WEBPACK_IMPORTED_MODULE_1__["hcl"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lch", function() { return _lab__WEBPACK_IMPORTED_MODULE_1__["lch"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "gray", function() { return _lab__WEBPACK_IMPORTED_MODULE_1__["gray"]; }); + +/* harmony import */ var _cubehelix__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubehelix */ "../../../node_modules/d3-color/src/cubehelix.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cubehelix", function() { return _cubehelix__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-color/src/lab.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-color/src/lab.js ***! + \***************************************************************************************************/ +/*! exports provided: gray, default, Lab, lch, hcl, Hcl */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gray", function() { return gray; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return lab; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Lab", function() { return Lab; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lch", function() { return lch; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hcl", function() { return hcl; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Hcl", function() { return Hcl; }); +/* harmony import */ var _define__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define */ "../../../node_modules/d3-color/src/define.js"); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-color/src/color.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-color/src/math.js"); + + + + +// https://beta.observablehq.com/@mbostock/lab-and-rgb +var K = 18, + Xn = 0.96422, + Yn = 1, + Zn = 0.82521, + t0 = 4 / 29, + t1 = 6 / 29, + t2 = 3 * t1 * t1, + t3 = t1 * t1 * t1; + +function labConvert(o) { + if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); + if (o instanceof Hcl) { + if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity); + var h = o.h * _math__WEBPACK_IMPORTED_MODULE_2__["deg2rad"]; + return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); + } + if (!(o instanceof _color__WEBPACK_IMPORTED_MODULE_1__["Rgb"])) o = Object(_color__WEBPACK_IMPORTED_MODULE_1__["rgbConvert"])(o); + var r = rgb2lrgb(o.r), + g = rgb2lrgb(o.g), + b = rgb2lrgb(o.b), + y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z; + if (r === g && g === b) x = z = y; else { + x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn); + z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn); + } + return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); +} + +function gray(l, opacity) { + return new Lab(l, 0, 0, opacity == null ? 1 : opacity); +} + +function lab(l, a, b, opacity) { + return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); +} + +function Lab(l, a, b, opacity) { + this.l = +l; + this.a = +a; + this.b = +b; + this.opacity = +opacity; +} + +Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Lab, lab, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(_color__WEBPACK_IMPORTED_MODULE_1__["Color"], { + brighter: function(k) { + return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + darker: function(k) { + return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + rgb: function() { + var y = (this.l + 16) / 116, + x = isNaN(this.a) ? y : y + this.a / 500, + z = isNaN(this.b) ? y : y - this.b / 200; + x = Xn * lab2xyz(x); + y = Yn * lab2xyz(y); + z = Zn * lab2xyz(z); + return new _color__WEBPACK_IMPORTED_MODULE_1__["Rgb"]( + lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z), + lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), + lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z), + this.opacity + ); + } +})); + +function xyz2lab(t) { + return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; +} + +function lab2xyz(t) { + return t > t1 ? t * t * t : t2 * (t - t0); +} + +function lrgb2rgb(x) { + return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); +} + +function rgb2lrgb(x) { + return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); +} + +function hclConvert(o) { + if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); + if (!(o instanceof Lab)) o = labConvert(o); + if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity); + var h = Math.atan2(o.b, o.a) * _math__WEBPACK_IMPORTED_MODULE_2__["rad2deg"]; + return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); +} + +function lch(l, c, h, opacity) { + return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +} + +function hcl(h, c, l, opacity) { + return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +} + +function Hcl(h, c, l, opacity) { + this.h = +h; + this.c = +c; + this.l = +l; + this.opacity = +opacity; +} + +Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Hcl, hcl, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(_color__WEBPACK_IMPORTED_MODULE_1__["Color"], { + brighter: function(k) { + return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity); + }, + darker: function(k) { + return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity); + }, + rgb: function() { + return labConvert(this).rgb(); + } +})); + + +/***/ }), + +/***/ "../../../node_modules/d3-color/src/math.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-color/src/math.js ***! + \****************************************************************************************************/ +/*! exports provided: deg2rad, rad2deg */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deg2rad", function() { return deg2rad; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rad2deg", function() { return rad2deg; }); +var deg2rad = Math.PI / 180; +var rad2deg = 180 / Math.PI; + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/area.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/area.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(ring) { + var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1]; + while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; + return area; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/array.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/array.js ***! + \*******************************************************************************************************/ +/*! exports provided: slice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +var array = Array.prototype; + +var slice = array.slice; + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/ascending.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/ascending.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + return a - b; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/blur.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/blur.js ***! + \******************************************************************************************************/ +/*! exports provided: blurX, blurY */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blurX", function() { return blurX; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blurY", function() { return blurY; }); +// TODO Optimize edge cases. +// TODO Optimize index calculation. +// TODO Optimize arguments. +function blurX(source, target, r) { + var n = source.width, + m = source.height, + w = (r << 1) + 1; + for (var j = 0; j < m; ++j) { + for (var i = 0, sr = 0; i < n + r; ++i) { + if (i < n) { + sr += source.data[i + j * n]; + } + if (i >= r) { + if (i >= w) { + sr -= source.data[i - w + j * n]; + } + target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w); + } + } + } +} + +// TODO Optimize edge cases. +// TODO Optimize index calculation. +// TODO Optimize arguments. +function blurY(source, target, r) { + var n = source.width, + m = source.height, + w = (r << 1) + 1; + for (var i = 0; i < n; ++i) { + for (var j = 0, sr = 0; j < m + r; ++j) { + if (j < m) { + sr += source.data[i + j * n]; + } + if (j >= r) { + if (j >= w) { + sr -= source.data[i + (j - w) * n]; + } + target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w); + } + } + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/constant.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/constant.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/contains.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/contains.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(ring, hole) { + var i = -1, n = hole.length, c; + while (++i < n) if (c = ringContains(ring, hole[i])) return c; + return 0; +}); + +function ringContains(ring, point) { + var x = point[0], y = point[1], contains = -1; + for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) { + var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1]; + if (segmentContains(pi, pj, point)) return 0; + if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains; + } + return contains; +} + +function segmentContains(a, b, c) { + var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]); +} + +function collinear(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]); +} + +function within(p, q, r) { + return p <= q && q <= r || r <= q && q <= p; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/contours.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/contours.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-contour/src/array.js"); +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ascending */ "../../../node_modules/d3-contour/src/ascending.js"); +/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./area */ "../../../node_modules/d3-contour/src/area.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-contour/src/constant.js"); +/* harmony import */ var _contains__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contains */ "../../../node_modules/d3-contour/src/contains.js"); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./noop */ "../../../node_modules/d3-contour/src/noop.js"); + + + + + + + + +var cases = [ + [], + [[[1.0, 1.5], [0.5, 1.0]]], + [[[1.5, 1.0], [1.0, 1.5]]], + [[[1.5, 1.0], [0.5, 1.0]]], + [[[1.0, 0.5], [1.5, 1.0]]], + [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], + [[[1.0, 0.5], [1.0, 1.5]]], + [[[1.0, 0.5], [0.5, 1.0]]], + [[[0.5, 1.0], [1.0, 0.5]]], + [[[1.0, 1.5], [1.0, 0.5]]], + [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], + [[[1.5, 1.0], [1.0, 0.5]]], + [[[0.5, 1.0], [1.5, 1.0]]], + [[[1.0, 1.5], [1.5, 1.0]]], + [[[0.5, 1.0], [1.0, 1.5]]], + [] +]; + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var dx = 1, + dy = 1, + threshold = d3_array__WEBPACK_IMPORTED_MODULE_0__["thresholdSturges"], + smooth = smoothLinear; + + function contours(values) { + var tz = threshold(values); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + var domain = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["extent"])(values), start = domain[0], stop = domain[1]; + tz = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(start, stop, tz); + tz = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz); + } else { + tz = tz.slice().sort(_ascending__WEBPACK_IMPORTED_MODULE_2__["default"]); + } + + return tz.map(function(value) { + return contour(values, value); + }); + } + + // Accumulate, smooth contour rings, assign holes to exterior rings. + // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js + function contour(values, value) { + var polygons = [], + holes = []; + + isorings(values, value, function(ring) { + smooth(ring, values, value); + if (Object(_area__WEBPACK_IMPORTED_MODULE_3__["default"])(ring) > 0) polygons.push([ring]); + else holes.push(ring); + }); + + holes.forEach(function(hole) { + for (var i = 0, n = polygons.length, polygon; i < n; ++i) { + if (Object(_contains__WEBPACK_IMPORTED_MODULE_5__["default"])((polygon = polygons[i])[0], hole) !== -1) { + polygon.push(hole); + return; + } + } + }); + + return { + type: "MultiPolygon", + value: value, + coordinates: polygons + }; + } + + // Marching squares with isolines stitched into rings. + // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js + function isorings(values, value, callback) { + var fragmentByStart = new Array, + fragmentByEnd = new Array, + x, y, t0, t1, t2, t3; + + // Special case for the first row (y = -1, t2 = t3 = 0). + x = y = -1; + t1 = values[0] >= value; + cases[t1 << 1].forEach(stitch); + while (++x < dx - 1) { + t0 = t1, t1 = values[x + 1] >= value; + cases[t0 | t1 << 1].forEach(stitch); + } + cases[t1 << 0].forEach(stitch); + + // General case for the intermediate rows. + while (++y < dy - 1) { + x = -1; + t1 = values[y * dx + dx] >= value; + t2 = values[y * dx] >= value; + cases[t1 << 1 | t2 << 2].forEach(stitch); + while (++x < dx - 1) { + t0 = t1, t1 = values[y * dx + dx + x + 1] >= value; + t3 = t2, t2 = values[y * dx + x + 1] >= value; + cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch); + } + cases[t1 | t2 << 3].forEach(stitch); + } + + // Special case for the last row (y = dy - 1, t0 = t1 = 0). + x = -1; + t2 = values[y * dx] >= value; + cases[t2 << 2].forEach(stitch); + while (++x < dx - 1) { + t3 = t2, t2 = values[y * dx + x + 1] >= value; + cases[t2 << 2 | t3 << 3].forEach(stitch); + } + cases[t2 << 3].forEach(stitch); + + function stitch(line) { + var start = [line[0][0] + x, line[0][1] + y], + end = [line[1][0] + x, line[1][1] + y], + startIndex = index(start), + endIndex = index(end), + f, g; + if (f = fragmentByEnd[startIndex]) { + if (g = fragmentByStart[endIndex]) { + delete fragmentByEnd[f.end]; + delete fragmentByStart[g.start]; + if (f === g) { + f.ring.push(end); + callback(f.ring); + } else { + fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)}; + } + } else { + delete fragmentByEnd[f.end]; + f.ring.push(end); + fragmentByEnd[f.end = endIndex] = f; + } + } else if (f = fragmentByStart[endIndex]) { + if (g = fragmentByEnd[startIndex]) { + delete fragmentByStart[f.start]; + delete fragmentByEnd[g.end]; + if (f === g) { + f.ring.push(end); + callback(f.ring); + } else { + fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)}; + } + } else { + delete fragmentByStart[f.start]; + f.ring.unshift(start); + fragmentByStart[f.start = startIndex] = f; + } + } else { + fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]}; + } + } + } + + function index(point) { + return point[0] * 2 + point[1] * (dx + 1) * 4; + } + + function smoothLinear(ring, values, value) { + ring.forEach(function(point) { + var x = point[0], + y = point[1], + xt = x | 0, + yt = y | 0, + v0, + v1 = values[yt * dx + xt]; + if (x > 0 && x < dx && xt === x) { + v0 = values[yt * dx + xt - 1]; + point[0] = x + (value - v0) / (v1 - v0) - 0.5; + } + if (y > 0 && y < dy && yt === y) { + v0 = values[(yt - 1) * dx + xt]; + point[1] = y + (value - v0) / (v1 - v0) - 0.5; + } + }); + } + + contours.contour = contour; + + contours.size = function(_) { + if (!arguments.length) return [dx, dy]; + var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); + if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size"); + return dx = _0, dy = _1, contours; + }; + + contours.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_)) : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_), contours) : threshold; + }; + + contours.smooth = function(_) { + return arguments.length ? (smooth = _ ? smoothLinear : _noop__WEBPACK_IMPORTED_MODULE_6__["default"], contours) : smooth === smoothLinear; + }; + + return contours; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/density.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/density.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-contour/src/array.js"); +/* harmony import */ var _blur__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blur */ "../../../node_modules/d3-contour/src/blur.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-contour/src/constant.js"); +/* harmony import */ var _contours__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contours */ "../../../node_modules/d3-contour/src/contours.js"); + + + + + + +function defaultX(d) { + return d[0]; +} + +function defaultY(d) { + return d[1]; +} + +function defaultWeight() { + return 1; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var x = defaultX, + y = defaultY, + weight = defaultWeight, + dx = 960, + dy = 500, + r = 20, // blur radius + k = 2, // log2(grid cell size) + o = r * 3, // grid offset, to pad for blur + n = (dx + o * 2) >> k, // grid width + m = (dy + o * 2) >> k, // grid height + threshold = Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(20); + + function density(data) { + var values0 = new Float32Array(n * m), + values1 = new Float32Array(n * m); + + data.forEach(function(d, i, data) { + var xi = (+x(d, i, data) + o) >> k, + yi = (+y(d, i, data) + o) >> k, + wi = +weight(d, i, data); + if (xi >= 0 && xi < n && yi >= 0 && yi < m) { + values0[xi + yi * n] += wi; + } + }); + + // TODO Optimize. + Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurX"])({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); + Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurY"])({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); + Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurX"])({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); + Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurY"])({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); + Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurX"])({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); + Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurY"])({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); + + var tz = threshold(values0); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + var stop = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["max"])(values0); + tz = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(0, stop, tz); + tz = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(0, Math.floor(stop / tz) * tz, tz); + tz.shift(); + } + + return Object(_contours__WEBPACK_IMPORTED_MODULE_4__["default"])() + .thresholds(tz) + .size([n, m]) + (values0) + .map(transform); + } + + function transform(geometry) { + geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel. + geometry.coordinates.forEach(transformPolygon); + return geometry; + } + + function transformPolygon(coordinates) { + coordinates.forEach(transformRing); + } + + function transformRing(coordinates) { + coordinates.forEach(transformPoint); + } + + // TODO Optimize. + function transformPoint(coordinates) { + coordinates[0] = coordinates[0] * Math.pow(2, k) - o; + coordinates[1] = coordinates[1] * Math.pow(2, k) - o; + } + + function resize() { + o = r * 3; + n = (dx + o * 2) >> k; + m = (dy + o * 2) >> k; + return density; + } + + density.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : x; + }; + + density.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : y; + }; + + density.weight = function(_) { + return arguments.length ? (weight = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : weight; + }; + + density.size = function(_) { + if (!arguments.length) return [dx, dy]; + var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); + if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size"); + return dx = _0, dy = _1, resize(); + }; + + density.cellSize = function(_) { + if (!arguments.length) return 1 << k; + if (!((_ = +_) >= 1)) throw new Error("invalid cell size"); + return k = Math.floor(Math.log(_) / Math.LN2), resize(); + }; + + density.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(_array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_)) : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(_), density) : threshold; + }; + + density.bandwidth = function(_) { + if (!arguments.length) return Math.sqrt(r * (r + 1)); + if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth"); + return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize(); + }; + + return density; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/index.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/index.js ***! + \*******************************************************************************************************/ +/*! exports provided: contours, contourDensity */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _contours__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./contours */ "../../../node_modules/d3-contour/src/contours.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "contours", function() { return _contours__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _density__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./density */ "../../../node_modules/d3-contour/src/density.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "contourDensity", function() { return _density__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-contour/src/noop.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-contour/src/noop.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() {}); + + +/***/ }), + +/***/ "../../../node_modules/d3-dispatch/src/dispatch.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-dispatch/src/dispatch.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var noop = {value: function() {}}; + +function dispatch() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); + _[t] = []; + } + return new Dispatch(_); +} + +function Dispatch(_) { + this._ = _; +} + +function parseTypenames(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return {type: t, name: name}; + }); +} + +Dispatch.prototype = dispatch.prototype = { + constructor: Dispatch, + on: function(typename, callback) { + var _ = this._, + T = parseTypenames(typename + "", _), + t, + i = -1, + n = T.length; + + // If no callback was specified, return the callback of the given type and name. + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; + return; + } + + // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); + else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); + } + + return this; + }, + copy: function() { + var copy = {}, _ = this._; + for (var t in _) copy[t] = _[t].slice(); + return new Dispatch(copy); + }, + call: function(type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function(type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } +}; + +function get(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; + } + } +} + +function set(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + if (callback != null) type.push({name: name, value: callback}); + return type; +} + +/* harmony default export */ __webpack_exports__["default"] = (dispatch); + + +/***/ }), + +/***/ "../../../node_modules/d3-dispatch/src/index.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-dispatch/src/index.js ***! + \********************************************************************************************************/ +/*! exports provided: dispatch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dispatch */ "../../../node_modules/d3-dispatch/src/dispatch.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return _dispatch__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + + + + +/***/ }), + +/***/ "../../../node_modules/d3-drag/src/constant.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-drag/src/constant.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-drag/src/drag.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-drag/src/drag.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "../../../node_modules/d3-dispatch/src/index.js"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _nodrag__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nodrag */ "../../../node_modules/d3-drag/src/nodrag.js"); +/* harmony import */ var _noevent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./noevent */ "../../../node_modules/d3-drag/src/noevent.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-drag/src/constant.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./event */ "../../../node_modules/d3-drag/src/event.js"); + + + + + + + +// Ignore right-click, since that should open the context menu. +function defaultFilter() { + return !d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].button; +} + +function defaultContainer() { + return this.parentNode; +} + +function defaultSubject(d) { + return d == null ? {x: d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].x, y: d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].y} : d; +} + +function defaultTouchable() { + return "ontouchstart" in this; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var filter = defaultFilter, + container = defaultContainer, + subject = defaultSubject, + touchable = defaultTouchable, + gestures = {}, + listeners = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])("start", "drag", "end"), + active = 0, + mousedownx, + mousedowny, + mousemoving, + touchending, + clickDistance2 = 0; + + function drag(selection) { + selection + .on("mousedown.drag", mousedowned) + .filter(touchable) + .on("touchstart.drag", touchstarted) + .on("touchmove.drag", touchmoved) + .on("touchend.drag touchcancel.drag", touchended) + .style("touch-action", "none") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); + } + + function mousedowned() { + if (touchending || !filter.apply(this, arguments)) return; + var gesture = beforestart("mouse", container.apply(this, arguments), d3_selection__WEBPACK_IMPORTED_MODULE_1__["mouse"], this, arguments); + if (!gesture) return; + Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["select"])(d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); + Object(_nodrag__WEBPACK_IMPORTED_MODULE_2__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].view); + Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["nopropagation"])(); + mousemoving = false; + mousedownx = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].clientX; + mousedowny = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].clientY; + gesture("start"); + } + + function mousemoved() { + Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["default"])(); + if (!mousemoving) { + var dx = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].clientX - mousedownx, dy = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].clientY - mousedowny; + mousemoving = dx * dx + dy * dy > clickDistance2; + } + gestures.mouse("drag"); + } + + function mouseupped() { + Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["select"])(d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].view).on("mousemove.drag mouseup.drag", null); + Object(_nodrag__WEBPACK_IMPORTED_MODULE_2__["yesdrag"])(d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].view, mousemoving); + Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["default"])(); + gestures.mouse("end"); + } + + function touchstarted() { + if (!filter.apply(this, arguments)) return; + var touches = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].changedTouches, + c = container.apply(this, arguments), + n = touches.length, i, gesture; + + for (i = 0; i < n; ++i) { + if (gesture = beforestart(touches[i].identifier, c, d3_selection__WEBPACK_IMPORTED_MODULE_1__["touch"], this, arguments)) { + Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["nopropagation"])(); + gesture("start"); + } + } + } + + function touchmoved() { + var touches = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].changedTouches, + n = touches.length, i, gesture; + + for (i = 0; i < n; ++i) { + if (gesture = gestures[touches[i].identifier]) { + Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["default"])(); + gesture("drag"); + } + } + } + + function touchended() { + var touches = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].changedTouches, + n = touches.length, i, gesture; + + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! + for (i = 0; i < n; ++i) { + if (gesture = gestures[touches[i].identifier]) { + Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["nopropagation"])(); + gesture("end"); + } + } + } + + function beforestart(id, container, point, that, args) { + var p = point(container, id), s, dx, dy, + sublisteners = listeners.copy(); + + if (!Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["customEvent"])(new _event__WEBPACK_IMPORTED_MODULE_5__["default"](drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { + if ((d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].subject = s = subject.apply(that, args)) == null) return false; + dx = s.x - p[0] || 0; + dy = s.y - p[1] || 0; + return true; + })) return; + + return function gesture(type) { + var p0 = p, n; + switch (type) { + case "start": gestures[id] = gesture, n = active++; break; + case "end": delete gestures[id], --active; // nobreak + case "drag": p = point(container, id), n = active; break; + } + Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["customEvent"])(new _event__WEBPACK_IMPORTED_MODULE_5__["default"](drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); + }; + } + + drag.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(!!_), drag) : filter; + }; + + drag.container = function(_) { + return arguments.length ? (container = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_), drag) : container; + }; + + drag.subject = function(_) { + return arguments.length ? (subject = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_), drag) : subject; + }; + + drag.touchable = function(_) { + return arguments.length ? (touchable = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(!!_), drag) : touchable; + }; + + drag.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? drag : value; + }; + + drag.clickDistance = function(_) { + return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); + }; + + return drag; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-drag/src/event.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-drag/src/event.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DragEvent; }); +function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { + this.target = target; + this.type = type; + this.subject = subject; + this.identifier = id; + this.active = active; + this.x = x; + this.y = y; + this.dx = dx; + this.dy = dy; + this._ = dispatch; +} + +DragEvent.prototype.on = function() { + var value = this._.on.apply(this._, arguments); + return value === this._ ? this : value; +}; + + +/***/ }), + +/***/ "../../../node_modules/d3-drag/src/index.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-drag/src/index.js ***! + \****************************************************************************************************/ +/*! exports provided: drag, dragDisable, dragEnable */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _drag__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drag */ "../../../node_modules/d3-drag/src/drag.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drag", function() { return _drag__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _nodrag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nodrag */ "../../../node_modules/d3-drag/src/nodrag.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragDisable", function() { return _nodrag__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragEnable", function() { return _nodrag__WEBPACK_IMPORTED_MODULE_1__["yesdrag"]; }); + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-drag/src/nodrag.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-drag/src/nodrag.js ***! + \*****************************************************************************************************/ +/*! exports provided: default, yesdrag */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "yesdrag", function() { return yesdrag; }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _noevent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noevent */ "../../../node_modules/d3-drag/src/noevent.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(view) { + var root = view.document.documentElement, + selection = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["select"])(view).on("dragstart.drag", _noevent__WEBPACK_IMPORTED_MODULE_1__["default"], true); + if ("onselectstart" in root) { + selection.on("selectstart.drag", _noevent__WEBPACK_IMPORTED_MODULE_1__["default"], true); + } else { + root.__noselect = root.style.MozUserSelect; + root.style.MozUserSelect = "none"; + } +}); + +function yesdrag(view, noclick) { + var root = view.document.documentElement, + selection = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["select"])(view).on("dragstart.drag", null); + if (noclick) { + selection.on("click.drag", _noevent__WEBPACK_IMPORTED_MODULE_1__["default"], true); + setTimeout(function() { selection.on("click.drag", null); }, 0); + } + if ("onselectstart" in root) { + selection.on("selectstart.drag", null); + } else { + root.style.MozUserSelect = root.__noselect; + delete root.__noselect; + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-drag/src/noevent.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-drag/src/noevent.js ***! + \******************************************************************************************************/ +/*! exports provided: nopropagation, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nopropagation", function() { return nopropagation; }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); + + +function nopropagation() { + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].preventDefault(); + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-dsv/src/autoType.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-dsv/src/autoType.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return autoType; }); +function autoType(object) { + for (var key in object) { + var value = object[key].trim(), number; + if (!value) value = null; + else if (value === "true") value = true; + else if (value === "false") value = false; + else if (value === "NaN") value = NaN; + else if (!isNaN(number = +value)) value = number; + else if (/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/.test(value)) value = new Date(value); + else continue; + object[key] = value; + } + return object; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-dsv/src/csv.js": +/*!*************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-dsv/src/csv.js ***! + \*************************************************************************************************/ +/*! exports provided: csvParse, csvParseRows, csvFormat, csvFormatBody, csvFormatRows */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvParse", function() { return csvParse; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvParseRows", function() { return csvParseRows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvFormat", function() { return csvFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvFormatBody", function() { return csvFormatBody; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvFormatRows", function() { return csvFormatRows; }); +/* harmony import */ var _dsv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv */ "../../../node_modules/d3-dsv/src/dsv.js"); + + +var csv = Object(_dsv__WEBPACK_IMPORTED_MODULE_0__["default"])(","); + +var csvParse = csv.parse; +var csvParseRows = csv.parseRows; +var csvFormat = csv.format; +var csvFormatBody = csv.formatBody; +var csvFormatRows = csv.formatRows; + + +/***/ }), + +/***/ "../../../node_modules/d3-dsv/src/dsv.js": +/*!*************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-dsv/src/dsv.js ***! + \*************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var EOL = {}, + EOF = {}, + QUOTE = 34, + NEWLINE = 10, + RETURN = 13; + +function objectConverter(columns) { + return new Function("d", "return {" + columns.map(function(name, i) { + return JSON.stringify(name) + ": d[" + i + "]"; + }).join(",") + "}"); +} + +function customConverter(columns, f) { + var object = objectConverter(columns); + return function(row, i) { + return f(object(row), i, columns); + }; +} + +// Compute unique columns in order of discovery. +function inferColumns(rows) { + var columnSet = Object.create(null), + columns = []; + + rows.forEach(function(row) { + for (var column in row) { + if (!(column in columnSet)) { + columns.push(columnSet[column] = column); + } + } + }); + + return columns; +} + +function pad(value, width) { + var s = value + "", length = s.length; + return length < width ? new Array(width - length + 1).join(0) + s : s; +} + +function formatYear(year) { + return year < 0 ? "-" + pad(-year, 6) + : year > 9999 ? "+" + pad(year, 6) + : pad(year, 4); +} + +function formatDate(date) { + var hours = date.getUTCHours(), + minutes = date.getUTCMinutes(), + seconds = date.getUTCSeconds(), + milliseconds = date.getUTCMilliseconds(); + return isNaN(date) ? "Invalid Date" + : formatYear(date.getUTCFullYear(), 4) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2) + + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z" + : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z" + : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z" + : ""); +} + +/* harmony default export */ __webpack_exports__["default"] = (function(delimiter) { + var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), + DELIMITER = delimiter.charCodeAt(0); + + function parse(text, f) { + var convert, columns, rows = parseRows(text, function(row, i) { + if (convert) return convert(row, i - 1); + columns = row, convert = f ? customConverter(row, f) : objectConverter(row); + }); + rows.columns = columns || []; + return rows; + } + + function parseRows(text, f) { + var rows = [], // output rows + N = text.length, + I = 0, // current character index + n = 0, // current line number + t, // current token + eof = N <= 0, // current token followed by EOF? + eol = false; // current token followed by EOL? + + // Strip the trailing newline. + if (text.charCodeAt(N - 1) === NEWLINE) --N; + if (text.charCodeAt(N - 1) === RETURN) --N; + + function token() { + if (eof) return EOF; + if (eol) return eol = false, EOL; + + // Unescape quotes. + var i, j = I, c; + if (text.charCodeAt(j) === QUOTE) { + while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); + if ((i = I) >= N) eof = true; + else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; + else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } + return text.slice(j + 1, i - 1).replace(/""/g, "\""); + } + + // Find next delimiter or newline. + while (I < N) { + if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; + else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } + else if (c !== DELIMITER) continue; + return text.slice(j, i); + } + + // Return last token before EOF. + return eof = true, text.slice(j, N); + } + + while ((t = token()) !== EOF) { + var row = []; + while (t !== EOL && t !== EOF) row.push(t), t = token(); + if (f && (row = f(row, n++)) == null) continue; + rows.push(row); + } + + return rows; + } + + function preformatBody(rows, columns) { + return rows.map(function(row) { + return columns.map(function(column) { + return formatValue(row[column]); + }).join(delimiter); + }); + } + + function format(rows, columns) { + if (columns == null) columns = inferColumns(rows); + return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n"); + } + + function formatBody(rows, columns) { + if (columns == null) columns = inferColumns(rows); + return preformatBody(rows, columns).join("\n"); + } + + function formatRows(rows) { + return rows.map(formatRow).join("\n"); + } + + function formatRow(row) { + return row.map(formatValue).join(delimiter); + } + + function formatValue(value) { + return value == null ? "" + : value instanceof Date ? formatDate(value) + : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\"" + : value; + } + + return { + parse: parse, + parseRows: parseRows, + format: format, + formatBody: formatBody, + formatRows: formatRows + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-dsv/src/index.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-dsv/src/index.js ***! + \***************************************************************************************************/ +/*! exports provided: dsvFormat, csvParse, csvParseRows, csvFormat, csvFormatBody, csvFormatRows, tsvParse, tsvParseRows, tsvFormat, tsvFormatBody, tsvFormatRows, autoType */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _dsv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv */ "../../../node_modules/d3-dsv/src/dsv.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dsvFormat", function() { return _dsv__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _csv__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./csv */ "../../../node_modules/d3-dsv/src/csv.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvParse", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvParse"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvParseRows", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvParseRows"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormat", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormatBody", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvFormatBody"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormatRows", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvFormatRows"]; }); + +/* harmony import */ var _tsv__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tsv */ "../../../node_modules/d3-dsv/src/tsv.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvParse", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvParse"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvParseRows", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvParseRows"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormat", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormatBody", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvFormatBody"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormatRows", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvFormatRows"]; }); + +/* harmony import */ var _autoType__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./autoType */ "../../../node_modules/d3-dsv/src/autoType.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "autoType", function() { return _autoType__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-dsv/src/tsv.js": +/*!*************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-dsv/src/tsv.js ***! + \*************************************************************************************************/ +/*! exports provided: tsvParse, tsvParseRows, tsvFormat, tsvFormatBody, tsvFormatRows */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvParse", function() { return tsvParse; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvParseRows", function() { return tsvParseRows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvFormat", function() { return tsvFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvFormatBody", function() { return tsvFormatBody; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvFormatRows", function() { return tsvFormatRows; }); +/* harmony import */ var _dsv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv */ "../../../node_modules/d3-dsv/src/dsv.js"); + + +var tsv = Object(_dsv__WEBPACK_IMPORTED_MODULE_0__["default"])("\t"); + +var tsvParse = tsv.parse; +var tsvParseRows = tsv.parseRows; +var tsvFormat = tsv.format; +var tsvFormatBody = tsv.formatBody; +var tsvFormatRows = tsv.formatRows; + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/back.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/back.js ***! + \***************************************************************************************************/ +/*! exports provided: backIn, backOut, backInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "backIn", function() { return backIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "backOut", function() { return backOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "backInOut", function() { return backInOut; }); +var overshoot = 1.70158; + +var backIn = (function custom(s) { + s = +s; + + function backIn(t) { + return t * t * ((s + 1) * t - s); + } + + backIn.overshoot = custom; + + return backIn; +})(overshoot); + +var backOut = (function custom(s) { + s = +s; + + function backOut(t) { + return --t * t * ((s + 1) * t + s) + 1; + } + + backOut.overshoot = custom; + + return backOut; +})(overshoot); + +var backInOut = (function custom(s) { + s = +s; + + function backInOut(t) { + return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; + } + + backInOut.overshoot = custom; + + return backInOut; +})(overshoot); + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/bounce.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/bounce.js ***! + \*****************************************************************************************************/ +/*! exports provided: bounceIn, bounceOut, bounceInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bounceIn", function() { return bounceIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bounceOut", function() { return bounceOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bounceInOut", function() { return bounceInOut; }); +var b1 = 4 / 11, + b2 = 6 / 11, + b3 = 8 / 11, + b4 = 3 / 4, + b5 = 9 / 11, + b6 = 10 / 11, + b7 = 15 / 16, + b8 = 21 / 22, + b9 = 63 / 64, + b0 = 1 / b1 / b1; + +function bounceIn(t) { + return 1 - bounceOut(1 - t); +} + +function bounceOut(t) { + return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; +} + +function bounceInOut(t) { + return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/circle.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/circle.js ***! + \*****************************************************************************************************/ +/*! exports provided: circleIn, circleOut, circleInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleIn", function() { return circleIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleOut", function() { return circleOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleInOut", function() { return circleInOut; }); +function circleIn(t) { + return 1 - Math.sqrt(1 - t * t); +} + +function circleOut(t) { + return Math.sqrt(1 - --t * t); +} + +function circleInOut(t) { + return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/cubic.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/cubic.js ***! + \****************************************************************************************************/ +/*! exports provided: cubicIn, cubicOut, cubicInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cubicIn", function() { return cubicIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cubicOut", function() { return cubicOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cubicInOut", function() { return cubicInOut; }); +function cubicIn(t) { + return t * t * t; +} + +function cubicOut(t) { + return --t * t * t + 1; +} + +function cubicInOut(t) { + return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/elastic.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/elastic.js ***! + \******************************************************************************************************/ +/*! exports provided: elasticIn, elasticOut, elasticInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elasticIn", function() { return elasticIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elasticOut", function() { return elasticOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elasticInOut", function() { return elasticInOut; }); +var tau = 2 * Math.PI, + amplitude = 1, + period = 0.3; + +var elasticIn = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + + function elasticIn(t) { + return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p); + } + + elasticIn.amplitude = function(a) { return custom(a, p * tau); }; + elasticIn.period = function(p) { return custom(a, p); }; + + return elasticIn; +})(amplitude, period); + +var elasticOut = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + + function elasticOut(t) { + return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p); + } + + elasticOut.amplitude = function(a) { return custom(a, p * tau); }; + elasticOut.period = function(p) { return custom(a, p); }; + + return elasticOut; +})(amplitude, period); + +var elasticInOut = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + + function elasticInOut(t) { + return ((t = t * 2 - 1) < 0 + ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) + : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2; + } + + elasticInOut.amplitude = function(a) { return custom(a, p * tau); }; + elasticInOut.period = function(p) { return custom(a, p); }; + + return elasticInOut; +})(amplitude, period); + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/exp.js": +/*!**************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/exp.js ***! + \**************************************************************************************************/ +/*! exports provided: expIn, expOut, expInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expIn", function() { return expIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expOut", function() { return expOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expInOut", function() { return expInOut; }); +function expIn(t) { + return Math.pow(2, 10 * t - 10); +} + +function expOut(t) { + return 1 - Math.pow(2, -10 * t); +} + +function expInOut(t) { + return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/index.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/index.js ***! + \****************************************************************************************************/ +/*! exports provided: easeLinear, easeQuad, easeQuadIn, easeQuadOut, easeQuadInOut, easeCubic, easeCubicIn, easeCubicOut, easeCubicInOut, easePoly, easePolyIn, easePolyOut, easePolyInOut, easeSin, easeSinIn, easeSinOut, easeSinInOut, easeExp, easeExpIn, easeExpOut, easeExpInOut, easeCircle, easeCircleIn, easeCircleOut, easeCircleInOut, easeBounce, easeBounceIn, easeBounceOut, easeBounceInOut, easeBack, easeBackIn, easeBackOut, easeBackInOut, easeElastic, easeElasticIn, easeElasticOut, easeElasticInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-ease/src/linear.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeLinear", function() { return _linear__WEBPACK_IMPORTED_MODULE_0__["linear"]; }); + +/* harmony import */ var _quad__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./quad */ "../../../node_modules/d3-ease/src/quad.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuad", function() { return _quad__WEBPACK_IMPORTED_MODULE_1__["quadInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadIn", function() { return _quad__WEBPACK_IMPORTED_MODULE_1__["quadIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadOut", function() { return _quad__WEBPACK_IMPORTED_MODULE_1__["quadOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadInOut", function() { return _quad__WEBPACK_IMPORTED_MODULE_1__["quadInOut"]; }); + +/* harmony import */ var _cubic__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubic */ "../../../node_modules/d3-ease/src/cubic.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubic", function() { return _cubic__WEBPACK_IMPORTED_MODULE_2__["cubicInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicIn", function() { return _cubic__WEBPACK_IMPORTED_MODULE_2__["cubicIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicOut", function() { return _cubic__WEBPACK_IMPORTED_MODULE_2__["cubicOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicInOut", function() { return _cubic__WEBPACK_IMPORTED_MODULE_2__["cubicInOut"]; }); + +/* harmony import */ var _poly__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./poly */ "../../../node_modules/d3-ease/src/poly.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePoly", function() { return _poly__WEBPACK_IMPORTED_MODULE_3__["polyInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyIn", function() { return _poly__WEBPACK_IMPORTED_MODULE_3__["polyIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyOut", function() { return _poly__WEBPACK_IMPORTED_MODULE_3__["polyOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyInOut", function() { return _poly__WEBPACK_IMPORTED_MODULE_3__["polyInOut"]; }); + +/* harmony import */ var _sin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sin */ "../../../node_modules/d3-ease/src/sin.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSin", function() { return _sin__WEBPACK_IMPORTED_MODULE_4__["sinInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinIn", function() { return _sin__WEBPACK_IMPORTED_MODULE_4__["sinIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinOut", function() { return _sin__WEBPACK_IMPORTED_MODULE_4__["sinOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinInOut", function() { return _sin__WEBPACK_IMPORTED_MODULE_4__["sinInOut"]; }); + +/* harmony import */ var _exp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exp */ "../../../node_modules/d3-ease/src/exp.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExp", function() { return _exp__WEBPACK_IMPORTED_MODULE_5__["expInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpIn", function() { return _exp__WEBPACK_IMPORTED_MODULE_5__["expIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpOut", function() { return _exp__WEBPACK_IMPORTED_MODULE_5__["expOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpInOut", function() { return _exp__WEBPACK_IMPORTED_MODULE_5__["expInOut"]; }); + +/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./circle */ "../../../node_modules/d3-ease/src/circle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircle", function() { return _circle__WEBPACK_IMPORTED_MODULE_6__["circleInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleIn", function() { return _circle__WEBPACK_IMPORTED_MODULE_6__["circleIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleOut", function() { return _circle__WEBPACK_IMPORTED_MODULE_6__["circleOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleInOut", function() { return _circle__WEBPACK_IMPORTED_MODULE_6__["circleInOut"]; }); + +/* harmony import */ var _bounce__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bounce */ "../../../node_modules/d3-ease/src/bounce.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounce", function() { return _bounce__WEBPACK_IMPORTED_MODULE_7__["bounceOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceIn", function() { return _bounce__WEBPACK_IMPORTED_MODULE_7__["bounceIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceOut", function() { return _bounce__WEBPACK_IMPORTED_MODULE_7__["bounceOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceInOut", function() { return _bounce__WEBPACK_IMPORTED_MODULE_7__["bounceInOut"]; }); + +/* harmony import */ var _back__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./back */ "../../../node_modules/d3-ease/src/back.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBack", function() { return _back__WEBPACK_IMPORTED_MODULE_8__["backInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackIn", function() { return _back__WEBPACK_IMPORTED_MODULE_8__["backIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackOut", function() { return _back__WEBPACK_IMPORTED_MODULE_8__["backOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackInOut", function() { return _back__WEBPACK_IMPORTED_MODULE_8__["backInOut"]; }); + +/* harmony import */ var _elastic__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./elastic */ "../../../node_modules/d3-ease/src/elastic.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElastic", function() { return _elastic__WEBPACK_IMPORTED_MODULE_9__["elasticOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticIn", function() { return _elastic__WEBPACK_IMPORTED_MODULE_9__["elasticIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticOut", function() { return _elastic__WEBPACK_IMPORTED_MODULE_9__["elasticOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticInOut", function() { return _elastic__WEBPACK_IMPORTED_MODULE_9__["elasticInOut"]; }); + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/linear.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/linear.js ***! + \*****************************************************************************************************/ +/*! exports provided: linear */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linear", function() { return linear; }); +function linear(t) { + return +t; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/poly.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/poly.js ***! + \***************************************************************************************************/ +/*! exports provided: polyIn, polyOut, polyInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "polyIn", function() { return polyIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "polyOut", function() { return polyOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "polyInOut", function() { return polyInOut; }); +var exponent = 3; + +var polyIn = (function custom(e) { + e = +e; + + function polyIn(t) { + return Math.pow(t, e); + } + + polyIn.exponent = custom; + + return polyIn; +})(exponent); + +var polyOut = (function custom(e) { + e = +e; + + function polyOut(t) { + return 1 - Math.pow(1 - t, e); + } + + polyOut.exponent = custom; + + return polyOut; +})(exponent); + +var polyInOut = (function custom(e) { + e = +e; + + function polyInOut(t) { + return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; + } + + polyInOut.exponent = custom; + + return polyInOut; +})(exponent); + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/quad.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/quad.js ***! + \***************************************************************************************************/ +/*! exports provided: quadIn, quadOut, quadInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quadIn", function() { return quadIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quadOut", function() { return quadOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quadInOut", function() { return quadInOut; }); +function quadIn(t) { + return t * t; +} + +function quadOut(t) { + return t * (2 - t); +} + +function quadInOut(t) { + return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-ease/src/sin.js": +/*!**************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-ease/src/sin.js ***! + \**************************************************************************************************/ +/*! exports provided: sinIn, sinOut, sinInOut */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sinIn", function() { return sinIn; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sinOut", function() { return sinOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sinInOut", function() { return sinInOut; }); +var pi = Math.PI, + halfPi = pi / 2; + +function sinIn(t) { + return 1 - Math.cos(t * halfPi); +} + +function sinOut(t) { + return Math.sin(t * halfPi); +} + +function sinInOut(t) { + return (1 - Math.cos(pi * t)) / 2; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-fetch/src/blob.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-fetch/src/blob.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function responseBlob(response) { + if (!response.ok) throw new Error(response.status + " " + response.statusText); + return response.blob(); +} + +/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { + return fetch(input, init).then(responseBlob); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-fetch/src/buffer.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-fetch/src/buffer.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function responseArrayBuffer(response) { + if (!response.ok) throw new Error(response.status + " " + response.statusText); + return response.arrayBuffer(); +} + +/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { + return fetch(input, init).then(responseArrayBuffer); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-fetch/src/dsv.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-fetch/src/dsv.js ***! + \***************************************************************************************************/ +/*! exports provided: default, csv, tsv */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return dsv; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csv", function() { return csv; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsv", function() { return tsv; }); +/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dsv */ "../../../node_modules/d3-dsv/src/index.js"); +/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "../../../node_modules/d3-fetch/src/text.js"); + + + +function dsvParse(parse) { + return function(input, init, row) { + if (arguments.length === 2 && typeof init === "function") row = init, init = undefined; + return Object(_text__WEBPACK_IMPORTED_MODULE_1__["default"])(input, init).then(function(response) { + return parse(response, row); + }); + }; +} + +function dsv(delimiter, input, init, row) { + if (arguments.length === 3 && typeof init === "function") row = init, init = undefined; + var format = Object(d3_dsv__WEBPACK_IMPORTED_MODULE_0__["dsvFormat"])(delimiter); + return Object(_text__WEBPACK_IMPORTED_MODULE_1__["default"])(input, init).then(function(response) { + return format.parse(response, row); + }); +} + +var csv = dsvParse(d3_dsv__WEBPACK_IMPORTED_MODULE_0__["csvParse"]); +var tsv = dsvParse(d3_dsv__WEBPACK_IMPORTED_MODULE_0__["tsvParse"]); + + +/***/ }), + +/***/ "../../../node_modules/d3-fetch/src/image.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-fetch/src/image.js ***! + \*****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { + return new Promise(function(resolve, reject) { + var image = new Image; + for (var key in init) image[key] = init[key]; + image.onerror = reject; + image.onload = function() { resolve(image); }; + image.src = input; + }); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-fetch/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-fetch/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: blob, buffer, dsv, csv, tsv, image, json, text, xml, html, svg */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blob */ "../../../node_modules/d3-fetch/src/blob.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return _blob__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _buffer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buffer */ "../../../node_modules/d3-fetch/src/buffer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return _buffer__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _dsv__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dsv */ "../../../node_modules/d3-fetch/src/dsv.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dsv", function() { return _dsv__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csv", function() { return _dsv__WEBPACK_IMPORTED_MODULE_2__["csv"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsv", function() { return _dsv__WEBPACK_IMPORTED_MODULE_2__["tsv"]; }); + +/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./image */ "../../../node_modules/d3-fetch/src/image.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "image", function() { return _image__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./json */ "../../../node_modules/d3-fetch/src/json.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "json", function() { return _json__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./text */ "../../../node_modules/d3-fetch/src/text.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "text", function() { return _text__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _xml__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./xml */ "../../../node_modules/d3-fetch/src/xml.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "xml", function() { return _xml__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "html", function() { return _xml__WEBPACK_IMPORTED_MODULE_6__["html"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "svg", function() { return _xml__WEBPACK_IMPORTED_MODULE_6__["svg"]; }); + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-fetch/src/json.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-fetch/src/json.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function responseJson(response) { + if (!response.ok) throw new Error(response.status + " " + response.statusText); + return response.json(); +} + +/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { + return fetch(input, init).then(responseJson); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-fetch/src/text.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-fetch/src/text.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function responseText(response) { + if (!response.ok) throw new Error(response.status + " " + response.statusText); + return response.text(); +} + +/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { + return fetch(input, init).then(responseText); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-fetch/src/xml.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-fetch/src/xml.js ***! + \***************************************************************************************************/ +/*! exports provided: default, html, svg */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "html", function() { return html; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "svg", function() { return svg; }); +/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text */ "../../../node_modules/d3-fetch/src/text.js"); + + +function parser(type) { + return function(input, init) { + return Object(_text__WEBPACK_IMPORTED_MODULE_0__["default"])(input, init).then(function(text) { + return (new DOMParser).parseFromString(text, type); + }); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (parser("application/xml")); + +var html = parser("text/html"); + +var svg = parser("image/svg+xml"); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/center.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/center.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x, y) { + var nodes; + + if (x == null) x = 0; + if (y == null) y = 0; + + function force() { + var i, + n = nodes.length, + node, + sx = 0, + sy = 0; + + for (i = 0; i < n; ++i) { + node = nodes[i], sx += node.x, sy += node.y; + } + + for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { + node = nodes[i], node.x -= sx, node.y -= sy; + } + } + + force.initialize = function(_) { + nodes = _; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + return force; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/collide.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/collide.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-force/src/constant.js"); +/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "../../../node_modules/d3-force/src/jiggle.js"); +/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-quadtree */ "../../../node_modules/d3-quadtree/src/index.js"); + + + + +function x(d) { + return d.x + d.vx; +} + +function y(d) { + return d.y + d.vy; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(radius) { + var nodes, + radii, + strength = 1, + iterations = 1; + + if (typeof radius !== "function") radius = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(radius == null ? 1 : +radius); + + function force() { + var i, n = nodes.length, + tree, + node, + xi, + yi, + ri, + ri2; + + for (var k = 0; k < iterations; ++k) { + tree = Object(d3_quadtree__WEBPACK_IMPORTED_MODULE_2__["quadtree"])(nodes, x, y).visitAfter(prepare); + for (i = 0; i < n; ++i) { + node = nodes[i]; + ri = radii[node.index], ri2 = ri * ri; + xi = node.x + node.vx; + yi = node.y + node.vy; + tree.visit(apply); + } + } + + function apply(quad, x0, y0, x1, y1) { + var data = quad.data, rj = quad.r, r = ri + rj; + if (data) { + if (data.index > node.index) { + var x = xi - data.x - data.vx, + y = yi - data.y - data.vy, + l = x * x + y * y; + if (l < r * r) { + if (x === 0) x = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; + if (y === 0) y = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; + l = (r - (l = Math.sqrt(l))) / l * strength; + node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); + node.vy += (y *= l) * r; + data.vx -= x * (r = 1 - r); + data.vy -= y * r; + } + } + return; + } + return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; + } + } + + function prepare(quad) { + if (quad.data) return quad.r = radii[quad.data.index]; + for (var i = quad.r = 0; i < 4; ++i) { + if (quad[i] && quad[i].r > quad.r) { + quad.r = quad[i].r; + } + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + radii = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : radius; + }; + + return force; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/constant.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/constant.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: forceCenter, forceCollide, forceLink, forceManyBody, forceRadial, forceSimulation, forceX, forceY */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _center__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./center */ "../../../node_modules/d3-force/src/center.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceCenter", function() { return _center__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _collide__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./collide */ "../../../node_modules/d3-force/src/collide.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceCollide", function() { return _collide__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./link */ "../../../node_modules/d3-force/src/link.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceLink", function() { return _link__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _manyBody__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./manyBody */ "../../../node_modules/d3-force/src/manyBody.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceManyBody", function() { return _manyBody__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _radial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./radial */ "../../../node_modules/d3-force/src/radial.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceRadial", function() { return _radial__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simulation */ "../../../node_modules/d3-force/src/simulation.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceSimulation", function() { return _simulation__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _x__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./x */ "../../../node_modules/d3-force/src/x.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceX", function() { return _x__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _y__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./y */ "../../../node_modules/d3-force/src/y.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceY", function() { return _y__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/jiggle.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/jiggle.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + return (Math.random() - 0.5) * 1e-6; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/link.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/link.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-force/src/constant.js"); +/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "../../../node_modules/d3-force/src/jiggle.js"); +/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-collection */ "../../../node_modules/d3-collection/src/index.js"); + + + + +function index(d) { + return d.index; +} + +function find(nodeById, nodeId) { + var node = nodeById.get(nodeId); + if (!node) throw new Error("missing: " + nodeId); + return node; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(links) { + var id = index, + strength = defaultStrength, + strengths, + distance = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(30), + distances, + nodes, + count, + bias, + iterations = 1; + + if (links == null) links = []; + + function defaultStrength(link) { + return 1 / Math.min(count[link.source.index], count[link.target.index]); + } + + function force(alpha) { + for (var k = 0, n = links.length; k < iterations; ++k) { + for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { + link = links[i], source = link.source, target = link.target; + x = target.x + target.vx - source.x - source.vx || Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(); + y = target.y + target.vy - source.y - source.vy || Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(); + l = Math.sqrt(x * x + y * y); + l = (l - distances[i]) / l * alpha * strengths[i]; + x *= l, y *= l; + target.vx -= x * (b = bias[i]); + target.vy -= y * b; + source.vx += x * (b = 1 - b); + source.vy += y * b; + } + } + } + + function initialize() { + if (!nodes) return; + + var i, + n = nodes.length, + m = links.length, + nodeById = Object(d3_collection__WEBPACK_IMPORTED_MODULE_2__["map"])(nodes, id), + link; + + for (i = 0, count = new Array(n); i < m; ++i) { + link = links[i], link.index = i; + if (typeof link.source !== "object") link.source = find(nodeById, link.source); + if (typeof link.target !== "object") link.target = find(nodeById, link.target); + count[link.source.index] = (count[link.source.index] || 0) + 1; + count[link.target.index] = (count[link.target.index] || 0) + 1; + } + + for (i = 0, bias = new Array(m); i < m; ++i) { + link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); + } + + strengths = new Array(m), initializeStrength(); + distances = new Array(m), initializeDistance(); + } + + function initializeStrength() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + strengths[i] = +strength(links[i], i, links); + } + } + + function initializeDistance() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + distances[i] = +distance(links[i], i, links); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.links = function(_) { + return arguments.length ? (links = _, initialize(), force) : links; + }; + + force.id = function(_) { + return arguments.length ? (id = _, force) : id; + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initializeStrength(), force) : strength; + }; + + force.distance = function(_) { + return arguments.length ? (distance = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initializeDistance(), force) : distance; + }; + + return force; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/manyBody.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/manyBody.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-force/src/constant.js"); +/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "../../../node_modules/d3-force/src/jiggle.js"); +/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-quadtree */ "../../../node_modules/d3-quadtree/src/index.js"); +/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simulation */ "../../../node_modules/d3-force/src/simulation.js"); + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var nodes, + node, + alpha, + strength = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(-30), + strengths, + distanceMin2 = 1, + distanceMax2 = Infinity, + theta2 = 0.81; + + function force(_) { + var i, n = nodes.length, tree = Object(d3_quadtree__WEBPACK_IMPORTED_MODULE_2__["quadtree"])(nodes, _simulation__WEBPACK_IMPORTED_MODULE_3__["x"], _simulation__WEBPACK_IMPORTED_MODULE_3__["y"]).visitAfter(accumulate); + for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + strengths = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); + } + + function accumulate(quad) { + var strength = 0, q, c, weight = 0, x, y, i; + + // For internal nodes, accumulate forces from child quadrants. + if (quad.length) { + for (x = y = i = 0; i < 4; ++i) { + if ((q = quad[i]) && (c = Math.abs(q.value))) { + strength += q.value, weight += c, x += c * q.x, y += c * q.y; + } + } + quad.x = x / weight; + quad.y = y / weight; + } + + // For leaf nodes, accumulate forces from coincident quadrants. + else { + q = quad; + q.x = q.data.x; + q.y = q.data.y; + do strength += strengths[q.data.index]; + while (q = q.next); + } + + quad.value = strength; + } + + function apply(quad, x1, _, x2) { + if (!quad.value) return true; + + var x = quad.x - node.x, + y = quad.y - node.y, + w = x2 - x1, + l = x * x + y * y; + + // Apply the Barnes-Hut approximation if possible. + // Limit forces for very close nodes; randomize direction if coincident. + if (w * w / theta2 < l) { + if (l < distanceMax2) { + if (x === 0) x = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; + if (y === 0) y = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + node.vx += x * quad.value * alpha / l; + node.vy += y * quad.value * alpha / l; + } + return true; + } + + // Otherwise, process points directly. + else if (quad.length || l >= distanceMax2) return; + + // Limit forces for very close nodes; randomize direction if coincident. + if (quad.data !== node || quad.next) { + if (x === 0) x = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; + if (y === 0) y = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + } + + do if (quad.data !== node) { + w = strengths[quad.data.index] * alpha / l; + node.vx += x * w; + node.vy += y * w; + } while (quad = quad.next); + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; + }; + + force.distanceMin = function(_) { + return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); + }; + + force.distanceMax = function(_) { + return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); + }; + + force.theta = function(_) { + return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); + }; + + return force; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/radial.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/radial.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-force/src/constant.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(radius, x, y) { + var nodes, + strength = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), + strengths, + radiuses; + + if (typeof radius !== "function") radius = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+radius); + if (x == null) x = 0; + if (y == null) y = 0; + + function force(alpha) { + for (var i = 0, n = nodes.length; i < n; ++i) { + var node = nodes[i], + dx = node.x - x || 1e-6, + dy = node.y - y || 1e-6, + r = Math.sqrt(dx * dx + dy * dy), + k = (radiuses[i] - r) * strengths[i] * alpha / r; + node.vx += dx * k; + node.vy += dy * k; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + radiuses = new Array(n); + for (i = 0; i < n; ++i) { + radiuses[i] = +radius(nodes[i], i, nodes); + strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _, initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : radius; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + return force; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/simulation.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/simulation.js ***! + \**********************************************************************************************************/ +/*! exports provided: x, y, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return x; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return y; }); +/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "../../../node_modules/d3-dispatch/src/index.js"); +/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-collection */ "../../../node_modules/d3-collection/src/index.js"); +/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-timer */ "../../../node_modules/d3-timer/src/index.js"); + + + + +function x(d) { + return d.x; +} + +function y(d) { + return d.y; +} + +var initialRadius = 10, + initialAngle = Math.PI * (3 - Math.sqrt(5)); + +/* harmony default export */ __webpack_exports__["default"] = (function(nodes) { + var simulation, + alpha = 1, + alphaMin = 0.001, + alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), + alphaTarget = 0, + velocityDecay = 0.6, + forces = Object(d3_collection__WEBPACK_IMPORTED_MODULE_1__["map"])(), + stepper = Object(d3_timer__WEBPACK_IMPORTED_MODULE_2__["timer"])(step), + event = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])("tick", "end"); + + if (nodes == null) nodes = []; + + function step() { + tick(); + event.call("tick", simulation); + if (alpha < alphaMin) { + stepper.stop(); + event.call("end", simulation); + } + } + + function tick(iterations) { + var i, n = nodes.length, node; + + if (iterations === undefined) iterations = 1; + + for (var k = 0; k < iterations; ++k) { + alpha += (alphaTarget - alpha) * alphaDecay; + + forces.each(function (force) { + force(alpha); + }); + + for (i = 0; i < n; ++i) { + node = nodes[i]; + if (node.fx == null) node.x += node.vx *= velocityDecay; + else node.x = node.fx, node.vx = 0; + if (node.fy == null) node.y += node.vy *= velocityDecay; + else node.y = node.fy, node.vy = 0; + } + } + + return simulation; + } + + function initializeNodes() { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.index = i; + if (node.fx != null) node.x = node.fx; + if (node.fy != null) node.y = node.fy; + if (isNaN(node.x) || isNaN(node.y)) { + var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; + node.x = radius * Math.cos(angle); + node.y = radius * Math.sin(angle); + } + if (isNaN(node.vx) || isNaN(node.vy)) { + node.vx = node.vy = 0; + } + } + } + + function initializeForce(force) { + if (force.initialize) force.initialize(nodes); + return force; + } + + initializeNodes(); + + return simulation = { + tick: tick, + + restart: function() { + return stepper.restart(step), simulation; + }, + + stop: function() { + return stepper.stop(), simulation; + }, + + nodes: function(_) { + return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes; + }, + + alpha: function(_) { + return arguments.length ? (alpha = +_, simulation) : alpha; + }, + + alphaMin: function(_) { + return arguments.length ? (alphaMin = +_, simulation) : alphaMin; + }, + + alphaDecay: function(_) { + return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; + }, + + alphaTarget: function(_) { + return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; + }, + + velocityDecay: function(_) { + return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; + }, + + force: function(name, _) { + return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); + }, + + find: function(x, y, radius) { + var i = 0, + n = nodes.length, + dx, + dy, + d2, + node, + closest; + + if (radius == null) radius = Infinity; + else radius *= radius; + + for (i = 0; i < n; ++i) { + node = nodes[i]; + dx = x - node.x; + dy = y - node.y; + d2 = dx * dx + dy * dy; + if (d2 < radius) closest = node, radius = d2; + } + + return closest; + }, + + on: function(name, _) { + return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); + } + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/x.js": +/*!*************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/x.js ***! + \*************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-force/src/constant.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + var strength = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), + nodes, + strengths, + xz; + + if (typeof x !== "function") x = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(x == null ? 0 : +x); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + xz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; + }; + + force.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : x; + }; + + return force; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-force/src/y.js": +/*!*************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-force/src/y.js ***! + \*************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-force/src/constant.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(y) { + var strength = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), + nodes, + strengths, + yz; + + if (typeof y !== "function") y = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(y == null ? 0 : +y); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + yz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; + }; + + force.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : y; + }; + + return force; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/defaultLocale.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/defaultLocale.js ***! + \**************************************************************************************************************/ +/*! exports provided: format, formatPrefix, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "format", function() { return format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatPrefix", function() { return formatPrefix; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return defaultLocale; }); +/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale */ "../../../node_modules/d3-format/src/locale.js"); + + +var locale; +var format; +var formatPrefix; + +defaultLocale({ + decimal: ".", + thousands: ",", + grouping: [3], + currency: ["$", ""] +}); + +function defaultLocale(definition) { + locale = Object(_locale__WEBPACK_IMPORTED_MODULE_0__["default"])(definition); + format = locale.format; + formatPrefix = locale.formatPrefix; + return locale; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/exponent.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/exponent.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _formatDecimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal */ "../../../node_modules/d3-format/src/formatDecimal.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return x = Object(_formatDecimal__WEBPACK_IMPORTED_MODULE_0__["default"])(Math.abs(x)), x ? x[1] : NaN; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/formatDecimal.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/formatDecimal.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// Computes the decimal coefficient and exponent of the specified number x with +// significant digits p, where x is positive and p is in [1, 21] or undefined. +// For example, formatDecimal(1.23) returns ["123", 0]. +/* harmony default export */ __webpack_exports__["default"] = (function(x, p) { + if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity + var i, coefficient = x.slice(0, i); + + // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ + // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). + return [ + coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, + +x.slice(i + 1) + ]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/formatGroup.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/formatGroup.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(grouping, thousands) { + return function(value, width) { + var i = value.length, + t = [], + j = 0, + g = grouping[0], + length = 0; + + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length); + t.push(value.substring(i -= g, i + g)); + if ((length += g + 1) > width) break; + g = grouping[j = (j + 1) % grouping.length]; + } + + return t.reverse().join(thousands); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/formatNumerals.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/formatNumerals.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(numerals) { + return function(value) { + return value.replace(/[0-9]/g, function(i) { + return numerals[+i]; + }); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/formatPrefixAuto.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/formatPrefixAuto.js ***! + \*****************************************************************************************************************/ +/*! exports provided: prefixExponent, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prefixExponent", function() { return prefixExponent; }); +/* harmony import */ var _formatDecimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal */ "../../../node_modules/d3-format/src/formatDecimal.js"); + + +var prefixExponent; + +/* harmony default export */ __webpack_exports__["default"] = (function(x, p) { + var d = Object(_formatDecimal__WEBPACK_IMPORTED_MODULE_0__["default"])(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1], + i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, + n = coefficient.length; + return i === n ? coefficient + : i > n ? coefficient + new Array(i - n + 1).join("0") + : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) + : "0." + new Array(1 - i).join("0") + Object(_formatDecimal__WEBPACK_IMPORTED_MODULE_0__["default"])(x, Math.max(0, p + i - 1))[0]; // less than 1y! +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/formatRounded.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/formatRounded.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _formatDecimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal */ "../../../node_modules/d3-format/src/formatDecimal.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(x, p) { + var d = Object(_formatDecimal__WEBPACK_IMPORTED_MODULE_0__["default"])(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1]; + return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient + : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) + : coefficient + new Array(exponent - coefficient.length + 2).join("0"); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/formatSpecifier.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/formatSpecifier.js ***! + \****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return formatSpecifier; }); +// [[fill]align][sign][symbol][0][width][,][.precision][~][type] +var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; + +function formatSpecifier(specifier) { + return new FormatSpecifier(specifier); +} + +formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof + +function FormatSpecifier(specifier) { + if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); + var match; + this.fill = match[1] || " "; + this.align = match[2] || ">"; + this.sign = match[3] || "-"; + this.symbol = match[4] || ""; + this.zero = !!match[5]; + this.width = match[6] && +match[6]; + this.comma = !!match[7]; + this.precision = match[8] && +match[8].slice(1); + this.trim = !!match[9]; + this.type = match[10] || ""; +} + +FormatSpecifier.prototype.toString = function() { + return this.fill + + this.align + + this.sign + + this.symbol + + (this.zero ? "0" : "") + + (this.width == null ? "" : Math.max(1, this.width | 0)) + + (this.comma ? "," : "") + + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) + + (this.trim ? "~" : "") + + this.type; +}; + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/formatTrim.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/formatTrim.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. +/* harmony default export */ __webpack_exports__["default"] = (function(s) { + out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { + switch (s[i]) { + case ".": i0 = i1 = i; break; + case "0": if (i0 === 0) i0 = i; i1 = i; break; + default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break; + } + } + return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/formatTypes.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/formatTypes.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _formatPrefixAuto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatPrefixAuto */ "../../../node_modules/d3-format/src/formatPrefixAuto.js"); +/* harmony import */ var _formatRounded__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatRounded */ "../../../node_modules/d3-format/src/formatRounded.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = ({ + "%": function(x, p) { return (x * 100).toFixed(p); }, + "b": function(x) { return Math.round(x).toString(2); }, + "c": function(x) { return x + ""; }, + "d": function(x) { return Math.round(x).toString(10); }, + "e": function(x, p) { return x.toExponential(p); }, + "f": function(x, p) { return x.toFixed(p); }, + "g": function(x, p) { return x.toPrecision(p); }, + "o": function(x) { return Math.round(x).toString(8); }, + "p": function(x, p) { return Object(_formatRounded__WEBPACK_IMPORTED_MODULE_1__["default"])(x * 100, p); }, + "r": _formatRounded__WEBPACK_IMPORTED_MODULE_1__["default"], + "s": _formatPrefixAuto__WEBPACK_IMPORTED_MODULE_0__["default"], + "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, + "x": function(x) { return Math.round(x).toString(16); } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/identity.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/identity.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return x; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/index.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/index.js ***! + \******************************************************************************************************/ +/*! exports provided: formatDefaultLocale, format, formatPrefix, formatLocale, formatSpecifier, precisionFixed, precisionPrefix, precisionRound */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _defaultLocale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale */ "../../../node_modules/d3-format/src/defaultLocale.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatDefaultLocale", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "format", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["format"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatPrefix", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["formatPrefix"]; }); + +/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale */ "../../../node_modules/d3-format/src/locale.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatLocale", function() { return _locale__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _formatSpecifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatSpecifier */ "../../../node_modules/d3-format/src/formatSpecifier.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatSpecifier", function() { return _formatSpecifier__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _precisionFixed__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./precisionFixed */ "../../../node_modules/d3-format/src/precisionFixed.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionFixed", function() { return _precisionFixed__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _precisionPrefix__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./precisionPrefix */ "../../../node_modules/d3-format/src/precisionPrefix.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionPrefix", function() { return _precisionPrefix__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _precisionRound__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./precisionRound */ "../../../node_modules/d3-format/src/precisionRound.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionRound", function() { return _precisionRound__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/locale.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/locale.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _exponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent */ "../../../node_modules/d3-format/src/exponent.js"); +/* harmony import */ var _formatGroup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatGroup */ "../../../node_modules/d3-format/src/formatGroup.js"); +/* harmony import */ var _formatNumerals__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatNumerals */ "../../../node_modules/d3-format/src/formatNumerals.js"); +/* harmony import */ var _formatSpecifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./formatSpecifier */ "../../../node_modules/d3-format/src/formatSpecifier.js"); +/* harmony import */ var _formatTrim__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./formatTrim */ "../../../node_modules/d3-format/src/formatTrim.js"); +/* harmony import */ var _formatTypes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatTypes */ "../../../node_modules/d3-format/src/formatTypes.js"); +/* harmony import */ var _formatPrefixAuto__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./formatPrefixAuto */ "../../../node_modules/d3-format/src/formatPrefixAuto.js"); +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./identity */ "../../../node_modules/d3-format/src/identity.js"); + + + + + + + + + +var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; + +/* harmony default export */ __webpack_exports__["default"] = (function(locale) { + var group = locale.grouping && locale.thousands ? Object(_formatGroup__WEBPACK_IMPORTED_MODULE_1__["default"])(locale.grouping, locale.thousands) : _identity__WEBPACK_IMPORTED_MODULE_7__["default"], + currency = locale.currency, + decimal = locale.decimal, + numerals = locale.numerals ? Object(_formatNumerals__WEBPACK_IMPORTED_MODULE_2__["default"])(locale.numerals) : _identity__WEBPACK_IMPORTED_MODULE_7__["default"], + percent = locale.percent || "%"; + + function newFormat(specifier) { + specifier = Object(_formatSpecifier__WEBPACK_IMPORTED_MODULE_3__["default"])(specifier); + + var fill = specifier.fill, + align = specifier.align, + sign = specifier.sign, + symbol = specifier.symbol, + zero = specifier.zero, + width = specifier.width, + comma = specifier.comma, + precision = specifier.precision, + trim = specifier.trim, + type = specifier.type; + + // The "n" type is an alias for ",g". + if (type === "n") comma = true, type = "g"; + + // The "" type, and any invalid type, is an alias for ".12~g". + else if (!_formatTypes__WEBPACK_IMPORTED_MODULE_5__["default"][type]) precision == null && (precision = 12), trim = true, type = "g"; + + // If zero fill is specified, padding goes after sign and before digits. + if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; + + // Compute the prefix and suffix. + // For SI-prefix, the suffix is lazily computed. + var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", + suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : ""; + + // What format function should we use? + // Is this an integer type? + // Can this type generate exponential notation? + var formatType = _formatTypes__WEBPACK_IMPORTED_MODULE_5__["default"][type], + maybeSuffix = /[defgprs%]/.test(type); + + // Set the default precision if not specified, + // or clamp the specified precision to the supported range. + // For significant precision, it must be in [1, 21]. + // For fixed precision, it must be in [0, 20]. + precision = precision == null ? 6 + : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) + : Math.max(0, Math.min(20, precision)); + + function format(value) { + var valuePrefix = prefix, + valueSuffix = suffix, + i, n, c; + + if (type === "c") { + valueSuffix = formatType(value) + valueSuffix; + value = ""; + } else { + value = +value; + + // Perform the initial formatting. + var valueNegative = value < 0; + value = formatType(Math.abs(value), precision); + + // Trim insignificant zeros. + if (trim) value = Object(_formatTrim__WEBPACK_IMPORTED_MODULE_4__["default"])(value); + + // If a negative value rounds to zero during formatting, treat as positive. + if (valueNegative && +value === 0) valueNegative = false; + + // Compute the prefix and suffix. + valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; + valueSuffix = (type === "s" ? prefixes[8 + _formatPrefixAuto__WEBPACK_IMPORTED_MODULE_6__["prefixExponent"] / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); + + // Break the formatted value into the integer “value” part that can be + // grouped, and fractional or exponential “suffix” part that is not. + if (maybeSuffix) { + i = -1, n = value.length; + while (++i < n) { + if (c = value.charCodeAt(i), 48 > c || c > 57) { + valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; + value = value.slice(0, i); + break; + } + } + } + } + + // If the fill character is not "0", grouping is applied before padding. + if (comma && !zero) value = group(value, Infinity); + + // Compute the padding. + var length = valuePrefix.length + value.length + valueSuffix.length, + padding = length < width ? new Array(width - length + 1).join(fill) : ""; + + // If the fill character is "0", grouping is applied after padding. + if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; + + // Reconstruct the final output based on the desired alignment. + switch (align) { + case "<": value = valuePrefix + value + valueSuffix + padding; break; + case "=": value = valuePrefix + padding + value + valueSuffix; break; + case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; + default: value = padding + valuePrefix + value + valueSuffix; break; + } + + return numerals(value); + } + + format.toString = function() { + return specifier + ""; + }; + + return format; + } + + function formatPrefix(specifier, value) { + var f = newFormat((specifier = Object(_formatSpecifier__WEBPACK_IMPORTED_MODULE_3__["default"])(specifier), specifier.type = "f", specifier)), + e = Math.max(-8, Math.min(8, Math.floor(Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(value) / 3))) * 3, + k = Math.pow(10, -e), + prefix = prefixes[8 + e / 3]; + return function(value) { + return f(k * value) + prefix; + }; + } + + return { + format: newFormat, + formatPrefix: formatPrefix + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/precisionFixed.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/precisionFixed.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _exponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent */ "../../../node_modules/d3-format/src/exponent.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(step) { + return Math.max(0, -Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(Math.abs(step))); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/precisionPrefix.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/precisionPrefix.js ***! + \****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _exponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent */ "../../../node_modules/d3-format/src/exponent.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(step, value) { + return Math.max(0, Math.max(-8, Math.min(8, Math.floor(Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(value) / 3))) * 3 - Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(Math.abs(step))); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-format/src/precisionRound.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-format/src/precisionRound.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _exponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent */ "../../../node_modules/d3-format/src/exponent.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(step, max) { + step = Math.abs(step), max = Math.abs(max) - step; + return Math.max(0, Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(max) - Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(step)) + 1; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/adder.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/adder.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// Adds floating point numbers with twice the normal precision. +// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and +// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) +// 305–363 (1997). +// Code adapted from GeographicLib by Charles F. F. Karney, +// http://geographiclib.sourceforge.net/ + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return new Adder; +}); + +function Adder() { + this.reset(); +} + +Adder.prototype = { + constructor: Adder, + reset: function() { + this.s = // rounded value + this.t = 0; // exact error + }, + add: function(y) { + add(temp, y, this.t); + add(this, temp.s, this.s); + if (this.s) this.t += temp.t; + else this.s = temp.t; + }, + valueOf: function() { + return this.s; + } +}; + +var temp = new Adder; + +function add(adder, a, b) { + var x = adder.s = a + b, + bv = x - a, + av = x - bv; + adder.t = (a - av) + (b - bv); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/area.js": +/*!**************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/area.js ***! + \**************************************************************************************************/ +/*! exports provided: areaRingSum, areaStream, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "areaRingSum", function() { return areaRingSum; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "areaStream", function() { return areaStream; }); +/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder */ "../../../node_modules/d3-geo/src/adder.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./noop */ "../../../node_modules/d3-geo/src/noop.js"); +/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream */ "../../../node_modules/d3-geo/src/stream.js"); + + + + + +var areaRingSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(); + +var areaSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), + lambda00, + phi00, + lambda0, + cosPhi0, + sinPhi0; + +var areaStream = { + point: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + lineStart: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + lineEnd: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + polygonStart: function() { + areaRingSum.reset(); + areaStream.lineStart = areaRingStart; + areaStream.lineEnd = areaRingEnd; + }, + polygonEnd: function() { + var areaRing = +areaRingSum; + areaSum.add(areaRing < 0 ? _math__WEBPACK_IMPORTED_MODULE_1__["tau"] + areaRing : areaRing); + this.lineStart = this.lineEnd = this.point = _noop__WEBPACK_IMPORTED_MODULE_2__["default"]; + }, + sphere: function() { + areaSum.add(_math__WEBPACK_IMPORTED_MODULE_1__["tau"]); + } +}; + +function areaRingStart() { + areaStream.point = areaPointFirst; +} + +function areaRingEnd() { + areaPoint(lambda00, phi00); +} + +function areaPointFirst(lambda, phi) { + areaStream.point = areaPoint; + lambda00 = lambda, phi00 = phi; + lambda *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"]; + lambda0 = lambda, cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi = phi / 2 + _math__WEBPACK_IMPORTED_MODULE_1__["quarterPi"]), sinPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi); +} + +function areaPoint(lambda, phi) { + lambda *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"]; + phi = phi / 2 + _math__WEBPACK_IMPORTED_MODULE_1__["quarterPi"]; // half the angular distance from south pole + + // Spherical excess E for a spherical triangle with vertices: south pole, + // previous point, current point. Uses a formula derived from Cagnoli’s + // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). + var dLambda = lambda - lambda0, + sdLambda = dLambda >= 0 ? 1 : -1, + adLambda = sdLambda * dLambda, + cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi), + sinPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), + k = sinPhi0 * sinPhi, + u = cosPhi0 * cosPhi + k * Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(adLambda), + v = k * sdLambda * Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(adLambda); + areaRingSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(v, u)); + + // Advance the previous points. + lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(object) { + areaSum.reset(); + Object(_stream__WEBPACK_IMPORTED_MODULE_3__["default"])(object, areaStream); + return areaSum * 2; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/bounds.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/bounds.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder */ "../../../node_modules/d3-geo/src/adder.js"); +/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area */ "../../../node_modules/d3-geo/src/area.js"); +/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cartesian */ "../../../node_modules/d3-geo/src/cartesian.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stream */ "../../../node_modules/d3-geo/src/stream.js"); + + + + + + +var lambda0, phi0, lambda1, phi1, // bounds + lambda2, // previous lambda-coordinate + lambda00, phi00, // first point + p0, // previous 3D point + deltaSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), + ranges, + range; + +var boundsStream = { + point: boundsPoint, + lineStart: boundsLineStart, + lineEnd: boundsLineEnd, + polygonStart: function() { + boundsStream.point = boundsRingPoint; + boundsStream.lineStart = boundsRingStart; + boundsStream.lineEnd = boundsRingEnd; + deltaSum.reset(); + _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].polygonStart(); + }, + polygonEnd: function() { + _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].polygonEnd(); + boundsStream.point = boundsPoint; + boundsStream.lineStart = boundsLineStart; + boundsStream.lineEnd = boundsLineEnd; + if (_area__WEBPACK_IMPORTED_MODULE_1__["areaRingSum"] < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90); + else if (deltaSum > _math__WEBPACK_IMPORTED_MODULE_3__["epsilon"]) phi1 = 90; + else if (deltaSum < -_math__WEBPACK_IMPORTED_MODULE_3__["epsilon"]) phi0 = -90; + range[0] = lambda0, range[1] = lambda1; + } +}; + +function boundsPoint(lambda, phi) { + ranges.push(range = [lambda0 = lambda, lambda1 = lambda]); + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; +} + +function linePoint(lambda, phi) { + var p = Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["cartesian"])([lambda * _math__WEBPACK_IMPORTED_MODULE_3__["radians"], phi * _math__WEBPACK_IMPORTED_MODULE_3__["radians"]]); + if (p0) { + var normal = Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["cartesianCross"])(p0, p), + equatorial = [normal[1], -normal[0], 0], + inflection = Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["cartesianCross"])(equatorial, normal); + Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["cartesianNormalizeInPlace"])(inflection); + inflection = Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["spherical"])(inflection); + var delta = lambda - lambda2, + sign = delta > 0 ? 1 : -1, + lambdai = inflection[0] * _math__WEBPACK_IMPORTED_MODULE_3__["degrees"] * sign, + phii, + antimeridian = Object(_math__WEBPACK_IMPORTED_MODULE_3__["abs"])(delta) > 180; + if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { + phii = inflection[1] * _math__WEBPACK_IMPORTED_MODULE_3__["degrees"]; + if (phii > phi1) phi1 = phii; + } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { + phii = -inflection[1] * _math__WEBPACK_IMPORTED_MODULE_3__["degrees"]; + if (phii < phi0) phi0 = phii; + } else { + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + } + if (antimeridian) { + if (lambda < lambda2) { + if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda; + } + } else { + if (lambda1 >= lambda0) { + if (lambda < lambda0) lambda0 = lambda; + if (lambda > lambda1) lambda1 = lambda; + } else { + if (lambda > lambda2) { + if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda; + } + } + } + } else { + ranges.push(range = [lambda0 = lambda, lambda1 = lambda]); + } + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + p0 = p, lambda2 = lambda; +} + +function boundsLineStart() { + boundsStream.point = linePoint; +} + +function boundsLineEnd() { + range[0] = lambda0, range[1] = lambda1; + boundsStream.point = boundsPoint; + p0 = null; +} + +function boundsRingPoint(lambda, phi) { + if (p0) { + var delta = lambda - lambda2; + deltaSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_3__["abs"])(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); + } else { + lambda00 = lambda, phi00 = phi; + } + _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].point(lambda, phi); + linePoint(lambda, phi); +} + +function boundsRingStart() { + _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].lineStart(); +} + +function boundsRingEnd() { + boundsRingPoint(lambda00, phi00); + _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].lineEnd(); + if (Object(_math__WEBPACK_IMPORTED_MODULE_3__["abs"])(deltaSum) > _math__WEBPACK_IMPORTED_MODULE_3__["epsilon"]) lambda0 = -(lambda1 = 180); + range[0] = lambda0, range[1] = lambda1; + p0 = null; +} + +// Finds the left-right distance between two longitudes. +// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want +// the distance between ±180° to be 360°. +function angle(lambda0, lambda1) { + return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; +} + +function rangeCompare(a, b) { + return a[0] - b[0]; +} + +function rangeContains(range, x) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(feature) { + var i, n, a, b, merged, deltaMax, delta; + + phi1 = lambda1 = -(lambda0 = phi0 = Infinity); + ranges = []; + Object(_stream__WEBPACK_IMPORTED_MODULE_4__["default"])(feature, boundsStream); + + // First, sort ranges by their minimum longitudes. + if (n = ranges.length) { + ranges.sort(rangeCompare); + + // Then, merge any ranges that overlap. + for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { + b = ranges[i]; + if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + } else { + merged.push(a = b); + } + } + + // Finally, find the largest gap between the merged ranges. + // The final bounding box will be the inverse of this gap. + for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { + b = merged[i]; + if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1]; + } + } + + ranges = range = null; + + return lambda0 === Infinity || phi0 === Infinity + ? [[NaN, NaN], [NaN, NaN]] + : [[lambda0, phi0], [lambda1, phi1]]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/cartesian.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/cartesian.js ***! + \*******************************************************************************************************/ +/*! exports provided: spherical, cartesian, cartesianDot, cartesianCross, cartesianAddInPlace, cartesianScale, cartesianNormalizeInPlace */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spherical", function() { return spherical; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesian", function() { return cartesian; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianDot", function() { return cartesianDot; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianCross", function() { return cartesianCross; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianAddInPlace", function() { return cartesianAddInPlace; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianScale", function() { return cartesianScale; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianNormalizeInPlace", function() { return cartesianNormalizeInPlace; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); + + +function spherical(cartesian) { + return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(cartesian[1], cartesian[0]), Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(cartesian[2])]; +} + +function cartesian(spherical) { + var lambda = spherical[0], phi = spherical[1], cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi); + return [cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda), cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda), Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi)]; +} + +function cartesianDot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} + +function cartesianCross(a, b) { + return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; +} + +// TODO return a +function cartesianAddInPlace(a, b) { + a[0] += b[0], a[1] += b[1], a[2] += b[2]; +} + +function cartesianScale(vector, k) { + return [vector[0] * k, vector[1] * k, vector[2] * k]; +} + +// TODO return d +function cartesianNormalizeInPlace(d) { + var l = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); + d[0] /= l, d[1] /= l, d[2] /= l; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/centroid.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/centroid.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noop */ "../../../node_modules/d3-geo/src/noop.js"); +/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stream */ "../../../node_modules/d3-geo/src/stream.js"); + + + + +var W0, W1, + X0, Y0, Z0, + X1, Y1, Z1, + X2, Y2, Z2, + lambda00, phi00, // first point + x0, y0, z0; // previous point + +var centroidStream = { + sphere: _noop__WEBPACK_IMPORTED_MODULE_1__["default"], + point: centroidPoint, + lineStart: centroidLineStart, + lineEnd: centroidLineEnd, + polygonStart: function() { + centroidStream.lineStart = centroidRingStart; + centroidStream.lineEnd = centroidRingEnd; + }, + polygonEnd: function() { + centroidStream.lineStart = centroidLineStart; + centroidStream.lineEnd = centroidLineEnd; + } +}; + +// Arithmetic mean of Cartesian vectors. +function centroidPoint(lambda, phi) { + lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; + var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi); + centroidPointCartesian(cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda), cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda), Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi)); +} + +function centroidPointCartesian(x, y, z) { + ++W0; + X0 += (x - X0) / W0; + Y0 += (y - Y0) / W0; + Z0 += (z - Z0) / W0; +} + +function centroidLineStart() { + centroidStream.point = centroidLinePointFirst; +} + +function centroidLinePointFirst(lambda, phi) { + lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; + var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi); + x0 = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda); + y0 = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda); + z0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi); + centroidStream.point = centroidLinePoint; + centroidPointCartesian(x0, y0, z0); +} + +function centroidLinePoint(lambda, phi) { + lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; + var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi), + x = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda), + y = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda), + z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi), + w = Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); +} + +function centroidLineEnd() { + centroidStream.point = centroidPoint; +} + +// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, +// J. Applied Mechanics 42, 239 (1975). +function centroidRingStart() { + centroidStream.point = centroidRingPointFirst; +} + +function centroidRingEnd() { + centroidRingPoint(lambda00, phi00); + centroidStream.point = centroidPoint; +} + +function centroidRingPointFirst(lambda, phi) { + lambda00 = lambda, phi00 = phi; + lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; + centroidStream.point = centroidRingPoint; + var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi); + x0 = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda); + y0 = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda); + z0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi); + centroidPointCartesian(x0, y0, z0); +} + +function centroidRingPoint(lambda, phi) { + lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; + var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi), + x = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda), + y = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda), + z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi), + cx = y0 * z - z0 * y, + cy = z0 * x - x0 * z, + cz = x0 * y - y0 * x, + m = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(cx * cx + cy * cy + cz * cz), + w = Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(m), // line weight = angle + v = m && -w / m; // area weight multiplier + X2 += v * cx; + Y2 += v * cy; + Z2 += v * cz; + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); +} + +/* harmony default export */ __webpack_exports__["default"] = (function(object) { + W0 = W1 = + X0 = Y0 = Z0 = + X1 = Y1 = Z1 = + X2 = Y2 = Z2 = 0; + Object(_stream__WEBPACK_IMPORTED_MODULE_2__["default"])(object, centroidStream); + + var x = X2, + y = Y2, + z = Z2, + m = x * x + y * y + z * z; + + // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. + if (m < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon2"]) { + x = X1, y = Y1, z = Z1; + // If the feature has zero length, fall back to arithmetic mean of point vectors. + if (W1 < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) x = X0, y = Y0, z = Z0; + m = x * x + y * y + z * z; + // If the feature still has an undefined ccentroid, then return. + if (m < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon2"]) return [NaN, NaN]; + } + + return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(y, x) * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"], Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(z / Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(m)) * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"]]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/circle.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/circle.js ***! + \****************************************************************************************************/ +/*! exports provided: circleStream, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleStream", function() { return circleStream; }); +/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cartesian */ "../../../node_modules/d3-geo/src/cartesian.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-geo/src/constant.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _rotation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rotation */ "../../../node_modules/d3-geo/src/rotation.js"); + + + + + +// Generates a circle centered at [0°, 0°], with a given radius and precision. +function circleStream(stream, radius, delta, direction, t0, t1) { + if (!delta) return; + var cosRadius = Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(radius), + sinRadius = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(radius), + step = direction * delta; + if (t0 == null) { + t0 = radius + direction * _math__WEBPACK_IMPORTED_MODULE_2__["tau"]; + t1 = radius - step / 2; + } else { + t0 = circleRadius(cosRadius, t0); + t1 = circleRadius(cosRadius, t1); + if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * _math__WEBPACK_IMPORTED_MODULE_2__["tau"]; + } + for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { + point = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["spherical"])([cosRadius, -sinRadius * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(t), -sinRadius * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(t)]); + stream.point(point[0], point[1]); + } +} + +// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. +function circleRadius(cosRadius, point) { + point = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesian"])(point), point[0] -= cosRadius; + Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianNormalizeInPlace"])(point); + var radius = Object(_math__WEBPACK_IMPORTED_MODULE_2__["acos"])(-point[1]); + return ((-point[2] < 0 ? -radius : radius) + _math__WEBPACK_IMPORTED_MODULE_2__["tau"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) % _math__WEBPACK_IMPORTED_MODULE_2__["tau"]; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var center = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])([0, 0]), + radius = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(90), + precision = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(6), + ring, + rotate, + stream = {point: point}; + + function point(x, y) { + ring.push(x = rotate(x, y)); + x[0] *= _math__WEBPACK_IMPORTED_MODULE_2__["degrees"], x[1] *= _math__WEBPACK_IMPORTED_MODULE_2__["degrees"]; + } + + function circle() { + var c = center.apply(this, arguments), + r = radius.apply(this, arguments) * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], + p = precision.apply(this, arguments) * _math__WEBPACK_IMPORTED_MODULE_2__["radians"]; + ring = []; + rotate = Object(_rotation__WEBPACK_IMPORTED_MODULE_3__["rotateRadians"])(-c[0] * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], -c[1] * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], 0).invert; + circleStream(stream, r, p, 1); + c = {type: "Polygon", coordinates: [ring]}; + ring = rotate = null; + return c; + } + + circle.center = function(_) { + return arguments.length ? (center = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])([+_[0], +_[1]]), circle) : center; + }; + + circle.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), circle) : radius; + }; + + circle.precision = function(_) { + return arguments.length ? (precision = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), circle) : precision; + }; + + return circle; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/clip/antimeridian.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/clip/antimeridian.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/clip/index.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_index__WEBPACK_IMPORTED_MODULE_0__["default"])( + function() { return true; }, + clipAntimeridianLine, + clipAntimeridianInterpolate, + [-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], -_math__WEBPACK_IMPORTED_MODULE_1__["halfPi"]] +)); + +// Takes a line and cuts into visible segments. Return values: 0 - there were +// intersections or the line was empty; 1 - no intersections; 2 - there were +// intersections, and the first and last segments should be rejoined. +function clipAntimeridianLine(stream) { + var lambda0 = NaN, + phi0 = NaN, + sign0 = NaN, + clean; // no intersections + + return { + lineStart: function() { + stream.lineStart(); + clean = 1; + }, + point: function(lambda1, phi1) { + var sign1 = lambda1 > 0 ? _math__WEBPACK_IMPORTED_MODULE_1__["pi"] : -_math__WEBPACK_IMPORTED_MODULE_1__["pi"], + delta = Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda1 - lambda0); + if (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(delta - _math__WEBPACK_IMPORTED_MODULE_1__["pi"]) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) { // line crosses a pole + stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? _math__WEBPACK_IMPORTED_MODULE_1__["halfPi"] : -_math__WEBPACK_IMPORTED_MODULE_1__["halfPi"]); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + stream.point(lambda1, phi0); + clean = 0; + } else if (sign0 !== sign1 && delta >= _math__WEBPACK_IMPORTED_MODULE_1__["pi"]) { // line crosses antimeridian + if (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda0 - sign0) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) lambda0 -= sign0 * _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]; // handle degeneracies + if (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda1 - sign1) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) lambda1 -= sign1 * _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]; + phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + clean = 0; + } + stream.point(lambda0 = lambda1, phi0 = phi1); + sign0 = sign1; + }, + lineEnd: function() { + stream.lineEnd(); + lambda0 = phi0 = NaN; + }, + clean: function() { + return 2 - clean; // if intersections, rejoin first and last segments + } + }; +} + +function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { + var cosPhi0, + cosPhi1, + sinLambda0Lambda1 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda0 - lambda1); + return Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(sinLambda0Lambda1) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"] + ? Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan"])((Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi0) * (cosPhi1 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi1)) * Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda1) + - Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi1) * (cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi0)) * Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda0)) + / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) + : (phi0 + phi1) / 2; +} + +function clipAntimeridianInterpolate(from, to, direction, stream) { + var phi; + if (from == null) { + phi = direction * _math__WEBPACK_IMPORTED_MODULE_1__["halfPi"]; + stream.point(-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], phi); + stream.point(0, phi); + stream.point(_math__WEBPACK_IMPORTED_MODULE_1__["pi"], phi); + stream.point(_math__WEBPACK_IMPORTED_MODULE_1__["pi"], 0); + stream.point(_math__WEBPACK_IMPORTED_MODULE_1__["pi"], -phi); + stream.point(0, -phi); + stream.point(-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], -phi); + stream.point(-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], 0); + stream.point(-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], phi); + } else if (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(from[0] - to[0]) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) { + var lambda = from[0] < to[0] ? _math__WEBPACK_IMPORTED_MODULE_1__["pi"] : -_math__WEBPACK_IMPORTED_MODULE_1__["pi"]; + phi = direction * lambda / 2; + stream.point(-lambda, phi); + stream.point(0, phi); + stream.point(lambda, phi); + } else { + stream.point(to[0], to[1]); + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/clip/buffer.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/clip/buffer.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-geo/src/noop.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var lines = [], + line; + return { + point: function(x, y) { + line.push([x, y]); + }, + lineStart: function() { + lines.push(line = []); + }, + lineEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + rejoin: function() { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); + }, + result: function() { + var result = lines; + lines = []; + line = null; + return result; + } + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/clip/circle.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/clip/circle.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cartesian */ "../../../node_modules/d3-geo/src/cartesian.js"); +/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../circle */ "../../../node_modules/d3-geo/src/circle.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _pointEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../pointEqual */ "../../../node_modules/d3-geo/src/pointEqual.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/clip/index.js"); + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function(radius) { + var cr = Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(radius), + delta = 6 * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], + smallRadius = cr > 0, + notHemisphere = Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(cr) > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; // TODO optimise for this common case + + function interpolate(from, to, direction, stream) { + Object(_circle__WEBPACK_IMPORTED_MODULE_1__["circleStream"])(stream, radius, delta, direction, from, to); + } + + function visible(lambda, phi) { + return Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(lambda) * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(phi) > cr; + } + + // Takes a line and cuts into visible segments. Return values used for polygon + // clipping: 0 - there were intersections or the line was empty; 1 - no + // intersections 2 - there were intersections, and the first and last segments + // should be rejoined. + function clipLine(stream) { + var point0, // previous point + c0, // code for previous point + v0, // visibility of previous point + v00, // visibility of first point + clean; // no intersections + return { + lineStart: function() { + v00 = v0 = false; + clean = 1; + }, + point: function(lambda, phi) { + var point1 = [lambda, phi], + point2, + v = visible(lambda, phi), + c = smallRadius + ? v ? 0 : code(lambda, phi) + : v ? code(lambda + (lambda < 0 ? _math__WEBPACK_IMPORTED_MODULE_2__["pi"] : -_math__WEBPACK_IMPORTED_MODULE_2__["pi"]), phi) : 0; + if (!point0 && (v00 = v0 = v)) stream.lineStart(); + // Handle degeneracies. + // TODO ignore if not clipping polygons. + if (v !== v0) { + point2 = intersect(point0, point1); + if (!point2 || Object(_pointEqual__WEBPACK_IMPORTED_MODULE_3__["default"])(point0, point2) || Object(_pointEqual__WEBPACK_IMPORTED_MODULE_3__["default"])(point1, point2)) { + point1[0] += _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; + point1[1] += _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; + v = visible(point1[0], point1[1]); + } + } + if (v !== v0) { + clean = 0; + if (v) { + // outside going in + stream.lineStart(); + point2 = intersect(point1, point0); + stream.point(point2[0], point2[1]); + } else { + // inside going out + point2 = intersect(point0, point1); + stream.point(point2[0], point2[1]); + stream.lineEnd(); + } + point0 = point2; + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t; + // If the codes for two points are different, or are both zero, + // and there this segment intersects with the small circle. + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0; + if (smallRadius) { + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + } else { + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + } + } + } + if (v && (!point0 || !Object(_pointEqual__WEBPACK_IMPORTED_MODULE_3__["default"])(point0, point1))) { + stream.point(point1[0], point1[1]); + } + point0 = point1, v0 = v, c0 = c; + }, + lineEnd: function() { + if (v0) stream.lineEnd(); + point0 = null; + }, + // Rejoin first and last segments if there were intersections and the first + // and last points were visible. + clean: function() { + return clean | ((v00 && v0) << 1); + } + }; + } + + // Intersects the great circle between a and b with the clip circle. + function intersect(a, b, two) { + var pa = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesian"])(a), + pb = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesian"])(b); + + // We have two planes, n1.p = d1 and n2.p = d2. + // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). + var n1 = [1, 0, 0], // normal + n2 = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianCross"])(pa, pb), + n2n2 = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianDot"])(n2, n2), + n1n2 = n2[0], // cartesianDot(n1, n2), + determinant = n2n2 - n1n2 * n1n2; + + // Two polar points. + if (!determinant) return !two && a; + + var c1 = cr * n2n2 / determinant, + c2 = -cr * n1n2 / determinant, + n1xn2 = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianCross"])(n1, n2), + A = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianScale"])(n1, c1), + B = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianScale"])(n2, c2); + Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianAddInPlace"])(A, B); + + // Solve |p(t)|^2 = 1. + var u = n1xn2, + w = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianDot"])(A, u), + uu = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianDot"])(u, u), + t2 = w * w - uu * (Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianDot"])(A, A) - 1); + + if (t2 < 0) return; + + var t = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(t2), + q = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianScale"])(u, (-w - t) / uu); + Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianAddInPlace"])(q, A); + q = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["spherical"])(q); + + if (!two) return q; + + // Two intersection points. + var lambda0 = a[0], + lambda1 = b[0], + phi0 = a[1], + phi1 = b[1], + z; + + if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; + + var delta = lambda1 - lambda0, + polar = Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(delta - _math__WEBPACK_IMPORTED_MODULE_2__["pi"]) < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"], + meridian = polar || delta < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; + + if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; + + // Check that the first point is between a and b. + if (meridian + ? polar + ? phi0 + phi1 > 0 ^ q[1] < (Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(q[0] - lambda0) < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] ? phi0 : phi1) + : phi0 <= q[1] && q[1] <= phi1 + : delta > _math__WEBPACK_IMPORTED_MODULE_2__["pi"] ^ (lambda0 <= q[0] && q[0] <= lambda1)) { + var q1 = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianScale"])(u, (-w + t) / uu); + Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianAddInPlace"])(q1, A); + return [q, Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["spherical"])(q1)]; + } + } + + // Generates a 4-bit vector representing the location of a point relative to + // the small circle's bounding box. + function code(lambda, phi) { + var r = smallRadius ? radius : _math__WEBPACK_IMPORTED_MODULE_2__["pi"] - radius, + code = 0; + if (lambda < -r) code |= 1; // left + else if (lambda > r) code |= 2; // right + if (phi < -r) code |= 4; // below + else if (phi > r) code |= 8; // above + return code; + } + + return Object(_index__WEBPACK_IMPORTED_MODULE_4__["default"])(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-_math__WEBPACK_IMPORTED_MODULE_2__["pi"], radius - _math__WEBPACK_IMPORTED_MODULE_2__["pi"]]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/clip/extent.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/clip/extent.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _rectangle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rectangle */ "../../../node_modules/d3-geo/src/clip/rectangle.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var x0 = 0, + y0 = 0, + x1 = 960, + y1 = 500, + cache, + cacheStream, + clip; + + return clip = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = Object(_rectangle__WEBPACK_IMPORTED_MODULE_0__["default"])(x0, y0, x1, y1)(cacheStream = stream); + }, + extent: function(_) { + return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; + } + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/clip/index.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/clip/index.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _buffer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buffer */ "../../../node_modules/d3-geo/src/clip/buffer.js"); +/* harmony import */ var _rejoin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rejoin */ "../../../node_modules/d3-geo/src/clip/rejoin.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _polygonContains__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../polygonContains */ "../../../node_modules/d3-geo/src/polygonContains.js"); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function(pointVisible, clipLine, interpolate, start) { + return function(sink) { + var line = clipLine(sink), + ringBuffer = Object(_buffer__WEBPACK_IMPORTED_MODULE_0__["default"])(), + ringSink = clipLine(ringBuffer), + polygonStarted = false, + polygon, + segments, + ring; + + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + clip.point = pointRing; + clip.lineStart = ringStart; + clip.lineEnd = ringEnd; + segments = []; + polygon = []; + }, + polygonEnd: function() { + clip.point = point; + clip.lineStart = lineStart; + clip.lineEnd = lineEnd; + segments = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__["merge"])(segments); + var startInside = Object(_polygonContains__WEBPACK_IMPORTED_MODULE_3__["default"])(polygon, start); + if (segments.length) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + Object(_rejoin__WEBPACK_IMPORTED_MODULE_1__["default"])(segments, compareIntersection, startInside, interpolate, sink); + } else if (startInside) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + } + if (polygonStarted) sink.polygonEnd(), polygonStarted = false; + segments = polygon = null; + }, + sphere: function() { + sink.polygonStart(); + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + sink.polygonEnd(); + } + }; + + function point(lambda, phi) { + if (pointVisible(lambda, phi)) sink.point(lambda, phi); + } + + function pointLine(lambda, phi) { + line.point(lambda, phi); + } + + function lineStart() { + clip.point = pointLine; + line.lineStart(); + } + + function lineEnd() { + clip.point = point; + line.lineEnd(); + } + + function pointRing(lambda, phi) { + ring.push([lambda, phi]); + ringSink.point(lambda, phi); + } + + function ringStart() { + ringSink.lineStart(); + ring = []; + } + + function ringEnd() { + pointRing(ring[0][0], ring[0][1]); + ringSink.lineEnd(); + + var clean = ringSink.clean(), + ringSegments = ringBuffer.result(), + i, n = ringSegments.length, m, + segment, + point; + + ring.pop(); + polygon.push(ring); + ring = null; + + if (!n) return; + + // No intersections. + if (clean & 1) { + segment = ringSegments[0]; + if ((m = segment.length - 1) > 0) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); + sink.lineEnd(); + } + return; + } + + // Rejoin connected segments. + // TODO reuse ringBuffer.rejoin()? + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); + + segments.push(ringSegments.filter(validSegment)); + } + + return clip; + }; +}); + +function validSegment(segment) { + return segment.length > 1; +} + +// Intersections are sorted along the clip edge. For both antimeridian cutting +// and circle clipping, the same comparison is used. +function compareIntersection(a, b) { + return ((a = a.x)[0] < 0 ? a[1] - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] : _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - a[1]) + - ((b = b.x)[0] < 0 ? b[1] - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] : _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - b[1]); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/clip/line.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/clip/line.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b, x0, y0, x1, y1) { + var ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; + + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; + if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; + return true; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/clip/rectangle.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/clip/rectangle.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return clipRectangle; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _buffer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buffer */ "../../../node_modules/d3-geo/src/clip/buffer.js"); +/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./line */ "../../../node_modules/d3-geo/src/clip/line.js"); +/* harmony import */ var _rejoin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rejoin */ "../../../node_modules/d3-geo/src/clip/rejoin.js"); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); + + + + + + +var clipMax = 1e9, clipMin = -clipMax; + +// TODO Use d3-polygon’s polygonContains here for the ring check? +// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? + +function clipRectangle(x0, y0, x1, y1) { + + function visible(x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1; + } + + function interpolate(from, to, direction, stream) { + var a = 0, a1 = 0; + if (from == null + || (a = corner(from, direction)) !== (a1 = corner(to, direction)) + || comparePoint(from, to) < 0 ^ direction > 0) { + do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); + while ((a = (a + direction + 4) % 4) !== a1); + } else { + stream.point(to[0], to[1]); + } + } + + function corner(p, direction) { + return Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(p[0] - x0) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"] ? direction > 0 ? 0 : 3 + : Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(p[0] - x1) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"] ? direction > 0 ? 2 : 1 + : Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(p[1] - y0) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"] ? direction > 0 ? 1 : 0 + : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon + } + + function compareIntersection(a, b) { + return comparePoint(a.x, b.x); + } + + function comparePoint(a, b) { + var ca = corner(a, 1), + cb = corner(b, 1); + return ca !== cb ? ca - cb + : ca === 0 ? b[1] - a[1] + : ca === 1 ? a[0] - b[0] + : ca === 2 ? a[1] - b[1] + : b[0] - a[0]; + } + + return function(stream) { + var activeStream = stream, + bufferStream = Object(_buffer__WEBPACK_IMPORTED_MODULE_1__["default"])(), + segments, + polygon, + ring, + x__, y__, v__, // first point + x_, y_, v_, // previous point + first, + clean; + + var clipStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: polygonStart, + polygonEnd: polygonEnd + }; + + function point(x, y) { + if (visible(x, y)) activeStream.point(x, y); + } + + function polygonInside() { + var winding = 0; + + for (var i = 0, n = polygon.length; i < n; ++i) { + for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { + a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; + if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } + else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } + } + } + + return winding; + } + + // Buffer geometry within a polygon and then clip it en masse. + function polygonStart() { + activeStream = bufferStream, segments = [], polygon = [], clean = true; + } + + function polygonEnd() { + var startInside = polygonInside(), + cleanInside = clean && startInside, + visible = (segments = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__["merge"])(segments)).length; + if (cleanInside || visible) { + stream.polygonStart(); + if (cleanInside) { + stream.lineStart(); + interpolate(null, null, 1, stream); + stream.lineEnd(); + } + if (visible) { + Object(_rejoin__WEBPACK_IMPORTED_MODULE_3__["default"])(segments, compareIntersection, startInside, interpolate, stream); + } + stream.polygonEnd(); + } + activeStream = stream, segments = polygon = ring = null; + } + + function lineStart() { + clipStream.point = linePoint; + if (polygon) polygon.push(ring = []); + first = true; + v_ = false; + x_ = y_ = NaN; + } + + // TODO rather than special-case polygons, simply handle them separately. + // Ideally, coincident intersection points should be jittered to avoid + // clipping issues. + function lineEnd() { + if (segments) { + linePoint(x__, y__); + if (v__ && v_) bufferStream.rejoin(); + segments.push(bufferStream.result()); + } + clipStream.point = point; + if (v_) activeStream.lineEnd(); + } + + function linePoint(x, y) { + var v = visible(x, y); + if (polygon) ring.push([x, y]); + if (first) { + x__ = x, y__ = y, v__ = v; + first = false; + if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + } + } else { + if (v && v_) activeStream.point(x, y); + else { + var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], + b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; + if (Object(_line__WEBPACK_IMPORTED_MODULE_2__["default"])(a, b, x0, y0, x1, y1)) { + if (!v_) { + activeStream.lineStart(); + activeStream.point(a[0], a[1]); + } + activeStream.point(b[0], b[1]); + if (!v) activeStream.lineEnd(); + clean = false; + } else if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + clean = false; + } + } + } + x_ = x, y_ = y, v_ = v; + } + + return clipStream; + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/clip/rejoin.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/clip/rejoin.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _pointEqual__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pointEqual */ "../../../node_modules/d3-geo/src/pointEqual.js"); + + +function Intersection(point, points, other, entry) { + this.x = point; + this.z = points; + this.o = other; // another intersection + this.e = entry; // is an entry? + this.v = false; // visited + this.n = this.p = null; // next & previous +} + +// A generalized polygon clipping algorithm: given a polygon that has been cut +// into its visible line segments, and rejoins the segments by interpolating +// along the clip edge. +/* harmony default export */ __webpack_exports__["default"] = (function(segments, compareIntersection, startInside, interpolate, stream) { + var subject = [], + clip = [], + i, + n; + + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n], x; + + // If the first and last points of a segment are coincident, then treat as a + // closed ring. TODO if all rings are closed, then the winding order of the + // exterior ring should be checked. + if (Object(_pointEqual__WEBPACK_IMPORTED_MODULE_0__["default"])(p0, p1)) { + stream.lineStart(); + for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); + stream.lineEnd(); + return; + } + + subject.push(x = new Intersection(p0, segment, null, true)); + clip.push(x.o = new Intersection(p0, null, x, false)); + subject.push(x = new Intersection(p1, segment, null, false)); + clip.push(x.o = new Intersection(p1, null, x, true)); + }); + + if (!subject.length) return; + + clip.sort(compareIntersection); + link(subject); + link(clip); + + for (i = 0, n = clip.length; i < n; ++i) { + clip[i].e = startInside = !startInside; + } + + var start = subject[0], + points, + point; + + while (1) { + // Find first unvisited intersection. + var current = start, + isSubject = true; + while (current.v) if ((current = current.n) === start) return; + points = current.z; + stream.lineStart(); + do { + current.v = current.o.v = true; + if (current.e) { + if (isSubject) { + for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.n.x, 1, stream); + } + current = current.n; + } else { + if (isSubject) { + points = current.p.z; + for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.p.x, -1, stream); + } + current = current.p; + } + current = current.o; + points = current.z; + isSubject = !isSubject; + } while (!current.v); + stream.lineEnd(); + } +}); + +function link(array) { + if (!(n = array.length)) return; + var n, + i = 0, + a = array[0], + b; + while (++i < n) { + a.n = b = array[i]; + b.p = a; + a = b; + } + a.n = b = array[0]; + b.p = a; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/compose.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/compose.js ***! + \*****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } + + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; + + return compose; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/constant.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/constant.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/contains.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/contains.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polygonContains__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./polygonContains */ "../../../node_modules/d3-geo/src/polygonContains.js"); +/* harmony import */ var _distance__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./distance */ "../../../node_modules/d3-geo/src/distance.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); + + + + +var containsObjectType = { + Feature: function(object, point) { + return containsGeometry(object.geometry, point); + }, + FeatureCollection: function(object, point) { + var features = object.features, i = -1, n = features.length; + while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; + return false; + } +}; + +var containsGeometryType = { + Sphere: function() { + return true; + }, + Point: function(object, point) { + return containsPoint(object.coordinates, point); + }, + MultiPoint: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsPoint(coordinates[i], point)) return true; + return false; + }, + LineString: function(object, point) { + return containsLine(object.coordinates, point); + }, + MultiLineString: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsLine(coordinates[i], point)) return true; + return false; + }, + Polygon: function(object, point) { + return containsPolygon(object.coordinates, point); + }, + MultiPolygon: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsPolygon(coordinates[i], point)) return true; + return false; + }, + GeometryCollection: function(object, point) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) if (containsGeometry(geometries[i], point)) return true; + return false; + } +}; + +function containsGeometry(geometry, point) { + return geometry && containsGeometryType.hasOwnProperty(geometry.type) + ? containsGeometryType[geometry.type](geometry, point) + : false; +} + +function containsPoint(coordinates, point) { + return Object(_distance__WEBPACK_IMPORTED_MODULE_1__["default"])(coordinates, point) === 0; +} + +function containsLine(coordinates, point) { + var ab = Object(_distance__WEBPACK_IMPORTED_MODULE_1__["default"])(coordinates[0], coordinates[1]), + ao = Object(_distance__WEBPACK_IMPORTED_MODULE_1__["default"])(coordinates[0], point), + ob = Object(_distance__WEBPACK_IMPORTED_MODULE_1__["default"])(point, coordinates[1]); + return ao + ob <= ab + _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; +} + +function containsPolygon(coordinates, point) { + return !!Object(_polygonContains__WEBPACK_IMPORTED_MODULE_0__["default"])(coordinates.map(ringRadians), pointRadians(point)); +} + +function ringRadians(ring) { + return ring = ring.map(pointRadians), ring.pop(), ring; +} + +function pointRadians(point) { + return [point[0] * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], point[1] * _math__WEBPACK_IMPORTED_MODULE_2__["radians"]]; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(object, point) { + return (object && containsObjectType.hasOwnProperty(object.type) + ? containsObjectType[object.type] + : containsGeometry)(object, point); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/distance.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/distance.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _length__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./length */ "../../../node_modules/d3-geo/src/length.js"); + + +var coordinates = [null, null], + object = {type: "LineString", coordinates: coordinates}; + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + coordinates[0] = a; + coordinates[1] = b; + return Object(_length__WEBPACK_IMPORTED_MODULE_0__["default"])(object); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/graticule.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/graticule.js ***! + \*******************************************************************************************************/ +/*! exports provided: default, graticule10 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return graticule; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "graticule10", function() { return graticule10; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); + + + +function graticuleX(y0, y1, dy) { + var y = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(y0, y1 - _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"], dy).concat(y1); + return function(x) { return y.map(function(y) { return [x, y]; }); }; +} + +function graticuleY(x0, x1, dx) { + var x = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(x0, x1 - _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"], dx).concat(x1); + return function(y) { return x.map(function(x) { return [x, y]; }); }; +} + +function graticule() { + var x1, x0, X1, X0, + y1, y0, Y1, Y0, + dx = 10, dy = dx, DX = 90, DY = 360, + x, y, X, Y, + precision = 2.5; + + function graticule() { + return {type: "MultiLineString", coordinates: lines()}; + } + + function lines() { + return Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["ceil"])(X0 / DX) * DX, X1, DX).map(X) + .concat(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["ceil"])(Y0 / DY) * DY, Y1, DY).map(Y)) + .concat(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["ceil"])(x0 / dx) * dx, x1, dx).filter(function(x) { return Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(x % DX) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]; }).map(x)) + .concat(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["ceil"])(y0 / dy) * dy, y1, dy).filter(function(y) { return Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(y % DY) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]; }).map(y)); + } + + graticule.lines = function() { + return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); + }; + + graticule.outline = function() { + return { + type: "Polygon", + coordinates: [ + X(X0).concat( + Y(Y1).slice(1), + X(X1).reverse().slice(1), + Y(Y0).reverse().slice(1)) + ] + }; + }; + + graticule.extent = function(_) { + if (!arguments.length) return graticule.extentMinor(); + return graticule.extentMajor(_).extentMinor(_); + }; + + graticule.extentMajor = function(_) { + if (!arguments.length) return [[X0, Y0], [X1, Y1]]; + X0 = +_[0][0], X1 = +_[1][0]; + Y0 = +_[0][1], Y1 = +_[1][1]; + if (X0 > X1) _ = X0, X0 = X1, X1 = _; + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; + return graticule.precision(precision); + }; + + graticule.extentMinor = function(_) { + if (!arguments.length) return [[x0, y0], [x1, y1]]; + x0 = +_[0][0], x1 = +_[1][0]; + y0 = +_[0][1], y1 = +_[1][1]; + if (x0 > x1) _ = x0, x0 = x1, x1 = _; + if (y0 > y1) _ = y0, y0 = y1, y1 = _; + return graticule.precision(precision); + }; + + graticule.step = function(_) { + if (!arguments.length) return graticule.stepMinor(); + return graticule.stepMajor(_).stepMinor(_); + }; + + graticule.stepMajor = function(_) { + if (!arguments.length) return [DX, DY]; + DX = +_[0], DY = +_[1]; + return graticule; + }; + + graticule.stepMinor = function(_) { + if (!arguments.length) return [dx, dy]; + dx = +_[0], dy = +_[1]; + return graticule; + }; + + graticule.precision = function(_) { + if (!arguments.length) return precision; + precision = +_; + x = graticuleX(y0, y1, 90); + y = graticuleY(x0, x1, precision); + X = graticuleX(Y0, Y1, 90); + Y = graticuleY(X0, X1, precision); + return graticule; + }; + + return graticule + .extentMajor([[-180, -90 + _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]], [180, 90 - _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]]]) + .extentMinor([[-180, -80 - _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]], [180, 80 + _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]]]); +} + +function graticule10() { + return graticule()(); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/identity.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/identity.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return x; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/index.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/index.js ***! + \***************************************************************************************************/ +/*! exports provided: geoArea, geoBounds, geoCentroid, geoCircle, geoClipAntimeridian, geoClipCircle, geoClipExtent, geoClipRectangle, geoContains, geoDistance, geoGraticule, geoGraticule10, geoInterpolate, geoLength, geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEqualAreaRaw, geoAzimuthalEquidistant, geoAzimuthalEquidistantRaw, geoConicConformal, geoConicConformalRaw, geoConicEqualArea, geoConicEqualAreaRaw, geoConicEquidistant, geoConicEquidistantRaw, geoEqualEarth, geoEqualEarthRaw, geoEquirectangular, geoEquirectangularRaw, geoGnomonic, geoGnomonicRaw, geoIdentity, geoProjection, geoProjectionMutator, geoMercator, geoMercatorRaw, geoNaturalEarth1, geoNaturalEarth1Raw, geoOrthographic, geoOrthographicRaw, geoStereographic, geoStereographicRaw, geoTransverseMercator, geoTransverseMercatorRaw, geoRotation, geoStream, geoTransform */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area */ "../../../node_modules/d3-geo/src/area.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoArea", function() { return _area__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bounds */ "../../../node_modules/d3-geo/src/bounds.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoBounds", function() { return _bounds__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _centroid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./centroid */ "../../../node_modules/d3-geo/src/centroid.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoCentroid", function() { return _centroid__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./circle */ "../../../node_modules/d3-geo/src/circle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoCircle", function() { return _circle__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _clip_antimeridian__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./clip/antimeridian */ "../../../node_modules/d3-geo/src/clip/antimeridian.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipAntimeridian", function() { return _clip_antimeridian__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _clip_circle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./clip/circle */ "../../../node_modules/d3-geo/src/clip/circle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipCircle", function() { return _clip_circle__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _clip_extent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clip/extent */ "../../../node_modules/d3-geo/src/clip/extent.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipExtent", function() { return _clip_extent__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _clip_rectangle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./clip/rectangle */ "../../../node_modules/d3-geo/src/clip/rectangle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipRectangle", function() { return _clip_rectangle__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _contains__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./contains */ "../../../node_modules/d3-geo/src/contains.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoContains", function() { return _contains__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _distance__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./distance */ "../../../node_modules/d3-geo/src/distance.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoDistance", function() { return _distance__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _graticule__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./graticule */ "../../../node_modules/d3-geo/src/graticule.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGraticule", function() { return _graticule__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGraticule10", function() { return _graticule__WEBPACK_IMPORTED_MODULE_10__["graticule10"]; }); + +/* harmony import */ var _interpolate__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./interpolate */ "../../../node_modules/d3-geo/src/interpolate.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoInterpolate", function() { return _interpolate__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _length__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./length */ "../../../node_modules/d3-geo/src/length.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoLength", function() { return _length__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _path_index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./path/index */ "../../../node_modules/d3-geo/src/path/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoPath", function() { return _path_index__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _projection_albers__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./projection/albers */ "../../../node_modules/d3-geo/src/projection/albers.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAlbers", function() { return _projection_albers__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony import */ var _projection_albersUsa__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./projection/albersUsa */ "../../../node_modules/d3-geo/src/projection/albersUsa.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAlbersUsa", function() { return _projection_albersUsa__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _projection_azimuthalEqualArea__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./projection/azimuthalEqualArea */ "../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualArea", function() { return _projection_azimuthalEqualArea__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualAreaRaw", function() { return _projection_azimuthalEqualArea__WEBPACK_IMPORTED_MODULE_16__["azimuthalEqualAreaRaw"]; }); + +/* harmony import */ var _projection_azimuthalEquidistant__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./projection/azimuthalEquidistant */ "../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistant", function() { return _projection_azimuthalEquidistant__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistantRaw", function() { return _projection_azimuthalEquidistant__WEBPACK_IMPORTED_MODULE_17__["azimuthalEquidistantRaw"]; }); + +/* harmony import */ var _projection_conicConformal__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./projection/conicConformal */ "../../../node_modules/d3-geo/src/projection/conicConformal.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicConformal", function() { return _projection_conicConformal__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicConformalRaw", function() { return _projection_conicConformal__WEBPACK_IMPORTED_MODULE_18__["conicConformalRaw"]; }); + +/* harmony import */ var _projection_conicEqualArea__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./projection/conicEqualArea */ "../../../node_modules/d3-geo/src/projection/conicEqualArea.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualArea", function() { return _projection_conicEqualArea__WEBPACK_IMPORTED_MODULE_19__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualAreaRaw", function() { return _projection_conicEqualArea__WEBPACK_IMPORTED_MODULE_19__["conicEqualAreaRaw"]; }); + +/* harmony import */ var _projection_conicEquidistant__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./projection/conicEquidistant */ "../../../node_modules/d3-geo/src/projection/conicEquidistant.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistant", function() { return _projection_conicEquidistant__WEBPACK_IMPORTED_MODULE_20__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistantRaw", function() { return _projection_conicEquidistant__WEBPACK_IMPORTED_MODULE_20__["conicEquidistantRaw"]; }); + +/* harmony import */ var _projection_equalEarth__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./projection/equalEarth */ "../../../node_modules/d3-geo/src/projection/equalEarth.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEqualEarth", function() { return _projection_equalEarth__WEBPACK_IMPORTED_MODULE_21__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEqualEarthRaw", function() { return _projection_equalEarth__WEBPACK_IMPORTED_MODULE_21__["equalEarthRaw"]; }); + +/* harmony import */ var _projection_equirectangular__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./projection/equirectangular */ "../../../node_modules/d3-geo/src/projection/equirectangular.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangular", function() { return _projection_equirectangular__WEBPACK_IMPORTED_MODULE_22__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangularRaw", function() { return _projection_equirectangular__WEBPACK_IMPORTED_MODULE_22__["equirectangularRaw"]; }); + +/* harmony import */ var _projection_gnomonic__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./projection/gnomonic */ "../../../node_modules/d3-geo/src/projection/gnomonic.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGnomonic", function() { return _projection_gnomonic__WEBPACK_IMPORTED_MODULE_23__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGnomonicRaw", function() { return _projection_gnomonic__WEBPACK_IMPORTED_MODULE_23__["gnomonicRaw"]; }); + +/* harmony import */ var _projection_identity__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./projection/identity */ "../../../node_modules/d3-geo/src/projection/identity.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoIdentity", function() { return _projection_identity__WEBPACK_IMPORTED_MODULE_24__["default"]; }); + +/* harmony import */ var _projection_index__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./projection/index */ "../../../node_modules/d3-geo/src/projection/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoProjection", function() { return _projection_index__WEBPACK_IMPORTED_MODULE_25__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoProjectionMutator", function() { return _projection_index__WEBPACK_IMPORTED_MODULE_25__["projectionMutator"]; }); + +/* harmony import */ var _projection_mercator__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./projection/mercator */ "../../../node_modules/d3-geo/src/projection/mercator.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoMercator", function() { return _projection_mercator__WEBPACK_IMPORTED_MODULE_26__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoMercatorRaw", function() { return _projection_mercator__WEBPACK_IMPORTED_MODULE_26__["mercatorRaw"]; }); + +/* harmony import */ var _projection_naturalEarth1__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./projection/naturalEarth1 */ "../../../node_modules/d3-geo/src/projection/naturalEarth1.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoNaturalEarth1", function() { return _projection_naturalEarth1__WEBPACK_IMPORTED_MODULE_27__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoNaturalEarth1Raw", function() { return _projection_naturalEarth1__WEBPACK_IMPORTED_MODULE_27__["naturalEarth1Raw"]; }); + +/* harmony import */ var _projection_orthographic__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./projection/orthographic */ "../../../node_modules/d3-geo/src/projection/orthographic.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoOrthographic", function() { return _projection_orthographic__WEBPACK_IMPORTED_MODULE_28__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoOrthographicRaw", function() { return _projection_orthographic__WEBPACK_IMPORTED_MODULE_28__["orthographicRaw"]; }); + +/* harmony import */ var _projection_stereographic__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./projection/stereographic */ "../../../node_modules/d3-geo/src/projection/stereographic.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStereographic", function() { return _projection_stereographic__WEBPACK_IMPORTED_MODULE_29__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStereographicRaw", function() { return _projection_stereographic__WEBPACK_IMPORTED_MODULE_29__["stereographicRaw"]; }); + +/* harmony import */ var _projection_transverseMercator__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./projection/transverseMercator */ "../../../node_modules/d3-geo/src/projection/transverseMercator.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercator", function() { return _projection_transverseMercator__WEBPACK_IMPORTED_MODULE_30__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercatorRaw", function() { return _projection_transverseMercator__WEBPACK_IMPORTED_MODULE_30__["transverseMercatorRaw"]; }); + +/* harmony import */ var _rotation__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./rotation */ "../../../node_modules/d3-geo/src/rotation.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoRotation", function() { return _rotation__WEBPACK_IMPORTED_MODULE_31__["default"]; }); + +/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./stream */ "../../../node_modules/d3-geo/src/stream.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStream", function() { return _stream__WEBPACK_IMPORTED_MODULE_32__["default"]; }); + +/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./transform */ "../../../node_modules/d3-geo/src/transform.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransform", function() { return _transform__WEBPACK_IMPORTED_MODULE_33__["default"]; }); + + + + + + + + // DEPRECATED! Use d3.geoIdentity().clipExtent(…). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/interpolate.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/interpolate.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + var x0 = a[0] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], + y0 = a[1] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], + x1 = b[0] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], + y1 = b[1] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], + cy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y0), + sy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y0), + cy1 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y1), + sy1 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y1), + kx0 = cy0 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x0), + ky0 = cy0 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x0), + kx1 = cy1 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x1), + ky1 = cy1 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x1), + d = 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["haversin"])(y1 - y0) + cy0 * cy1 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["haversin"])(x1 - x0))), + k = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(d); + + var interpolate = d ? function(t) { + var B = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(t *= d) / k, + A = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(d - t) / k, + x = A * kx0 + B * kx1, + y = A * ky0 + B * ky1, + z = A * sy0 + B * sy1; + return [ + Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(y, x) * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"], + Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(z, Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(x * x + y * y)) * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"] + ]; + } : function() { + return [x0 * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"], y0 * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"]]; + }; + + interpolate.distance = d; + + return interpolate; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/length.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/length.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder */ "../../../node_modules/d3-geo/src/adder.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./noop */ "../../../node_modules/d3-geo/src/noop.js"); +/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream */ "../../../node_modules/d3-geo/src/stream.js"); + + + + + +var lengthSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), + lambda0, + sinPhi0, + cosPhi0; + +var lengthStream = { + sphere: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + point: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + lineStart: lengthLineStart, + lineEnd: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + polygonStart: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + polygonEnd: _noop__WEBPACK_IMPORTED_MODULE_2__["default"] +}; + +function lengthLineStart() { + lengthStream.point = lengthPointFirst; + lengthStream.lineEnd = lengthLineEnd; +} + +function lengthLineEnd() { + lengthStream.point = lengthStream.lineEnd = _noop__WEBPACK_IMPORTED_MODULE_2__["default"]; +} + +function lengthPointFirst(lambda, phi) { + lambda *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"]; + lambda0 = lambda, sinPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi); + lengthStream.point = lengthPoint; +} + +function lengthPoint(lambda, phi) { + lambda *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"]; + var sinPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), + cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi), + delta = Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda - lambda0), + cosDelta = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(delta), + sinDelta = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(delta), + x = cosPhi * sinDelta, + y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta, + z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta; + lengthSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["sqrt"])(x * x + y * y), z)); + lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(object) { + lengthSum.reset(); + Object(_stream__WEBPACK_IMPORTED_MODULE_3__["default"])(object, lengthStream); + return +lengthSum; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/math.js": +/*!**************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/math.js ***! + \**************************************************************************************************/ +/*! exports provided: epsilon, epsilon2, pi, halfPi, quarterPi, tau, degrees, radians, abs, atan, atan2, cos, ceil, exp, floor, log, pow, sin, sign, sqrt, tan, acos, asin, haversin */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon", function() { return epsilon; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon2", function() { return epsilon2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pi", function() { return pi; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "halfPi", function() { return halfPi; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quarterPi", function() { return quarterPi; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tau", function() { return tau; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "degrees", function() { return degrees; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "radians", function() { return radians; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "abs", function() { return abs; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atan", function() { return atan; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atan2", function() { return atan2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cos", function() { return cos; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ceil", function() { return ceil; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exp", function() { return exp; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "floor", function() { return floor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "log", function() { return log; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pow", function() { return pow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sin", function() { return sin; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sign", function() { return sign; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sqrt", function() { return sqrt; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tan", function() { return tan; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "acos", function() { return acos; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asin", function() { return asin; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "haversin", function() { return haversin; }); +var epsilon = 1e-6; +var epsilon2 = 1e-12; +var pi = Math.PI; +var halfPi = pi / 2; +var quarterPi = pi / 4; +var tau = pi * 2; + +var degrees = 180 / pi; +var radians = pi / 180; + +var abs = Math.abs; +var atan = Math.atan; +var atan2 = Math.atan2; +var cos = Math.cos; +var ceil = Math.ceil; +var exp = Math.exp; +var floor = Math.floor; +var log = Math.log; +var pow = Math.pow; +var sin = Math.sin; +var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; +var sqrt = Math.sqrt; +var tan = Math.tan; + +function acos(x) { + return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); +} + +function asin(x) { + return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x); +} + +function haversin(x) { + return (x = sin(x / 2)) * x; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/noop.js": +/*!**************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/noop.js ***! + \**************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return noop; }); +function noop() {} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/path/area.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/path/area.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../adder */ "../../../node_modules/d3-geo/src/adder.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-geo/src/noop.js"); + + + + +var areaSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), + areaRingSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), + x00, + y00, + x0, + y0; + +var areaStream = { + point: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + lineStart: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + lineEnd: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + polygonStart: function() { + areaStream.lineStart = areaRingStart; + areaStream.lineEnd = areaRingEnd; + }, + polygonEnd: function() { + areaStream.lineStart = areaStream.lineEnd = areaStream.point = _noop__WEBPACK_IMPORTED_MODULE_2__["default"]; + areaSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(areaRingSum)); + areaRingSum.reset(); + }, + result: function() { + var area = areaSum / 2; + areaSum.reset(); + return area; + } +}; + +function areaRingStart() { + areaStream.point = areaPointFirst; +} + +function areaPointFirst(x, y) { + areaStream.point = areaPoint; + x00 = x0 = x, y00 = y0 = y; +} + +function areaPoint(x, y) { + areaRingSum.add(y0 * x - x0 * y); + x0 = x, y0 = y; +} + +function areaRingEnd() { + areaPoint(x00, y00); +} + +/* harmony default export */ __webpack_exports__["default"] = (areaStream); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/path/bounds.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/path/bounds.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-geo/src/noop.js"); + + +var x0 = Infinity, + y0 = x0, + x1 = -x0, + y1 = x1; + +var boundsStream = { + point: boundsPoint, + lineStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + lineEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + polygonStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + polygonEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + result: function() { + var bounds = [[x0, y0], [x1, y1]]; + x1 = y1 = -(y0 = x0 = Infinity); + return bounds; + } +}; + +function boundsPoint(x, y) { + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; +} + +/* harmony default export */ __webpack_exports__["default"] = (boundsStream); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/path/centroid.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/path/centroid.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); + + +// TODO Enforce positive area for exterior, negative area for interior? + +var X0 = 0, + Y0 = 0, + Z0 = 0, + X1 = 0, + Y1 = 0, + Z1 = 0, + X2 = 0, + Y2 = 0, + Z2 = 0, + x00, + y00, + x0, + y0; + +var centroidStream = { + point: centroidPoint, + lineStart: centroidLineStart, + lineEnd: centroidLineEnd, + polygonStart: function() { + centroidStream.lineStart = centroidRingStart; + centroidStream.lineEnd = centroidRingEnd; + }, + polygonEnd: function() { + centroidStream.point = centroidPoint; + centroidStream.lineStart = centroidLineStart; + centroidStream.lineEnd = centroidLineEnd; + }, + result: function() { + var centroid = Z2 ? [X2 / Z2, Y2 / Z2] + : Z1 ? [X1 / Z1, Y1 / Z1] + : Z0 ? [X0 / Z0, Y0 / Z0] + : [NaN, NaN]; + X0 = Y0 = Z0 = + X1 = Y1 = Z1 = + X2 = Y2 = Z2 = 0; + return centroid; + } +}; + +function centroidPoint(x, y) { + X0 += x; + Y0 += y; + ++Z0; +} + +function centroidLineStart() { + centroidStream.point = centroidPointFirstLine; +} + +function centroidPointFirstLine(x, y) { + centroidStream.point = centroidPointLine; + centroidPoint(x0 = x, y0 = y); +} + +function centroidPointLine(x, y) { + var dx = x - x0, dy = y - y0, z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(dx * dx + dy * dy); + X1 += z * (x0 + x) / 2; + Y1 += z * (y0 + y) / 2; + Z1 += z; + centroidPoint(x0 = x, y0 = y); +} + +function centroidLineEnd() { + centroidStream.point = centroidPoint; +} + +function centroidRingStart() { + centroidStream.point = centroidPointFirstRing; +} + +function centroidRingEnd() { + centroidPointRing(x00, y00); +} + +function centroidPointFirstRing(x, y) { + centroidStream.point = centroidPointRing; + centroidPoint(x00 = x0 = x, y00 = y0 = y); +} + +function centroidPointRing(x, y) { + var dx = x - x0, + dy = y - y0, + z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(dx * dx + dy * dy); + + X1 += z * (x0 + x) / 2; + Y1 += z * (y0 + y) / 2; + Z1 += z; + + z = y0 * x - x0 * y; + X2 += z * (x0 + x); + Y2 += z * (y0 + y); + Z2 += z * 3; + centroidPoint(x0 = x, y0 = y); +} + +/* harmony default export */ __webpack_exports__["default"] = (centroidStream); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/path/context.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/path/context.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PathContext; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-geo/src/noop.js"); + + + +function PathContext(context) { + this._context = context; +} + +PathContext.prototype = { + _radius: 4.5, + pointRadius: function(_) { + return this._radius = _, this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._context.closePath(); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._context.moveTo(x, y); + this._point = 1; + break; + } + case 1: { + this._context.lineTo(x, y); + break; + } + default: { + this._context.moveTo(x + this._radius, y); + this._context.arc(x, y, this._radius, 0, _math__WEBPACK_IMPORTED_MODULE_0__["tau"]); + break; + } + } + }, + result: _noop__WEBPACK_IMPORTED_MODULE_1__["default"] +}; + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/path/index.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/path/index.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../identity */ "../../../node_modules/d3-geo/src/identity.js"); +/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stream */ "../../../node_modules/d3-geo/src/stream.js"); +/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./area */ "../../../node_modules/d3-geo/src/path/area.js"); +/* harmony import */ var _bounds__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bounds */ "../../../node_modules/d3-geo/src/path/bounds.js"); +/* harmony import */ var _centroid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./centroid */ "../../../node_modules/d3-geo/src/path/centroid.js"); +/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./context */ "../../../node_modules/d3-geo/src/path/context.js"); +/* harmony import */ var _measure__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./measure */ "../../../node_modules/d3-geo/src/path/measure.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./string */ "../../../node_modules/d3-geo/src/path/string.js"); + + + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function(projection, context) { + var pointRadius = 4.5, + projectionStream, + contextStream; + + function path(object) { + if (object) { + if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); + Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(contextStream)); + } + return contextStream.result(); + } + + path.area = function(object) { + Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(_area__WEBPACK_IMPORTED_MODULE_2__["default"])); + return _area__WEBPACK_IMPORTED_MODULE_2__["default"].result(); + }; + + path.measure = function(object) { + Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(_measure__WEBPACK_IMPORTED_MODULE_6__["default"])); + return _measure__WEBPACK_IMPORTED_MODULE_6__["default"].result(); + }; + + path.bounds = function(object) { + Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(_bounds__WEBPACK_IMPORTED_MODULE_3__["default"])); + return _bounds__WEBPACK_IMPORTED_MODULE_3__["default"].result(); + }; + + path.centroid = function(object) { + Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(_centroid__WEBPACK_IMPORTED_MODULE_4__["default"])); + return _centroid__WEBPACK_IMPORTED_MODULE_4__["default"].result(); + }; + + path.projection = function(_) { + return arguments.length ? (projectionStream = _ == null ? (projection = null, _identity__WEBPACK_IMPORTED_MODULE_0__["default"]) : (projection = _).stream, path) : projection; + }; + + path.context = function(_) { + if (!arguments.length) return context; + contextStream = _ == null ? (context = null, new _string__WEBPACK_IMPORTED_MODULE_7__["default"]) : new _context__WEBPACK_IMPORTED_MODULE_5__["default"](context = _); + if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); + return path; + }; + + path.pointRadius = function(_) { + if (!arguments.length) return pointRadius; + pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); + return path; + }; + + return path.projection(projection).context(context); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/path/measure.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/path/measure.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../adder */ "../../../node_modules/d3-geo/src/adder.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-geo/src/noop.js"); + + + + +var lengthSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), + lengthRing, + x00, + y00, + x0, + y0; + +var lengthStream = { + point: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], + lineStart: function() { + lengthStream.point = lengthPointFirst; + }, + lineEnd: function() { + if (lengthRing) lengthPoint(x00, y00); + lengthStream.point = _noop__WEBPACK_IMPORTED_MODULE_2__["default"]; + }, + polygonStart: function() { + lengthRing = true; + }, + polygonEnd: function() { + lengthRing = null; + }, + result: function() { + var length = +lengthSum; + lengthSum.reset(); + return length; + } +}; + +function lengthPointFirst(x, y) { + lengthStream.point = lengthPoint; + x00 = x0 = x, y00 = y0 = y; +} + +function lengthPoint(x, y) { + x0 -= x, y0 -= y; + lengthSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_1__["sqrt"])(x0 * x0 + y0 * y0)); + x0 = x, y0 = y; +} + +/* harmony default export */ __webpack_exports__["default"] = (lengthStream); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/path/string.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/path/string.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PathString; }); +function PathString() { + this._string = []; +} + +PathString.prototype = { + _radius: 4.5, + _circle: circle(4.5), + pointRadius: function(_) { + if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; + return this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._string.push("Z"); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._string.push("M", x, ",", y); + this._point = 1; + break; + } + case 1: { + this._string.push("L", x, ",", y); + break; + } + default: { + if (this._circle == null) this._circle = circle(this._radius); + this._string.push("M", x, ",", y, this._circle); + break; + } + } + }, + result: function() { + if (this._string.length) { + var result = this._string.join(""); + this._string = []; + return result; + } else { + return null; + } + } +}; + +function circle(radius) { + return "m0," + radius + + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + + "z"; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/pointEqual.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/pointEqual.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + return Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(a[0] - b[0]) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"] && Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(a[1] - b[1]) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/polygonContains.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/polygonContains.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder */ "../../../node_modules/d3-geo/src/adder.js"); +/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cartesian */ "../../../node_modules/d3-geo/src/cartesian.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); + + + + +var sum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(); + +/* harmony default export */ __webpack_exports__["default"] = (function(polygon, point) { + var lambda = point[0], + phi = point[1], + sinPhi = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(phi), + normal = [Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(lambda), -Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(lambda), 0], + angle = 0, + winding = 0; + + sum.reset(); + + if (sinPhi === 1) phi = _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] + _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; + else if (sinPhi === -1) phi = -_math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; + + for (var i = 0, n = polygon.length; i < n; ++i) { + if (!(m = (ring = polygon[i]).length)) continue; + var ring, + m, + point0 = ring[m - 1], + lambda0 = point0[0], + phi0 = point0[1] / 2 + _math__WEBPACK_IMPORTED_MODULE_2__["quarterPi"], + sinPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(phi0), + cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(phi0); + + for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { + var point1 = ring[j], + lambda1 = point1[0], + phi1 = point1[1] / 2 + _math__WEBPACK_IMPORTED_MODULE_2__["quarterPi"], + sinPhi1 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(phi1), + cosPhi1 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(phi1), + delta = lambda1 - lambda0, + sign = delta >= 0 ? 1 : -1, + absDelta = sign * delta, + antimeridian = absDelta > _math__WEBPACK_IMPORTED_MODULE_2__["pi"], + k = sinPhi0 * sinPhi1; + + sum.add(Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(k * sign * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(absDelta), cosPhi0 * cosPhi1 + k * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(absDelta))); + angle += antimeridian ? delta + sign * _math__WEBPACK_IMPORTED_MODULE_2__["tau"] : delta; + + // Are the longitudes either side of the point’s meridian (lambda), + // and are the latitudes smaller than the parallel (phi)? + if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { + var arc = Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesianCross"])(Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesian"])(point0), Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesian"])(point1)); + Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesianNormalizeInPlace"])(arc); + var intersection = Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesianCross"])(normal, arc); + Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesianNormalizeInPlace"])(intersection); + var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * Object(_math__WEBPACK_IMPORTED_MODULE_2__["asin"])(intersection[2]); + if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { + winding += antimeridian ^ delta >= 0 ? 1 : -1; + } + } + } + } + + // First, determine whether the South pole is inside or outside: + // + // It is inside if: + // * the polygon winds around it in a clockwise direction. + // * the polygon does not (cumulatively) wind around it, but has a negative + // (counter-clockwise) area. + // + // Second, count the (signed) number of times a segment crosses a lambda + // from the point to the South pole. If it is zero, then the point is the + // same side as the South pole. + + return (angle < -_math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] || angle < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] && sum < -_math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) ^ (winding & 1); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/albers.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/albers.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _conicEqualArea__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conicEqualArea */ "../../../node_modules/d3-geo/src/projection/conicEqualArea.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_conicEqualArea__WEBPACK_IMPORTED_MODULE_0__["default"])() + .parallels([29.5, 45.5]) + .scale(1070) + .translate([480, 250]) + .rotate([96, 0]) + .center([-0.6, 38.7]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/albersUsa.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/albersUsa.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _albers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./albers */ "../../../node_modules/d3-geo/src/projection/albers.js"); +/* harmony import */ var _conicEqualArea__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conicEqualArea */ "../../../node_modules/d3-geo/src/projection/conicEqualArea.js"); +/* harmony import */ var _fit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fit */ "../../../node_modules/d3-geo/src/projection/fit.js"); + + + + + +// The projections must have mutually exclusive clip regions on the sphere, +// as this will avoid emitting interleaving lines and polygons. +function multiplex(streams) { + var n = streams.length; + return { + point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, + sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, + lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, + lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, + polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, + polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } + }; +} + +// A composite projection for the United States, configured by default for +// 960×500. The projection also works quite well at 960×600 if you change the +// scale to 1285 and adjust the translate accordingly. The set of standard +// parallels for each region comes from USGS, which is published here: +// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers +/* harmony default export */ __webpack_exports__["default"] = (function() { + var cache, + cacheStream, + lower48 = Object(_albers__WEBPACK_IMPORTED_MODULE_1__["default"])(), lower48Point, + alaska = Object(_conicEqualArea__WEBPACK_IMPORTED_MODULE_2__["default"])().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 + hawaii = Object(_conicEqualArea__WEBPACK_IMPORTED_MODULE_2__["default"])().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 + point, pointStream = {point: function(x, y) { point = [x, y]; }}; + + function albersUsa(coordinates) { + var x = coordinates[0], y = coordinates[1]; + return point = null, + (lower48Point.point(x, y), point) + || (alaskaPoint.point(x, y), point) + || (hawaiiPoint.point(x, y), point); + } + + albersUsa.invert = function(coordinates) { + var k = lower48.scale(), + t = lower48.translate(), + x = (coordinates[0] - t[0]) / k, + y = (coordinates[1] - t[1]) / k; + return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska + : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii + : lower48).invert(coordinates); + }; + + albersUsa.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); + }; + + albersUsa.precision = function(_) { + if (!arguments.length) return lower48.precision(); + lower48.precision(_), alaska.precision(_), hawaii.precision(_); + return reset(); + }; + + albersUsa.scale = function(_) { + if (!arguments.length) return lower48.scale(); + lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); + return albersUsa.translate(lower48.translate()); + }; + + albersUsa.translate = function(_) { + if (!arguments.length) return lower48.translate(); + var k = lower48.scale(), x = +_[0], y = +_[1]; + + lower48Point = lower48 + .translate(_) + .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) + .stream(pointStream); + + alaskaPoint = alaska + .translate([x - 0.307 * k, y + 0.201 * k]) + .clipExtent([[x - 0.425 * k + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"], y + 0.120 * k + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]], [x - 0.214 * k - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"], y + 0.234 * k - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]]]) + .stream(pointStream); + + hawaiiPoint = hawaii + .translate([x - 0.205 * k, y + 0.212 * k]) + .clipExtent([[x - 0.214 * k + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"], y + 0.166 * k + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]], [x - 0.115 * k - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"], y + 0.234 * k - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]]]) + .stream(pointStream); + + return reset(); + }; + + albersUsa.fitExtent = function(extent, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitExtent"])(albersUsa, extent, object); + }; + + albersUsa.fitSize = function(size, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitSize"])(albersUsa, size, object); + }; + + albersUsa.fitWidth = function(width, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitWidth"])(albersUsa, width, object); + }; + + albersUsa.fitHeight = function(height, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitHeight"])(albersUsa, height, object); + }; + + function reset() { + cache = cacheStream = null; + return albersUsa; + } + + return albersUsa.scale(1070); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/azimuthal.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/azimuthal.js ***! + \******************************************************************************************************************/ +/*! exports provided: azimuthalRaw, azimuthalInvert */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "azimuthalRaw", function() { return azimuthalRaw; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "azimuthalInvert", function() { return azimuthalInvert; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); + + +function azimuthalRaw(scale) { + return function(x, y) { + var cx = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x), + cy = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y), + k = scale(cx * cy); + return [ + k * cy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x), + k * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y) + ]; + } +} + +function azimuthalInvert(angle) { + return function(x, y) { + var z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(x * x + y * y), + c = angle(z), + sc = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(c), + cc = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(c); + return [ + Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(x * sc, z * cc), + Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(z && y * sc / z) + ]; + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js": +/*!***************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/azimuthalEqualArea.js ***! + \***************************************************************************************************************************/ +/*! exports provided: azimuthalEqualAreaRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "azimuthalEqualAreaRaw", function() { return azimuthalEqualAreaRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "../../../node_modules/d3-geo/src/projection/azimuthal.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); + + + + +var azimuthalEqualAreaRaw = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalRaw"])(function(cxcy) { + return Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(2 / (1 + cxcy)); +}); + +azimuthalEqualAreaRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(function(z) { + return 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(z / 2); +}); + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(azimuthalEqualAreaRaw) + .scale(124.75) + .clipAngle(180 - 1e-3); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js": +/*!*****************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/azimuthalEquidistant.js ***! + \*****************************************************************************************************************************/ +/*! exports provided: azimuthalEquidistantRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "azimuthalEquidistantRaw", function() { return azimuthalEquidistantRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "../../../node_modules/d3-geo/src/projection/azimuthal.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); + + + + +var azimuthalEquidistantRaw = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalRaw"])(function(c) { + return (c = Object(_math__WEBPACK_IMPORTED_MODULE_0__["acos"])(c)) && c / Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(c); +}); + +azimuthalEquidistantRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(function(z) { + return z; +}); + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(azimuthalEquidistantRaw) + .scale(79.4188) + .clipAngle(180 - 1e-3); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/conic.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/conic.js ***! + \**************************************************************************************************************/ +/*! exports provided: conicProjection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conicProjection", function() { return conicProjection; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); + + + +function conicProjection(projectAt) { + var phi0 = 0, + phi1 = _math__WEBPACK_IMPORTED_MODULE_0__["pi"] / 3, + m = Object(_index__WEBPACK_IMPORTED_MODULE_1__["projectionMutator"])(projectAt), + p = m(phi0, phi1); + + p.parallels = function(_) { + return arguments.length ? m(phi0 = _[0] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi1 = _[1] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"]) : [phi0 * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"], phi1 * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"]]; + }; + + return p; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/conicConformal.js": +/*!***********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/conicConformal.js ***! + \***********************************************************************************************************************/ +/*! exports provided: conicConformalRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conicConformalRaw", function() { return conicConformalRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _conic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conic */ "../../../node_modules/d3-geo/src/projection/conic.js"); +/* harmony import */ var _mercator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mercator */ "../../../node_modules/d3-geo/src/projection/mercator.js"); + + + + +function tany(y) { + return Object(_math__WEBPACK_IMPORTED_MODULE_0__["tan"])((_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + y) / 2); +} + +function conicConformalRaw(y0, y1) { + var cy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y0), + n = y0 === y1 ? Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y0) : Object(_math__WEBPACK_IMPORTED_MODULE_0__["log"])(cy0 / Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y1)) / Object(_math__WEBPACK_IMPORTED_MODULE_0__["log"])(tany(y1) / tany(y0)), + f = cy0 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["pow"])(tany(y0), n) / n; + + if (!n) return _mercator__WEBPACK_IMPORTED_MODULE_2__["mercatorRaw"]; + + function project(x, y) { + if (f > 0) { if (y < -_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) y = -_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]; } + else { if (y > _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) y = _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]; } + var r = f / Object(_math__WEBPACK_IMPORTED_MODULE_0__["pow"])(tany(y), n); + return [r * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(n * x), f - r * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(n * x)]; + } + + project.invert = function(x, y) { + var fy = f - y, r = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(n) * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(x * x + fy * fy); + return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(x, Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(fy)) / n * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(fy), 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["pow"])(f / r, 1 / n)) - _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"]]; + }; + + return project; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_conic__WEBPACK_IMPORTED_MODULE_1__["conicProjection"])(conicConformalRaw) + .scale(109.5) + .parallels([30, 30]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/conicEqualArea.js": +/*!***********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/conicEqualArea.js ***! + \***********************************************************************************************************************/ +/*! exports provided: conicEqualAreaRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conicEqualAreaRaw", function() { return conicEqualAreaRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _conic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conic */ "../../../node_modules/d3-geo/src/projection/conic.js"); +/* harmony import */ var _cylindricalEqualArea__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cylindricalEqualArea */ "../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js"); + + + + +function conicEqualAreaRaw(y0, y1) { + var sy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y0), n = (sy0 + Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y1)) / 2; + + // Are the parallels symmetrical around the Equator? + if (Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(n) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) return Object(_cylindricalEqualArea__WEBPACK_IMPORTED_MODULE_2__["cylindricalEqualAreaRaw"])(y0); + + var c = 1 + sy0 * (2 * n - sy0), r0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(c) / n; + + function project(x, y) { + var r = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(c - 2 * n * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y)) / n; + return [r * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x *= n), r0 - r * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x)]; + } + + project.invert = function(x, y) { + var r0y = r0 - y; + return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(x, Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(r0y)) / n * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(r0y), Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; + }; + + return project; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_conic__WEBPACK_IMPORTED_MODULE_1__["conicProjection"])(conicEqualAreaRaw) + .scale(155.424) + .center([0, 33.6442]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/conicEquidistant.js": +/*!*************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/conicEquidistant.js ***! + \*************************************************************************************************************************/ +/*! exports provided: conicEquidistantRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conicEquidistantRaw", function() { return conicEquidistantRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _conic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conic */ "../../../node_modules/d3-geo/src/projection/conic.js"); +/* harmony import */ var _equirectangular__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./equirectangular */ "../../../node_modules/d3-geo/src/projection/equirectangular.js"); + + + + +function conicEquidistantRaw(y0, y1) { + var cy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y0), + n = y0 === y1 ? Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y0) : (cy0 - Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y1)) / (y1 - y0), + g = cy0 / n + y0; + + if (Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(n) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) return _equirectangular__WEBPACK_IMPORTED_MODULE_2__["equirectangularRaw"]; + + function project(x, y) { + var gy = g - y, nx = n * x; + return [gy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(nx), g - gy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(nx)]; + } + + project.invert = function(x, y) { + var gy = g - y; + return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(x, Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(gy)) / n * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(gy), g - Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(n) * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(x * x + gy * gy)]; + }; + + return project; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_conic__WEBPACK_IMPORTED_MODULE_1__["conicProjection"])(conicEquidistantRaw) + .scale(131.154) + .center([0, 13.9389]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js": +/*!*****************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/cylindricalEqualArea.js ***! + \*****************************************************************************************************************************/ +/*! exports provided: cylindricalEqualAreaRaw */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cylindricalEqualAreaRaw", function() { return cylindricalEqualAreaRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); + + +function cylindricalEqualAreaRaw(phi0) { + var cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi0); + + function forward(lambda, phi) { + return [lambda * cosPhi0, Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi) / cosPhi0]; + } + + forward.invert = function(x, y) { + return [x / cosPhi0, Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(y * cosPhi0)]; + }; + + return forward; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/equalEarth.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/equalEarth.js ***! + \*******************************************************************************************************************/ +/*! exports provided: equalEarthRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "equalEarthRaw", function() { return equalEarthRaw; }); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "../../../node_modules/d3-geo/src/projection/index.js"); +/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ "../../../node_modules/d3-geo/src/math.js"); + + + +var A1 = 1.340264, + A2 = -0.081106, + A3 = 0.000893, + A4 = 0.003796, + M = Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["sqrt"])(3) / 2, + iterations = 12; + +function equalEarthRaw(lambda, phi) { + var l = Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["asin"])(M * Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi)), l2 = l * l, l6 = l2 * l2 * l2; + return [ + lambda * Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["cos"])(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))), + l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) + ]; +} + +equalEarthRaw.invert = function(x, y) { + var l = y, l2 = l * l, l6 = l2 * l2 * l2; + for (var i = 0, delta, fy, fpy; i < iterations; ++i) { + fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y; + fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2); + l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2; + if (Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["abs"])(delta) < _math_js__WEBPACK_IMPORTED_MODULE_1__["epsilon2"]) break; + } + return [ + M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["cos"])(l), + Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["asin"])(Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["sin"])(l) / M) + ]; +}; + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_index_js__WEBPACK_IMPORTED_MODULE_0__["default"])(equalEarthRaw) + .scale(177.158); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/equirectangular.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/equirectangular.js ***! + \************************************************************************************************************************/ +/*! exports provided: equirectangularRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "equirectangularRaw", function() { return equirectangularRaw; }); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); + + +function equirectangularRaw(lambda, phi) { + return [lambda, phi]; +} + +equirectangularRaw.invert = equirectangularRaw; + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_index__WEBPACK_IMPORTED_MODULE_0__["default"])(equirectangularRaw) + .scale(152.63); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/fit.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/fit.js ***! + \************************************************************************************************************/ +/*! exports provided: fitExtent, fitSize, fitWidth, fitHeight */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fitExtent", function() { return fitExtent; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fitSize", function() { return fitSize; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fitWidth", function() { return fitWidth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fitHeight", function() { return fitHeight; }); +/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../stream */ "../../../node_modules/d3-geo/src/stream.js"); +/* harmony import */ var _path_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../path/bounds */ "../../../node_modules/d3-geo/src/path/bounds.js"); + + + +function fit(projection, fitBounds, object) { + var clip = projection.clipExtent && projection.clipExtent(); + projection.scale(150).translate([0, 0]); + if (clip != null) projection.clipExtent(null); + Object(_stream__WEBPACK_IMPORTED_MODULE_0__["default"])(object, projection.stream(_path_bounds__WEBPACK_IMPORTED_MODULE_1__["default"])); + fitBounds(_path_bounds__WEBPACK_IMPORTED_MODULE_1__["default"].result()); + if (clip != null) projection.clipExtent(clip); + return projection; +} + +function fitExtent(projection, extent, object) { + return fit(projection, function(b) { + var w = extent[1][0] - extent[0][0], + h = extent[1][1] - extent[0][1], + k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), + x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, + y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +function fitSize(projection, size, object) { + return fitExtent(projection, [[0, 0], size], object); +} + +function fitWidth(projection, width, object) { + return fit(projection, function(b) { + var w = +width, + k = w / (b[1][0] - b[0][0]), + x = (w - k * (b[1][0] + b[0][0])) / 2, + y = -k * b[0][1]; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +function fitHeight(projection, height, object) { + return fit(projection, function(b) { + var h = +height, + k = h / (b[1][1] - b[0][1]), + x = -k * b[0][0], + y = (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/gnomonic.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/gnomonic.js ***! + \*****************************************************************************************************************/ +/*! exports provided: gnomonicRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gnomonicRaw", function() { return gnomonicRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "../../../node_modules/d3-geo/src/projection/azimuthal.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); + + + + +function gnomonicRaw(x, y) { + var cy = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y), k = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x) * cy; + return [cy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x) / k, Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y) / k]; +} + +gnomonicRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(_math__WEBPACK_IMPORTED_MODULE_0__["atan"]); + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(gnomonicRaw) + .scale(144.049) + .clipAngle(60); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/identity.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/identity.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _clip_rectangle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../clip/rectangle */ "../../../node_modules/d3-geo/src/clip/rectangle.js"); +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../identity */ "../../../node_modules/d3-geo/src/identity.js"); +/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transform */ "../../../node_modules/d3-geo/src/transform.js"); +/* harmony import */ var _fit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fit */ "../../../node_modules/d3-geo/src/projection/fit.js"); + + + + + +function scaleTranslate(kx, ky, tx, ty) { + return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? _identity__WEBPACK_IMPORTED_MODULE_1__["default"] : Object(_transform__WEBPACK_IMPORTED_MODULE_2__["transformer"])({ + point: function(x, y) { + this.stream.point(x * kx + tx, y * ky + ty); + } + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = _identity__WEBPACK_IMPORTED_MODULE_1__["default"], // scale, translate and reflect + x0 = null, y0, x1, y1, // clip extent + postclip = _identity__WEBPACK_IMPORTED_MODULE_1__["default"], + cache, + cacheStream, + projection; + + function reset() { + cache = cacheStream = null; + return projection; + } + + return projection = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); + }, + postclip: function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }, + clipExtent: function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, _identity__WEBPACK_IMPORTED_MODULE_1__["default"]) : Object(_clip_rectangle__WEBPACK_IMPORTED_MODULE_0__["default"])(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }, + scale: function(_) { + return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k; + }, + translate: function(_) { + return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; + }, + reflectX: function(_) { + return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; + }, + reflectY: function(_) { + return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; + }, + fitExtent: function(extent, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitExtent"])(projection, extent, object); + }, + fitSize: function(size, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitSize"])(projection, size, object); + }, + fitWidth: function(width, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitWidth"])(projection, width, object); + }, + fitHeight: function(height, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitHeight"])(projection, height, object); + } + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/index.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/index.js ***! + \**************************************************************************************************************/ +/*! exports provided: default, projectionMutator */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return projection; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "projectionMutator", function() { return projectionMutator; }); +/* harmony import */ var _clip_antimeridian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../clip/antimeridian */ "../../../node_modules/d3-geo/src/clip/antimeridian.js"); +/* harmony import */ var _clip_circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../clip/circle */ "../../../node_modules/d3-geo/src/clip/circle.js"); +/* harmony import */ var _clip_rectangle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../clip/rectangle */ "../../../node_modules/d3-geo/src/clip/rectangle.js"); +/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../compose */ "../../../node_modules/d3-geo/src/compose.js"); +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../identity */ "../../../node_modules/d3-geo/src/identity.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _rotation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../rotation */ "../../../node_modules/d3-geo/src/rotation.js"); +/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../transform */ "../../../node_modules/d3-geo/src/transform.js"); +/* harmony import */ var _fit__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./fit */ "../../../node_modules/d3-geo/src/projection/fit.js"); +/* harmony import */ var _resample__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./resample */ "../../../node_modules/d3-geo/src/projection/resample.js"); + + + + + + + + + + + +var transformRadians = Object(_transform__WEBPACK_IMPORTED_MODULE_7__["transformer"])({ + point: function(x, y) { + this.stream.point(x * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], y * _math__WEBPACK_IMPORTED_MODULE_5__["radians"]); + } +}); + +function transformRotate(rotate) { + return Object(_transform__WEBPACK_IMPORTED_MODULE_7__["transformer"])({ + point: function(x, y) { + var r = rotate(x, y); + return this.stream.point(r[0], r[1]); + } + }); +} + +function scaleTranslate(k, dx, dy) { + function transform(x, y) { + return [dx + k * x, dy - k * y]; + } + transform.invert = function(x, y) { + return [(x - dx) / k, (dy - y) / k]; + }; + return transform; +} + +function scaleTranslateRotate(k, dx, dy, alpha) { + var cosAlpha = Object(_math__WEBPACK_IMPORTED_MODULE_5__["cos"])(alpha), + sinAlpha = Object(_math__WEBPACK_IMPORTED_MODULE_5__["sin"])(alpha), + a = cosAlpha * k, + b = sinAlpha * k, + ai = cosAlpha / k, + bi = sinAlpha / k, + ci = (sinAlpha * dy - cosAlpha * dx) / k, + fi = (sinAlpha * dx + cosAlpha * dy) / k; + function transform(x, y) { + return [a * x - b * y + dx, dy - b * x - a * y]; + } + transform.invert = function(x, y) { + return [ai * x - bi * y + ci, fi - bi * x - ai * y]; + }; + return transform; +} + +function projection(project) { + return projectionMutator(function() { return project; })(); +} + +function projectionMutator(projectAt) { + var project, + k = 150, // scale + x = 480, y = 250, // translate + lambda = 0, phi = 0, // center + deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate + alpha = 0, // post-rotate + theta = null, preclip = _clip_antimeridian__WEBPACK_IMPORTED_MODULE_0__["default"], // pre-clip angle + x0 = null, y0, x1, y1, postclip = _identity__WEBPACK_IMPORTED_MODULE_4__["default"], // post-clip extent + delta2 = 0.5, // precision + projectResample, + projectTransform, + projectRotateTransform, + cache, + cacheStream; + + function projection(point) { + return projectRotateTransform(point[0] * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], point[1] * _math__WEBPACK_IMPORTED_MODULE_5__["radians"]); + } + + function invert(point) { + point = projectRotateTransform.invert(point[0], point[1]); + return point && [point[0] * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"], point[1] * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]]; + } + + projection.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); + }; + + projection.preclip = function(_) { + return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; + }; + + projection.postclip = function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }; + + projection.clipAngle = function(_) { + return arguments.length ? (preclip = +_ ? Object(_clip_circle__WEBPACK_IMPORTED_MODULE_1__["default"])(theta = _ * _math__WEBPACK_IMPORTED_MODULE_5__["radians"]) : (theta = null, _clip_antimeridian__WEBPACK_IMPORTED_MODULE_0__["default"]), reset()) : theta * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]; + }; + + projection.clipExtent = function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, _identity__WEBPACK_IMPORTED_MODULE_4__["default"]) : Object(_clip_rectangle__WEBPACK_IMPORTED_MODULE_2__["default"])(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; + + projection.scale = function(_) { + return arguments.length ? (k = +_, recenter()) : k; + }; + + projection.translate = function(_) { + return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; + }; + + projection.center = function(_) { + return arguments.length ? (lambda = _[0] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], phi = _[1] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], recenter()) : [lambda * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"], phi * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]]; + }; + + projection.rotate = function(_) { + return arguments.length ? (deltaLambda = _[0] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], deltaPhi = _[1] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], deltaGamma = _.length > 2 ? _[2] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"] : 0, recenter()) : [deltaLambda * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"], deltaPhi * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"], deltaGamma * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]]; + }; + + projection.angle = function(_) { + return arguments.length ? (alpha = _ % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], recenter()) : alpha * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]; + }; + + projection.precision = function(_) { + return arguments.length ? (projectResample = Object(_resample__WEBPACK_IMPORTED_MODULE_9__["default"])(projectTransform, delta2 = _ * _), reset()) : Object(_math__WEBPACK_IMPORTED_MODULE_5__["sqrt"])(delta2); + }; + + projection.fitExtent = function(extent, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_8__["fitExtent"])(projection, extent, object); + }; + + projection.fitSize = function(size, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_8__["fitSize"])(projection, size, object); + }; + + projection.fitWidth = function(width, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_8__["fitWidth"])(projection, width, object); + }; + + projection.fitHeight = function(height, object) { + return Object(_fit__WEBPACK_IMPORTED_MODULE_8__["fitHeight"])(projection, height, object); + }; + + function recenter() { + var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)), + transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha); + rotate = Object(_rotation__WEBPACK_IMPORTED_MODULE_6__["rotateRadians"])(deltaLambda, deltaPhi, deltaGamma); + projectTransform = Object(_compose__WEBPACK_IMPORTED_MODULE_3__["default"])(project, transform); + projectRotateTransform = Object(_compose__WEBPACK_IMPORTED_MODULE_3__["default"])(rotate, projectTransform); + projectResample = Object(_resample__WEBPACK_IMPORTED_MODULE_9__["default"])(projectTransform, delta2); + return reset(); + } + + function reset() { + cache = cacheStream = null; + return projection; + } + + return function() { + project = projectAt.apply(this, arguments); + projection.invert = project.invert && invert; + return recenter(); + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/mercator.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/mercator.js ***! + \*****************************************************************************************************************/ +/*! exports provided: mercatorRaw, default, mercatorProjection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mercatorRaw", function() { return mercatorRaw; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mercatorProjection", function() { return mercatorProjection; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _rotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../rotation */ "../../../node_modules/d3-geo/src/rotation.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); + + + + +function mercatorRaw(lambda, phi) { + return [lambda, Object(_math__WEBPACK_IMPORTED_MODULE_0__["log"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["tan"])((_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + phi) / 2))]; +} + +mercatorRaw.invert = function(x, y) { + return [x, 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["exp"])(y)) - _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"]]; +}; + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return mercatorProjection(mercatorRaw) + .scale(961 / _math__WEBPACK_IMPORTED_MODULE_0__["tau"]); +}); + +function mercatorProjection(project) { + var m = Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(project), + center = m.center, + scale = m.scale, + translate = m.translate, + clipExtent = m.clipExtent, + x0 = null, y0, x1, y1; // clip extent + + m.scale = function(_) { + return arguments.length ? (scale(_), reclip()) : scale(); + }; + + m.translate = function(_) { + return arguments.length ? (translate(_), reclip()) : translate(); + }; + + m.center = function(_) { + return arguments.length ? (center(_), reclip()) : center(); + }; + + m.clipExtent = function(_) { + return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; + + function reclip() { + var k = _math__WEBPACK_IMPORTED_MODULE_0__["pi"] * scale(), + t = m(Object(_rotation__WEBPACK_IMPORTED_MODULE_1__["default"])(m.rotate()).invert([0, 0])); + return clipExtent(x0 == null + ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw + ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] + : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); + } + + return reclip(); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/naturalEarth1.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/naturalEarth1.js ***! + \**********************************************************************************************************************/ +/*! exports provided: naturalEarth1Raw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "naturalEarth1Raw", function() { return naturalEarth1Raw; }); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); + + + +function naturalEarth1Raw(lambda, phi) { + var phi2 = phi * phi, phi4 = phi2 * phi2; + return [ + lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), + phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) + ]; +} + +naturalEarth1Raw.invert = function(x, y) { + var phi = y, i = 25, delta; + do { + var phi2 = phi * phi, phi4 = phi2 * phi2; + phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / + (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); + } while (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(delta) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && --i > 0); + return [ + x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), + phi + ]; +}; + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_index__WEBPACK_IMPORTED_MODULE_0__["default"])(naturalEarth1Raw) + .scale(175.295); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/orthographic.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/orthographic.js ***! + \*********************************************************************************************************************/ +/*! exports provided: orthographicRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "orthographicRaw", function() { return orthographicRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "../../../node_modules/d3-geo/src/projection/azimuthal.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); + + + + +function orthographicRaw(x, y) { + return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y) * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x), Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y)]; +} + +orthographicRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(_math__WEBPACK_IMPORTED_MODULE_0__["asin"]); + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(orthographicRaw) + .scale(249.5) + .clipAngle(90 + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/resample.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/resample.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cartesian */ "../../../node_modules/d3-geo/src/cartesian.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transform */ "../../../node_modules/d3-geo/src/transform.js"); + + + + +var maxDepth = 16, // maximum depth of subdivision + cosMinDistance = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(30 * _math__WEBPACK_IMPORTED_MODULE_1__["radians"]); // cos(minimum angular distance) + +/* harmony default export */ __webpack_exports__["default"] = (function(project, delta2) { + return +delta2 ? resample(project, delta2) : resampleNone(project); +}); + +function resampleNone(project) { + return Object(_transform__WEBPACK_IMPORTED_MODULE_2__["transformer"])({ + point: function(x, y) { + x = project(x, y); + this.stream.point(x[0], x[1]); + } + }); +} + +function resample(project, delta2) { + + function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, + dy = y1 - y0, + d2 = dx * dx + dy * dy; + if (d2 > 4 * delta2 && depth--) { + var a = a0 + a1, + b = b0 + b1, + c = c0 + c1, + m = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sqrt"])(a * a + b * b + c * c), + phi2 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["asin"])(c /= m), + lambda2 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(c) - 1) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"] || Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda0 - lambda1) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? (lambda0 + lambda1) / 2 : Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(b, a), + p = project(lambda2, phi2), + x2 = p[0], + y2 = p[1], + dx2 = x2 - x0, + dy2 = y2 - y0, + dz = dy * dx2 - dx * dy2; + if (dz * dz / d2 > delta2 // perpendicular projected distance + || Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end + || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); + stream.point(x2, y2); + resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); + } + } + } + return function(stream) { + var lambda00, x00, y00, a00, b00, c00, // first point + lambda0, x0, y0, a0, b0, c0; // previous point + + var resampleStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, + polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } + }; + + function point(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + } + + function lineStart() { + x0 = NaN; + resampleStream.point = linePoint; + stream.lineStart(); + } + + function linePoint(lambda, phi) { + var c = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesian"])([lambda, phi]), p = project(lambda, phi); + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); + stream.point(x0, y0); + } + + function lineEnd() { + resampleStream.point = point; + stream.lineEnd(); + } + + function ringStart() { + lineStart(); + resampleStream.point = ringPoint; + resampleStream.lineEnd = ringEnd; + } + + function ringPoint(lambda, phi) { + linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; + resampleStream.point = linePoint; + } + + function ringEnd() { + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); + resampleStream.lineEnd = lineEnd; + lineEnd(); + } + + return resampleStream; + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/stereographic.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/stereographic.js ***! + \**********************************************************************************************************************/ +/*! exports provided: stereographicRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stereographicRaw", function() { return stereographicRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "../../../node_modules/d3-geo/src/projection/azimuthal.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-geo/src/projection/index.js"); + + + + +function stereographicRaw(x, y) { + var cy = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y), k = 1 + Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x) * cy; + return [cy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x) / k, Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y) / k]; +} + +stereographicRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(function(z) { + return 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan"])(z); +}); + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(stereographicRaw) + .scale(250) + .clipAngle(142); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/projection/transverseMercator.js": +/*!***************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/projection/transverseMercator.js ***! + \***************************************************************************************************************************/ +/*! exports provided: transverseMercatorRaw, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transverseMercatorRaw", function() { return transverseMercatorRaw; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-geo/src/math.js"); +/* harmony import */ var _mercator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mercator */ "../../../node_modules/d3-geo/src/projection/mercator.js"); + + + +function transverseMercatorRaw(lambda, phi) { + return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["log"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["tan"])((_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + phi) / 2)), -lambda]; +} + +transverseMercatorRaw.invert = function(x, y) { + return [-y, 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["exp"])(x)) - _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"]]; +}; + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var m = Object(_mercator__WEBPACK_IMPORTED_MODULE_1__["mercatorProjection"])(transverseMercatorRaw), + center = m.center, + rotate = m.rotate; + + m.center = function(_) { + return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); + }; + + m.rotate = function(_) { + return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); + }; + + return rotate([0, 0, 90]) + .scale(159.155); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/rotation.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/rotation.js ***! + \******************************************************************************************************/ +/*! exports provided: rotateRadians, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotateRadians", function() { return rotateRadians; }); +/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./compose */ "../../../node_modules/d3-geo/src/compose.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-geo/src/math.js"); + + + +function rotationIdentity(lambda, phi) { + return [Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda) > _math__WEBPACK_IMPORTED_MODULE_1__["pi"] ? lambda + Math.round(-lambda / _math__WEBPACK_IMPORTED_MODULE_1__["tau"]) * _math__WEBPACK_IMPORTED_MODULE_1__["tau"] : lambda, phi]; +} + +rotationIdentity.invert = rotationIdentity; + +function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { + return (deltaLambda %= _math__WEBPACK_IMPORTED_MODULE_1__["tau"]) ? (deltaPhi || deltaGamma ? Object(_compose__WEBPACK_IMPORTED_MODULE_0__["default"])(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) + : rotationLambda(deltaLambda)) + : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) + : rotationIdentity); +} + +function forwardRotationLambda(deltaLambda) { + return function(lambda, phi) { + return lambda += deltaLambda, [lambda > _math__WEBPACK_IMPORTED_MODULE_1__["pi"] ? lambda - _math__WEBPACK_IMPORTED_MODULE_1__["tau"] : lambda < -_math__WEBPACK_IMPORTED_MODULE_1__["pi"] ? lambda + _math__WEBPACK_IMPORTED_MODULE_1__["tau"] : lambda, phi]; + }; +} + +function rotationLambda(deltaLambda) { + var rotation = forwardRotationLambda(deltaLambda); + rotation.invert = forwardRotationLambda(-deltaLambda); + return rotation; +} + +function rotationPhiGamma(deltaPhi, deltaGamma) { + var cosDeltaPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(deltaPhi), + sinDeltaPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(deltaPhi), + cosDeltaGamma = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(deltaGamma), + sinDeltaGamma = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(deltaGamma); + + function rotation(lambda, phi) { + var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi), + x = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(lambda) * cosPhi, + y = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda) * cosPhi, + z = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), + k = z * cosDeltaPhi + x * sinDeltaPhi; + return [ + Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), + Object(_math__WEBPACK_IMPORTED_MODULE_1__["asin"])(k * cosDeltaGamma + y * sinDeltaGamma) + ]; + } + + rotation.invert = function(lambda, phi) { + var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi), + x = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(lambda) * cosPhi, + y = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda) * cosPhi, + z = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), + k = z * cosDeltaGamma - y * sinDeltaGamma; + return [ + Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), + Object(_math__WEBPACK_IMPORTED_MODULE_1__["asin"])(k * cosDeltaPhi - x * sinDeltaPhi) + ]; + }; + + return rotation; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(rotate) { + rotate = rotateRadians(rotate[0] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"], rotate[1] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"], rotate.length > 2 ? rotate[2] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"] : 0); + + function forward(coordinates) { + coordinates = rotate(coordinates[0] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"], coordinates[1] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"]); + return coordinates[0] *= _math__WEBPACK_IMPORTED_MODULE_1__["degrees"], coordinates[1] *= _math__WEBPACK_IMPORTED_MODULE_1__["degrees"], coordinates; + } + + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"], coordinates[1] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"]); + return coordinates[0] *= _math__WEBPACK_IMPORTED_MODULE_1__["degrees"], coordinates[1] *= _math__WEBPACK_IMPORTED_MODULE_1__["degrees"], coordinates; + }; + + return forward; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/stream.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/stream.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function streamGeometry(geometry, stream) { + if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { + streamGeometryType[geometry.type](geometry, stream); + } +} + +var streamObjectType = { + Feature: function(object, stream) { + streamGeometry(object.geometry, stream); + }, + FeatureCollection: function(object, stream) { + var features = object.features, i = -1, n = features.length; + while (++i < n) streamGeometry(features[i].geometry, stream); + } +}; + +var streamGeometryType = { + Sphere: function(object, stream) { + stream.sphere(); + }, + Point: function(object, stream) { + object = object.coordinates; + stream.point(object[0], object[1], object[2]); + }, + MultiPoint: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); + }, + LineString: function(object, stream) { + streamLine(object.coordinates, stream, 0); + }, + MultiLineString: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamLine(coordinates[i], stream, 0); + }, + Polygon: function(object, stream) { + streamPolygon(object.coordinates, stream); + }, + MultiPolygon: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamPolygon(coordinates[i], stream); + }, + GeometryCollection: function(object, stream) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) streamGeometry(geometries[i], stream); + } +}; + +function streamLine(coordinates, stream, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + stream.lineStart(); + while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); + stream.lineEnd(); +} + +function streamPolygon(coordinates, stream) { + var i = -1, n = coordinates.length; + stream.polygonStart(); + while (++i < n) streamLine(coordinates[i], stream, 1); + stream.polygonEnd(); +} + +/* harmony default export */ __webpack_exports__["default"] = (function(object, stream) { + if (object && streamObjectType.hasOwnProperty(object.type)) { + streamObjectType[object.type](object, stream); + } else { + streamGeometry(object, stream); + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-geo/src/transform.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-geo/src/transform.js ***! + \*******************************************************************************************************/ +/*! exports provided: default, transformer */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transformer", function() { return transformer; }); +/* harmony default export */ __webpack_exports__["default"] = (function(methods) { + return { + stream: transformer(methods) + }; +}); + +function transformer(methods) { + return function(stream) { + var s = new TransformStream; + for (var key in methods) s[key] = methods[key]; + s.stream = stream; + return s; + }; +} + +function TransformStream() {} + +TransformStream.prototype = { + constructor: TransformStream, + point: function(x, y) { this.stream.point(x, y); }, + sphere: function() { this.stream.sphere(); }, + lineStart: function() { this.stream.lineStart(); }, + lineEnd: function() { this.stream.lineEnd(); }, + polygonStart: function() { this.stream.polygonStart(); }, + polygonEnd: function() { this.stream.polygonEnd(); } +}; + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/accessors.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/accessors.js ***! + \*************************************************************************************************************/ +/*! exports provided: optional, required */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "optional", function() { return optional; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "required", function() { return required; }); +function optional(f) { + return f == null ? null : required(f); +} + +function required(f) { + if (typeof f !== "function") throw new Error; + return f; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/array.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/array.js ***! + \*********************************************************************************************************/ +/*! exports provided: slice, shuffle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shuffle", function() { return shuffle; }); +var slice = Array.prototype.slice; + +function shuffle(array) { + var m = array.length, + t, + i; + + while (m) { + i = Math.random() * m-- | 0; + t = array[m]; + array[m] = array[i]; + array[i] = t; + } + + return array; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/cluster.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/cluster.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function defaultSeparation(a, b) { + return a.parent === b.parent ? 1 : 2; +} + +function meanX(children) { + return children.reduce(meanXReduce, 0) / children.length; +} + +function meanXReduce(x, c) { + return x + c.x; +} + +function maxY(children) { + return 1 + children.reduce(maxYReduce, 0); +} + +function maxYReduce(y, c) { + return Math.max(y, c.y); +} + +function leafLeft(node) { + var children; + while (children = node.children) node = children[0]; + return node; +} + +function leafRight(node) { + var children; + while (children = node.children) node = children[children.length - 1]; + return node; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var separation = defaultSeparation, + dx = 1, + dy = 1, + nodeSize = false; + + function cluster(root) { + var previousNode, + x = 0; + + // First walk, computing the initial x & y values. + root.eachAfter(function(node) { + var children = node.children; + if (children) { + node.x = meanX(children); + node.y = maxY(children); + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0; + node.y = 0; + previousNode = node; + } + }); + + var left = leafLeft(root), + right = leafRight(root), + x0 = left.x - separation(left, right) / 2, + x1 = right.x + separation(right, left) / 2; + + // Second walk, normalizing x & y to the desired size. + return root.eachAfter(nodeSize ? function(node) { + node.x = (node.x - root.x) * dx; + node.y = (root.y - node.y) * dy; + } : function(node) { + node.x = (node.x - x0) / (x1 - x0) * dx; + node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; + }); + } + + cluster.separation = function(x) { + return arguments.length ? (separation = x, cluster) : separation; + }; + + cluster.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); + }; + + cluster.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); + }; + + return cluster; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/constant.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/constant.js ***! + \************************************************************************************************************/ +/*! exports provided: constantZero, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "constantZero", function() { return constantZero; }); +function constantZero() { + return 0; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js": +/*!***********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/ancestors.js ***! + \***********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var node = this, nodes = [node]; + while (node = node.parent) { + nodes.push(node); + } + return nodes; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/count.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/count.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function count(node) { + var sum = 0, + children = node.children, + i = children && children.length; + if (!i) sum = 1; + else while (--i >= 0) sum += children[i].value; + node.value = sum; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return this.eachAfter(count); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js": +/*!*************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/descendants.js ***! + \*************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var nodes = []; + this.each(function(node) { + nodes.push(node); + }); + return nodes; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/each.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/each.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(callback) { + var node = this, current, next = [node], children, i, n; + do { + current = next.reverse(), next = []; + while (node = current.pop()) { + callback(node), children = node.children; + if (children) for (i = 0, n = children.length; i < n; ++i) { + next.push(children[i]); + } + } + } while (next.length); + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js": +/*!***********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js ***! + \***********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(callback) { + var node = this, nodes = [node], next = [], children, i, n; + while (node = nodes.pop()) { + next.push(node), children = node.children; + if (children) for (i = 0, n = children.length; i < n; ++i) { + nodes.push(children[i]); + } + } + while (node = next.pop()) { + callback(node); + } + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js ***! + \************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(callback) { + var node = this, nodes = [node], children, i; + while (node = nodes.pop()) { + callback(node), children = node.children; + if (children) for (i = children.length - 1; i >= 0; --i) { + nodes.push(children[i]); + } + } + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/index.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/index.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default, computeHeight, Node */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return hierarchy; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeHeight", function() { return computeHeight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Node", function() { return Node; }); +/* harmony import */ var _count__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./count */ "../../../node_modules/d3-hierarchy/src/hierarchy/count.js"); +/* harmony import */ var _each__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./each */ "../../../node_modules/d3-hierarchy/src/hierarchy/each.js"); +/* harmony import */ var _eachBefore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./eachBefore */ "../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js"); +/* harmony import */ var _eachAfter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eachAfter */ "../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js"); +/* harmony import */ var _sum__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sum */ "../../../node_modules/d3-hierarchy/src/hierarchy/sum.js"); +/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sort */ "../../../node_modules/d3-hierarchy/src/hierarchy/sort.js"); +/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./path */ "../../../node_modules/d3-hierarchy/src/hierarchy/path.js"); +/* harmony import */ var _ancestors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ancestors */ "../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js"); +/* harmony import */ var _descendants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./descendants */ "../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js"); +/* harmony import */ var _leaves__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./leaves */ "../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js"); +/* harmony import */ var _links__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./links */ "../../../node_modules/d3-hierarchy/src/hierarchy/links.js"); + + + + + + + + + + + + +function hierarchy(data, children) { + var root = new Node(data), + valued = +data.value && (root.value = data.value), + node, + nodes = [root], + child, + childs, + i, + n; + + if (children == null) children = defaultChildren; + + while (node = nodes.pop()) { + if (valued) node.value = +node.data.value; + if ((childs = children(node.data)) && (n = childs.length)) { + node.children = new Array(n); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new Node(childs[i])); + child.parent = node; + child.depth = node.depth + 1; + } + } + } + + return root.eachBefore(computeHeight); +} + +function node_copy() { + return hierarchy(this).eachBefore(copyData); +} + +function defaultChildren(d) { + return d.children; +} + +function copyData(node) { + node.data = node.data.data; +} + +function computeHeight(node) { + var height = 0; + do node.height = height; + while ((node = node.parent) && (node.height < ++height)); +} + +function Node(data) { + this.data = data; + this.depth = + this.height = 0; + this.parent = null; +} + +Node.prototype = hierarchy.prototype = { + constructor: Node, + count: _count__WEBPACK_IMPORTED_MODULE_0__["default"], + each: _each__WEBPACK_IMPORTED_MODULE_1__["default"], + eachAfter: _eachAfter__WEBPACK_IMPORTED_MODULE_3__["default"], + eachBefore: _eachBefore__WEBPACK_IMPORTED_MODULE_2__["default"], + sum: _sum__WEBPACK_IMPORTED_MODULE_4__["default"], + sort: _sort__WEBPACK_IMPORTED_MODULE_5__["default"], + path: _path__WEBPACK_IMPORTED_MODULE_6__["default"], + ancestors: _ancestors__WEBPACK_IMPORTED_MODULE_7__["default"], + descendants: _descendants__WEBPACK_IMPORTED_MODULE_8__["default"], + leaves: _leaves__WEBPACK_IMPORTED_MODULE_9__["default"], + links: _links__WEBPACK_IMPORTED_MODULE_10__["default"], + copy: node_copy +}; + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/leaves.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var leaves = []; + this.eachBefore(function(node) { + if (!node.children) { + leaves.push(node); + } + }); + return leaves; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/links.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/links.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var root = this, links = []; + root.each(function(node) { + if (node !== root) { // Don’t include the root’s parent, if any. + links.push({source: node.parent, target: node}); + } + }); + return links; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/path.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/path.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(end) { + var start = this, + ancestor = leastCommonAncestor(start, end), + nodes = [start]; + while (start !== ancestor) { + start = start.parent; + nodes.push(start); + } + var k = nodes.length; + while (end !== ancestor) { + nodes.splice(k, 0, end); + end = end.parent; + } + return nodes; +}); + +function leastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = a.ancestors(), + bNodes = b.ancestors(), + c = null; + a = aNodes.pop(); + b = bNodes.pop(); + while (a === b) { + c = a; + a = aNodes.pop(); + b = bNodes.pop(); + } + return c; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/sort.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/sort.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(compare) { + return this.eachBefore(function(node) { + if (node.children) { + node.children.sort(compare); + } + }); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/hierarchy/sum.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/hierarchy/sum.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(value) { + return this.eachAfter(function(node) { + var sum = +value(node.data) || 0, + children = node.children, + i = children && children.length; + while (--i >= 0) sum += children[i].value; + node.value = sum; + }); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/index.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/index.js ***! + \*********************************************************************************************************/ +/*! exports provided: cluster, hierarchy, pack, packSiblings, packEnclose, partition, stratify, tree, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _cluster__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cluster */ "../../../node_modules/d3-hierarchy/src/cluster.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cluster", function() { return _cluster__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _hierarchy_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hierarchy/index */ "../../../node_modules/d3-hierarchy/src/hierarchy/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hierarchy", function() { return _hierarchy_index__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _pack_index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pack/index */ "../../../node_modules/d3-hierarchy/src/pack/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pack", function() { return _pack_index__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _pack_siblings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pack/siblings */ "../../../node_modules/d3-hierarchy/src/pack/siblings.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "packSiblings", function() { return _pack_siblings__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _pack_enclose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pack/enclose */ "../../../node_modules/d3-hierarchy/src/pack/enclose.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "packEnclose", function() { return _pack_enclose__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _partition__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./partition */ "../../../node_modules/d3-hierarchy/src/partition.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _partition__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _stratify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stratify */ "../../../node_modules/d3-hierarchy/src/stratify.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stratify", function() { return _stratify__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _tree__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tree */ "../../../node_modules/d3-hierarchy/src/tree.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tree", function() { return _tree__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _treemap_index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./treemap/index */ "../../../node_modules/d3-hierarchy/src/treemap/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemap", function() { return _treemap_index__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _treemap_binary__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./treemap/binary */ "../../../node_modules/d3-hierarchy/src/treemap/binary.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapBinary", function() { return _treemap_binary__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _treemap_dice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./treemap/dice */ "../../../node_modules/d3-hierarchy/src/treemap/dice.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapDice", function() { return _treemap_dice__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _treemap_slice__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./treemap/slice */ "../../../node_modules/d3-hierarchy/src/treemap/slice.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSlice", function() { return _treemap_slice__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _treemap_sliceDice__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./treemap/sliceDice */ "../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSliceDice", function() { return _treemap_sliceDice__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _treemap_squarify__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./treemap/squarify */ "../../../node_modules/d3-hierarchy/src/treemap/squarify.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSquarify", function() { return _treemap_squarify__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _treemap_resquarify__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./treemap/resquarify */ "../../../node_modules/d3-hierarchy/src/treemap/resquarify.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapResquarify", function() { return _treemap_resquarify__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/pack/enclose.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/pack/enclose.js ***! + \****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array */ "../../../node_modules/d3-hierarchy/src/array.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(circles) { + var i = 0, n = (circles = Object(_array__WEBPACK_IMPORTED_MODULE_0__["shuffle"])(_array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(circles))).length, B = [], p, e; + + while (i < n) { + p = circles[i]; + if (e && enclosesWeak(e, p)) ++i; + else e = encloseBasis(B = extendBasis(B, p)), i = 0; + } + + return e; +}); + +function extendBasis(B, p) { + var i, j; + + if (enclosesWeakAll(p, B)) return [p]; + + // If we get here then B must have at least one element. + for (i = 0; i < B.length; ++i) { + if (enclosesNot(p, B[i]) + && enclosesWeakAll(encloseBasis2(B[i], p), B)) { + return [B[i], p]; + } + } + + // If we get here then B must have at least two elements. + for (i = 0; i < B.length - 1; ++i) { + for (j = i + 1; j < B.length; ++j) { + if (enclosesNot(encloseBasis2(B[i], B[j]), p) + && enclosesNot(encloseBasis2(B[i], p), B[j]) + && enclosesNot(encloseBasis2(B[j], p), B[i]) + && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { + return [B[i], B[j], p]; + } + } + } + + // If we get here then something is very wrong. + throw new Error; +} + +function enclosesNot(a, b) { + var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; + return dr < 0 || dr * dr < dx * dx + dy * dy; +} + +function enclosesWeak(a, b) { + var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; + return dr > 0 && dr * dr > dx * dx + dy * dy; +} + +function enclosesWeakAll(a, B) { + for (var i = 0; i < B.length; ++i) { + if (!enclosesWeak(a, B[i])) { + return false; + } + } + return true; +} + +function encloseBasis(B) { + switch (B.length) { + case 1: return encloseBasis1(B[0]); + case 2: return encloseBasis2(B[0], B[1]); + case 3: return encloseBasis3(B[0], B[1], B[2]); + } +} + +function encloseBasis1(a) { + return { + x: a.x, + y: a.y, + r: a.r + }; +} + +function encloseBasis2(a, b) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, + l = Math.sqrt(x21 * x21 + y21 * y21); + return { + x: (x1 + x2 + x21 / l * r21) / 2, + y: (y1 + y2 + y21 / l * r21) / 2, + r: (l + r1 + r2) / 2 + }; +} + +function encloseBasis3(a, b, c) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x3 = c.x, y3 = c.y, r3 = c.r, + a2 = x1 - x2, + a3 = x1 - x3, + b2 = y1 - y2, + b3 = y1 - y3, + c2 = r2 - r1, + c3 = r3 - r1, + d1 = x1 * x1 + y1 * y1 - r1 * r1, + d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, + d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, + ab = a3 * b2 - a2 * b3, + xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, + xb = (b3 * c2 - b2 * c3) / ab, + ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, + yb = (a2 * c3 - a3 * c2) / ab, + A = xb * xb + yb * yb - 1, + B = 2 * (r1 + xa * xb + ya * yb), + C = xa * xa + ya * ya - r1 * r1, + r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); + return { + x: x1 + xa + xb * r, + y: y1 + ya + yb * r, + r: r + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/pack/index.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/pack/index.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _siblings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./siblings */ "../../../node_modules/d3-hierarchy/src/pack/siblings.js"); +/* harmony import */ var _accessors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../accessors */ "../../../node_modules/d3-hierarchy/src/accessors.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ "../../../node_modules/d3-hierarchy/src/constant.js"); + + + + +function defaultRadius(d) { + return Math.sqrt(d.value); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var radius = null, + dx = 1, + dy = 1, + padding = _constant__WEBPACK_IMPORTED_MODULE_2__["constantZero"]; + + function pack(root) { + root.x = dx / 2, root.y = dy / 2; + if (radius) { + root.eachBefore(radiusLeaf(radius)) + .eachAfter(packChildren(padding, 0.5)) + .eachBefore(translateChild(1)); + } else { + root.eachBefore(radiusLeaf(defaultRadius)) + .eachAfter(packChildren(_constant__WEBPACK_IMPORTED_MODULE_2__["constantZero"], 1)) + .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) + .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); + } + return root; + } + + pack.radius = function(x) { + return arguments.length ? (radius = Object(_accessors__WEBPACK_IMPORTED_MODULE_1__["optional"])(x), pack) : radius; + }; + + pack.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; + }; + + pack.padding = function(x) { + return arguments.length ? (padding = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(+x), pack) : padding; + }; + + return pack; +}); + +function radiusLeaf(radius) { + return function(node) { + if (!node.children) { + node.r = Math.max(0, +radius(node) || 0); + } + }; +} + +function packChildren(padding, k) { + return function(node) { + if (children = node.children) { + var children, + i, + n = children.length, + r = padding(node) * k || 0, + e; + + if (r) for (i = 0; i < n; ++i) children[i].r += r; + e = Object(_siblings__WEBPACK_IMPORTED_MODULE_0__["packEnclose"])(children); + if (r) for (i = 0; i < n; ++i) children[i].r -= r; + node.r = e + r; + } + }; +} + +function translateChild(k) { + return function(node) { + var parent = node.parent; + node.r *= k; + if (parent) { + node.x = parent.x + k * node.x; + node.y = parent.y + k * node.y; + } + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/pack/siblings.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/pack/siblings.js ***! + \*****************************************************************************************************************/ +/*! exports provided: packEnclose, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "packEnclose", function() { return packEnclose; }); +/* harmony import */ var _enclose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enclose */ "../../../node_modules/d3-hierarchy/src/pack/enclose.js"); + + +function place(b, a, c) { + var dx = b.x - a.x, x, a2, + dy = b.y - a.y, y, b2, + d2 = dx * dx + dy * dy; + if (d2) { + a2 = a.r + c.r, a2 *= a2; + b2 = b.r + c.r, b2 *= b2; + if (a2 > b2) { + x = (d2 + b2 - a2) / (2 * d2); + y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); + c.x = b.x - x * dx - y * dy; + c.y = b.y - x * dy + y * dx; + } else { + x = (d2 + a2 - b2) / (2 * d2); + y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); + c.x = a.x + x * dx - y * dy; + c.y = a.y + x * dy + y * dx; + } + } else { + c.x = a.x + c.r; + c.y = a.y; + } +} + +function intersects(a, b) { + var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; + return dr > 0 && dr * dr > dx * dx + dy * dy; +} + +function score(node) { + var a = node._, + b = node.next._, + ab = a.r + b.r, + dx = (a.x * b.r + b.x * a.r) / ab, + dy = (a.y * b.r + b.y * a.r) / ab; + return dx * dx + dy * dy; +} + +function Node(circle) { + this._ = circle; + this.next = null; + this.previous = null; +} + +function packEnclose(circles) { + if (!(n = circles.length)) return 0; + + var a, b, c, n, aa, ca, i, j, k, sj, sk; + + // Place the first circle. + a = circles[0], a.x = 0, a.y = 0; + if (!(n > 1)) return a.r; + + // Place the second circle. + b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; + if (!(n > 2)) return a.r + b.r; + + // Place the third circle. + place(b, a, c = circles[2]); + + // Initialize the front-chain using the first three circles a, b and c. + a = new Node(a), b = new Node(b), c = new Node(c); + a.next = c.previous = b; + b.next = a.previous = c; + c.next = b.previous = a; + + // Attempt to place each remaining circle… + pack: for (i = 3; i < n; ++i) { + place(a._, b._, c = circles[i]), c = new Node(c); + + // Find the closest intersecting circle on the front-chain, if any. + // “Closeness” is determined by linear distance along the front-chain. + // “Ahead” or “behind” is likewise determined by linear distance. + j = b.next, k = a.previous, sj = b._.r, sk = a._.r; + do { + if (sj <= sk) { + if (intersects(j._, c._)) { + b = j, a.next = b, b.previous = a, --i; + continue pack; + } + sj += j._.r, j = j.next; + } else { + if (intersects(k._, c._)) { + a = k, a.next = b, b.previous = a, --i; + continue pack; + } + sk += k._.r, k = k.previous; + } + } while (j !== k.next); + + // Success! Insert the new circle c between a and b. + c.previous = a, c.next = b, a.next = b.previous = b = c; + + // Compute the new closest circle pair to the centroid. + aa = score(a); + while ((c = c.next) !== b) { + if ((ca = score(c)) < aa) { + a = c, aa = ca; + } + } + b = a.next; + } + + // Compute the enclosing circle of the front chain. + a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = Object(_enclose__WEBPACK_IMPORTED_MODULE_0__["default"])(a); + + // Translate the circles to put the enclosing circle around the origin. + for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; + + return c.r; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(circles) { + packEnclose(circles); + return circles; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/partition.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/partition.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _treemap_round__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./treemap/round */ "../../../node_modules/d3-hierarchy/src/treemap/round.js"); +/* harmony import */ var _treemap_dice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./treemap/dice */ "../../../node_modules/d3-hierarchy/src/treemap/dice.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var dx = 1, + dy = 1, + padding = 0, + round = false; + + function partition(root) { + var n = root.height + 1; + root.x0 = + root.y0 = padding; + root.x1 = dx; + root.y1 = dy / n; + root.eachBefore(positionNode(dy, n)); + if (round) root.eachBefore(_treemap_round__WEBPACK_IMPORTED_MODULE_0__["default"]); + return root; + } + + function positionNode(dy, n) { + return function(node) { + if (node.children) { + Object(_treemap_dice__WEBPACK_IMPORTED_MODULE_1__["default"])(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); + } + var x0 = node.x0, + y0 = node.y0, + x1 = node.x1 - padding, + y1 = node.y1 - padding; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + }; + } + + partition.round = function(x) { + return arguments.length ? (round = !!x, partition) : round; + }; + + partition.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; + }; + + partition.padding = function(x) { + return arguments.length ? (padding = +x, partition) : padding; + }; + + return partition; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/stratify.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/stratify.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _accessors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accessors */ "../../../node_modules/d3-hierarchy/src/accessors.js"); +/* harmony import */ var _hierarchy_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hierarchy/index */ "../../../node_modules/d3-hierarchy/src/hierarchy/index.js"); + + + +var keyPrefix = "$", // Protect against keys like “__proto__”. + preroot = {depth: -1}, + ambiguous = {}; + +function defaultId(d) { + return d.id; +} + +function defaultParentId(d) { + return d.parentId; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var id = defaultId, + parentId = defaultParentId; + + function stratify(data) { + var d, + i, + n = data.length, + root, + parent, + node, + nodes = new Array(n), + nodeId, + nodeKey, + nodeByKey = {}; + + for (i = 0; i < n; ++i) { + d = data[i], node = nodes[i] = new _hierarchy_index__WEBPACK_IMPORTED_MODULE_1__["Node"](d); + if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { + nodeKey = keyPrefix + (node.id = nodeId); + nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; + } + } + + for (i = 0; i < n; ++i) { + node = nodes[i], nodeId = parentId(data[i], i, data); + if (nodeId == null || !(nodeId += "")) { + if (root) throw new Error("multiple roots"); + root = node; + } else { + parent = nodeByKey[keyPrefix + nodeId]; + if (!parent) throw new Error("missing: " + nodeId); + if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); + if (parent.children) parent.children.push(node); + else parent.children = [node]; + node.parent = parent; + } + } + + if (!root) throw new Error("no root"); + root.parent = preroot; + root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(_hierarchy_index__WEBPACK_IMPORTED_MODULE_1__["computeHeight"]); + root.parent = null; + if (n > 0) throw new Error("cycle"); + + return root; + } + + stratify.id = function(x) { + return arguments.length ? (id = Object(_accessors__WEBPACK_IMPORTED_MODULE_0__["required"])(x), stratify) : id; + }; + + stratify.parentId = function(x) { + return arguments.length ? (parentId = Object(_accessors__WEBPACK_IMPORTED_MODULE_0__["required"])(x), stratify) : parentId; + }; + + return stratify; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/tree.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/tree.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _hierarchy_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hierarchy/index */ "../../../node_modules/d3-hierarchy/src/hierarchy/index.js"); + + +function defaultSeparation(a, b) { + return a.parent === b.parent ? 1 : 2; +} + +// function radialSeparation(a, b) { +// return (a.parent === b.parent ? 1 : 2) / a.depth; +// } + +// This function is used to traverse the left contour of a subtree (or +// subforest). It returns the successor of v on this contour. This successor is +// either given by the leftmost child of v or by the thread of v. The function +// returns null if and only if v is on the highest level of its subtree. +function nextLeft(v) { + var children = v.children; + return children ? children[0] : v.t; +} + +// This function works analogously to nextLeft. +function nextRight(v) { + var children = v.children; + return children ? children[children.length - 1] : v.t; +} + +// Shifts the current subtree rooted at w+. This is done by increasing +// prelim(w+) and mod(w+) by shift. +function moveSubtree(wm, wp, shift) { + var change = shift / (wp.i - wm.i); + wp.c -= change; + wp.s += shift; + wm.c += change; + wp.z += shift; + wp.m += shift; +} + +// All other shifts, applied to the smaller subtrees between w- and w+, are +// performed by this function. To prepare the shifts, we have to adjust +// change(w+), shift(w+), and change(w-). +function executeShifts(v) { + var shift = 0, + change = 0, + children = v.children, + i = children.length, + w; + while (--i >= 0) { + w = children[i]; + w.z += shift; + w.m += shift; + shift += w.s + (change += w.c); + } +} + +// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, +// returns the specified (default) ancestor. +function nextAncestor(vim, v, ancestor) { + return vim.a.parent === v.parent ? vim.a : ancestor; +} + +function TreeNode(node, i) { + this._ = node; + this.parent = null; + this.children = null; + this.A = null; // default ancestor + this.a = this; // ancestor + this.z = 0; // prelim + this.m = 0; // mod + this.c = 0; // change + this.s = 0; // shift + this.t = null; // thread + this.i = i; // number +} + +TreeNode.prototype = Object.create(_hierarchy_index__WEBPACK_IMPORTED_MODULE_0__["Node"].prototype); + +function treeRoot(root) { + var tree = new TreeNode(root, 0), + node, + nodes = [tree], + child, + children, + i, + n; + + while (node = nodes.pop()) { + if (children = node._.children) { + node.children = new Array(n = children.length); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new TreeNode(children[i], i)); + child.parent = node; + } + } + } + + (tree.parent = new TreeNode(null, 0)).children = [tree]; + return tree; +} + +// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm +/* harmony default export */ __webpack_exports__["default"] = (function() { + var separation = defaultSeparation, + dx = 1, + dy = 1, + nodeSize = null; + + function tree(root) { + var t = treeRoot(root); + + // Compute the layout using Buchheim et al.’s algorithm. + t.eachAfter(firstWalk), t.parent.m = -t.z; + t.eachBefore(secondWalk); + + // If a fixed node size is specified, scale x and y. + if (nodeSize) root.eachBefore(sizeNode); + + // If a fixed tree size is specified, scale x and y based on the extent. + // Compute the left-most, right-most, and depth-most nodes for extents. + else { + var left = root, + right = root, + bottom = root; + root.eachBefore(function(node) { + if (node.x < left.x) left = node; + if (node.x > right.x) right = node; + if (node.depth > bottom.depth) bottom = node; + }); + var s = left === right ? 1 : separation(left, right) / 2, + tx = s - left.x, + kx = dx / (right.x + s + tx), + ky = dy / (bottom.depth || 1); + root.eachBefore(function(node) { + node.x = (node.x + tx) * kx; + node.y = node.depth * ky; + }); + } + + return root; + } + + // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is + // applied recursively to the children of v, as well as the function + // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the + // node v is placed to the midpoint of its outermost children. + function firstWalk(v) { + var children = v.children, + siblings = v.parent.children, + w = v.i ? siblings[v.i - 1] : null; + if (children) { + executeShifts(v); + var midpoint = (children[0].z + children[children.length - 1].z) / 2; + if (w) { + v.z = w.z + separation(v._, w._); + v.m = v.z - midpoint; + } else { + v.z = midpoint; + } + } else if (w) { + v.z = w.z + separation(v._, w._); + } + v.parent.A = apportion(v, w, v.parent.A || siblings[0]); + } + + // Computes all real x-coordinates by summing up the modifiers recursively. + function secondWalk(v) { + v._.x = v.z + v.parent.m; + v.m += v.parent.m; + } + + // The core of the algorithm. Here, a new subtree is combined with the + // previous subtrees. Threads are used to traverse the inside and outside + // contours of the left and right subtree up to the highest common level. The + // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the + // superscript o means outside and i means inside, the subscript - means left + // subtree and + means right subtree. For summing up the modifiers along the + // contour, we use respective variables si+, si-, so-, and so+. Whenever two + // nodes of the inside contours conflict, we compute the left one of the + // greatest uncommon ancestors using the function ANCESTOR and call MOVE + // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. + // Finally, we add a new thread (if necessary). + function apportion(v, w, ancestor) { + if (w) { + var vip = v, + vop = v, + vim = w, + vom = vip.parent.children[0], + sip = vip.m, + sop = vop.m, + sim = vim.m, + som = vom.m, + shift; + while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { + vom = nextLeft(vom); + vop = nextRight(vop); + vop.a = v; + shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); + if (shift > 0) { + moveSubtree(nextAncestor(vim, v, ancestor), v, shift); + sip += shift; + sop += shift; + } + sim += vim.m; + sip += vip.m; + som += vom.m; + sop += vop.m; + } + if (vim && !nextRight(vop)) { + vop.t = vim; + vop.m += sim - sop; + } + if (vip && !nextLeft(vom)) { + vom.t = vip; + vom.m += sip - som; + ancestor = v; + } + } + return ancestor; + } + + function sizeNode(node) { + node.x *= dx; + node.y = node.depth * dy; + } + + tree.separation = function(x) { + return arguments.length ? (separation = x, tree) : separation; + }; + + tree.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); + }; + + tree.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); + }; + + return tree; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/treemap/binary.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/treemap/binary.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(parent, x0, y0, x1, y1) { + var nodes = parent.children, + i, n = nodes.length, + sum, sums = new Array(n + 1); + + for (sums[0] = sum = i = 0; i < n; ++i) { + sums[i + 1] = sum += nodes[i].value; + } + + partition(0, n, parent.value, x0, y0, x1, y1); + + function partition(i, j, value, x0, y0, x1, y1) { + if (i >= j - 1) { + var node = nodes[i]; + node.x0 = x0, node.y0 = y0; + node.x1 = x1, node.y1 = y1; + return; + } + + var valueOffset = sums[i], + valueTarget = (value / 2) + valueOffset, + k = i + 1, + hi = j - 1; + + while (k < hi) { + var mid = k + hi >>> 1; + if (sums[mid] < valueTarget) k = mid + 1; + else hi = mid; + } + + if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; + + var valueLeft = sums[k] - valueOffset, + valueRight = value - valueLeft; + + if ((x1 - x0) > (y1 - y0)) { + var xk = (x0 * valueRight + x1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, xk, y1); + partition(k, j, valueRight, xk, y0, x1, y1); + } else { + var yk = (y0 * valueRight + y1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, x1, yk); + partition(k, j, valueRight, x0, yk, x1, y1); + } + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/treemap/dice.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/treemap/dice.js ***! + \****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (x1 - x0) / parent.value; + + while (++i < n) { + node = nodes[i], node.y0 = y0, node.y1 = y1; + node.x0 = x0, node.x1 = x0 += node.value * k; + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/treemap/index.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/treemap/index.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _round__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./round */ "../../../node_modules/d3-hierarchy/src/treemap/round.js"); +/* harmony import */ var _squarify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./squarify */ "../../../node_modules/d3-hierarchy/src/treemap/squarify.js"); +/* harmony import */ var _accessors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../accessors */ "../../../node_modules/d3-hierarchy/src/accessors.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constant */ "../../../node_modules/d3-hierarchy/src/constant.js"); + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var tile = _squarify__WEBPACK_IMPORTED_MODULE_1__["default"], + round = false, + dx = 1, + dy = 1, + paddingStack = [0], + paddingInner = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"], + paddingTop = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"], + paddingRight = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"], + paddingBottom = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"], + paddingLeft = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"]; + + function treemap(root) { + root.x0 = + root.y0 = 0; + root.x1 = dx; + root.y1 = dy; + root.eachBefore(positionNode); + paddingStack = [0]; + if (round) root.eachBefore(_round__WEBPACK_IMPORTED_MODULE_0__["default"]); + return root; + } + + function positionNode(node) { + var p = paddingStack[node.depth], + x0 = node.x0 + p, + y0 = node.y0 + p, + x1 = node.x1 - p, + y1 = node.y1 - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + if (node.children) { + p = paddingStack[node.depth + 1] = paddingInner(node) / 2; + x0 += paddingLeft(node) - p; + y0 += paddingTop(node) - p; + x1 -= paddingRight(node) - p; + y1 -= paddingBottom(node) - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + tile(node, x0, y0, x1, y1); + } + } + + treemap.round = function(x) { + return arguments.length ? (round = !!x, treemap) : round; + }; + + treemap.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; + }; + + treemap.tile = function(x) { + return arguments.length ? (tile = Object(_accessors__WEBPACK_IMPORTED_MODULE_2__["required"])(x), treemap) : tile; + }; + + treemap.padding = function(x) { + return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); + }; + + treemap.paddingInner = function(x) { + return arguments.length ? (paddingInner = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingInner; + }; + + treemap.paddingOuter = function(x) { + return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); + }; + + treemap.paddingTop = function(x) { + return arguments.length ? (paddingTop = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingTop; + }; + + treemap.paddingRight = function(x) { + return arguments.length ? (paddingRight = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingRight; + }; + + treemap.paddingBottom = function(x) { + return arguments.length ? (paddingBottom = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingBottom; + }; + + treemap.paddingLeft = function(x) { + return arguments.length ? (paddingLeft = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingLeft; + }; + + return treemap; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/treemap/resquarify.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/treemap/resquarify.js ***! + \**********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _dice__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice */ "../../../node_modules/d3-hierarchy/src/treemap/dice.js"); +/* harmony import */ var _slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice */ "../../../node_modules/d3-hierarchy/src/treemap/slice.js"); +/* harmony import */ var _squarify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./squarify */ "../../../node_modules/d3-hierarchy/src/treemap/squarify.js"); + + + + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(ratio) { + + function resquarify(parent, x0, y0, x1, y1) { + if ((rows = parent._squarify) && (rows.ratio === ratio)) { + var rows, + row, + nodes, + i, + j = -1, + n, + m = rows.length, + value = parent.value; + + while (++j < m) { + row = rows[j], nodes = row.children; + for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; + if (row.dice) Object(_dice__WEBPACK_IMPORTED_MODULE_0__["default"])(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); + else Object(_slice__WEBPACK_IMPORTED_MODULE_1__["default"])(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); + value -= row.value; + } + } else { + parent._squarify = rows = Object(_squarify__WEBPACK_IMPORTED_MODULE_2__["squarifyRatio"])(ratio, parent, x0, y0, x1, y1); + rows.ratio = ratio; + } + } + + resquarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return resquarify; +})(_squarify__WEBPACK_IMPORTED_MODULE_2__["phi"])); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/treemap/round.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/treemap/round.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(node) { + node.x0 = Math.round(node.x0); + node.y0 = Math.round(node.y0); + node.x1 = Math.round(node.x1); + node.y1 = Math.round(node.y1); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/treemap/slice.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/treemap/slice.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (y1 - y0) / parent.value; + + while (++i < n) { + node = nodes[i], node.x0 = x0, node.x1 = x1; + node.y0 = y0, node.y1 = y0 += node.value * k; + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/treemap/sliceDice.js ***! + \*********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _dice__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice */ "../../../node_modules/d3-hierarchy/src/treemap/dice.js"); +/* harmony import */ var _slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice */ "../../../node_modules/d3-hierarchy/src/treemap/slice.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(parent, x0, y0, x1, y1) { + (parent.depth & 1 ? _slice__WEBPACK_IMPORTED_MODULE_1__["default"] : _dice__WEBPACK_IMPORTED_MODULE_0__["default"])(parent, x0, y0, x1, y1); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-hierarchy/src/treemap/squarify.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-hierarchy/src/treemap/squarify.js ***! + \********************************************************************************************************************/ +/*! exports provided: phi, squarifyRatio, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "phi", function() { return phi; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "squarifyRatio", function() { return squarifyRatio; }); +/* harmony import */ var _dice__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice */ "../../../node_modules/d3-hierarchy/src/treemap/dice.js"); +/* harmony import */ var _slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice */ "../../../node_modules/d3-hierarchy/src/treemap/slice.js"); + + + +var phi = (1 + Math.sqrt(5)) / 2; + +function squarifyRatio(ratio, parent, x0, y0, x1, y1) { + var rows = [], + nodes = parent.children, + row, + nodeValue, + i0 = 0, + i1 = 0, + n = nodes.length, + dx, dy, + value = parent.value, + sumValue, + minValue, + maxValue, + newRatio, + minRatio, + alpha, + beta; + + while (i0 < n) { + dx = x1 - x0, dy = y1 - y0; + + // Find the next non-empty node. + do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); + minValue = maxValue = sumValue; + alpha = Math.max(dy / dx, dx / dy) / (value * ratio); + beta = sumValue * sumValue * alpha; + minRatio = Math.max(maxValue / beta, beta / minValue); + + // Keep adding nodes while the aspect ratio maintains or improves. + for (; i1 < n; ++i1) { + sumValue += nodeValue = nodes[i1].value; + if (nodeValue < minValue) minValue = nodeValue; + if (nodeValue > maxValue) maxValue = nodeValue; + beta = sumValue * sumValue * alpha; + newRatio = Math.max(maxValue / beta, beta / minValue); + if (newRatio > minRatio) { sumValue -= nodeValue; break; } + minRatio = newRatio; + } + + // Position and record the row orientation. + rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); + if (row.dice) Object(_dice__WEBPACK_IMPORTED_MODULE_0__["default"])(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); + else Object(_slice__WEBPACK_IMPORTED_MODULE_1__["default"])(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); + value -= sumValue, i0 = i1; + } + + return rows; +} + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(ratio) { + + function squarify(parent, x0, y0, x1, y1) { + squarifyRatio(ratio, parent, x0, y0, x1, y1); + } + + squarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return squarify; +})(phi)); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/array.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/array.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _value__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value */ "../../../node_modules/d3-interpolate/src/value.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + var nb = b ? b.length : 0, + na = a ? Math.min(nb, a.length) : 0, + x = new Array(na), + c = new Array(nb), + i; + + for (i = 0; i < na; ++i) x[i] = Object(_value__WEBPACK_IMPORTED_MODULE_0__["default"])(a[i], b[i]); + for (; i < nb; ++i) c[i] = b[i]; + + return function(t) { + for (i = 0; i < na; ++i) c[i] = x[i](t); + return c; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/basis.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/basis.js ***! + \***********************************************************************************************************/ +/*! exports provided: basis, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "basis", function() { return basis; }); +function basis(t1, v0, v1, v2, v3) { + var t2 = t1 * t1, t3 = t2 * t1; + return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + + (4 - 6 * t2 + 3 * t3) * v1 + + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + + t3 * v3) / 6; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(values) { + var n = values.length - 1; + return function(t) { + var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), + v1 = values[i], + v2 = values[i + 1], + v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, + v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; + return basis((t - i / n) * n, v0, v1, v2, v3); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/basisClosed.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/basisClosed.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis */ "../../../node_modules/d3-interpolate/src/basis.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(values) { + var n = values.length; + return function(t) { + var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), + v0 = values[(i + n - 1) % n], + v1 = values[i % n], + v2 = values[(i + 1) % n], + v3 = values[(i + 2) % n]; + return Object(_basis__WEBPACK_IMPORTED_MODULE_0__["basis"])((t - i / n) * n, v0, v1, v2, v3); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/color.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/color.js ***! + \***********************************************************************************************************/ +/*! exports provided: hue, gamma, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hue", function() { return hue; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gamma", function() { return gamma; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return nogamma; }); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-interpolate/src/constant.js"); + + +function linear(a, d) { + return function(t) { + return a + t * d; + }; +} + +function exponential(a, b, y) { + return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { + return Math.pow(a + t * b, y); + }; +} + +function hue(a, b) { + var d = b - a; + return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(isNaN(a) ? b : a); +} + +function gamma(y) { + return (y = +y) === 1 ? nogamma : function(a, b) { + return b - a ? exponential(a, b, y) : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(isNaN(a) ? b : a); + }; +} + +function nogamma(a, b) { + var d = b - a; + return d ? linear(a, d) : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(isNaN(a) ? b : a); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/constant.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/constant.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/cubehelix.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/cubehelix.js ***! + \***************************************************************************************************************/ +/*! exports provided: default, cubehelixLong */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cubehelixLong", function() { return cubehelixLong; }); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-interpolate/src/color.js"); + + + +function cubehelix(hue) { + return (function cubehelixGamma(y) { + y = +y; + + function cubehelix(start, end) { + var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(end)).h), + s = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.s, end.s), + l = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), + opacity = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(Math.pow(t, y)); + start.opacity = opacity(t); + return start + ""; + }; + } + + cubehelix.gamma = cubehelixGamma; + + return cubehelix; + })(1); +} + +/* harmony default export */ __webpack_exports__["default"] = (cubehelix(_color__WEBPACK_IMPORTED_MODULE_1__["hue"])); +var cubehelixLong = cubehelix(_color__WEBPACK_IMPORTED_MODULE_1__["default"]); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/date.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/date.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + var d = new Date; + return a = +a, b -= a, function(t) { + return d.setTime(a + b * t), d; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/discrete.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/discrete.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(range) { + var n = range.length; + return function(t) { + return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/hcl.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/hcl.js ***! + \*********************************************************************************************************/ +/*! exports provided: default, hclLong */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hclLong", function() { return hclLong; }); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-interpolate/src/color.js"); + + + +function hcl(hue) { + return function(start, end) { + var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["hcl"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["hcl"])(end)).h), + c = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.c, end.c), + l = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), + opacity = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.c = c(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +/* harmony default export */ __webpack_exports__["default"] = (hcl(_color__WEBPACK_IMPORTED_MODULE_1__["hue"])); +var hclLong = hcl(_color__WEBPACK_IMPORTED_MODULE_1__["default"]); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/hsl.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/hsl.js ***! + \*********************************************************************************************************/ +/*! exports provided: default, hslLong */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hslLong", function() { return hslLong; }); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-interpolate/src/color.js"); + + + +function hsl(hue) { + return function(start, end) { + var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["hsl"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["hsl"])(end)).h), + s = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.s, end.s), + l = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), + opacity = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +/* harmony default export */ __webpack_exports__["default"] = (hsl(_color__WEBPACK_IMPORTED_MODULE_1__["hue"])); +var hslLong = hsl(_color__WEBPACK_IMPORTED_MODULE_1__["default"]); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/hue.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/hue.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-interpolate/src/color.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + var i = Object(_color__WEBPACK_IMPORTED_MODULE_0__["hue"])(+a, +b); + return function(t) { + var x = i(t); + return x - 360 * Math.floor(x / 360); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/index.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/index.js ***! + \***********************************************************************************************************/ +/*! exports provided: interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateDate, interpolateDiscrete, interpolateHue, interpolateNumber, interpolateObject, interpolateRound, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateZoom, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateHsl, interpolateHslLong, interpolateLab, interpolateHcl, interpolateHclLong, interpolateCubehelix, interpolateCubehelixLong, piecewise, quantize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _value__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value */ "../../../node_modules/d3-interpolate/src/value.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolate", function() { return _value__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-interpolate/src/array.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateArray", function() { return _array__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis */ "../../../node_modules/d3-interpolate/src/basis.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBasis", function() { return _basis__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _basisClosed__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed */ "../../../node_modules/d3-interpolate/src/basisClosed.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBasisClosed", function() { return _basisClosed__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./date */ "../../../node_modules/d3-interpolate/src/date.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateDate", function() { return _date__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _discrete__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./discrete */ "../../../node_modules/d3-interpolate/src/discrete.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateDiscrete", function() { return _discrete__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _hue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hue */ "../../../node_modules/d3-interpolate/src/hue.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHue", function() { return _hue__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-interpolate/src/number.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateNumber", function() { return _number__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./object */ "../../../node_modules/d3-interpolate/src/object.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateObject", function() { return _object__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _round__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./round */ "../../../node_modules/d3-interpolate/src/round.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRound", function() { return _round__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./string */ "../../../node_modules/d3-interpolate/src/string.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateString", function() { return _string__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _transform_index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./transform/index */ "../../../node_modules/d3-interpolate/src/transform/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformCss", function() { return _transform_index__WEBPACK_IMPORTED_MODULE_11__["interpolateTransformCss"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformSvg", function() { return _transform_index__WEBPACK_IMPORTED_MODULE_11__["interpolateTransformSvg"]; }); + +/* harmony import */ var _zoom__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./zoom */ "../../../node_modules/d3-interpolate/src/zoom.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateZoom", function() { return _zoom__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _rgb__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./rgb */ "../../../node_modules/d3-interpolate/src/rgb.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgb", function() { return _rgb__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasis", function() { return _rgb__WEBPACK_IMPORTED_MODULE_13__["rgbBasis"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasisClosed", function() { return _rgb__WEBPACK_IMPORTED_MODULE_13__["rgbBasisClosed"]; }); + +/* harmony import */ var _hsl__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./hsl */ "../../../node_modules/d3-interpolate/src/hsl.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHsl", function() { return _hsl__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHslLong", function() { return _hsl__WEBPACK_IMPORTED_MODULE_14__["hslLong"]; }); + +/* harmony import */ var _lab__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./lab */ "../../../node_modules/d3-interpolate/src/lab.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateLab", function() { return _lab__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _hcl__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./hcl */ "../../../node_modules/d3-interpolate/src/hcl.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHcl", function() { return _hcl__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHclLong", function() { return _hcl__WEBPACK_IMPORTED_MODULE_16__["hclLong"]; }); + +/* harmony import */ var _cubehelix__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./cubehelix */ "../../../node_modules/d3-interpolate/src/cubehelix.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelix", function() { return _cubehelix__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixLong", function() { return _cubehelix__WEBPACK_IMPORTED_MODULE_17__["cubehelixLong"]; }); + +/* harmony import */ var _piecewise__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./piecewise */ "../../../node_modules/d3-interpolate/src/piecewise.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "piecewise", function() { return _piecewise__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony import */ var _quantize__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./quantize */ "../../../node_modules/d3-interpolate/src/quantize.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quantize", function() { return _quantize__WEBPACK_IMPORTED_MODULE_19__["default"]; }); + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/lab.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/lab.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return lab; }); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-interpolate/src/color.js"); + + + +function lab(start, end) { + var l = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["lab"])(start)).l, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["lab"])(end)).l), + a = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.a, end.a), + b = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.b, end.b), + opacity = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); + return function(t) { + start.l = l(t); + start.a = a(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/number.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/number.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + return a = +a, b -= a, function(t) { + return a + b * t; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/object.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/object.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _value__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value */ "../../../node_modules/d3-interpolate/src/value.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + var i = {}, + c = {}, + k; + + if (a === null || typeof a !== "object") a = {}; + if (b === null || typeof b !== "object") b = {}; + + for (k in b) { + if (k in a) { + i[k] = Object(_value__WEBPACK_IMPORTED_MODULE_0__["default"])(a[k], b[k]); + } else { + c[k] = b[k]; + } + } + + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/piecewise.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/piecewise.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return piecewise; }); +function piecewise(interpolate, values) { + var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n); + while (i < n) I[i] = interpolate(v, v = values[++i]); + return function(t) { + var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n))); + return I[i](t - i); + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/quantize.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/quantize.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(interpolator, n) { + var samples = new Array(n); + for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); + return samples; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/rgb.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/rgb.js ***! + \*********************************************************************************************************/ +/*! exports provided: default, rgbBasis, rgbBasisClosed */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbBasis", function() { return rgbBasis; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbBasisClosed", function() { return rgbBasisClosed; }); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./basis */ "../../../node_modules/d3-interpolate/src/basis.js"); +/* harmony import */ var _basisClosed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basisClosed */ "../../../node_modules/d3-interpolate/src/basisClosed.js"); +/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./color */ "../../../node_modules/d3-interpolate/src/color.js"); + + + + + +/* harmony default export */ __webpack_exports__["default"] = ((function rgbGamma(y) { + var color = Object(_color__WEBPACK_IMPORTED_MODULE_3__["gamma"])(y); + + function rgb(start, end) { + var r = color((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["rgb"])(start)).r, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["rgb"])(end)).r), + g = color(start.g, end.g), + b = color(start.b, end.b), + opacity = Object(_color__WEBPACK_IMPORTED_MODULE_3__["default"])(start.opacity, end.opacity); + return function(t) { + start.r = r(t); + start.g = g(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; + } + + rgb.gamma = rgbGamma; + + return rgb; +})(1)); + +function rgbSpline(spline) { + return function(colors) { + var n = colors.length, + r = new Array(n), + g = new Array(n), + b = new Array(n), + i, color; + for (i = 0; i < n; ++i) { + color = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["rgb"])(colors[i]); + r[i] = color.r || 0; + g[i] = color.g || 0; + b[i] = color.b || 0; + } + r = spline(r); + g = spline(g); + b = spline(b); + color.opacity = 1; + return function(t) { + color.r = r(t); + color.g = g(t); + color.b = b(t); + return color + ""; + }; + }; +} + +var rgbBasis = rgbSpline(_basis__WEBPACK_IMPORTED_MODULE_1__["default"]); +var rgbBasisClosed = rgbSpline(_basisClosed__WEBPACK_IMPORTED_MODULE_2__["default"]); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/round.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/round.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + return a = +a, b -= a, function(t) { + return Math.round(a + b * t); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/string.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/string.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-interpolate/src/number.js"); + + +var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, + reB = new RegExp(reA.source, "g"); + +function zero(b) { + return function() { + return b; + }; +} + +function one(b) { + return function(t) { + return b(t) + ""; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b + am, // current match in a + bm, // current match in b + bs, // string preceding current number in b, if any + i = -1, // index in s + s = [], // string constants and placeholders + q = []; // number interpolators + + // Coerce inputs to strings. + a = a + "", b = b + ""; + + // Interpolate pairs of numbers in a & b. + while ((am = reA.exec(a)) + && (bm = reB.exec(b))) { + if ((bs = bm.index) > bi) { // a string precedes the next number in b + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match + if (s[i]) s[i] += bm; // coalesce with previous string + else s[++i] = bm; + } else { // interpolate non-matching numbers + s[++i] = null; + q.push({i: i, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(am, bm)}); + } + bi = reB.lastIndex; + } + + // Add remains of b. + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + + // Special optimization for only a single match. + // Otherwise, interpolate each of the numbers and rejoin the string. + return s.length < 2 ? (q[0] + ? one(q[0].x) + : zero(b)) + : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/transform/decompose.js": +/*!*************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/transform/decompose.js ***! + \*************************************************************************************************************************/ +/*! exports provided: identity, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; }); +var degrees = 180 / Math.PI; + +var identity = { + translateX: 0, + translateY: 0, + rotate: 0, + skewX: 0, + scaleX: 1, + scaleY: 1 +}; + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b, c, d, e, f) { + var scaleX, scaleY, skewX; + if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; + if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; + if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; + if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; + return { + translateX: e, + translateY: f, + rotate: Math.atan2(b, a) * degrees, + skewX: Math.atan(skewX) * degrees, + scaleX: scaleX, + scaleY: scaleY + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/transform/index.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/transform/index.js ***! + \*********************************************************************************************************************/ +/*! exports provided: interpolateTransformCss, interpolateTransformSvg */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformCss", function() { return interpolateTransformCss; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformSvg", function() { return interpolateTransformSvg; }); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../number */ "../../../node_modules/d3-interpolate/src/number.js"); +/* harmony import */ var _parse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse */ "../../../node_modules/d3-interpolate/src/transform/parse.js"); + + + +function interpolateTransform(parse, pxComma, pxParen, degParen) { + + function pop(s) { + return s.length ? s.pop() + " " : ""; + } + + function translate(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push("translate(", null, pxComma, null, pxParen); + q.push({i: i - 4, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(xa, xb)}, {i: i - 2, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(ya, yb)}); + } else if (xb || yb) { + s.push("translate(" + xb + pxComma + yb + pxParen); + } + } + + function rotate(a, b, s, q) { + if (a !== b) { + if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path + q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(a, b)}); + } else if (b) { + s.push(pop(s) + "rotate(" + b + degParen); + } + } + + function skewX(a, b, s, q) { + if (a !== b) { + q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(a, b)}); + } else if (b) { + s.push(pop(s) + "skewX(" + b + degParen); + } + } + + function scale(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push(pop(s) + "scale(", null, ",", null, ")"); + q.push({i: i - 4, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(xa, xb)}, {i: i - 2, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(ya, yb)}); + } else if (xb !== 1 || yb !== 1) { + s.push(pop(s) + "scale(" + xb + "," + yb + ")"); + } + } + + return function(a, b) { + var s = [], // string constants and placeholders + q = []; // number interpolators + a = parse(a), b = parse(b); + translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); + rotate(a.rotate, b.rotate, s, q); + skewX(a.skewX, b.skewX, s, q); + scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); + a = b = null; // gc + return function(t) { + var i = -1, n = q.length, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + }; +} + +var interpolateTransformCss = interpolateTransform(_parse__WEBPACK_IMPORTED_MODULE_1__["parseCss"], "px, ", "px)", "deg)"); +var interpolateTransformSvg = interpolateTransform(_parse__WEBPACK_IMPORTED_MODULE_1__["parseSvg"], ", ", ")", ")"); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/transform/parse.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/transform/parse.js ***! + \*********************************************************************************************************************/ +/*! exports provided: parseCss, parseSvg */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseCss", function() { return parseCss; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseSvg", function() { return parseSvg; }); +/* harmony import */ var _decompose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decompose */ "../../../node_modules/d3-interpolate/src/transform/decompose.js"); + + +var cssNode, + cssRoot, + cssView, + svgNode; + +function parseCss(value) { + if (value === "none") return _decompose__WEBPACK_IMPORTED_MODULE_0__["identity"]; + if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; + cssNode.style.transform = value; + value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); + cssRoot.removeChild(cssNode); + value = value.slice(7, -1).split(","); + return Object(_decompose__WEBPACK_IMPORTED_MODULE_0__["default"])(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); +} + +function parseSvg(value) { + if (value == null) return _decompose__WEBPACK_IMPORTED_MODULE_0__["identity"]; + if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); + svgNode.setAttribute("transform", value); + if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose__WEBPACK_IMPORTED_MODULE_0__["identity"]; + value = value.matrix; + return Object(_decompose__WEBPACK_IMPORTED_MODULE_0__["default"])(value.a, value.b, value.c, value.d, value.e, value.f); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/value.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/value.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var _rgb__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rgb */ "../../../node_modules/d3-interpolate/src/rgb.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-interpolate/src/array.js"); +/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./date */ "../../../node_modules/d3-interpolate/src/date.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-interpolate/src/number.js"); +/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./object */ "../../../node_modules/d3-interpolate/src/object.js"); +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./string */ "../../../node_modules/d3-interpolate/src/string.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-interpolate/src/constant.js"); + + + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + var t = typeof b, c; + return b == null || t === "boolean" ? Object(_constant__WEBPACK_IMPORTED_MODULE_7__["default"])(b) + : (t === "number" ? _number__WEBPACK_IMPORTED_MODULE_4__["default"] + : t === "string" ? ((c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["color"])(b)) ? (b = c, _rgb__WEBPACK_IMPORTED_MODULE_1__["default"]) : _string__WEBPACK_IMPORTED_MODULE_6__["default"]) + : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_0__["color"] ? _rgb__WEBPACK_IMPORTED_MODULE_1__["default"] + : b instanceof Date ? _date__WEBPACK_IMPORTED_MODULE_3__["default"] + : Array.isArray(b) ? _array__WEBPACK_IMPORTED_MODULE_2__["default"] + : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? _object__WEBPACK_IMPORTED_MODULE_5__["default"] + : _number__WEBPACK_IMPORTED_MODULE_4__["default"])(a, b); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-interpolate/src/zoom.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-interpolate/src/zoom.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var rho = Math.SQRT2, + rho2 = 2, + rho4 = 4, + epsilon2 = 1e-12; + +function cosh(x) { + return ((x = Math.exp(x)) + 1 / x) / 2; +} + +function sinh(x) { + return ((x = Math.exp(x)) - 1 / x) / 2; +} + +function tanh(x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1); +} + +// p0 = [ux0, uy0, w0] +// p1 = [ux1, uy1, w1] +/* harmony default export */ __webpack_exports__["default"] = (function(p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], + ux1 = p1[0], uy1 = p1[1], w1 = p1[2], + dx = ux1 - ux0, + dy = uy1 - uy0, + d2 = dx * dx + dy * dy, + i, + S; + + // Special case for u0 ≅ u1. + if (d2 < epsilon2) { + S = Math.log(w1 / w0) / rho; + i = function(t) { + return [ + ux0 + t * dx, + uy0 + t * dy, + w0 * Math.exp(rho * t * S) + ]; + } + } + + // General case. + else { + var d1 = Math.sqrt(d2), + b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), + b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), + r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), + r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); + S = (r1 - r0) / rho; + i = function(t) { + var s = t * S, + coshr0 = cosh(r0), + u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); + return [ + ux0 + u * dx, + uy0 + u * dy, + w0 * coshr0 / cosh(rho * s + r0) + ]; + } + } + + i.duration = S * 1000; + + return i; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-path/src/index.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-path/src/index.js ***! + \****************************************************************************************************/ +/*! exports provided: path */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./path */ "../../../node_modules/d3-path/src/path.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "path", function() { return _path__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + + + + +/***/ }), + +/***/ "../../../node_modules/d3-path/src/path.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-path/src/path.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var pi = Math.PI, + tau = 2 * pi, + epsilon = 1e-6, + tauEpsilon = tau - epsilon; + +function Path() { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = ""; +} + +function path() { + return new Path; +} + +Path.prototype = path.prototype = { + constructor: Path, + moveTo: function(x, y) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); + }, + closePath: function() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._ += "Z"; + } + }, + lineTo: function(x, y) { + this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); + }, + quadraticCurveTo: function(x1, y1, x, y) { + this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { + this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + arcTo: function(x1, y1, x2, y2, r) { + x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; + var x0 = this._x1, + y0 = this._y1, + x21 = x2 - x1, + y21 = y2 - y1, + x01 = x0 - x1, + y01 = y0 - y1, + l01_2 = x01 * x01 + y01 * y01; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x1,y1). + if (this._x1 === null) { + this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. + else if (!(l01_2 > epsilon)); + + // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? + // Equivalently, is (x1,y1) coincident with (x2,y2)? + // Or, is the radius zero? Line to (x1,y1). + else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { + this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Otherwise, draw an arc! + else { + var x20 = x2 - x0, + y20 = y2 - y0, + l21_2 = x21 * x21 + y21 * y21, + l20_2 = x20 * x20 + y20 * y20, + l21 = Math.sqrt(l21_2), + l01 = Math.sqrt(l01_2), + l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), + t01 = l / l01, + t21 = l / l21; + + // If the start tangent is not coincident with (x0,y0), line to. + if (Math.abs(t01 - 1) > epsilon) { + this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); + } + + this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); + } + }, + arc: function(x, y, r, a0, a1, ccw) { + x = +x, y = +y, r = +r; + var dx = r * Math.cos(a0), + dy = r * Math.sin(a0), + x0 = x + dx, + y0 = y + dy, + cw = 1 ^ ccw, + da = ccw ? a0 - a1 : a1 - a0; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x0,y0). + if (this._x1 === null) { + this._ += "M" + x0 + "," + y0; + } + + // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). + else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { + this._ += "L" + x0 + "," + y0; + } + + // Is this arc empty? We’re done. + if (!r) return; + + // Does the angle go the wrong way? Flip the direction. + if (da < 0) da = da % tau + tau; + + // Is this a complete circle? Draw two arcs to complete the circle. + if (da > tauEpsilon) { + this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); + } + + // Is this arc non-empty? Draw an arc! + else if (da > epsilon) { + this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); + } + }, + rect: function(x, y, w, h) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; + }, + toString: function() { + return this._; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = (path); + + +/***/ }), + +/***/ "../../../node_modules/d3-polygon/src/area.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-polygon/src/area.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(polygon) { + var i = -1, + n = polygon.length, + a, + b = polygon[n - 1], + area = 0; + + while (++i < n) { + a = b; + b = polygon[i]; + area += a[1] * b[0] - a[0] * b[1]; + } + + return area / 2; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-polygon/src/centroid.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-polygon/src/centroid.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(polygon) { + var i = -1, + n = polygon.length, + x = 0, + y = 0, + a, + b = polygon[n - 1], + c, + k = 0; + + while (++i < n) { + a = b; + b = polygon[i]; + k += c = a[0] * b[1] - b[0] * a[1]; + x += (a[0] + b[0]) * c; + y += (a[1] + b[1]) * c; + } + + return k *= 3, [x / k, y / k]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-polygon/src/contains.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-polygon/src/contains.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(polygon, point) { + var n = polygon.length, + p = polygon[n - 1], + x = point[0], y = point[1], + x0 = p[0], y0 = p[1], + x1, y1, + inside = false; + + for (var i = 0; i < n; ++i) { + p = polygon[i], x1 = p[0], y1 = p[1]; + if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; + x0 = x1, y0 = y1; + } + + return inside; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-polygon/src/cross.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-polygon/src/cross.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of +// the 3D cross product in a quadrant I Cartesian coordinate system (+x is +// right, +y is up). Returns a positive value if ABC is counter-clockwise, +// negative if clockwise, and zero if the points are collinear. +/* harmony default export */ __webpack_exports__["default"] = (function(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-polygon/src/hull.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-polygon/src/hull.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _cross__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cross */ "../../../node_modules/d3-polygon/src/cross.js"); + + +function lexicographicOrder(a, b) { + return a[0] - b[0] || a[1] - b[1]; +} + +// Computes the upper convex hull per the monotone chain algorithm. +// Assumes points.length >= 3, is sorted by x, unique in y. +// Returns an array of indices into points in left-to-right order. +function computeUpperHullIndexes(points) { + var n = points.length, + indexes = [0, 1], + size = 2; + + for (var i = 2; i < n; ++i) { + while (size > 1 && Object(_cross__WEBPACK_IMPORTED_MODULE_0__["default"])(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; + indexes[size++] = i; + } + + return indexes.slice(0, size); // remove popped points +} + +/* harmony default export */ __webpack_exports__["default"] = (function(points) { + if ((n = points.length) < 3) return null; + + var i, + n, + sortedPoints = new Array(n), + flippedPoints = new Array(n); + + for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; + sortedPoints.sort(lexicographicOrder); + for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; + + var upperIndexes = computeUpperHullIndexes(sortedPoints), + lowerIndexes = computeUpperHullIndexes(flippedPoints); + + // Construct the hull polygon, removing possible duplicate endpoints. + var skipLeft = lowerIndexes[0] === upperIndexes[0], + skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], + hull = []; + + // Add upper hull in right-to-l order. + // Then add lower hull in left-to-right order. + for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); + for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); + + return hull; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-polygon/src/index.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-polygon/src/index.js ***! + \*******************************************************************************************************/ +/*! exports provided: polygonArea, polygonCentroid, polygonHull, polygonContains, polygonLength */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area */ "../../../node_modules/d3-polygon/src/area.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonArea", function() { return _area__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _centroid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./centroid */ "../../../node_modules/d3-polygon/src/centroid.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonCentroid", function() { return _centroid__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _hull__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hull */ "../../../node_modules/d3-polygon/src/hull.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonHull", function() { return _hull__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _contains__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contains */ "../../../node_modules/d3-polygon/src/contains.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonContains", function() { return _contains__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _length__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./length */ "../../../node_modules/d3-polygon/src/length.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonLength", function() { return _length__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-polygon/src/length.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-polygon/src/length.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(polygon) { + var i = -1, + n = polygon.length, + b = polygon[n - 1], + xa, + ya, + xb = b[0], + yb = b[1], + perimeter = 0; + + while (++i < n) { + xa = xb; + ya = yb; + b = polygon[i]; + xb = b[0]; + yb = b[1]; + xa -= xb; + ya -= yb; + perimeter += Math.sqrt(xa * xa + ya * ya); + } + + return perimeter; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/add.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/add.js ***! + \******************************************************************************************************/ +/*! exports provided: default, addAll */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addAll", function() { return addAll; }); +/* harmony default export */ __webpack_exports__["default"] = (function(d) { + var x = +this._x.call(null, d), + y = +this._y.call(null, d); + return add(this.cover(x, y), x, y, d); +}); + +function add(tree, x, y, d) { + if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points + + var parent, + node = tree._root, + leaf = {data: d}, + x0 = tree._x0, + y0 = tree._y0, + x1 = tree._x1, + y1 = tree._y1, + xm, + ym, + xp, + yp, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return tree._root = leaf, tree; + + // Find the existing leaf for the new point, or add it. + while (node.length) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; + } + + // Is the new point is exactly coincident with the existing point? + xp = +tree._x.call(null, node.data); + yp = +tree._y.call(null, node.data); + if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; + + // Otherwise, split the leaf node until the old and new point are separated. + do { + parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); + return parent[j] = node, parent[i] = leaf, tree; +} + +function addAll(data) { + var d, i, n = data.length, + x, + y, + xz = new Array(n), + yz = new Array(n), + x0 = Infinity, + y0 = Infinity, + x1 = -Infinity, + y1 = -Infinity; + + // Compute the points and their extent. + for (i = 0; i < n; ++i) { + if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; + xz[i] = x; + yz[i] = y; + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; + } + + // If there were no (valid) points, abort. + if (x0 > x1 || y0 > y1) return this; + + // Expand the tree to cover the new points. + this.cover(x0, y0).cover(x1, y1); + + // Add the new points. + for (i = 0; i < n; ++i) { + add(this, xz[i], yz[i], data[i]); + } + + return this; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/cover.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/cover.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x, y) { + if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points + + var x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1; + + // If the quadtree has no extent, initialize them. + // Integer extent are necessary so that if we later double the extent, + // the existing quadrant boundaries don’t change due to floating point error! + if (isNaN(x0)) { + x1 = (x0 = Math.floor(x)) + 1; + y1 = (y0 = Math.floor(y)) + 1; + } + + // Otherwise, double repeatedly to cover. + else { + var z = x1 - x0, + node = this._root, + parent, + i; + + while (x0 > x || x >= x1 || y0 > y || y >= y1) { + i = (y < y0) << 1 | (x < x0); + parent = new Array(4), parent[i] = node, node = parent, z *= 2; + switch (i) { + case 0: x1 = x0 + z, y1 = y0 + z; break; + case 1: x0 = x1 - z, y1 = y0 + z; break; + case 2: x1 = x0 + z, y0 = y1 - z; break; + case 3: x0 = x1 - z, y0 = y1 - z; break; + } + } + + if (this._root && this._root.length) this._root = node; + } + + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/data.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/data.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var data = []; + this.visit(function(node) { + if (!node.length) do data.push(node.data); while (node = node.next) + }); + return data; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/extent.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/extent.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(_) { + return arguments.length + ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) + : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/find.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/find.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _quad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad */ "../../../node_modules/d3-quadtree/src/quad.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(x, y, radius) { + var data, + x0 = this._x0, + y0 = this._y0, + x1, + y1, + x2, + y2, + x3 = this._x1, + y3 = this._y1, + quads = [], + node = this._root, + q, + i; + + if (node) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node, x0, y0, x3, y3)); + if (radius == null) radius = Infinity; + else { + x0 = x - radius, y0 = y - radius; + x3 = x + radius, y3 = y + radius; + radius *= radius; + } + + while (q = quads.pop()) { + + // Stop searching if this quadrant can’t contain a closer node. + if (!(node = q.node) + || (x1 = q.x0) > x3 + || (y1 = q.y0) > y3 + || (x2 = q.x1) < x0 + || (y2 = q.y1) < y0) continue; + + // Bisect the current quadrant. + if (node.length) { + var xm = (x1 + x2) / 2, + ym = (y1 + y2) / 2; + + quads.push( + new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node[3], xm, ym, x2, y2), + new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node[2], x1, ym, xm, y2), + new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node[1], xm, y1, x2, ym), + new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node[0], x1, y1, xm, ym) + ); + + // Visit the closest quadrant first. + if (i = (y >= ym) << 1 | (x >= xm)) { + q = quads[quads.length - 1]; + quads[quads.length - 1] = quads[quads.length - 1 - i]; + quads[quads.length - 1 - i] = q; + } + } + + // Visit this point. (Visiting coincident points isn’t necessary!) + else { + var dx = x - +this._x.call(null, node.data), + dy = y - +this._y.call(null, node.data), + d2 = dx * dx + dy * dy; + if (d2 < radius) { + var d = Math.sqrt(radius = d2); + x0 = x - d, y0 = y - d; + x3 = x + d, y3 = y + d; + data = node.data; + } + } + } + + return data; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/index.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/index.js ***! + \********************************************************************************************************/ +/*! exports provided: quadtree */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _quadtree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quadtree */ "../../../node_modules/d3-quadtree/src/quadtree.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quadtree", function() { return _quadtree__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + + + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/quad.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/quad.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(node, x0, y0, x1, y1) { + this.node = node; + this.x0 = x0; + this.y0 = y0; + this.x1 = x1; + this.y1 = y1; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/quadtree.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/quadtree.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return quadtree; }); +/* harmony import */ var _add__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add */ "../../../node_modules/d3-quadtree/src/add.js"); +/* harmony import */ var _cover__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cover */ "../../../node_modules/d3-quadtree/src/cover.js"); +/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data */ "../../../node_modules/d3-quadtree/src/data.js"); +/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./extent */ "../../../node_modules/d3-quadtree/src/extent.js"); +/* harmony import */ var _find__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./find */ "../../../node_modules/d3-quadtree/src/find.js"); +/* harmony import */ var _remove__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./remove */ "../../../node_modules/d3-quadtree/src/remove.js"); +/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./root */ "../../../node_modules/d3-quadtree/src/root.js"); +/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./size */ "../../../node_modules/d3-quadtree/src/size.js"); +/* harmony import */ var _visit__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./visit */ "../../../node_modules/d3-quadtree/src/visit.js"); +/* harmony import */ var _visitAfter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./visitAfter */ "../../../node_modules/d3-quadtree/src/visitAfter.js"); +/* harmony import */ var _x__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./x */ "../../../node_modules/d3-quadtree/src/x.js"); +/* harmony import */ var _y__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./y */ "../../../node_modules/d3-quadtree/src/y.js"); + + + + + + + + + + + + + +function quadtree(nodes, x, y) { + var tree = new Quadtree(x == null ? _x__WEBPACK_IMPORTED_MODULE_10__["defaultX"] : x, y == null ? _y__WEBPACK_IMPORTED_MODULE_11__["defaultY"] : y, NaN, NaN, NaN, NaN); + return nodes == null ? tree : tree.addAll(nodes); +} + +function Quadtree(x, y, x0, y0, x1, y1) { + this._x = x; + this._y = y; + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + this._root = undefined; +} + +function leaf_copy(leaf) { + var copy = {data: leaf.data}, next = copy; + while (leaf = leaf.next) next = next.next = {data: leaf.data}; + return copy; +} + +var treeProto = quadtree.prototype = Quadtree.prototype; + +treeProto.copy = function() { + var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), + node = this._root, + nodes, + child; + + if (!node) return copy; + + if (!node.length) return copy._root = leaf_copy(node), copy; + + nodes = [{source: node, target: copy._root = new Array(4)}]; + while (node = nodes.pop()) { + for (var i = 0; i < 4; ++i) { + if (child = node.source[i]) { + if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); + else node.target[i] = leaf_copy(child); + } + } + } + + return copy; +}; + +treeProto.add = _add__WEBPACK_IMPORTED_MODULE_0__["default"]; +treeProto.addAll = _add__WEBPACK_IMPORTED_MODULE_0__["addAll"]; +treeProto.cover = _cover__WEBPACK_IMPORTED_MODULE_1__["default"]; +treeProto.data = _data__WEBPACK_IMPORTED_MODULE_2__["default"]; +treeProto.extent = _extent__WEBPACK_IMPORTED_MODULE_3__["default"]; +treeProto.find = _find__WEBPACK_IMPORTED_MODULE_4__["default"]; +treeProto.remove = _remove__WEBPACK_IMPORTED_MODULE_5__["default"]; +treeProto.removeAll = _remove__WEBPACK_IMPORTED_MODULE_5__["removeAll"]; +treeProto.root = _root__WEBPACK_IMPORTED_MODULE_6__["default"]; +treeProto.size = _size__WEBPACK_IMPORTED_MODULE_7__["default"]; +treeProto.visit = _visit__WEBPACK_IMPORTED_MODULE_8__["default"]; +treeProto.visitAfter = _visitAfter__WEBPACK_IMPORTED_MODULE_9__["default"]; +treeProto.x = _x__WEBPACK_IMPORTED_MODULE_10__["default"]; +treeProto.y = _y__WEBPACK_IMPORTED_MODULE_11__["default"]; + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/remove.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/remove.js ***! + \*********************************************************************************************************/ +/*! exports provided: default, removeAll */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeAll", function() { return removeAll; }); +/* harmony default export */ __webpack_exports__["default"] = (function(d) { + if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points + + var parent, + node = this._root, + retainer, + previous, + next, + x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1, + x, + y, + xm, + ym, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return this; + + // Find the leaf node for the point. + // While descending, also retain the deepest parent with a non-removed sibling. + if (node.length) while (true) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (!(parent = node, node = node[i = bottom << 1 | right])) return this; + if (!node.length) break; + if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; + } + + // Find the point to remove. + while (node.data !== d) if (!(previous = node, node = node.next)) return this; + if (next = node.next) delete node.next; + + // If there are multiple coincident points, remove just the point. + if (previous) return (next ? previous.next = next : delete previous.next), this; + + // If this is the root point, remove it. + if (!parent) return this._root = next, this; + + // Remove this leaf. + next ? parent[i] = next : delete parent[i]; + + // If the parent now contains exactly one leaf, collapse superfluous parents. + if ((node = parent[0] || parent[1] || parent[2] || parent[3]) + && node === (parent[3] || parent[2] || parent[1] || parent[0]) + && !node.length) { + if (retainer) retainer[j] = node; + else this._root = node; + } + + return this; +}); + +function removeAll(data) { + for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); + return this; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/root.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/root.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + return this._root; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/size.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/size.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var size = 0; + this.visit(function(node) { + if (!node.length) do ++size; while (node = node.next) + }); + return size; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/visit.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/visit.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _quad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad */ "../../../node_modules/d3-quadtree/src/quad.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(callback) { + var quads = [], q, node = this._root, child, x0, y0, x1, y1; + if (node) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { + var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[3]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, ym, x1, y1)); + if (child = node[2]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, ym, xm, y1)); + if (child = node[1]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, y0, x1, ym)); + if (child = node[0]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, y0, xm, ym)); + } + } + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/visitAfter.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/visitAfter.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _quad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad */ "../../../node_modules/d3-quadtree/src/quad.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(callback) { + var quads = [], next = [], q; + if (this._root) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](this._root, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + var node = q.node; + if (node.length) { + var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[0]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, y0, xm, ym)); + if (child = node[1]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, y0, x1, ym)); + if (child = node[2]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, ym, xm, y1)); + if (child = node[3]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, ym, x1, y1)); + } + next.push(q); + } + while (q = next.pop()) { + callback(q.node, q.x0, q.y0, q.x1, q.y1); + } + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/x.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/x.js ***! + \****************************************************************************************************/ +/*! exports provided: defaultX, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultX", function() { return defaultX; }); +function defaultX(d) { + return d[0]; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(_) { + return arguments.length ? (this._x = _, this) : this._x; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-quadtree/src/y.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-quadtree/src/y.js ***! + \****************************************************************************************************/ +/*! exports provided: defaultY, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultY", function() { return defaultY; }); +function defaultY(d) { + return d[1]; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(_) { + return arguments.length ? (this._y = _, this) : this._y; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-random/src/bates.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-random/src/bates.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "../../../node_modules/d3-random/src/defaultSource.js"); +/* harmony import */ var _irwinHall__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./irwinHall */ "../../../node_modules/d3-random/src/irwinHall.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomBates(source) { + function randomBates(n) { + var randomIrwinHall = _irwinHall__WEBPACK_IMPORTED_MODULE_1__["default"].source(source)(n); + return function() { + return randomIrwinHall() / n; + }; + } + + randomBates.source = sourceRandomBates; + + return randomBates; +})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/***/ }), + +/***/ "../../../node_modules/d3-random/src/defaultSource.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-random/src/defaultSource.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + return Math.random(); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-random/src/exponential.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-random/src/exponential.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "../../../node_modules/d3-random/src/defaultSource.js"); + + +/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomExponential(source) { + function randomExponential(lambda) { + return function() { + return -Math.log(1 - source()) / lambda; + }; + } + + randomExponential.source = sourceRandomExponential; + + return randomExponential; +})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/***/ }), + +/***/ "../../../node_modules/d3-random/src/index.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-random/src/index.js ***! + \******************************************************************************************************/ +/*! exports provided: randomUniform, randomNormal, randomLogNormal, randomBates, randomIrwinHall, randomExponential */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _uniform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./uniform */ "../../../node_modules/d3-random/src/uniform.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomUniform", function() { return _uniform__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _normal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./normal */ "../../../node_modules/d3-random/src/normal.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomNormal", function() { return _normal__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _logNormal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./logNormal */ "../../../node_modules/d3-random/src/logNormal.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomLogNormal", function() { return _logNormal__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _bates__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bates */ "../../../node_modules/d3-random/src/bates.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomBates", function() { return _bates__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _irwinHall__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./irwinHall */ "../../../node_modules/d3-random/src/irwinHall.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomIrwinHall", function() { return _irwinHall__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _exponential__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exponential */ "../../../node_modules/d3-random/src/exponential.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomExponential", function() { return _exponential__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-random/src/irwinHall.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-random/src/irwinHall.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "../../../node_modules/d3-random/src/defaultSource.js"); + + +/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomIrwinHall(source) { + function randomIrwinHall(n) { + return function() { + for (var sum = 0, i = 0; i < n; ++i) sum += source(); + return sum; + }; + } + + randomIrwinHall.source = sourceRandomIrwinHall; + + return randomIrwinHall; +})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/***/ }), + +/***/ "../../../node_modules/d3-random/src/logNormal.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-random/src/logNormal.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "../../../node_modules/d3-random/src/defaultSource.js"); +/* harmony import */ var _normal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./normal */ "../../../node_modules/d3-random/src/normal.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomLogNormal(source) { + function randomLogNormal() { + var randomNormal = _normal__WEBPACK_IMPORTED_MODULE_1__["default"].source(source).apply(this, arguments); + return function() { + return Math.exp(randomNormal()); + }; + } + + randomLogNormal.source = sourceRandomLogNormal; + + return randomLogNormal; +})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/***/ }), + +/***/ "../../../node_modules/d3-random/src/normal.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-random/src/normal.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "../../../node_modules/d3-random/src/defaultSource.js"); + + +/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomNormal(source) { + function randomNormal(mu, sigma) { + var x, r; + mu = mu == null ? 0 : +mu; + sigma = sigma == null ? 1 : +sigma; + return function() { + var y; + + // If available, use the second previously-generated uniform random. + if (x != null) y = x, x = null; + + // Otherwise, generate a new x and y. + else do { + x = source() * 2 - 1; + y = source() * 2 - 1; + r = x * x + y * y; + } while (!r || r > 1); + + return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); + }; + } + + randomNormal.source = sourceRandomNormal; + + return randomNormal; +})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/***/ }), + +/***/ "../../../node_modules/d3-random/src/uniform.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-random/src/uniform.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "../../../node_modules/d3-random/src/defaultSource.js"); + + +/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomUniform(source) { + function randomUniform(min, max) { + min = min == null ? 0 : +min; + max = max == null ? 1 : +max; + if (arguments.length === 1) max = min, min = 0; + else max -= min; + return function() { + return source() * max + min; + }; + } + + randomUniform.source = sourceRandomUniform; + + return randomUniform; +})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js": +/*!****************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/Accent.js ***! + \****************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js": +/*!***************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/Dark2.js ***! + \***************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js": +/*!****************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/Paired.js ***! + \****************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js": +/*!*****************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js ***! + \*****************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js": +/*!*****************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js ***! + \*****************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js": +/*!**************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/Set1.js ***! + \**************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js": +/*!**************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/Set2.js ***! + \**************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js": +/*!**************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/Set3.js ***! + \**************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/categorical/category10.js": +/*!********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/categorical/category10.js ***! + \********************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/colors.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/colors.js ***! + \****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(specifier) { + var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; + while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); + return colors; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/BrBG.js ***! + \************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "d8b365f5f5f55ab4ac", + "a6611adfc27d80cdc1018571", + "a6611adfc27df5f5f580cdc1018571", + "8c510ad8b365f6e8c3c7eae55ab4ac01665e", + "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", + "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", + "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", + "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", + "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/PRGn.js ***! + \************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "af8dc3f7f7f77fbf7b", + "7b3294c2a5cfa6dba0008837", + "7b3294c2a5cff7f7f7a6dba0008837", + "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", + "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", + "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", + "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", + "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", + "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/PiYG.js ***! + \************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "e9a3c9f7f7f7a1d76a", + "d01c8bf1b6dab8e1864dac26", + "d01c8bf1b6daf7f7f7b8e1864dac26", + "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", + "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", + "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", + "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", + "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", + "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/PuOr.js ***! + \************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "998ec3f7f7f7f1a340", + "5e3c99b2abd2fdb863e66101", + "5e3c99b2abd2f7f7f7fdb863e66101", + "542788998ec3d8daebfee0b6f1a340b35806", + "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", + "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", + "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", + "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", + "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/RdBu.js ***! + \************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "ef8a62f7f7f767a9cf", + "ca0020f4a58292c5de0571b0", + "ca0020f4a582f7f7f792c5de0571b0", + "b2182bef8a62fddbc7d1e5f067a9cf2166ac", + "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", + "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", + "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", + "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", + "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/RdGy.js ***! + \************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "ef8a62ffffff999999", + "ca0020f4a582bababa404040", + "ca0020f4a582ffffffbababa404040", + "b2182bef8a62fddbc7e0e0e09999994d4d4d", + "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", + "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", + "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", + "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", + "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js": +/*!**************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js ***! + \**************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "fc8d59ffffbf91bfdb", + "d7191cfdae61abd9e92c7bb6", + "d7191cfdae61ffffbfabd9e92c7bb6", + "d73027fc8d59fee090e0f3f891bfdb4575b4", + "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", + "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", + "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", + "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", + "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js": +/*!**************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js ***! + \**************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "fc8d59ffffbf91cf60", + "d7191cfdae61a6d96a1a9641", + "d7191cfdae61ffffbfa6d96a1a9641", + "d73027fc8d59fee08bd9ef8b91cf601a9850", + "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", + "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", + "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", + "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", + "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js": +/*!****************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/diverging/Spectral.js ***! + \****************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "fc8d59ffffbf99d594", + "d7191cfdae61abdda42b83ba", + "d7191cfdae61ffffbfabdda42b83ba", + "d53e4ffc8d59fee08be6f59899d5943288bd", + "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", + "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", + "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", + "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", + "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/index.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/index.js ***! + \***************************************************************************************************************/ +/*! exports provided: schemeCategory10, schemeAccent, schemeDark2, schemePaired, schemePastel1, schemePastel2, schemeSet1, schemeSet2, schemeSet3, interpolateBrBG, schemeBrBG, interpolatePRGn, schemePRGn, interpolatePiYG, schemePiYG, interpolatePuOr, schemePuOr, interpolateRdBu, schemeRdBu, interpolateRdGy, schemeRdGy, interpolateRdYlBu, schemeRdYlBu, interpolateRdYlGn, schemeRdYlGn, interpolateSpectral, schemeSpectral, interpolateBuGn, schemeBuGn, interpolateBuPu, schemeBuPu, interpolateGnBu, schemeGnBu, interpolateOrRd, schemeOrRd, interpolatePuBuGn, schemePuBuGn, interpolatePuBu, schemePuBu, interpolatePuRd, schemePuRd, interpolateRdPu, schemeRdPu, interpolateYlGnBu, schemeYlGnBu, interpolateYlGn, schemeYlGn, interpolateYlOrBr, schemeYlOrBr, interpolateYlOrRd, schemeYlOrRd, interpolateBlues, schemeBlues, interpolateGreens, schemeGreens, interpolateGreys, schemeGreys, interpolatePurples, schemePurples, interpolateReds, schemeReds, interpolateOranges, schemeOranges, interpolateCubehelixDefault, interpolateRainbow, interpolateWarm, interpolateCool, interpolateSinebow, interpolateViridis, interpolateMagma, interpolateInferno, interpolatePlasma */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _categorical_category10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./categorical/category10 */ "../../../node_modules/d3-scale-chromatic/src/categorical/category10.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeCategory10", function() { return _categorical_category10__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _categorical_Accent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./categorical/Accent */ "../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeAccent", function() { return _categorical_Accent__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _categorical_Dark2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./categorical/Dark2 */ "../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeDark2", function() { return _categorical_Dark2__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _categorical_Paired__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./categorical/Paired */ "../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePaired", function() { return _categorical_Paired__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _categorical_Pastel1__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./categorical/Pastel1 */ "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePastel1", function() { return _categorical_Pastel1__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _categorical_Pastel2__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./categorical/Pastel2 */ "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePastel2", function() { return _categorical_Pastel2__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _categorical_Set1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./categorical/Set1 */ "../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet1", function() { return _categorical_Set1__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _categorical_Set2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./categorical/Set2 */ "../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet2", function() { return _categorical_Set2__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _categorical_Set3__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./categorical/Set3 */ "../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet3", function() { return _categorical_Set3__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _diverging_BrBG__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./diverging/BrBG */ "../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBrBG", function() { return _diverging_BrBG__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBrBG", function() { return _diverging_BrBG__WEBPACK_IMPORTED_MODULE_9__["scheme"]; }); + +/* harmony import */ var _diverging_PRGn__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./diverging/PRGn */ "../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePRGn", function() { return _diverging_PRGn__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePRGn", function() { return _diverging_PRGn__WEBPACK_IMPORTED_MODULE_10__["scheme"]; }); + +/* harmony import */ var _diverging_PiYG__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./diverging/PiYG */ "../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePiYG", function() { return _diverging_PiYG__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePiYG", function() { return _diverging_PiYG__WEBPACK_IMPORTED_MODULE_11__["scheme"]; }); + +/* harmony import */ var _diverging_PuOr__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./diverging/PuOr */ "../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuOr", function() { return _diverging_PuOr__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuOr", function() { return _diverging_PuOr__WEBPACK_IMPORTED_MODULE_12__["scheme"]; }); + +/* harmony import */ var _diverging_RdBu__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./diverging/RdBu */ "../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdBu", function() { return _diverging_RdBu__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdBu", function() { return _diverging_RdBu__WEBPACK_IMPORTED_MODULE_13__["scheme"]; }); + +/* harmony import */ var _diverging_RdGy__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diverging/RdGy */ "../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdGy", function() { return _diverging_RdGy__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdGy", function() { return _diverging_RdGy__WEBPACK_IMPORTED_MODULE_14__["scheme"]; }); + +/* harmony import */ var _diverging_RdYlBu__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diverging/RdYlBu */ "../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdYlBu", function() { return _diverging_RdYlBu__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdYlBu", function() { return _diverging_RdYlBu__WEBPACK_IMPORTED_MODULE_15__["scheme"]; }); + +/* harmony import */ var _diverging_RdYlGn__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./diverging/RdYlGn */ "../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdYlGn", function() { return _diverging_RdYlGn__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdYlGn", function() { return _diverging_RdYlGn__WEBPACK_IMPORTED_MODULE_16__["scheme"]; }); + +/* harmony import */ var _diverging_Spectral__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./diverging/Spectral */ "../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateSpectral", function() { return _diverging_Spectral__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSpectral", function() { return _diverging_Spectral__WEBPACK_IMPORTED_MODULE_17__["scheme"]; }); + +/* harmony import */ var _sequential_multi_BuGn__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./sequential-multi/BuGn */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBuGn", function() { return _sequential_multi_BuGn__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBuGn", function() { return _sequential_multi_BuGn__WEBPACK_IMPORTED_MODULE_18__["scheme"]; }); + +/* harmony import */ var _sequential_multi_BuPu__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./sequential-multi/BuPu */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBuPu", function() { return _sequential_multi_BuPu__WEBPACK_IMPORTED_MODULE_19__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBuPu", function() { return _sequential_multi_BuPu__WEBPACK_IMPORTED_MODULE_19__["scheme"]; }); + +/* harmony import */ var _sequential_multi_GnBu__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./sequential-multi/GnBu */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGnBu", function() { return _sequential_multi_GnBu__WEBPACK_IMPORTED_MODULE_20__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGnBu", function() { return _sequential_multi_GnBu__WEBPACK_IMPORTED_MODULE_20__["scheme"]; }); + +/* harmony import */ var _sequential_multi_OrRd__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./sequential-multi/OrRd */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateOrRd", function() { return _sequential_multi_OrRd__WEBPACK_IMPORTED_MODULE_21__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeOrRd", function() { return _sequential_multi_OrRd__WEBPACK_IMPORTED_MODULE_21__["scheme"]; }); + +/* harmony import */ var _sequential_multi_PuBuGn__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sequential-multi/PuBuGn */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuBuGn", function() { return _sequential_multi_PuBuGn__WEBPACK_IMPORTED_MODULE_22__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuBuGn", function() { return _sequential_multi_PuBuGn__WEBPACK_IMPORTED_MODULE_22__["scheme"]; }); + +/* harmony import */ var _sequential_multi_PuBu__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./sequential-multi/PuBu */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuBu", function() { return _sequential_multi_PuBu__WEBPACK_IMPORTED_MODULE_23__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuBu", function() { return _sequential_multi_PuBu__WEBPACK_IMPORTED_MODULE_23__["scheme"]; }); + +/* harmony import */ var _sequential_multi_PuRd__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./sequential-multi/PuRd */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuRd", function() { return _sequential_multi_PuRd__WEBPACK_IMPORTED_MODULE_24__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuRd", function() { return _sequential_multi_PuRd__WEBPACK_IMPORTED_MODULE_24__["scheme"]; }); + +/* harmony import */ var _sequential_multi_RdPu__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./sequential-multi/RdPu */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdPu", function() { return _sequential_multi_RdPu__WEBPACK_IMPORTED_MODULE_25__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdPu", function() { return _sequential_multi_RdPu__WEBPACK_IMPORTED_MODULE_25__["scheme"]; }); + +/* harmony import */ var _sequential_multi_YlGnBu__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./sequential-multi/YlGnBu */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlGnBu", function() { return _sequential_multi_YlGnBu__WEBPACK_IMPORTED_MODULE_26__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlGnBu", function() { return _sequential_multi_YlGnBu__WEBPACK_IMPORTED_MODULE_26__["scheme"]; }); + +/* harmony import */ var _sequential_multi_YlGn__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./sequential-multi/YlGn */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlGn", function() { return _sequential_multi_YlGn__WEBPACK_IMPORTED_MODULE_27__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlGn", function() { return _sequential_multi_YlGn__WEBPACK_IMPORTED_MODULE_27__["scheme"]; }); + +/* harmony import */ var _sequential_multi_YlOrBr__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./sequential-multi/YlOrBr */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlOrBr", function() { return _sequential_multi_YlOrBr__WEBPACK_IMPORTED_MODULE_28__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlOrBr", function() { return _sequential_multi_YlOrBr__WEBPACK_IMPORTED_MODULE_28__["scheme"]; }); + +/* harmony import */ var _sequential_multi_YlOrRd__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./sequential-multi/YlOrRd */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlOrRd", function() { return _sequential_multi_YlOrRd__WEBPACK_IMPORTED_MODULE_29__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlOrRd", function() { return _sequential_multi_YlOrRd__WEBPACK_IMPORTED_MODULE_29__["scheme"]; }); + +/* harmony import */ var _sequential_single_Blues__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./sequential-single/Blues */ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBlues", function() { return _sequential_single_Blues__WEBPACK_IMPORTED_MODULE_30__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBlues", function() { return _sequential_single_Blues__WEBPACK_IMPORTED_MODULE_30__["scheme"]; }); + +/* harmony import */ var _sequential_single_Greens__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./sequential-single/Greens */ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGreens", function() { return _sequential_single_Greens__WEBPACK_IMPORTED_MODULE_31__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGreens", function() { return _sequential_single_Greens__WEBPACK_IMPORTED_MODULE_31__["scheme"]; }); + +/* harmony import */ var _sequential_single_Greys__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./sequential-single/Greys */ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGreys", function() { return _sequential_single_Greys__WEBPACK_IMPORTED_MODULE_32__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGreys", function() { return _sequential_single_Greys__WEBPACK_IMPORTED_MODULE_32__["scheme"]; }); + +/* harmony import */ var _sequential_single_Purples__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./sequential-single/Purples */ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePurples", function() { return _sequential_single_Purples__WEBPACK_IMPORTED_MODULE_33__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePurples", function() { return _sequential_single_Purples__WEBPACK_IMPORTED_MODULE_33__["scheme"]; }); + +/* harmony import */ var _sequential_single_Reds__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./sequential-single/Reds */ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateReds", function() { return _sequential_single_Reds__WEBPACK_IMPORTED_MODULE_34__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeReds", function() { return _sequential_single_Reds__WEBPACK_IMPORTED_MODULE_34__["scheme"]; }); + +/* harmony import */ var _sequential_single_Oranges__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./sequential-single/Oranges */ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateOranges", function() { return _sequential_single_Oranges__WEBPACK_IMPORTED_MODULE_35__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeOranges", function() { return _sequential_single_Oranges__WEBPACK_IMPORTED_MODULE_35__["scheme"]; }); + +/* harmony import */ var _sequential_multi_cubehelix__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./sequential-multi/cubehelix */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixDefault", function() { return _sequential_multi_cubehelix__WEBPACK_IMPORTED_MODULE_36__["default"]; }); + +/* harmony import */ var _sequential_multi_rainbow__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./sequential-multi/rainbow */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRainbow", function() { return _sequential_multi_rainbow__WEBPACK_IMPORTED_MODULE_37__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateWarm", function() { return _sequential_multi_rainbow__WEBPACK_IMPORTED_MODULE_37__["warm"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCool", function() { return _sequential_multi_rainbow__WEBPACK_IMPORTED_MODULE_37__["cool"]; }); + +/* harmony import */ var _sequential_multi_sinebow__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./sequential-multi/sinebow */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateSinebow", function() { return _sequential_multi_sinebow__WEBPACK_IMPORTED_MODULE_38__["default"]; }); + +/* harmony import */ var _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./sequential-multi/viridis */ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateViridis", function() { return _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateMagma", function() { return _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__["magma"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateInferno", function() { return _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__["inferno"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePlasma", function() { return _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__["plasma"]; }); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/ramp.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/ramp.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(scheme) { + return Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_0__["interpolateRgbBasis"])(scheme[scheme.length - 1]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js": +/*!*******************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js ***! + \*******************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "e5f5f999d8c92ca25f", + "edf8fbb2e2e266c2a4238b45", + "edf8fbb2e2e266c2a42ca25f006d2c", + "edf8fbccece699d8c966c2a42ca25f006d2c", + "edf8fbccece699d8c966c2a441ae76238b45005824", + "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", + "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js": +/*!*******************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js ***! + \*******************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "e0ecf49ebcda8856a7", + "edf8fbb3cde38c96c688419d", + "edf8fbb3cde38c96c68856a7810f7c", + "edf8fbbfd3e69ebcda8c96c68856a7810f7c", + "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", + "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", + "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js": +/*!*******************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js ***! + \*******************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "e0f3dba8ddb543a2ca", + "f0f9e8bae4bc7bccc42b8cbe", + "f0f9e8bae4bc7bccc443a2ca0868ac", + "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", + "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", + "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", + "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js": +/*!*******************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js ***! + \*******************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "fee8c8fdbb84e34a33", + "fef0d9fdcc8afc8d59d7301f", + "fef0d9fdcc8afc8d59e34a33b30000", + "fef0d9fdd49efdbb84fc8d59e34a33b30000", + "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", + "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", + "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js": +/*!*******************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js ***! + \*******************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "ece7f2a6bddb2b8cbe", + "f1eef6bdc9e174a9cf0570b0", + "f1eef6bdc9e174a9cf2b8cbe045a8d", + "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", + "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", + "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", + "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js": +/*!*********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js ***! + \*********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "ece2f0a6bddb1c9099", + "f6eff7bdc9e167a9cf02818a", + "f6eff7bdc9e167a9cf1c9099016c59", + "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", + "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", + "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", + "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js": +/*!*******************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js ***! + \*******************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "e7e1efc994c7dd1c77", + "f1eef6d7b5d8df65b0ce1256", + "f1eef6d7b5d8df65b0dd1c77980043", + "f1eef6d4b9dac994c7df65b0dd1c77980043", + "f1eef6d4b9dac994c7df65b0e7298ace125691003f", + "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", + "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js": +/*!*******************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js ***! + \*******************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "fde0ddfa9fb5c51b8a", + "feebe2fbb4b9f768a1ae017e", + "feebe2fbb4b9f768a1c51b8a7a0177", + "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", + "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", + "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", + "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js": +/*!*******************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js ***! + \*******************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "f7fcb9addd8e31a354", + "ffffccc2e69978c679238443", + "ffffccc2e69978c67931a354006837", + "ffffccd9f0a3addd8e78c67931a354006837", + "ffffccd9f0a3addd8e78c67941ab5d238443005a32", + "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", + "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js": +/*!*********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js ***! + \*********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "edf8b17fcdbb2c7fb8", + "ffffcca1dab441b6c4225ea8", + "ffffcca1dab441b6c42c7fb8253494", + "ffffccc7e9b47fcdbb41b6c42c7fb8253494", + "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", + "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", + "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js": +/*!*********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js ***! + \*********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "fff7bcfec44fd95f0e", + "ffffd4fed98efe9929cc4c02", + "ffffd4fed98efe9929d95f0e993404", + "ffffd4fee391fec44ffe9929d95f0e993404", + "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", + "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", + "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js": +/*!*********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js ***! + \*********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "ffeda0feb24cf03b20", + "ffffb2fecc5cfd8d3ce31a1c", + "ffffb2fecc5cfd8d3cf03b20bd0026", + "ffffb2fed976feb24cfd8d3cf03b20bd0026", + "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", + "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", + "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js": +/*!************************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js ***! + \************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateCubehelixLong"])(Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(300, 0.5, 0.0), Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(-240, 0.5, 1.0))); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js": +/*!**********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js ***! + \**********************************************************************************************************************************/ +/*! exports provided: warm, cool, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "warm", function() { return warm; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cool", function() { return cool; }); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); + + + +var warm = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateCubehelixLong"])(Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(-100, 0.75, 0.35), Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(80, 1.50, 0.8)); + +var cool = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateCubehelixLong"])(Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(260, 0.75, 0.35), Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(80, 1.50, 0.8)); + +var c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(); + +/* harmony default export */ __webpack_exports__["default"] = (function(t) { + if (t < 0 || t > 1) t -= Math.floor(t); + var ts = Math.abs(t - 0.5); + c.h = 360 * t - 100; + c.s = 1.5 - 1.5 * ts; + c.l = 0.8 - 0.9 * ts; + return c + ""; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js": +/*!**********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js ***! + \**********************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); + + +var c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["rgb"])(), + pi_1_3 = Math.PI / 3, + pi_2_3 = Math.PI * 2 / 3; + +/* harmony default export */ __webpack_exports__["default"] = (function(t) { + var x; + t = (0.5 - t) * Math.PI; + c.r = 255 * (x = Math.sin(t)) * x; + c.g = 255 * (x = Math.sin(t + pi_1_3)) * x; + c.b = 255 * (x = Math.sin(t + pi_2_3)) * x; + return c + ""; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js": +/*!**********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js ***! + \**********************************************************************************************************************************/ +/*! exports provided: default, magma, inferno, plasma */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "magma", function() { return magma; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inferno", function() { return inferno; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "plasma", function() { return plasma; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); + + +function ramp(range) { + var n = range.length; + return function(t) { + return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (ramp(Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"))); + +var magma = ramp(Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); + +var inferno = ramp(Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); + +var plasma = ramp(Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js": +/*!*********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js ***! + \*********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "deebf79ecae13182bd", + "eff3ffbdd7e76baed62171b5", + "eff3ffbdd7e76baed63182bd08519c", + "eff3ffc6dbef9ecae16baed63182bd08519c", + "eff3ffc6dbef9ecae16baed64292c62171b5084594", + "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", + "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js": +/*!**********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js ***! + \**********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "e5f5e0a1d99b31a354", + "edf8e9bae4b374c476238b45", + "edf8e9bae4b374c47631a354006d2c", + "edf8e9c7e9c0a1d99b74c47631a354006d2c", + "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", + "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", + "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js": +/*!*********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js ***! + \*********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "f0f0f0bdbdbd636363", + "f7f7f7cccccc969696525252", + "f7f7f7cccccc969696636363252525", + "f7f7f7d9d9d9bdbdbd969696636363252525", + "f7f7f7d9d9d9bdbdbd969696737373525252252525", + "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", + "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js": +/*!***********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js ***! + \***********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "fee6cefdae6be6550d", + "feeddefdbe85fd8d3cd94701", + "feeddefdbe85fd8d3ce6550da63603", + "feeddefdd0a2fdae6bfd8d3ce6550da63603", + "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", + "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", + "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js": +/*!***********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js ***! + \***********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "efedf5bcbddc756bb1", + "f2f0f7cbc9e29e9ac86a51a3", + "f2f0f7cbc9e29e9ac8756bb154278f", + "f2f0f7dadaebbcbddc9e9ac8756bb154278f", + "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", + "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", + "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js": +/*!********************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js ***! + \********************************************************************************************************************************/ +/*! exports provided: scheme, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "../../../node_modules/d3-scale-chromatic/src/colors.js"); +/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "../../../node_modules/d3-scale-chromatic/src/ramp.js"); + + + +var scheme = new Array(3).concat( + "fee0d2fc9272de2d26", + "fee5d9fcae91fb6a4acb181d", + "fee5d9fcae91fb6a4ade2d26a50f15", + "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", + "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", + "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", + "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" +).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/array.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/array.js ***! + \*****************************************************************************************************/ +/*! exports provided: map, slice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +var array = Array.prototype; + +var map = array.map; +var slice = array.slice; + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/band.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/band.js ***! + \****************************************************************************************************/ +/*! exports provided: default, point */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return band; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "point", function() { return point; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); +/* harmony import */ var _ordinal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ordinal */ "../../../node_modules/d3-scale/src/ordinal.js"); + + + + +function band() { + var scale = Object(_ordinal__WEBPACK_IMPORTED_MODULE_2__["default"])().unknown(undefined), + domain = scale.domain, + ordinalRange = scale.range, + range = [0, 1], + step, + bandwidth, + round = false, + paddingInner = 0, + paddingOuter = 0, + align = 0.5; + + delete scale.unknown; + + function rescale() { + var n = domain().length, + reverse = range[1] < range[0], + start = range[reverse - 0], + stop = range[1 - reverse]; + step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); + if (round) step = Math.floor(step); + start += (stop - start - step * (n - paddingInner)) * align; + bandwidth = step * (1 - paddingInner); + if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); + var values = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(n).map(function(i) { return start + step * i; }); + return ordinalRange(reverse ? values.reverse() : values); + } + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.range = function(_) { + return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice(); + }; + + scale.rangeRound = function(_) { + return range = [+_[0], +_[1]], round = true, rescale(); + }; + + scale.bandwidth = function() { + return bandwidth; + }; + + scale.step = function() { + return step; + }; + + scale.round = function(_) { + return arguments.length ? (round = !!_, rescale()) : round; + }; + + scale.padding = function(_) { + return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner; + }; + + scale.paddingInner = function(_) { + return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner; + }; + + scale.paddingOuter = function(_) { + return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter; + }; + + scale.align = function(_) { + return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; + }; + + scale.copy = function() { + return band(domain(), range) + .round(round) + .paddingInner(paddingInner) + .paddingOuter(paddingOuter) + .align(align); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initRange"].apply(rescale(), arguments); +} + +function pointish(scale) { + var copy = scale.copy; + + scale.padding = scale.paddingOuter; + delete scale.paddingInner; + delete scale.paddingOuter; + + scale.copy = function() { + return pointish(copy()); + }; + + return scale; +} + +function point() { + return pointish(band.apply(null, arguments).paddingInner(1)); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/constant.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/constant.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/continuous.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/continuous.js ***! + \**********************************************************************************************************/ +/*! exports provided: identity, copy, transformer, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "copy", function() { return copy; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transformer", function() { return transformer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return continuous; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-scale/src/array.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-scale/src/constant.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-scale/src/number.js"); + + + + + + +var unit = [0, 1]; + +function identity(x) { + return x; +} + +function normalize(a, b) { + return (b -= (a = +a)) + ? function(x) { return (x - a) / b; } + : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(isNaN(b) ? NaN : 0.5); +} + +function clamper(domain) { + var a = domain[0], b = domain[domain.length - 1], t; + if (a > b) t = a, a = b, b = t; + return function(x) { return Math.max(a, Math.min(b, x)); }; +} + +// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. +// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b]. +function bimap(domain, range, interpolate) { + var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; + if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0); + else d0 = normalize(d0, d1), r0 = interpolate(r0, r1); + return function(x) { return r0(d0(x)); }; +} + +function polymap(domain, range, interpolate) { + var j = Math.min(domain.length, range.length) - 1, + d = new Array(j), + r = new Array(j), + i = -1; + + // Reverse descending domains. + if (domain[j] < domain[0]) { + domain = domain.slice().reverse(); + range = range.slice().reverse(); + } + + while (++i < j) { + d[i] = normalize(domain[i], domain[i + 1]); + r[i] = interpolate(range[i], range[i + 1]); + } + + return function(x) { + var i = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(domain, x, 1, j) - 1; + return r[i](d[i](x)); + }; +} + +function copy(source, target) { + return target + .domain(source.domain()) + .range(source.range()) + .interpolate(source.interpolate()) + .clamp(source.clamp()) + .unknown(source.unknown()); +} + +function transformer() { + var domain = unit, + range = unit, + interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolate"], + transform, + untransform, + unknown, + clamp = identity, + piecewise, + output, + input; + + function rescale() { + piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; + output = input = null; + return scale; + } + + function scale(x) { + return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x))); + } + + scale.invert = function(y) { + return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateNumber"])))(y))); + }; + + scale.domain = function(_) { + return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_2__["map"].call(_, _number__WEBPACK_IMPORTED_MODULE_4__["default"]), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_2__["slice"].call(_), rescale()) : range.slice(); + }; + + scale.rangeRound = function(_) { + return range = _array__WEBPACK_IMPORTED_MODULE_2__["slice"].call(_), interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateRound"], rescale(); + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity; + }; + + scale.interpolate = function(_) { + return arguments.length ? (interpolate = _, rescale()) : interpolate; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t, u) { + transform = t, untransform = u; + return rescale(); + }; +} + +function continuous(transform, untransform) { + return transformer()(transform, untransform); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/diverging.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/diverging.js ***! + \*********************************************************************************************************/ +/*! exports provided: default, divergingLog, divergingSymlog, divergingPow, divergingSqrt */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return diverging; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "divergingLog", function() { return divergingLog; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "divergingSymlog", function() { return divergingSymlog; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "divergingPow", function() { return divergingPow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "divergingSqrt", function() { return divergingSqrt; }); +/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous */ "../../../node_modules/d3-scale/src/continuous.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-scale/src/linear.js"); +/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ "../../../node_modules/d3-scale/src/log.js"); +/* harmony import */ var _sequential__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sequential */ "../../../node_modules/d3-scale/src/sequential.js"); +/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./symlog */ "../../../node_modules/d3-scale/src/symlog.js"); +/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pow */ "../../../node_modules/d3-scale/src/pow.js"); + + + + + + + + +function transformer() { + var x0 = 0, + x1 = 0.5, + x2 = 1, + t0, + t1, + t2, + k10, + k21, + interpolator = _continuous__WEBPACK_IMPORTED_MODULE_0__["identity"], + transform, + clamp = false, + unknown; + + function scale(x) { + return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x)); + } + + scale.domain = function(_) { + return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t) { + transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1); + return scale; + }; +} + +function diverging() { + var scale = Object(_linear__WEBPACK_IMPORTED_MODULE_2__["linearish"])(transformer()(_continuous__WEBPACK_IMPORTED_MODULE_0__["identity"])); + + scale.copy = function() { + return Object(_sequential__WEBPACK_IMPORTED_MODULE_4__["copy"])(scale, diverging()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initInterpolator"].apply(scale, arguments); +} + +function divergingLog() { + var scale = Object(_log__WEBPACK_IMPORTED_MODULE_3__["loggish"])(transformer()).domain([0.1, 1, 10]); + + scale.copy = function() { + return Object(_sequential__WEBPACK_IMPORTED_MODULE_4__["copy"])(scale, divergingLog()).base(scale.base()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initInterpolator"].apply(scale, arguments); +} + +function divergingSymlog() { + var scale = Object(_symlog__WEBPACK_IMPORTED_MODULE_5__["symlogish"])(transformer()); + + scale.copy = function() { + return Object(_sequential__WEBPACK_IMPORTED_MODULE_4__["copy"])(scale, divergingSymlog()).constant(scale.constant()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initInterpolator"].apply(scale, arguments); +} + +function divergingPow() { + var scale = Object(_pow__WEBPACK_IMPORTED_MODULE_6__["powish"])(transformer()); + + scale.copy = function() { + return Object(_sequential__WEBPACK_IMPORTED_MODULE_4__["copy"])(scale, divergingPow()).exponent(scale.exponent()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initInterpolator"].apply(scale, arguments); +} + +function divergingSqrt() { + return divergingPow.apply(null, arguments).exponent(0.5); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/identity.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/identity.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return identity; }); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-scale/src/array.js"); +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-scale/src/linear.js"); +/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./number */ "../../../node_modules/d3-scale/src/number.js"); + + + + +function identity(domain) { + var unknown; + + function scale(x) { + return isNaN(x = +x) ? unknown : x; + } + + scale.invert = scale; + + scale.domain = scale.range = function(_) { + return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_0__["map"].call(_, _number__WEBPACK_IMPORTED_MODULE_2__["default"]), scale) : domain.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return identity(domain).unknown(unknown); + }; + + domain = arguments.length ? _array__WEBPACK_IMPORTED_MODULE_0__["map"].call(domain, _number__WEBPACK_IMPORTED_MODULE_2__["default"]) : [0, 1]; + + return Object(_linear__WEBPACK_IMPORTED_MODULE_1__["linearish"])(scale); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: scaleBand, scalePoint, scaleIdentity, scaleLinear, scaleLog, scaleSymlog, scaleOrdinal, scaleImplicit, scalePow, scaleSqrt, scaleQuantile, scaleQuantize, scaleThreshold, scaleTime, scaleUtc, scaleSequential, scaleSequentialLog, scaleSequentialPow, scaleSequentialSqrt, scaleSequentialSymlog, scaleSequentialQuantile, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSqrt, scaleDivergingSymlog, tickFormat */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _band__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./band */ "../../../node_modules/d3-scale/src/band.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleBand", function() { return _band__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scalePoint", function() { return _band__WEBPACK_IMPORTED_MODULE_0__["point"]; }); + +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity */ "../../../node_modules/d3-scale/src/identity.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleIdentity", function() { return _identity__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-scale/src/linear.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleLinear", function() { return _linear__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ "../../../node_modules/d3-scale/src/log.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleLog", function() { return _log__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symlog */ "../../../node_modules/d3-scale/src/symlog.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSymlog", function() { return _symlog__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _ordinal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ordinal */ "../../../node_modules/d3-scale/src/ordinal.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleOrdinal", function() { return _ordinal__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleImplicit", function() { return _ordinal__WEBPACK_IMPORTED_MODULE_5__["implicit"]; }); + +/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pow */ "../../../node_modules/d3-scale/src/pow.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scalePow", function() { return _pow__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSqrt", function() { return _pow__WEBPACK_IMPORTED_MODULE_6__["sqrt"]; }); + +/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./quantile */ "../../../node_modules/d3-scale/src/quantile.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleQuantile", function() { return _quantile__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _quantize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./quantize */ "../../../node_modules/d3-scale/src/quantize.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleQuantize", function() { return _quantize__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _threshold__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./threshold */ "../../../node_modules/d3-scale/src/threshold.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleThreshold", function() { return _threshold__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _time__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./time */ "../../../node_modules/d3-scale/src/time.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleTime", function() { return _time__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _utcTime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utcTime */ "../../../node_modules/d3-scale/src/utcTime.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleUtc", function() { return _utcTime__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _sequential__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./sequential */ "../../../node_modules/d3-scale/src/sequential.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequential", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialLog", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__["sequentialLog"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialPow", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__["sequentialPow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialSqrt", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__["sequentialSqrt"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialSymlog", function() { return _sequential__WEBPACK_IMPORTED_MODULE_12__["sequentialSymlog"]; }); + +/* harmony import */ var _sequentialQuantile__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./sequentialQuantile */ "../../../node_modules/d3-scale/src/sequentialQuantile.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialQuantile", function() { return _sequentialQuantile__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _diverging__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diverging */ "../../../node_modules/d3-scale/src/diverging.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDiverging", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDivergingLog", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__["divergingLog"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDivergingPow", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__["divergingPow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDivergingSqrt", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__["divergingSqrt"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDivergingSymlog", function() { return _diverging__WEBPACK_IMPORTED_MODULE_14__["divergingSymlog"]; }); + +/* harmony import */ var _tickFormat__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./tickFormat */ "../../../node_modules/d3-scale/src/tickFormat.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickFormat", function() { return _tickFormat__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/init.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/init.js ***! + \****************************************************************************************************/ +/*! exports provided: initRange, initInterpolator */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initRange", function() { return initRange; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initInterpolator", function() { return initInterpolator; }); +function initRange(domain, range) { + switch (arguments.length) { + case 0: break; + case 1: this.range(domain); break; + default: this.range(range).domain(domain); break; + } + return this; +} + +function initInterpolator(domain, interpolator) { + switch (arguments.length) { + case 0: break; + case 1: this.interpolator(domain); break; + default: this.interpolator(interpolator).domain(domain); break; + } + return this; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/linear.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/linear.js ***! + \******************************************************************************************************/ +/*! exports provided: linearish, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linearish", function() { return linearish; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return linear; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ "../../../node_modules/d3-scale/src/continuous.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); +/* harmony import */ var _tickFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickFormat */ "../../../node_modules/d3-scale/src/tickFormat.js"); + + + + + +function linearish(scale) { + var domain = scale.domain; + + scale.ticks = function(count) { + var d = domain(); + return Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["ticks"])(d[0], d[d.length - 1], count == null ? 10 : count); + }; + + scale.tickFormat = function(count, specifier) { + var d = domain(); + return Object(_tickFormat__WEBPACK_IMPORTED_MODULE_3__["default"])(d[0], d[d.length - 1], count == null ? 10 : count, specifier); + }; + + scale.nice = function(count) { + if (count == null) count = 10; + + var d = domain(), + i0 = 0, + i1 = d.length - 1, + start = d[i0], + stop = d[i1], + step; + + if (stop < start) { + step = start, start = stop, stop = step; + step = i0, i0 = i1, i1 = step; + } + + step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickIncrement"])(start, stop, count); + + if (step > 0) { + start = Math.floor(start / step) * step; + stop = Math.ceil(stop / step) * step; + step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickIncrement"])(start, stop, count); + } else if (step < 0) { + start = Math.ceil(start * step) / step; + stop = Math.floor(stop * step) / step; + step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickIncrement"])(start, stop, count); + } + + if (step > 0) { + d[i0] = Math.floor(start / step) * step; + d[i1] = Math.ceil(stop / step) * step; + domain(d); + } else if (step < 0) { + d[i0] = Math.ceil(start * step) / step; + d[i1] = Math.floor(stop * step) / step; + domain(d); + } + + return scale; + }; + + return scale; +} + +function linear() { + var scale = Object(_continuous__WEBPACK_IMPORTED_MODULE_1__["default"])(_continuous__WEBPACK_IMPORTED_MODULE_1__["identity"], _continuous__WEBPACK_IMPORTED_MODULE_1__["identity"]); + + scale.copy = function() { + return Object(_continuous__WEBPACK_IMPORTED_MODULE_1__["copy"])(scale, linear()); + }; + + _init__WEBPACK_IMPORTED_MODULE_2__["initRange"].apply(scale, arguments); + + return linearish(scale); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/log.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/log.js ***! + \***************************************************************************************************/ +/*! exports provided: loggish, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loggish", function() { return loggish; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return log; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ "../../../node_modules/d3-format/src/index.js"); +/* harmony import */ var _nice__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nice */ "../../../node_modules/d3-scale/src/nice.js"); +/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./continuous */ "../../../node_modules/d3-scale/src/continuous.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + + + +function transformLog(x) { + return Math.log(x); +} + +function transformExp(x) { + return Math.exp(x); +} + +function transformLogn(x) { + return -Math.log(-x); +} + +function transformExpn(x) { + return -Math.exp(-x); +} + +function pow10(x) { + return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; +} + +function powp(base) { + return base === 10 ? pow10 + : base === Math.E ? Math.exp + : function(x) { return Math.pow(base, x); }; +} + +function logp(base) { + return base === Math.E ? Math.log + : base === 10 && Math.log10 + || base === 2 && Math.log2 + || (base = Math.log(base), function(x) { return Math.log(x) / base; }); +} + +function reflect(f) { + return function(x) { + return -f(-x); + }; +} + +function loggish(transform) { + var scale = transform(transformLog, transformExp), + domain = scale.domain, + base = 10, + logs, + pows; + + function rescale() { + logs = logp(base), pows = powp(base); + if (domain()[0] < 0) { + logs = reflect(logs), pows = reflect(pows); + transform(transformLogn, transformExpn); + } else { + transform(transformLog, transformExp); + } + return scale; + } + + scale.base = function(_) { + return arguments.length ? (base = +_, rescale()) : base; + }; + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.ticks = function(count) { + var d = domain(), + u = d[0], + v = d[d.length - 1], + r; + + if (r = v < u) i = u, u = v, v = i; + + var i = logs(u), + j = logs(v), + p, + k, + t, + n = count == null ? 10 : +count, + z = []; + + if (!(base % 1) && j - i < n) { + i = Math.round(i) - 1, j = Math.round(j) + 1; + if (u > 0) for (; i < j; ++i) { + for (k = 1, p = pows(i); k < base; ++k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } else for (; i < j; ++i) { + for (k = base - 1, p = pows(i); k >= 1; --k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } + } else { + z = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["ticks"])(i, j, Math.min(j - i, n)).map(pows); + } + + return r ? z.reverse() : z; + }; + + scale.tickFormat = function(count, specifier) { + if (specifier == null) specifier = base === 10 ? ".0e" : ","; + if (typeof specifier !== "function") specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["format"])(specifier); + if (count === Infinity) return specifier; + if (count == null) count = 10; + var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? + return function(d) { + var i = d / pows(Math.round(logs(d))); + if (i * base < base - 0.5) i *= base; + return i <= k ? specifier(d) : ""; + }; + }; + + scale.nice = function() { + return domain(Object(_nice__WEBPACK_IMPORTED_MODULE_2__["default"])(domain(), { + floor: function(x) { return pows(Math.floor(logs(x))); }, + ceil: function(x) { return pows(Math.ceil(logs(x))); } + })); + }; + + return scale; +} + +function log() { + var scale = loggish(Object(_continuous__WEBPACK_IMPORTED_MODULE_3__["transformer"])()).domain([1, 10]); + + scale.copy = function() { + return Object(_continuous__WEBPACK_IMPORTED_MODULE_3__["copy"])(scale, log()).base(scale.base()); + }; + + _init__WEBPACK_IMPORTED_MODULE_4__["initRange"].apply(scale, arguments); + + return scale; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/nice.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/nice.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(domain, interval) { + domain = domain.slice(); + + var i0 = 0, + i1 = domain.length - 1, + x0 = domain[i0], + x1 = domain[i1], + t; + + if (x1 < x0) { + t = i0, i0 = i1, i1 = t; + t = x0, x0 = x1, x1 = t; + } + + domain[i0] = interval.floor(x0); + domain[i1] = interval.ceil(x1); + return domain; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/number.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/number.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return +x; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/ordinal.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/ordinal.js ***! + \*******************************************************************************************************/ +/*! exports provided: implicit, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "implicit", function() { return implicit; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ordinal; }); +/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-collection */ "../../../node_modules/d3-collection/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-scale/src/array.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + +var implicit = {name: "implicit"}; + +function ordinal() { + var index = Object(d3_collection__WEBPACK_IMPORTED_MODULE_0__["map"])(), + domain = [], + range = [], + unknown = implicit; + + function scale(d) { + var key = d + "", i = index.get(key); + if (!i) { + if (unknown !== implicit) return unknown; + index.set(key, i = domain.push(d)); + } + return range[(i - 1) % range.length]; + } + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = [], index = Object(d3_collection__WEBPACK_IMPORTED_MODULE_0__["map"])(); + var i = -1, n = _.length, d, key; + while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); + return scale; + }; + + scale.range = function(_) { + return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_), scale) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return ordinal(domain, range).unknown(unknown); + }; + + _init__WEBPACK_IMPORTED_MODULE_2__["initRange"].apply(scale, arguments); + + return scale; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/pow.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/pow.js ***! + \***************************************************************************************************/ +/*! exports provided: powish, default, sqrt */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "powish", function() { return powish; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return pow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sqrt", function() { return sqrt; }); +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-scale/src/linear.js"); +/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ "../../../node_modules/d3-scale/src/continuous.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + +function transformPow(exponent) { + return function(x) { + return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); + }; +} + +function transformSqrt(x) { + return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x); +} + +function transformSquare(x) { + return x < 0 ? -x * x : x * x; +} + +function powish(transform) { + var scale = transform(_continuous__WEBPACK_IMPORTED_MODULE_1__["identity"], _continuous__WEBPACK_IMPORTED_MODULE_1__["identity"]), + exponent = 1; + + function rescale() { + return exponent === 1 ? transform(_continuous__WEBPACK_IMPORTED_MODULE_1__["identity"], _continuous__WEBPACK_IMPORTED_MODULE_1__["identity"]) + : exponent === 0.5 ? transform(transformSqrt, transformSquare) + : transform(transformPow(exponent), transformPow(1 / exponent)); + } + + scale.exponent = function(_) { + return arguments.length ? (exponent = +_, rescale()) : exponent; + }; + + return Object(_linear__WEBPACK_IMPORTED_MODULE_0__["linearish"])(scale); +} + +function pow() { + var scale = powish(Object(_continuous__WEBPACK_IMPORTED_MODULE_1__["transformer"])()); + + scale.copy = function() { + return Object(_continuous__WEBPACK_IMPORTED_MODULE_1__["copy"])(scale, pow()).exponent(scale.exponent()); + }; + + _init__WEBPACK_IMPORTED_MODULE_2__["initRange"].apply(scale, arguments); + + return scale; +} + +function sqrt() { + return pow.apply(null, arguments).exponent(0.5); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/quantile.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/quantile.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return quantile; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-scale/src/array.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + +function quantile() { + var domain = [], + range = [], + thresholds = [], + unknown; + + function rescale() { + var i = 0, n = Math.max(1, range.length); + thresholds = new Array(n - 1); + while (++i < n) thresholds[i - 1] = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["quantile"])(domain, i / n); + return scale; + } + + function scale(x) { + return isNaN(x = +x) ? unknown : range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(thresholds, x)]; + } + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return i < 0 ? [NaN, NaN] : [ + i > 0 ? thresholds[i - 1] : domain[0], + i < thresholds.length ? thresholds[i] : domain[domain.length - 1] + ]; + }; + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = []; + for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); + domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_0__["ascending"]); + return rescale(); + }; + + scale.range = function(_) { + return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_), rescale()) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.quantiles = function() { + return thresholds.slice(); + }; + + scale.copy = function() { + return quantile() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return _init__WEBPACK_IMPORTED_MODULE_2__["initRange"].apply(scale, arguments); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/quantize.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/quantize.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return quantize; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-scale/src/array.js"); +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-scale/src/linear.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + + +function quantize() { + var x0 = 0, + x1 = 1, + n = 1, + domain = [0.5], + range = [0, 1], + unknown; + + function scale(x) { + return x <= x ? range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(domain, x, 0, n)] : unknown; + } + + function rescale() { + var i = -1; + domain = new Array(n); + while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); + return scale; + } + + scale.domain = function(_) { + return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; + }; + + scale.range = function(_) { + return arguments.length ? (n = (range = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_)).length - 1, rescale()) : range.slice(); + }; + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return i < 0 ? [NaN, NaN] + : i < 1 ? [x0, domain[0]] + : i >= n ? [domain[n - 1], x1] + : [domain[i - 1], domain[i]]; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : scale; + }; + + scale.thresholds = function() { + return domain.slice(); + }; + + scale.copy = function() { + return quantize() + .domain([x0, x1]) + .range(range) + .unknown(unknown); + }; + + return _init__WEBPACK_IMPORTED_MODULE_3__["initRange"].apply(Object(_linear__WEBPACK_IMPORTED_MODULE_2__["linearish"])(scale), arguments); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/sequential.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/sequential.js ***! + \**********************************************************************************************************/ +/*! exports provided: copy, default, sequentialLog, sequentialSymlog, sequentialPow, sequentialSqrt */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "copy", function() { return copy; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return sequential; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequentialLog", function() { return sequentialLog; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequentialSymlog", function() { return sequentialSymlog; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequentialPow", function() { return sequentialPow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequentialSqrt", function() { return sequentialSqrt; }); +/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous */ "../../../node_modules/d3-scale/src/continuous.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-scale/src/linear.js"); +/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ "../../../node_modules/d3-scale/src/log.js"); +/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symlog */ "../../../node_modules/d3-scale/src/symlog.js"); +/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pow */ "../../../node_modules/d3-scale/src/pow.js"); + + + + + + + +function transformer() { + var x0 = 0, + x1 = 1, + t0, + t1, + k10, + transform, + interpolator = _continuous__WEBPACK_IMPORTED_MODULE_0__["identity"], + clamp = false, + unknown; + + function scale(x) { + return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x)); + } + + scale.domain = function(_) { + return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t) { + transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0); + return scale; + }; +} + +function copy(source, target) { + return target + .domain(source.domain()) + .interpolator(source.interpolator()) + .clamp(source.clamp()) + .unknown(source.unknown()); +} + +function sequential() { + var scale = Object(_linear__WEBPACK_IMPORTED_MODULE_2__["linearish"])(transformer()(_continuous__WEBPACK_IMPORTED_MODULE_0__["identity"])); + + scale.copy = function() { + return copy(scale, sequential()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initInterpolator"].apply(scale, arguments); +} + +function sequentialLog() { + var scale = Object(_log__WEBPACK_IMPORTED_MODULE_3__["loggish"])(transformer()).domain([1, 10]); + + scale.copy = function() { + return copy(scale, sequentialLog()).base(scale.base()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initInterpolator"].apply(scale, arguments); +} + +function sequentialSymlog() { + var scale = Object(_symlog__WEBPACK_IMPORTED_MODULE_4__["symlogish"])(transformer()); + + scale.copy = function() { + return copy(scale, sequentialSymlog()).constant(scale.constant()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initInterpolator"].apply(scale, arguments); +} + +function sequentialPow() { + var scale = Object(_pow__WEBPACK_IMPORTED_MODULE_5__["powish"])(transformer()); + + scale.copy = function() { + return copy(scale, sequentialPow()).exponent(scale.exponent()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_1__["initInterpolator"].apply(scale, arguments); +} + +function sequentialSqrt() { + return sequentialPow.apply(null, arguments).exponent(0.5); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/sequentialQuantile.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/sequentialQuantile.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return sequentialQuantile; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ "../../../node_modules/d3-scale/src/continuous.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + +function sequentialQuantile() { + var domain = [], + interpolator = _continuous__WEBPACK_IMPORTED_MODULE_1__["identity"]; + + function scale(x) { + if (!isNaN(x = +x)) return interpolator((Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(domain, x) - 1) / (domain.length - 1)); + } + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = []; + for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); + domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_0__["ascending"]); + return scale; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.copy = function() { + return sequentialQuantile(interpolator).domain(domain); + }; + + return _init__WEBPACK_IMPORTED_MODULE_2__["initInterpolator"].apply(scale, arguments); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/symlog.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/symlog.js ***! + \******************************************************************************************************/ +/*! exports provided: symlogish, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "symlogish", function() { return symlogish; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return symlog; }); +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-scale/src/linear.js"); +/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ "../../../node_modules/d3-scale/src/continuous.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + +function transformSymlog(c) { + return function(x) { + return Math.sign(x) * Math.log1p(Math.abs(x / c)); + }; +} + +function transformSymexp(c) { + return function(x) { + return Math.sign(x) * Math.expm1(Math.abs(x)) * c; + }; +} + +function symlogish(transform) { + var c = 1, scale = transform(transformSymlog(c), transformSymexp(c)); + + scale.constant = function(_) { + return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c; + }; + + return Object(_linear__WEBPACK_IMPORTED_MODULE_0__["linearish"])(scale); +} + +function symlog() { + var scale = symlogish(Object(_continuous__WEBPACK_IMPORTED_MODULE_1__["transformer"])()); + + scale.copy = function() { + return Object(_continuous__WEBPACK_IMPORTED_MODULE_1__["copy"])(scale, symlog()).constant(scale.constant()); + }; + + return _init__WEBPACK_IMPORTED_MODULE_2__["initRange"].apply(scale, arguments); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/threshold.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/threshold.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return threshold; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-scale/src/array.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + +function threshold() { + var domain = [0.5], + range = [0, 1], + unknown, + n = 1; + + function scale(x) { + return x <= x ? range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(domain, x, 0, n)] : unknown; + } + + scale.domain = function(_) { + return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); + }; + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return [domain[i - 1], domain[i]]; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return threshold() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return _init__WEBPACK_IMPORTED_MODULE_2__["initRange"].apply(scale, arguments); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/tickFormat.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/tickFormat.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ "../../../node_modules/d3-format/src/index.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(start, stop, count, specifier) { + var step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(start, stop, count), + precision; + specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["formatSpecifier"])(specifier == null ? ",f" : specifier); + switch (specifier.type) { + case "s": { + var value = Math.max(Math.abs(start), Math.abs(stop)); + if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["precisionPrefix"])(step, value))) specifier.precision = precision; + return Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["formatPrefix"])(specifier, value); + } + case "": + case "e": + case "g": + case "p": + case "r": { + if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["precisionRound"])(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); + break; + } + case "f": + case "%": { + if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["precisionFixed"])(step))) specifier.precision = precision - (specifier.type === "%") * 2; + break; + } + } + return Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["format"])(specifier); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/time.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/time.js ***! + \****************************************************************************************************/ +/*! exports provided: calendar, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "calendar", function() { return calendar; }); +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-time */ "../../../node_modules/d3-time/src/index.js"); +/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time-format */ "../../../node_modules/d3-time-format/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-scale/src/array.js"); +/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./continuous */ "../../../node_modules/d3-scale/src/continuous.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); +/* harmony import */ var _nice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./nice */ "../../../node_modules/d3-scale/src/nice.js"); + + + + + + + + +var durationSecond = 1000, + durationMinute = durationSecond * 60, + durationHour = durationMinute * 60, + durationDay = durationHour * 24, + durationWeek = durationDay * 7, + durationMonth = durationDay * 30, + durationYear = durationDay * 365; + +function date(t) { + return new Date(t); +} + +function number(t) { + return t instanceof Date ? +t : +new Date(+t); +} + +function calendar(year, month, week, day, hour, minute, second, millisecond, format) { + var scale = Object(_continuous__WEBPACK_IMPORTED_MODULE_4__["default"])(_continuous__WEBPACK_IMPORTED_MODULE_4__["identity"], _continuous__WEBPACK_IMPORTED_MODULE_4__["identity"]), + invert = scale.invert, + domain = scale.domain; + + var formatMillisecond = format(".%L"), + formatSecond = format(":%S"), + formatMinute = format("%I:%M"), + formatHour = format("%I %p"), + formatDay = format("%a %d"), + formatWeek = format("%b %d"), + formatMonth = format("%B"), + formatYear = format("%Y"); + + var tickIntervals = [ + [second, 1, durationSecond], + [second, 5, 5 * durationSecond], + [second, 15, 15 * durationSecond], + [second, 30, 30 * durationSecond], + [minute, 1, durationMinute], + [minute, 5, 5 * durationMinute], + [minute, 15, 15 * durationMinute], + [minute, 30, 30 * durationMinute], + [ hour, 1, durationHour ], + [ hour, 3, 3 * durationHour ], + [ hour, 6, 6 * durationHour ], + [ hour, 12, 12 * durationHour ], + [ day, 1, durationDay ], + [ day, 2, 2 * durationDay ], + [ week, 1, durationWeek ], + [ month, 1, durationMonth ], + [ month, 3, 3 * durationMonth ], + [ year, 1, durationYear ] + ]; + + function tickFormat(date) { + return (second(date) < date ? formatMillisecond + : minute(date) < date ? formatSecond + : hour(date) < date ? formatMinute + : day(date) < date ? formatHour + : month(date) < date ? (week(date) < date ? formatDay : formatWeek) + : year(date) < date ? formatMonth + : formatYear)(date); + } + + function tickInterval(interval, start, stop, step) { + if (interval == null) interval = 10; + + // If a desired tick count is specified, pick a reasonable tick interval + // based on the extent of the domain and a rough estimate of tick size. + // Otherwise, assume interval is already a time interval and use it. + if (typeof interval === "number") { + var target = Math.abs(stop - start) / interval, + i = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisector"])(function(i) { return i[2]; }).right(tickIntervals, target); + if (i === tickIntervals.length) { + step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(start / durationYear, stop / durationYear, interval); + interval = year; + } else if (i) { + i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; + step = i[1]; + interval = i[0]; + } else { + step = Math.max(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(start, stop, interval), 1); + interval = millisecond; + } + } + + return step == null ? interval : interval.every(step); + } + + scale.invert = function(y) { + return new Date(invert(y)); + }; + + scale.domain = function(_) { + return arguments.length ? domain(_array__WEBPACK_IMPORTED_MODULE_3__["map"].call(_, number)) : domain().map(date); + }; + + scale.ticks = function(interval, step) { + var d = domain(), + t0 = d[0], + t1 = d[d.length - 1], + r = t1 < t0, + t; + if (r) t = t0, t0 = t1, t1 = t; + t = tickInterval(interval, t0, t1, step); + t = t ? t.range(t0, t1 + 1) : []; // inclusive stop + return r ? t.reverse() : t; + }; + + scale.tickFormat = function(count, specifier) { + return specifier == null ? tickFormat : format(specifier); + }; + + scale.nice = function(interval, step) { + var d = domain(); + return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) + ? domain(Object(_nice__WEBPACK_IMPORTED_MODULE_6__["default"])(d, interval)) + : scale; + }; + + scale.copy = function() { + return Object(_continuous__WEBPACK_IMPORTED_MODULE_4__["copy"])(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format)); + }; + + return scale; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return _init__WEBPACK_IMPORTED_MODULE_5__["initRange"].apply(calendar(d3_time__WEBPACK_IMPORTED_MODULE_1__["timeYear"], d3_time__WEBPACK_IMPORTED_MODULE_1__["timeMonth"], d3_time__WEBPACK_IMPORTED_MODULE_1__["timeWeek"], d3_time__WEBPACK_IMPORTED_MODULE_1__["timeDay"], d3_time__WEBPACK_IMPORTED_MODULE_1__["timeHour"], d3_time__WEBPACK_IMPORTED_MODULE_1__["timeMinute"], d3_time__WEBPACK_IMPORTED_MODULE_1__["timeSecond"], d3_time__WEBPACK_IMPORTED_MODULE_1__["timeMillisecond"], d3_time_format__WEBPACK_IMPORTED_MODULE_2__["timeFormat"]).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-scale/src/utcTime.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-scale/src/utcTime.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./time */ "../../../node_modules/d3-scale/src/time.js"); +/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-time-format */ "../../../node_modules/d3-time-format/src/index.js"); +/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time */ "../../../node_modules/d3-time/src/index.js"); +/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init */ "../../../node_modules/d3-scale/src/init.js"); + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return _init__WEBPACK_IMPORTED_MODULE_3__["initRange"].apply(Object(_time__WEBPACK_IMPORTED_MODULE_0__["calendar"])(d3_time__WEBPACK_IMPORTED_MODULE_2__["utcYear"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcMonth"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcWeek"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcDay"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcHour"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcMinute"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcSecond"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcMillisecond"], d3_time_format__WEBPACK_IMPORTED_MODULE_1__["utcFormat"]).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/constant.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/constant.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/create.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/create.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./creator */ "../../../node_modules/d3-selection/src/creator.js"); +/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./select */ "../../../node_modules/d3-selection/src/select.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(name) { + return Object(_select__WEBPACK_IMPORTED_MODULE_1__["default"])(Object(_creator__WEBPACK_IMPORTED_MODULE_0__["default"])(name).call(document.documentElement)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/creator.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/creator.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespace */ "../../../node_modules/d3-selection/src/namespace.js"); +/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./namespaces */ "../../../node_modules/d3-selection/src/namespaces.js"); + + + +function creatorInherit(name) { + return function() { + var document = this.ownerDocument, + uri = this.namespaceURI; + return uri === _namespaces__WEBPACK_IMPORTED_MODULE_1__["xhtml"] && document.documentElement.namespaceURI === _namespaces__WEBPACK_IMPORTED_MODULE_1__["xhtml"] + ? document.createElement(name) + : document.createElementNS(uri, name); + }; +} + +function creatorFixed(fullname) { + return function() { + return this.ownerDocument.createElementNS(fullname.space, fullname.local); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name) { + var fullname = Object(_namespace__WEBPACK_IMPORTED_MODULE_0__["default"])(name); + return (fullname.local + ? creatorFixed + : creatorInherit)(fullname); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/index.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/index.js ***! + \*********************************************************************************************************/ +/*! exports provided: create, creator, local, matcher, mouse, namespace, namespaces, clientPoint, select, selectAll, selection, selector, selectorAll, style, touch, touches, window, event, customEvent */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create */ "../../../node_modules/d3-selection/src/create.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "create", function() { return _create__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./creator */ "../../../node_modules/d3-selection/src/creator.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "creator", function() { return _creator__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _local__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./local */ "../../../node_modules/d3-selection/src/local.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "local", function() { return _local__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _matcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./matcher */ "../../../node_modules/d3-selection/src/matcher.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return _matcher__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _mouse__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mouse */ "../../../node_modules/d3-selection/src/mouse.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouse", function() { return _mouse__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./namespace */ "../../../node_modules/d3-selection/src/namespace.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "namespace", function() { return _namespace__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./namespaces */ "../../../node_modules/d3-selection/src/namespaces.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "namespaces", function() { return _namespaces__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./point */ "../../../node_modules/d3-selection/src/point.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "clientPoint", function() { return _point__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./select */ "../../../node_modules/d3-selection/src/select.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "select", function() { return _select__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./selectAll */ "../../../node_modules/d3-selection/src/selectAll.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectAll", function() { return _selectAll__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./selection/index */ "../../../node_modules/d3-selection/src/selection/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selection", function() { return _selection_index__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./selector */ "../../../node_modules/d3-selection/src/selector.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selector", function() { return _selector__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _selectorAll__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./selectorAll */ "../../../node_modules/d3-selection/src/selectorAll.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectorAll", function() { return _selectorAll__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _selection_style__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./selection/style */ "../../../node_modules/d3-selection/src/selection/style.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "style", function() { return _selection_style__WEBPACK_IMPORTED_MODULE_13__["styleValue"]; }); + +/* harmony import */ var _touch__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./touch */ "../../../node_modules/d3-selection/src/touch.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touch", function() { return _touch__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony import */ var _touches__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./touches */ "../../../node_modules/d3-selection/src/touches.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touches", function() { return _touches__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./window */ "../../../node_modules/d3-selection/src/window.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return _window__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./selection/on */ "../../../node_modules/d3-selection/src/selection/on.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "event", function() { return _selection_on__WEBPACK_IMPORTED_MODULE_17__["event"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "customEvent", function() { return _selection_on__WEBPACK_IMPORTED_MODULE_17__["customEvent"]; }); + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/local.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/local.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return local; }); +var nextId = 0; + +function local() { + return new Local; +} + +function Local() { + this._ = "@" + (++nextId).toString(36); +} + +Local.prototype = local.prototype = { + constructor: Local, + get: function(node) { + var id = this._; + while (!(id in node)) if (!(node = node.parentNode)) return; + return node[id]; + }, + set: function(node, value) { + return node[this._] = value; + }, + remove: function(node) { + return this._ in node && delete node[this._]; + }, + toString: function() { + return this._; + } +}; + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/matcher.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/matcher.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(selector) { + return function() { + return this.matches(selector); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/mouse.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/mouse.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "../../../node_modules/d3-selection/src/sourceEvent.js"); +/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "../../../node_modules/d3-selection/src/point.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(node) { + var event = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])(); + if (event.changedTouches) event = event.changedTouches[0]; + return Object(_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, event); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/namespace.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/namespace.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces */ "../../../node_modules/d3-selection/src/namespaces.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(name) { + var prefix = name += "", i = prefix.indexOf(":"); + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return _namespaces__WEBPACK_IMPORTED_MODULE_0__["default"].hasOwnProperty(prefix) ? {space: _namespaces__WEBPACK_IMPORTED_MODULE_0__["default"][prefix], local: name} : name; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/namespaces.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/namespaces.js ***! + \**************************************************************************************************************/ +/*! exports provided: xhtml, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "xhtml", function() { return xhtml; }); +var xhtml = "http://www.w3.org/1999/xhtml"; + +/* harmony default export */ __webpack_exports__["default"] = ({ + svg: "http://www.w3.org/2000/svg", + xhtml: xhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/point.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/point.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(node, event) { + var svg = node.ownerSVGElement || node; + + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + point.x = event.clientX, point.y = event.clientY; + point = point.matrixTransform(node.getScreenCTM().inverse()); + return [point.x, point.y]; + } + + var rect = node.getBoundingClientRect(); + return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/select.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/select.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ "../../../node_modules/d3-selection/src/selection/index.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(selector) { + return typeof selector === "string" + ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__["Selection"]([[document.querySelector(selector)]], [document.documentElement]) + : new _selection_index__WEBPACK_IMPORTED_MODULE_0__["Selection"]([[selector]], _selection_index__WEBPACK_IMPORTED_MODULE_0__["root"]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selectAll.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selectAll.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ "../../../node_modules/d3-selection/src/selection/index.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(selector) { + return typeof selector === "string" + ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__["Selection"]([document.querySelectorAll(selector)], [document.documentElement]) + : new _selection_index__WEBPACK_IMPORTED_MODULE_0__["Selection"]([selector == null ? [] : selector], _selection_index__WEBPACK_IMPORTED_MODULE_0__["root"]); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/append.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/append.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator */ "../../../node_modules/d3-selection/src/creator.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(name) { + var create = typeof name === "function" ? name : Object(_creator__WEBPACK_IMPORTED_MODULE_0__["default"])(name); + return this.select(function() { + return this.appendChild(create.apply(this, arguments)); + }); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/attr.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/attr.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../namespace */ "../../../node_modules/d3-selection/src/namespace.js"); + + +function attrRemove(name) { + return function() { + this.removeAttribute(name); + }; +} + +function attrRemoveNS(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; +} + +function attrConstant(name, value) { + return function() { + this.setAttribute(name, value); + }; +} + +function attrConstantNS(fullname, value) { + return function() { + this.setAttributeNS(fullname.space, fullname.local, value); + }; +} + +function attrFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttribute(name); + else this.setAttribute(name, v); + }; +} + +function attrFunctionNS(fullname, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttributeNS(fullname.space, fullname.local); + else this.setAttributeNS(fullname.space, fullname.local, v); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { + var fullname = Object(_namespace__WEBPACK_IMPORTED_MODULE_0__["default"])(name); + + if (arguments.length < 2) { + var node = this.node(); + return fullname.local + ? node.getAttributeNS(fullname.space, fullname.local) + : node.getAttribute(fullname); + } + + return this.each((value == null + ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" + ? (fullname.local ? attrFunctionNS : attrFunction) + : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/call.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/call.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var callback = arguments[0]; + arguments[0] = this; + callback.apply(null, arguments); + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/classed.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/classed.js ***! + \*********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function classArray(string) { + return string.trim().split(/^|\s+/); +} + +function classList(node) { + return node.classList || new ClassList(node); +} + +function ClassList(node) { + this._node = node; + this._names = classArray(node.getAttribute("class") || ""); +} + +ClassList.prototype = { + add: function(name) { + var i = this._names.indexOf(name); + if (i < 0) { + this._names.push(name); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + remove: function(name) { + var i = this._names.indexOf(name); + if (i >= 0) { + this._names.splice(i, 1); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + contains: function(name) { + return this._names.indexOf(name) >= 0; + } +}; + +function classedAdd(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.add(names[i]); +} + +function classedRemove(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.remove(names[i]); +} + +function classedTrue(names) { + return function() { + classedAdd(this, names); + }; +} + +function classedFalse(names) { + return function() { + classedRemove(this, names); + }; +} + +function classedFunction(names, value) { + return function() { + (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { + var names = classArray(name + ""); + + if (arguments.length < 2) { + var list = classList(this.node()), i = -1, n = names.length; + while (++i < n) if (!list.contains(names[i])) return false; + return true; + } + + return this.each((typeof value === "function" + ? classedFunction : value + ? classedTrue + : classedFalse)(names, value)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/clone.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/clone.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function selection_cloneShallow() { + return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling); +} + +function selection_cloneDeep() { + return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling); +} + +/* harmony default export */ __webpack_exports__["default"] = (function(deep) { + return this.select(deep ? selection_cloneDeep : selection_cloneShallow); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/data.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/data.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-selection/src/selection/index.js"); +/* harmony import */ var _enter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enter */ "../../../node_modules/d3-selection/src/selection/enter.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ "../../../node_modules/d3-selection/src/constant.js"); + + + + +var keyPrefix = "$"; // Protect against keys like “__proto__”. + +function bindIndex(parent, group, enter, update, exit, data) { + var i = 0, + node, + groupLength = group.length, + dataLength = data.length; + + // Put any non-null nodes that fit into update. + // Put any null nodes into enter. + // Put any remaining data into enter. + for (; i < dataLength; ++i) { + if (node = group[i]) { + node.__data__ = data[i]; + update[i] = node; + } else { + enter[i] = new _enter__WEBPACK_IMPORTED_MODULE_1__["EnterNode"](parent, data[i]); + } + } + + // Put any non-null nodes that don’t fit into exit. + for (; i < groupLength; ++i) { + if (node = group[i]) { + exit[i] = node; + } + } +} + +function bindKey(parent, group, enter, update, exit, data, key) { + var i, + node, + nodeByKeyValue = {}, + groupLength = group.length, + dataLength = data.length, + keyValues = new Array(groupLength), + keyValue; + + // Compute the key for each node. + // If multiple nodes have the same key, the duplicates are added to exit. + for (i = 0; i < groupLength; ++i) { + if (node = group[i]) { + keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); + if (keyValue in nodeByKeyValue) { + exit[i] = node; + } else { + nodeByKeyValue[keyValue] = node; + } + } + } + + // Compute the key for each datum. + // If there a node associated with this key, join and add it to update. + // If there is not (or the key is a duplicate), add it to enter. + for (i = 0; i < dataLength; ++i) { + keyValue = keyPrefix + key.call(parent, data[i], i, data); + if (node = nodeByKeyValue[keyValue]) { + update[i] = node; + node.__data__ = data[i]; + nodeByKeyValue[keyValue] = null; + } else { + enter[i] = new _enter__WEBPACK_IMPORTED_MODULE_1__["EnterNode"](parent, data[i]); + } + } + + // Add any remaining nodes that were not bound to data to exit. + for (i = 0; i < groupLength; ++i) { + if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { + exit[i] = node; + } + } +} + +/* harmony default export */ __webpack_exports__["default"] = (function(value, key) { + if (!value) { + data = new Array(this.size()), j = -1; + this.each(function(d) { data[++j] = d; }); + return data; + } + + var bind = key ? bindKey : bindIndex, + parents = this._parents, + groups = this._groups; + + if (typeof value !== "function") value = Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(value); + + for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { + var parent = parents[j], + group = groups[j], + groupLength = group.length, + data = value.call(parent, parent && parent.__data__, j, parents), + dataLength = data.length, + enterGroup = enter[j] = new Array(dataLength), + updateGroup = update[j] = new Array(dataLength), + exitGroup = exit[j] = new Array(groupLength); + + bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); + + // Now connect the enter nodes to their following update node, such that + // appendChild can insert the materialized enter node before this node, + // rather than at the end of the parent node. + for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { + if (previous = enterGroup[i0]) { + if (i0 >= i1) i1 = i0 + 1; + while (!(next = updateGroup[i1]) && ++i1 < dataLength); + previous._next = next || null; + } + } + } + + update = new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](update, parents); + update._enter = enter; + update._exit = exit; + return update; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/datum.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/datum.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(value) { + return arguments.length + ? this.property("__data__", value) + : this.node().__data__; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/dispatch.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/dispatch.js ***! + \**********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window */ "../../../node_modules/d3-selection/src/window.js"); + + +function dispatchEvent(node, type, params) { + var window = Object(_window__WEBPACK_IMPORTED_MODULE_0__["default"])(node), + event = window.CustomEvent; + + if (typeof event === "function") { + event = new event(type, params); + } else { + event = window.document.createEvent("Event"); + if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; + else event.initEvent(type, false, false); + } + + node.dispatchEvent(event); +} + +function dispatchConstant(type, params) { + return function() { + return dispatchEvent(this, type, params); + }; +} + +function dispatchFunction(type, params) { + return function() { + return dispatchEvent(this, type, params.apply(this, arguments)); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(type, params) { + return this.each((typeof params === "function" + ? dispatchFunction + : dispatchConstant)(type, params)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/each.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/each.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(callback) { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) callback.call(node, node.__data__, i, group); + } + } + + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/empty.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/empty.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + return !this.node(); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/enter.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/enter.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default, EnterNode */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EnterNode", function() { return EnterNode; }); +/* harmony import */ var _sparse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sparse */ "../../../node_modules/d3-selection/src/selection/sparse.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-selection/src/selection/index.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return new _index__WEBPACK_IMPORTED_MODULE_1__["Selection"](this._enter || this._groups.map(_sparse__WEBPACK_IMPORTED_MODULE_0__["default"]), this._parents); +}); + +function EnterNode(parent, datum) { + this.ownerDocument = parent.ownerDocument; + this.namespaceURI = parent.namespaceURI; + this._next = null; + this._parent = parent; + this.__data__ = datum; +} + +EnterNode.prototype = { + constructor: EnterNode, + appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, + insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, + querySelector: function(selector) { return this._parent.querySelector(selector); }, + querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } +}; + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/exit.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/exit.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _sparse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sparse */ "../../../node_modules/d3-selection/src/selection/sparse.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-selection/src/selection/index.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return new _index__WEBPACK_IMPORTED_MODULE_1__["Selection"](this._exit || this._groups.map(_sparse__WEBPACK_IMPORTED_MODULE_0__["default"]), this._parents); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/filter.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/filter.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-selection/src/selection/index.js"); +/* harmony import */ var _matcher__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../matcher */ "../../../node_modules/d3-selection/src/matcher.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(match) { + if (typeof match !== "function") match = Object(_matcher__WEBPACK_IMPORTED_MODULE_1__["default"])(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](subgroups, this._parents); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/html.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/html.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function htmlRemove() { + this.innerHTML = ""; +} + +function htmlConstant(value) { + return function() { + this.innerHTML = value; + }; +} + +function htmlFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(value) { + return arguments.length + ? this.each(value == null + ? htmlRemove : (typeof value === "function" + ? htmlFunction + : htmlConstant)(value)) + : this.node().innerHTML; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/index.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/index.js ***! + \*******************************************************************************************************************/ +/*! exports provided: root, Selection, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "root", function() { return root; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Selection", function() { return Selection; }); +/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./select */ "../../../node_modules/d3-selection/src/selection/select.js"); +/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./selectAll */ "../../../node_modules/d3-selection/src/selection/selectAll.js"); +/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./filter */ "../../../node_modules/d3-selection/src/selection/filter.js"); +/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data */ "../../../node_modules/d3-selection/src/selection/data.js"); +/* harmony import */ var _enter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./enter */ "../../../node_modules/d3-selection/src/selection/enter.js"); +/* harmony import */ var _exit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exit */ "../../../node_modules/d3-selection/src/selection/exit.js"); +/* harmony import */ var _join__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./join */ "../../../node_modules/d3-selection/src/selection/join.js"); +/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./merge */ "../../../node_modules/d3-selection/src/selection/merge.js"); +/* harmony import */ var _order__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./order */ "../../../node_modules/d3-selection/src/selection/order.js"); +/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sort */ "../../../node_modules/d3-selection/src/selection/sort.js"); +/* harmony import */ var _call__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./call */ "../../../node_modules/d3-selection/src/selection/call.js"); +/* harmony import */ var _nodes__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./nodes */ "../../../node_modules/d3-selection/src/selection/nodes.js"); +/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./node */ "../../../node_modules/d3-selection/src/selection/node.js"); +/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./size */ "../../../node_modules/d3-selection/src/selection/size.js"); +/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./empty */ "../../../node_modules/d3-selection/src/selection/empty.js"); +/* harmony import */ var _each__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./each */ "../../../node_modules/d3-selection/src/selection/each.js"); +/* harmony import */ var _attr__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./attr */ "../../../node_modules/d3-selection/src/selection/attr.js"); +/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./style */ "../../../node_modules/d3-selection/src/selection/style.js"); +/* harmony import */ var _property__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./property */ "../../../node_modules/d3-selection/src/selection/property.js"); +/* harmony import */ var _classed__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./classed */ "../../../node_modules/d3-selection/src/selection/classed.js"); +/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./text */ "../../../node_modules/d3-selection/src/selection/text.js"); +/* harmony import */ var _html__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./html */ "../../../node_modules/d3-selection/src/selection/html.js"); +/* harmony import */ var _raise__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./raise */ "../../../node_modules/d3-selection/src/selection/raise.js"); +/* harmony import */ var _lower__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./lower */ "../../../node_modules/d3-selection/src/selection/lower.js"); +/* harmony import */ var _append__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./append */ "../../../node_modules/d3-selection/src/selection/append.js"); +/* harmony import */ var _insert__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./insert */ "../../../node_modules/d3-selection/src/selection/insert.js"); +/* harmony import */ var _remove__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./remove */ "../../../node_modules/d3-selection/src/selection/remove.js"); +/* harmony import */ var _clone__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./clone */ "../../../node_modules/d3-selection/src/selection/clone.js"); +/* harmony import */ var _datum__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./datum */ "../../../node_modules/d3-selection/src/selection/datum.js"); +/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./on */ "../../../node_modules/d3-selection/src/selection/on.js"); +/* harmony import */ var _dispatch__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./dispatch */ "../../../node_modules/d3-selection/src/selection/dispatch.js"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +var root = [null]; + +function Selection(groups, parents) { + this._groups = groups; + this._parents = parents; +} + +function selection() { + return new Selection([[document.documentElement]], root); +} + +Selection.prototype = selection.prototype = { + constructor: Selection, + select: _select__WEBPACK_IMPORTED_MODULE_0__["default"], + selectAll: _selectAll__WEBPACK_IMPORTED_MODULE_1__["default"], + filter: _filter__WEBPACK_IMPORTED_MODULE_2__["default"], + data: _data__WEBPACK_IMPORTED_MODULE_3__["default"], + enter: _enter__WEBPACK_IMPORTED_MODULE_4__["default"], + exit: _exit__WEBPACK_IMPORTED_MODULE_5__["default"], + join: _join__WEBPACK_IMPORTED_MODULE_6__["default"], + merge: _merge__WEBPACK_IMPORTED_MODULE_7__["default"], + order: _order__WEBPACK_IMPORTED_MODULE_8__["default"], + sort: _sort__WEBPACK_IMPORTED_MODULE_9__["default"], + call: _call__WEBPACK_IMPORTED_MODULE_10__["default"], + nodes: _nodes__WEBPACK_IMPORTED_MODULE_11__["default"], + node: _node__WEBPACK_IMPORTED_MODULE_12__["default"], + size: _size__WEBPACK_IMPORTED_MODULE_13__["default"], + empty: _empty__WEBPACK_IMPORTED_MODULE_14__["default"], + each: _each__WEBPACK_IMPORTED_MODULE_15__["default"], + attr: _attr__WEBPACK_IMPORTED_MODULE_16__["default"], + style: _style__WEBPACK_IMPORTED_MODULE_17__["default"], + property: _property__WEBPACK_IMPORTED_MODULE_18__["default"], + classed: _classed__WEBPACK_IMPORTED_MODULE_19__["default"], + text: _text__WEBPACK_IMPORTED_MODULE_20__["default"], + html: _html__WEBPACK_IMPORTED_MODULE_21__["default"], + raise: _raise__WEBPACK_IMPORTED_MODULE_22__["default"], + lower: _lower__WEBPACK_IMPORTED_MODULE_23__["default"], + append: _append__WEBPACK_IMPORTED_MODULE_24__["default"], + insert: _insert__WEBPACK_IMPORTED_MODULE_25__["default"], + remove: _remove__WEBPACK_IMPORTED_MODULE_26__["default"], + clone: _clone__WEBPACK_IMPORTED_MODULE_27__["default"], + datum: _datum__WEBPACK_IMPORTED_MODULE_28__["default"], + on: _on__WEBPACK_IMPORTED_MODULE_29__["default"], + dispatch: _dispatch__WEBPACK_IMPORTED_MODULE_30__["default"] +}; + +/* harmony default export */ __webpack_exports__["default"] = (selection); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/insert.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/insert.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator */ "../../../node_modules/d3-selection/src/creator.js"); +/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector */ "../../../node_modules/d3-selection/src/selector.js"); + + + +function constantNull() { + return null; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, before) { + var create = typeof name === "function" ? name : Object(_creator__WEBPACK_IMPORTED_MODULE_0__["default"])(name), + select = before == null ? constantNull : typeof before === "function" ? before : Object(_selector__WEBPACK_IMPORTED_MODULE_1__["default"])(before); + return this.select(function() { + return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); + }); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/join.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/join.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(onenter, onupdate, onexit) { + var enter = this.enter(), update = this, exit = this.exit(); + enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + ""); + if (onupdate != null) update = onupdate(update); + if (onexit == null) exit.remove(); else onexit(exit); + return enter && update ? enter.merge(update).order() : update; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/lower.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/lower.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function lower() { + if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return this.each(lower); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/merge.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/merge.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-selection/src/selection/index.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(selection) { + + for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](merges, this._parents); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/node.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/node.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { + var node = group[i]; + if (node) return node; + } + } + + return null; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/nodes.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/nodes.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var nodes = new Array(this.size()), i = -1; + this.each(function() { nodes[++i] = this; }); + return nodes; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/on.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/on.js ***! + \****************************************************************************************************************/ +/*! exports provided: event, default, customEvent */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "event", function() { return event; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "customEvent", function() { return customEvent; }); +var filterEvents = {}; + +var event = null; + +if (typeof document !== "undefined") { + var element = document.documentElement; + if (!("onmouseenter" in element)) { + filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; + } +} + +function filterContextListener(listener, index, group) { + listener = contextListener(listener, index, group); + return function(event) { + var related = event.relatedTarget; + if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { + listener.call(this, event); + } + }; +} + +function contextListener(listener, index, group) { + return function(event1) { + var event0 = event; // Events can be reentrant (e.g., focus). + event = event1; + try { + listener.call(this, this.__data__, index, group); + } finally { + event = event0; + } + }; +} + +function parseTypenames(typenames) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + return {type: t, name: name}; + }); +} + +function onRemove(typename) { + return function() { + var on = this.__on; + if (!on) return; + for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { + if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + } else { + on[++i] = o; + } + } + if (++i) on.length = i; + else delete this.__on; + }; +} + +function onAdd(typename, value, capture) { + var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; + return function(d, i, group) { + var on = this.__on, o, listener = wrap(value, i, group); + if (on) for (var j = 0, m = on.length; j < m; ++j) { + if ((o = on[j]).type === typename.type && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + this.addEventListener(o.type, o.listener = listener, o.capture = capture); + o.value = value; + return; + } + } + this.addEventListener(typename.type, listener, capture); + o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; + if (!on) this.__on = [o]; + else on.push(o); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(typename, value, capture) { + var typenames = parseTypenames(typename + ""), i, n = typenames.length, t; + + if (arguments.length < 2) { + var on = this.node().__on; + if (on) for (var j = 0, m = on.length, o; j < m; ++j) { + for (i = 0, o = on[j]; i < n; ++i) { + if ((t = typenames[i]).type === o.type && t.name === o.name) { + return o.value; + } + } + } + return; + } + + on = value ? onAdd : onRemove; + if (capture == null) capture = false; + for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); + return this; +}); + +function customEvent(event1, listener, that, args) { + var event0 = event; + event1.sourceEvent = event; + event = event1; + try { + return listener.apply(that, args); + } finally { + event = event0; + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/order.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/order.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + + for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { + for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + + return this; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/property.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/property.js ***! + \**********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function propertyRemove(name) { + return function() { + delete this[name]; + }; +} + +function propertyConstant(name, value) { + return function() { + this[name] = value; + }; +} + +function propertyFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) delete this[name]; + else this[name] = v; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { + return arguments.length > 1 + ? this.each((value == null + ? propertyRemove : typeof value === "function" + ? propertyFunction + : propertyConstant)(name, value)) + : this.node()[name]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/raise.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/raise.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function raise() { + if (this.nextSibling) this.parentNode.appendChild(this); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return this.each(raise); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/remove.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/remove.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function remove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return this.each(remove); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/select.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/select.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-selection/src/selection/index.js"); +/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector */ "../../../node_modules/d3-selection/src/selector.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(select) { + if (typeof select !== "function") select = Object(_selector__WEBPACK_IMPORTED_MODULE_1__["default"])(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + } + } + } + + return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](subgroups, this._parents); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/selectAll.js": +/*!***********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/selectAll.js ***! + \***********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-selection/src/selection/index.js"); +/* harmony import */ var _selectorAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selectorAll */ "../../../node_modules/d3-selection/src/selectorAll.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(select) { + if (typeof select !== "function") select = Object(_selectorAll__WEBPACK_IMPORTED_MODULE_1__["default"])(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + subgroups.push(select.call(node, node.__data__, i, group)); + parents.push(node); + } + } + } + + return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](subgroups, parents); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/size.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/size.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() { + var size = 0; + this.each(function() { ++size; }); + return size; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/sort.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/sort.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-selection/src/selection/index.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(compare) { + if (!compare) compare = ascending; + + function compareNode(a, b) { + return a && b ? compare(a.__data__, b.__data__) : !a - !b; + } + + for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group[i]) { + sortgroup[i] = node; + } + } + sortgroup.sort(compareNode); + } + + return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](sortgroups, this._parents).order(); +}); + +function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/sparse.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/sparse.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(update) { + return new Array(update.length); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/style.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/style.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default, styleValue */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "styleValue", function() { return styleValue; }); +/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window */ "../../../node_modules/d3-selection/src/window.js"); + + +function styleRemove(name) { + return function() { + this.style.removeProperty(name); + }; +} + +function styleConstant(name, value, priority) { + return function() { + this.style.setProperty(name, value, priority); + }; +} + +function styleFunction(name, value, priority) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.style.removeProperty(name); + else this.style.setProperty(name, v, priority); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value, priority) { + return arguments.length > 1 + ? this.each((value == null + ? styleRemove : typeof value === "function" + ? styleFunction + : styleConstant)(name, value, priority == null ? "" : priority)) + : styleValue(this.node(), name); +}); + +function styleValue(node, name) { + return node.style.getPropertyValue(name) + || Object(_window__WEBPACK_IMPORTED_MODULE_0__["default"])(node).getComputedStyle(node, null).getPropertyValue(name); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selection/text.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selection/text.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function textRemove() { + this.textContent = ""; +} + +function textConstant(value) { + return function() { + this.textContent = value; + }; +} + +function textFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(value) { + return arguments.length + ? this.each(value == null + ? textRemove : (typeof value === "function" + ? textFunction + : textConstant)(value)) + : this.node().textContent; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selector.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selector.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function none() {} + +/* harmony default export */ __webpack_exports__["default"] = (function(selector) { + return selector == null ? none : function() { + return this.querySelector(selector); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/selectorAll.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/selectorAll.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function empty() { + return []; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(selector) { + return selector == null ? empty : function() { + return this.querySelectorAll(selector); + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/sourceEvent.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/sourceEvent.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/on */ "../../../node_modules/d3-selection/src/selection/on.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var current = _selection_on__WEBPACK_IMPORTED_MODULE_0__["event"], source; + while (source = current.sourceEvent) current = source; + return current; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/touch.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/touch.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "../../../node_modules/d3-selection/src/sourceEvent.js"); +/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "../../../node_modules/d3-selection/src/point.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(node, touches, identifier) { + if (arguments.length < 3) identifier = touches, touches = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])().changedTouches; + + for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { + if ((touch = touches[i]).identifier === identifier) { + return Object(_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, touch); + } + } + + return null; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/touches.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/touches.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "../../../node_modules/d3-selection/src/sourceEvent.js"); +/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "../../../node_modules/d3-selection/src/point.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(node, touches) { + if (touches == null) touches = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])().touches; + + for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { + points[i] = Object(_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, touches[i]); + } + + return points; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-selection/src/window.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-selection/src/window.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(node) { + return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node + || (node.document && node) // node is a Window + || node.defaultView; // node is a Document +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/arc.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/arc.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "../../../node_modules/d3-path/src/index.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-shape/src/constant.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-shape/src/math.js"); + + + + +function arcInnerRadius(d) { + return d.innerRadius; +} + +function arcOuterRadius(d) { + return d.outerRadius; +} + +function arcStartAngle(d) { + return d.startAngle; +} + +function arcEndAngle(d) { + return d.endAngle; +} + +function arcPadAngle(d) { + return d && d.padAngle; // Note: optional! +} + +function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { + var x10 = x1 - x0, y10 = y1 - y0, + x32 = x3 - x2, y32 = y3 - y2, + t = y32 * x10 - x32 * y10; + if (t * t < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) return; + t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t; + return [x0 + t * x10, y0 + t * y10]; +} + +// Compute perpendicular offset line of length rc. +// http://mathworld.wolfram.com/Circle-LineIntersection.html +function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { + var x01 = x0 - x1, + y01 = y0 - y1, + lo = (cw ? rc : -rc) / Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(x01 * x01 + y01 * y01), + ox = lo * y01, + oy = -lo * x01, + x11 = x0 + ox, + y11 = y0 + oy, + x10 = x1 + ox, + y10 = y1 + oy, + x00 = (x11 + x10) / 2, + y00 = (y11 + y10) / 2, + dx = x10 - x11, + dy = y10 - y11, + d2 = dx * dx + dy * dy, + r = r1 - rc, + D = x11 * y10 - x10 * y11, + d = (dy < 0 ? -1 : 1) * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(Object(_math__WEBPACK_IMPORTED_MODULE_2__["max"])(0, r * r * d2 - D * D)), + cx0 = (D * dy - dx * d) / d2, + cy0 = (-D * dx - dy * d) / d2, + cx1 = (D * dy + dx * d) / d2, + cy1 = (-D * dx + dy * d) / d2, + dx0 = cx0 - x00, + dy0 = cy0 - y00, + dx1 = cx1 - x00, + dy1 = cy1 - y00; + + // Pick the closer of the two intersection points. + // TODO Is there a faster way to determine which intersection to use? + if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; + + return { + cx: cx0, + cy: cy0, + x01: -ox, + y01: -oy, + x11: cx0 * (r1 / r - 1), + y11: cy0 * (r1 / r - 1) + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var innerRadius = arcInnerRadius, + outerRadius = arcOuterRadius, + cornerRadius = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(0), + padRadius = null, + startAngle = arcStartAngle, + endAngle = arcEndAngle, + padAngle = arcPadAngle, + context = null; + + function arc() { + var buffer, + r, + r0 = +innerRadius.apply(this, arguments), + r1 = +outerRadius.apply(this, arguments), + a0 = startAngle.apply(this, arguments) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], + a1 = endAngle.apply(this, arguments) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], + da = Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(a1 - a0), + cw = a1 > a0; + + if (!context) context = buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])(); + + // Ensure that the outer radius is always larger than the inner radius. + if (r1 < r0) r = r1, r1 = r0, r0 = r; + + // Is it a point? + if (!(r1 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"])) context.moveTo(0, 0); + + // Or is it a circle or annulus? + else if (da > _math__WEBPACK_IMPORTED_MODULE_2__["tau"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { + context.moveTo(r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a0), r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a0)); + context.arc(0, 0, r1, a0, a1, !cw); + if (r0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { + context.moveTo(r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a1), r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a1)); + context.arc(0, 0, r0, a1, a0, cw); + } + } + + // Or is it a circular or annular sector? + else { + var a01 = a0, + a11 = a1, + a00 = a0, + a10 = a1, + da0 = da, + da1 = da, + ap = padAngle.apply(this, arguments) / 2, + rp = (ap > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) && (padRadius ? +padRadius.apply(this, arguments) : Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(r0 * r0 + r1 * r1)), + rc = Object(_math__WEBPACK_IMPORTED_MODULE_2__["min"])(Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), + rc0 = rc, + rc1 = rc, + t0, + t1; + + // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. + if (rp > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { + var p0 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["asin"])(rp / r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(ap)), + p1 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["asin"])(rp / r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(ap)); + if ((da0 -= p0 * 2) > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; + else da0 = 0, a00 = a10 = (a0 + a1) / 2; + if ((da1 -= p1 * 2) > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; + else da1 = 0, a01 = a11 = (a0 + a1) / 2; + } + + var x01 = r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a01), + y01 = r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a01), + x10 = r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a10), + y10 = r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a10); + + // Apply rounded corners? + if (rc > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { + var x11 = r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a11), + y11 = r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a11), + x00 = r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a00), + y00 = r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a00), + oc; + + // Restrict the corner radius according to the sector angle. + if (da < _math__WEBPACK_IMPORTED_MODULE_2__["pi"] && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) { + var ax = x01 - oc[0], + ay = y01 - oc[1], + bx = x11 - oc[0], + by = y11 - oc[1], + kc = 1 / Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(Object(_math__WEBPACK_IMPORTED_MODULE_2__["acos"])((ax * bx + ay * by) / (Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(ax * ax + ay * ay) * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(bx * bx + by * by))) / 2), + lc = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(oc[0] * oc[0] + oc[1] * oc[1]); + rc0 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["min"])(rc, (r0 - lc) / (kc - 1)); + rc1 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["min"])(rc, (r1 - lc) / (kc + 1)); + } + } + + // Is the sector collapsed to a line? + if (!(da1 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"])) context.moveTo(x01, y01); + + // Does the sector’s outer ring have rounded corners? + else if (rc1 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { + t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); + t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); + + context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y01, t0.x01), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc1, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y01, t0.x01), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y11, t0.x11), !cw); + context.arc(0, 0, r1, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.cy + t0.y11, t0.cx + t0.x11), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.cy + t1.y11, t1.cx + t1.x11), !cw); + context.arc(t1.cx, t1.cy, rc1, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y11, t1.x11), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y01, t1.x01), !cw); + } + } + + // Or is the outer ring just a circular arc? + else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); + + // Is there no inner ring, and it’s a circular sector? + // Or perhaps it’s an annular sector collapsed due to padding? + if (!(r0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) || !(da0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"])) context.lineTo(x10, y10); + + // Does the sector’s inner ring (or point) have rounded corners? + else if (rc0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { + t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); + t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); + + context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y01, t0.x01), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc0, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y01, t0.x01), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y11, t0.x11), !cw); + context.arc(0, 0, r0, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.cy + t0.y11, t0.cx + t0.x11), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.cy + t1.y11, t1.cx + t1.x11), cw); + context.arc(t1.cx, t1.cy, rc0, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y11, t1.x11), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y01, t1.x01), !cw); + } + } + + // Or is the inner ring just a circular arc? + else context.arc(0, 0, r0, a10, a00, cw); + } + + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; + } + + arc.centroid = function() { + var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, + a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - _math__WEBPACK_IMPORTED_MODULE_2__["pi"] / 2; + return [Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a) * r, Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a) * r]; + }; + + arc.innerRadius = function(_) { + return arguments.length ? (innerRadius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : innerRadius; + }; + + arc.outerRadius = function(_) { + return arguments.length ? (outerRadius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : outerRadius; + }; + + arc.cornerRadius = function(_) { + return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : cornerRadius; + }; + + arc.padRadius = function(_) { + return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : padRadius; + }; + + arc.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : startAngle; + }; + + arc.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : endAngle; + }; + + arc.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : padAngle; + }; + + arc.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), arc) : context; + }; + + return arc; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/area.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/area.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "../../../node_modules/d3-path/src/index.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-shape/src/constant.js"); +/* harmony import */ var _curve_linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./curve/linear */ "../../../node_modules/d3-shape/src/curve/linear.js"); +/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./line */ "../../../node_modules/d3-shape/src/line.js"); +/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./point */ "../../../node_modules/d3-shape/src/point.js"); + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var x0 = _point__WEBPACK_IMPORTED_MODULE_4__["x"], + x1 = null, + y0 = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(0), + y1 = _point__WEBPACK_IMPORTED_MODULE_4__["y"], + defined = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(true), + context = null, + curve = _curve_linear__WEBPACK_IMPORTED_MODULE_2__["default"], + output = null; + + function area(data) { + var i, + j, + k, + n = data.length, + d, + defined0 = false, + buffer, + x0z = new Array(n), + y0z = new Array(n); + + if (context == null) output = curve(buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) { + j = i; + output.areaStart(); + output.lineStart(); + } else { + output.lineEnd(); + output.lineStart(); + for (k = i - 1; k >= j; --k) { + output.point(x0z[k], y0z[k]); + } + output.lineEnd(); + output.areaEnd(); + } + } + if (defined0) { + x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); + output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); + } + } + + if (buffer) return output = null, buffer + "" || null; + } + + function arealine() { + return Object(_line__WEBPACK_IMPORTED_MODULE_3__["default"])().defined(defined).curve(curve).context(context); + } + + area.x = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), x1 = null, area) : x0; + }; + + area.x0 = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : x0; + }; + + area.x1 = function(_) { + return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : x1; + }; + + area.y = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), y1 = null, area) : y0; + }; + + area.y0 = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : y0; + }; + + area.y1 = function(_) { + return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : y1; + }; + + area.lineX0 = + area.lineY0 = function() { + return arealine().x(x0).y(y0); + }; + + area.lineY1 = function() { + return arealine().x(x0).y(y1); + }; + + area.lineX1 = function() { + return arealine().x(x1).y(y0); + }; + + area.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), area) : defined; + }; + + area.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; + }; + + area.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; + }; + + return area; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/areaRadial.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/areaRadial.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _curve_radial__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./curve/radial */ "../../../node_modules/d3-shape/src/curve/radial.js"); +/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area */ "../../../node_modules/d3-shape/src/area.js"); +/* harmony import */ var _lineRadial__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lineRadial */ "../../../node_modules/d3-shape/src/lineRadial.js"); + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var a = Object(_area__WEBPACK_IMPORTED_MODULE_1__["default"])().curve(_curve_radial__WEBPACK_IMPORTED_MODULE_0__["curveRadialLinear"]), + c = a.curve, + x0 = a.lineX0, + x1 = a.lineX1, + y0 = a.lineY0, + y1 = a.lineY1; + + a.angle = a.x, delete a.x; + a.startAngle = a.x0, delete a.x0; + a.endAngle = a.x1, delete a.x1; + a.radius = a.y, delete a.y; + a.innerRadius = a.y0, delete a.y0; + a.outerRadius = a.y1, delete a.y1; + a.lineStartAngle = function() { return Object(_lineRadial__WEBPACK_IMPORTED_MODULE_2__["lineRadial"])(x0()); }, delete a.lineX0; + a.lineEndAngle = function() { return Object(_lineRadial__WEBPACK_IMPORTED_MODULE_2__["lineRadial"])(x1()); }, delete a.lineX1; + a.lineInnerRadius = function() { return Object(_lineRadial__WEBPACK_IMPORTED_MODULE_2__["lineRadial"])(y0()); }, delete a.lineY0; + a.lineOuterRadius = function() { return Object(_lineRadial__WEBPACK_IMPORTED_MODULE_2__["lineRadial"])(y1()); }, delete a.lineY1; + + a.curve = function(_) { + return arguments.length ? c(Object(_curve_radial__WEBPACK_IMPORTED_MODULE_0__["default"])(_)) : c()._curve; + }; + + return a; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/array.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/array.js ***! + \*****************************************************************************************************/ +/*! exports provided: slice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +var slice = Array.prototype.slice; + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/constant.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/constant.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function constant() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/basis.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/basis.js ***! + \***********************************************************************************************************/ +/*! exports provided: point, Basis, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "point", function() { return point; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Basis", function() { return Basis; }); +function point(that, x, y) { + that._context.bezierCurveTo( + (2 * that._x0 + that._x1) / 3, + (2 * that._y0 + that._y1) / 3, + (that._x0 + 2 * that._x1) / 3, + (that._y0 + 2 * that._y1) / 3, + (that._x0 + 4 * that._x1 + x) / 6, + (that._y0 + 4 * that._y1 + y) / 6 + ); +} + +function Basis(context) { + this._context = context; +} + +Basis.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 3: point(this, this._x1, this._y1); // proceed + case 2: this._context.lineTo(this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed + default: point(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = (function(context) { + return new Basis(context); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/basisClosed.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/basisClosed.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-shape/src/noop.js"); +/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./basis */ "../../../node_modules/d3-shape/src/curve/basis.js"); + + + +function BasisClosed(context) { + this._context = context; +} + +BasisClosed.prototype = { + areaStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + areaEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x2, this._y2); + this._context.closePath(); + break; + } + case 2: { + this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); + this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x2, this._y2); + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x2 = x, this._y2 = y; break; + case 1: this._point = 2; this._x3 = x, this._y3 = y; break; + case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; + default: Object(_basis__WEBPACK_IMPORTED_MODULE_1__["point"])(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = (function(context) { + return new BasisClosed(context); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/basisOpen.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/basisOpen.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis */ "../../../node_modules/d3-shape/src/curve/basis.js"); + + +function BasisOpen(context) { + this._context = context; +} + +BasisOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; + case 3: this._point = 4; // proceed + default: Object(_basis__WEBPACK_IMPORTED_MODULE_0__["point"])(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = (function(context) { + return new BasisOpen(context); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/bundle.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/bundle.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis */ "../../../node_modules/d3-shape/src/curve/basis.js"); + + +function Bundle(context, beta) { + this._basis = new _basis__WEBPACK_IMPORTED_MODULE_0__["Basis"](context); + this._beta = beta; +} + +Bundle.prototype = { + lineStart: function() { + this._x = []; + this._y = []; + this._basis.lineStart(); + }, + lineEnd: function() { + var x = this._x, + y = this._y, + j = x.length - 1; + + if (j > 0) { + var x0 = x[0], + y0 = y[0], + dx = x[j] - x0, + dy = y[j] - y0, + i = -1, + t; + + while (++i <= j) { + t = i / j; + this._basis.point( + this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), + this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) + ); + } + } + + this._x = this._y = null; + this._basis.lineEnd(); + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } +}; + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(beta) { + + function bundle(context) { + return beta === 1 ? new _basis__WEBPACK_IMPORTED_MODULE_0__["Basis"](context) : new Bundle(context, beta); + } + + bundle.beta = function(beta) { + return custom(+beta); + }; + + return bundle; +})(0.85)); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/cardinal.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/cardinal.js ***! + \**************************************************************************************************************/ +/*! exports provided: point, Cardinal, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "point", function() { return point; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Cardinal", function() { return Cardinal; }); +function point(that, x, y) { + that._context.bezierCurveTo( + that._x1 + that._k * (that._x2 - that._x0), + that._y1 + that._k * (that._y2 - that._y0), + that._x2 + that._k * (that._x1 - x), + that._y2 + that._k * (that._y1 - y), + that._x2, + that._y2 + ); +} + +function Cardinal(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +Cardinal.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: point(this, this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; this._x1 = x, this._y1 = y; break; + case 2: this._point = 3; // proceed + default: point(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(tension) { + + function cardinal(context) { + return new Cardinal(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0)); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/cardinalClosed.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/cardinalClosed.js ***! + \********************************************************************************************************************/ +/*! exports provided: CardinalClosed, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CardinalClosed", function() { return CardinalClosed; }); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-shape/src/noop.js"); +/* harmony import */ var _cardinal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinal */ "../../../node_modules/d3-shape/src/curve/cardinal.js"); + + + +function CardinalClosed(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +CardinalClosed.prototype = { + areaStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + areaEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: Object(_cardinal__WEBPACK_IMPORTED_MODULE_1__["point"])(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(tension) { + + function cardinal(context) { + return new CardinalClosed(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0)); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/cardinalOpen.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/cardinalOpen.js ***! + \******************************************************************************************************************/ +/*! exports provided: CardinalOpen, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CardinalOpen", function() { return CardinalOpen; }); +/* harmony import */ var _cardinal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cardinal */ "../../../node_modules/d3-shape/src/curve/cardinal.js"); + + +function CardinalOpen(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +CardinalOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // proceed + default: Object(_cardinal__WEBPACK_IMPORTED_MODULE_0__["point"])(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(tension) { + + function cardinal(context) { + return new CardinalOpen(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0)); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/catmullRom.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/catmullRom.js ***! + \****************************************************************************************************************/ +/*! exports provided: point, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "point", function() { return point; }); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-shape/src/math.js"); +/* harmony import */ var _cardinal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinal */ "../../../node_modules/d3-shape/src/curve/cardinal.js"); + + + +function point(that, x, y) { + var x1 = that._x1, + y1 = that._y1, + x2 = that._x2, + y2 = that._y2; + + if (that._l01_a > _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) { + var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, + n = 3 * that._l01_a * (that._l01_a + that._l12_a); + x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; + y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; + } + + if (that._l23_a > _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) { + var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, + m = 3 * that._l23_a * (that._l23_a + that._l12_a); + x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; + y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; + } + + that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); +} + +function CatmullRom(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRom.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: this.point(this._x2, this._y2); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; // proceed + default: point(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRom(context, alpha) : new _cardinal__WEBPACK_IMPORTED_MODULE_1__["Cardinal"](context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5)); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/catmullRomClosed.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/catmullRomClosed.js ***! + \**********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _cardinalClosed__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cardinalClosed */ "../../../node_modules/d3-shape/src/curve/cardinalClosed.js"); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-shape/src/noop.js"); +/* harmony import */ var _catmullRom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./catmullRom */ "../../../node_modules/d3-shape/src/curve/catmullRom.js"); + + + + +function CatmullRomClosed(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRomClosed.prototype = { + areaStart: _noop__WEBPACK_IMPORTED_MODULE_1__["default"], + areaEnd: _noop__WEBPACK_IMPORTED_MODULE_1__["default"], + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: Object(_catmullRom__WEBPACK_IMPORTED_MODULE_2__["point"])(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRomClosed(context, alpha) : new _cardinalClosed__WEBPACK_IMPORTED_MODULE_0__["CardinalClosed"](context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5)); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/catmullRomOpen.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/catmullRomOpen.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _cardinalOpen__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cardinalOpen */ "../../../node_modules/d3-shape/src/curve/cardinalOpen.js"); +/* harmony import */ var _catmullRom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./catmullRom */ "../../../node_modules/d3-shape/src/curve/catmullRom.js"); + + + +function CatmullRomOpen(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRomOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // proceed + default: Object(_catmullRom__WEBPACK_IMPORTED_MODULE_1__["point"])(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = ((function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRomOpen(context, alpha) : new _cardinalOpen__WEBPACK_IMPORTED_MODULE_0__["CardinalOpen"](context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5)); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/linear.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/linear.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function Linear(context) { + this._context = context; +} + +Linear.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // proceed + default: this._context.lineTo(x, y); break; + } + } +}; + +/* harmony default export */ __webpack_exports__["default"] = (function(context) { + return new Linear(context); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/linearClosed.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/linearClosed.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "../../../node_modules/d3-shape/src/noop.js"); + + +function LinearClosed(context) { + this._context = context; +} + +LinearClosed.prototype = { + areaStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + areaEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._point) this._context.closePath(); + }, + point: function(x, y) { + x = +x, y = +y; + if (this._point) this._context.lineTo(x, y); + else this._point = 1, this._context.moveTo(x, y); + } +}; + +/* harmony default export */ __webpack_exports__["default"] = (function(context) { + return new LinearClosed(context); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/monotone.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/monotone.js ***! + \**************************************************************************************************************/ +/*! exports provided: monotoneX, monotoneY */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monotoneX", function() { return monotoneX; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monotoneY", function() { return monotoneY; }); +function sign(x) { + return x < 0 ? -1 : 1; +} + +// Calculate the slopes of the tangents (Hermite-type interpolation) based on +// the following paper: Steffen, M. 1990. A Simple Method for Monotonic +// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. +// NOV(II), P. 443, 1990. +function slope3(that, x2, y2) { + var h0 = that._x1 - that._x0, + h1 = x2 - that._x1, + s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), + s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), + p = (s0 * h1 + s1 * h0) / (h0 + h1); + return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; +} + +// Calculate a one-sided slope. +function slope2(that, t) { + var h = that._x1 - that._x0; + return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; +} + +// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations +// "you can express cubic Hermite interpolation in terms of cubic Bézier curves +// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". +function point(that, t0, t1) { + var x0 = that._x0, + y0 = that._y0, + x1 = that._x1, + y1 = that._y1, + dx = (x1 - x0) / 3; + that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); +} + +function MonotoneX(context) { + this._context = context; +} + +MonotoneX.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = + this._t0 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x1, this._y1); break; + case 3: point(this, this._t0, slope2(this, this._t0)); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + var t1 = NaN; + + x = +x, y = +y; + if (x === this._x1 && y === this._y1) return; // Ignore coincident points. + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break; + default: point(this, this._t0, t1 = slope3(this, x, y)); break; + } + + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + this._t0 = t1; + } +} + +function MonotoneY(context) { + this._context = new ReflectContext(context); +} + +(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { + MonotoneX.prototype.point.call(this, y, x); +}; + +function ReflectContext(context) { + this._context = context; +} + +ReflectContext.prototype = { + moveTo: function(x, y) { this._context.moveTo(y, x); }, + closePath: function() { this._context.closePath(); }, + lineTo: function(x, y) { this._context.lineTo(y, x); }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } +}; + +function monotoneX(context) { + return new MonotoneX(context); +} + +function monotoneY(context) { + return new MonotoneY(context); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/natural.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/natural.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function Natural(context) { + this._context = context; +} + +Natural.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = []; + this._y = []; + }, + lineEnd: function() { + var x = this._x, + y = this._y, + n = x.length; + + if (n) { + this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); + if (n === 2) { + this._context.lineTo(x[1], y[1]); + } else { + var px = controlPoints(x), + py = controlPoints(y); + for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { + this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); + } + } + } + + if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); + this._line = 1 - this._line; + this._x = this._y = null; + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } +}; + +// See https://www.particleincell.com/2012/bezier-splines/ for derivation. +function controlPoints(x) { + var i, + n = x.length - 1, + m, + a = new Array(n), + b = new Array(n), + r = new Array(n); + a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; + for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; + a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; + for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; + a[n - 1] = r[n - 1] / b[n - 1]; + for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; + b[n - 1] = (x[n] + a[n - 1]) / 2; + for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; + return [a, b]; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(context) { + return new Natural(context); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/radial.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/radial.js ***! + \************************************************************************************************************/ +/*! exports provided: curveRadialLinear, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "curveRadialLinear", function() { return curveRadialLinear; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return curveRadial; }); +/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "../../../node_modules/d3-shape/src/curve/linear.js"); + + +var curveRadialLinear = curveRadial(_linear__WEBPACK_IMPORTED_MODULE_0__["default"]); + +function Radial(curve) { + this._curve = curve; +} + +Radial.prototype = { + areaStart: function() { + this._curve.areaStart(); + }, + areaEnd: function() { + this._curve.areaEnd(); + }, + lineStart: function() { + this._curve.lineStart(); + }, + lineEnd: function() { + this._curve.lineEnd(); + }, + point: function(a, r) { + this._curve.point(r * Math.sin(a), r * -Math.cos(a)); + } +}; + +function curveRadial(curve) { + + function radial(context) { + return new Radial(curve(context)); + } + + radial._curve = curve; + + return radial; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/curve/step.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/curve/step.js ***! + \**********************************************************************************************************/ +/*! exports provided: default, stepBefore, stepAfter */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stepBefore", function() { return stepBefore; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stepAfter", function() { return stepAfter; }); +function Step(context, t) { + this._context = context; + this._t = t; +} + +Step.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = this._y = NaN; + this._point = 0; + }, + lineEnd: function() { + if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // proceed + default: { + if (this._t <= 0) { + this._context.lineTo(this._x, y); + this._context.lineTo(x, y); + } else { + var x1 = this._x * (1 - this._t) + x * this._t; + this._context.lineTo(x1, this._y); + this._context.lineTo(x1, y); + } + break; + } + } + this._x = x, this._y = y; + } +}; + +/* harmony default export */ __webpack_exports__["default"] = (function(context) { + return new Step(context, 0.5); +}); + +function stepBefore(context) { + return new Step(context, 0); +} + +function stepAfter(context) { + return new Step(context, 1); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/descending.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/descending.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/identity.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/identity.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(d) { + return d; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: arc, area, line, pie, areaRadial, radialArea, lineRadial, radialLine, pointRadial, linkHorizontal, linkVertical, linkRadial, symbol, symbols, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye, curveBasisClosed, curveBasisOpen, curveBasis, curveBundle, curveCardinalClosed, curveCardinalOpen, curveCardinal, curveCatmullRomClosed, curveCatmullRomOpen, curveCatmullRom, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, stack, stackOffsetExpand, stackOffsetDiverging, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderAppearance, stackOrderAscending, stackOrderDescending, stackOrderInsideOut, stackOrderNone, stackOrderReverse */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _arc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arc */ "../../../node_modules/d3-shape/src/arc.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "arc", function() { return _arc__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area */ "../../../node_modules/d3-shape/src/area.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "area", function() { return _area__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./line */ "../../../node_modules/d3-shape/src/line.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "line", function() { return _line__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _pie__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pie */ "../../../node_modules/d3-shape/src/pie.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pie", function() { return _pie__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _areaRadial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./areaRadial */ "../../../node_modules/d3-shape/src/areaRadial.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "areaRadial", function() { return _areaRadial__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "radialArea", function() { return _areaRadial__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _lineRadial__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lineRadial */ "../../../node_modules/d3-shape/src/lineRadial.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lineRadial", function() { return _lineRadial__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "radialLine", function() { return _lineRadial__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _pointRadial__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pointRadial */ "../../../node_modules/d3-shape/src/pointRadial.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pointRadial", function() { return _pointRadial__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _link_index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./link/index */ "../../../node_modules/d3-shape/src/link/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkHorizontal", function() { return _link_index__WEBPACK_IMPORTED_MODULE_7__["linkHorizontal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkVertical", function() { return _link_index__WEBPACK_IMPORTED_MODULE_7__["linkVertical"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkRadial", function() { return _link_index__WEBPACK_IMPORTED_MODULE_7__["linkRadial"]; }); + +/* harmony import */ var _symbol__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./symbol */ "../../../node_modules/d3-shape/src/symbol.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbol", function() { return _symbol__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbols", function() { return _symbol__WEBPACK_IMPORTED_MODULE_8__["symbols"]; }); + +/* harmony import */ var _symbol_circle__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./symbol/circle */ "../../../node_modules/d3-shape/src/symbol/circle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolCircle", function() { return _symbol_circle__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _symbol_cross__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./symbol/cross */ "../../../node_modules/d3-shape/src/symbol/cross.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolCross", function() { return _symbol_cross__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _symbol_diamond__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./symbol/diamond */ "../../../node_modules/d3-shape/src/symbol/diamond.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolDiamond", function() { return _symbol_diamond__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _symbol_square__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./symbol/square */ "../../../node_modules/d3-shape/src/symbol/square.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolSquare", function() { return _symbol_square__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _symbol_star__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./symbol/star */ "../../../node_modules/d3-shape/src/symbol/star.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolStar", function() { return _symbol_star__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _symbol_triangle__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./symbol/triangle */ "../../../node_modules/d3-shape/src/symbol/triangle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolTriangle", function() { return _symbol_triangle__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony import */ var _symbol_wye__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./symbol/wye */ "../../../node_modules/d3-shape/src/symbol/wye.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolWye", function() { return _symbol_wye__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _curve_basisClosed__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./curve/basisClosed */ "../../../node_modules/d3-shape/src/curve/basisClosed.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasisClosed", function() { return _curve_basisClosed__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony import */ var _curve_basisOpen__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./curve/basisOpen */ "../../../node_modules/d3-shape/src/curve/basisOpen.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasisOpen", function() { return _curve_basisOpen__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony import */ var _curve_basis__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./curve/basis */ "../../../node_modules/d3-shape/src/curve/basis.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasis", function() { return _curve_basis__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony import */ var _curve_bundle__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./curve/bundle */ "../../../node_modules/d3-shape/src/curve/bundle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBundle", function() { return _curve_bundle__WEBPACK_IMPORTED_MODULE_19__["default"]; }); + +/* harmony import */ var _curve_cardinalClosed__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./curve/cardinalClosed */ "../../../node_modules/d3-shape/src/curve/cardinalClosed.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinalClosed", function() { return _curve_cardinalClosed__WEBPACK_IMPORTED_MODULE_20__["default"]; }); + +/* harmony import */ var _curve_cardinalOpen__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./curve/cardinalOpen */ "../../../node_modules/d3-shape/src/curve/cardinalOpen.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinalOpen", function() { return _curve_cardinalOpen__WEBPACK_IMPORTED_MODULE_21__["default"]; }); + +/* harmony import */ var _curve_cardinal__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./curve/cardinal */ "../../../node_modules/d3-shape/src/curve/cardinal.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinal", function() { return _curve_cardinal__WEBPACK_IMPORTED_MODULE_22__["default"]; }); + +/* harmony import */ var _curve_catmullRomClosed__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./curve/catmullRomClosed */ "../../../node_modules/d3-shape/src/curve/catmullRomClosed.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomClosed", function() { return _curve_catmullRomClosed__WEBPACK_IMPORTED_MODULE_23__["default"]; }); + +/* harmony import */ var _curve_catmullRomOpen__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./curve/catmullRomOpen */ "../../../node_modules/d3-shape/src/curve/catmullRomOpen.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomOpen", function() { return _curve_catmullRomOpen__WEBPACK_IMPORTED_MODULE_24__["default"]; }); + +/* harmony import */ var _curve_catmullRom__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./curve/catmullRom */ "../../../node_modules/d3-shape/src/curve/catmullRom.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRom", function() { return _curve_catmullRom__WEBPACK_IMPORTED_MODULE_25__["default"]; }); + +/* harmony import */ var _curve_linearClosed__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./curve/linearClosed */ "../../../node_modules/d3-shape/src/curve/linearClosed.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveLinearClosed", function() { return _curve_linearClosed__WEBPACK_IMPORTED_MODULE_26__["default"]; }); + +/* harmony import */ var _curve_linear__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./curve/linear */ "../../../node_modules/d3-shape/src/curve/linear.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveLinear", function() { return _curve_linear__WEBPACK_IMPORTED_MODULE_27__["default"]; }); + +/* harmony import */ var _curve_monotone__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./curve/monotone */ "../../../node_modules/d3-shape/src/curve/monotone.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneX", function() { return _curve_monotone__WEBPACK_IMPORTED_MODULE_28__["monotoneX"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneY", function() { return _curve_monotone__WEBPACK_IMPORTED_MODULE_28__["monotoneY"]; }); + +/* harmony import */ var _curve_natural__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./curve/natural */ "../../../node_modules/d3-shape/src/curve/natural.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveNatural", function() { return _curve_natural__WEBPACK_IMPORTED_MODULE_29__["default"]; }); + +/* harmony import */ var _curve_step__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./curve/step */ "../../../node_modules/d3-shape/src/curve/step.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStep", function() { return _curve_step__WEBPACK_IMPORTED_MODULE_30__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStepAfter", function() { return _curve_step__WEBPACK_IMPORTED_MODULE_30__["stepAfter"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStepBefore", function() { return _curve_step__WEBPACK_IMPORTED_MODULE_30__["stepBefore"]; }); + +/* harmony import */ var _stack__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./stack */ "../../../node_modules/d3-shape/src/stack.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stack", function() { return _stack__WEBPACK_IMPORTED_MODULE_31__["default"]; }); + +/* harmony import */ var _offset_expand__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./offset/expand */ "../../../node_modules/d3-shape/src/offset/expand.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetExpand", function() { return _offset_expand__WEBPACK_IMPORTED_MODULE_32__["default"]; }); + +/* harmony import */ var _offset_diverging__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./offset/diverging */ "../../../node_modules/d3-shape/src/offset/diverging.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetDiverging", function() { return _offset_diverging__WEBPACK_IMPORTED_MODULE_33__["default"]; }); + +/* harmony import */ var _offset_none__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./offset/none */ "../../../node_modules/d3-shape/src/offset/none.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetNone", function() { return _offset_none__WEBPACK_IMPORTED_MODULE_34__["default"]; }); + +/* harmony import */ var _offset_silhouette__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./offset/silhouette */ "../../../node_modules/d3-shape/src/offset/silhouette.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetSilhouette", function() { return _offset_silhouette__WEBPACK_IMPORTED_MODULE_35__["default"]; }); + +/* harmony import */ var _offset_wiggle__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./offset/wiggle */ "../../../node_modules/d3-shape/src/offset/wiggle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetWiggle", function() { return _offset_wiggle__WEBPACK_IMPORTED_MODULE_36__["default"]; }); + +/* harmony import */ var _order_appearance__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./order/appearance */ "../../../node_modules/d3-shape/src/order/appearance.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderAppearance", function() { return _order_appearance__WEBPACK_IMPORTED_MODULE_37__["default"]; }); + +/* harmony import */ var _order_ascending__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./order/ascending */ "../../../node_modules/d3-shape/src/order/ascending.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderAscending", function() { return _order_ascending__WEBPACK_IMPORTED_MODULE_38__["default"]; }); + +/* harmony import */ var _order_descending__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./order/descending */ "../../../node_modules/d3-shape/src/order/descending.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderDescending", function() { return _order_descending__WEBPACK_IMPORTED_MODULE_39__["default"]; }); + +/* harmony import */ var _order_insideOut__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./order/insideOut */ "../../../node_modules/d3-shape/src/order/insideOut.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderInsideOut", function() { return _order_insideOut__WEBPACK_IMPORTED_MODULE_40__["default"]; }); + +/* harmony import */ var _order_none__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./order/none */ "../../../node_modules/d3-shape/src/order/none.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderNone", function() { return _order_none__WEBPACK_IMPORTED_MODULE_41__["default"]; }); + +/* harmony import */ var _order_reverse__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./order/reverse */ "../../../node_modules/d3-shape/src/order/reverse.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderReverse", function() { return _order_reverse__WEBPACK_IMPORTED_MODULE_42__["default"]; }); + + + + + + // Note: radialArea is deprecated! + // Note: radialLine is deprecated! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/line.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/line.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "../../../node_modules/d3-path/src/index.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-shape/src/constant.js"); +/* harmony import */ var _curve_linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./curve/linear */ "../../../node_modules/d3-shape/src/curve/linear.js"); +/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./point */ "../../../node_modules/d3-shape/src/point.js"); + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var x = _point__WEBPACK_IMPORTED_MODULE_3__["x"], + y = _point__WEBPACK_IMPORTED_MODULE_3__["y"], + defined = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(true), + context = null, + curve = _curve_linear__WEBPACK_IMPORTED_MODULE_2__["default"], + output = null; + + function line(data) { + var i, + n = data.length, + d, + defined0 = false, + buffer; + + if (context == null) output = curve(buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) output.lineStart(); + else output.lineEnd(); + } + if (defined0) output.point(+x(d, i, data), +y(d, i, data)); + } + + if (buffer) return output = null, buffer + "" || null; + } + + line.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), line) : x; + }; + + line.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), line) : y; + }; + + line.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), line) : defined; + }; + + line.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; + }; + + line.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; + }; + + return line; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/lineRadial.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/lineRadial.js ***! + \**********************************************************************************************************/ +/*! exports provided: lineRadial, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lineRadial", function() { return lineRadial; }); +/* harmony import */ var _curve_radial__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./curve/radial */ "../../../node_modules/d3-shape/src/curve/radial.js"); +/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./line */ "../../../node_modules/d3-shape/src/line.js"); + + + +function lineRadial(l) { + var c = l.curve; + + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + + l.curve = function(_) { + return arguments.length ? c(Object(_curve_radial__WEBPACK_IMPORTED_MODULE_0__["default"])(_)) : c()._curve; + }; + + return l; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return lineRadial(Object(_line__WEBPACK_IMPORTED_MODULE_1__["default"])().curve(_curve_radial__WEBPACK_IMPORTED_MODULE_0__["curveRadialLinear"])); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/link/index.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/link/index.js ***! + \**********************************************************************************************************/ +/*! exports provided: linkHorizontal, linkVertical, linkRadial */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linkHorizontal", function() { return linkHorizontal; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linkVertical", function() { return linkVertical; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linkRadial", function() { return linkRadial; }); +/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "../../../node_modules/d3-path/src/index.js"); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../array */ "../../../node_modules/d3-shape/src/array.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ "../../../node_modules/d3-shape/src/constant.js"); +/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../point */ "../../../node_modules/d3-shape/src/point.js"); +/* harmony import */ var _pointRadial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../pointRadial */ "../../../node_modules/d3-shape/src/pointRadial.js"); + + + + + + +function linkSource(d) { + return d.source; +} + +function linkTarget(d) { + return d.target; +} + +function link(curve) { + var source = linkSource, + target = linkTarget, + x = _point__WEBPACK_IMPORTED_MODULE_3__["x"], + y = _point__WEBPACK_IMPORTED_MODULE_3__["y"], + context = null; + + function link() { + var buffer, argv = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); + if (!context) context = buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])(); + curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); + if (buffer) return context = null, buffer + "" || null; + } + + link.source = function(_) { + return arguments.length ? (source = _, link) : source; + }; + + link.target = function(_) { + return arguments.length ? (target = _, link) : target; + }; + + link.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), link) : x; + }; + + link.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), link) : y; + }; + + link.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), link) : context; + }; + + return link; +} + +function curveHorizontal(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); +} + +function curveVertical(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); +} + +function curveRadial(context, x0, y0, x1, y1) { + var p0 = Object(_pointRadial__WEBPACK_IMPORTED_MODULE_4__["default"])(x0, y0), + p1 = Object(_pointRadial__WEBPACK_IMPORTED_MODULE_4__["default"])(x0, y0 = (y0 + y1) / 2), + p2 = Object(_pointRadial__WEBPACK_IMPORTED_MODULE_4__["default"])(x1, y0), + p3 = Object(_pointRadial__WEBPACK_IMPORTED_MODULE_4__["default"])(x1, y1); + context.moveTo(p0[0], p0[1]); + context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); +} + +function linkHorizontal() { + return link(curveHorizontal); +} + +function linkVertical() { + return link(curveVertical); +} + +function linkRadial() { + var l = link(curveRadial); + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + return l; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/math.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/math.js ***! + \****************************************************************************************************/ +/*! exports provided: abs, atan2, cos, max, min, sin, sqrt, epsilon, pi, halfPi, tau, acos, asin */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "abs", function() { return abs; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atan2", function() { return atan2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cos", function() { return cos; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "min", function() { return min; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sin", function() { return sin; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sqrt", function() { return sqrt; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon", function() { return epsilon; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pi", function() { return pi; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "halfPi", function() { return halfPi; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tau", function() { return tau; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "acos", function() { return acos; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asin", function() { return asin; }); +var abs = Math.abs; +var atan2 = Math.atan2; +var cos = Math.cos; +var max = Math.max; +var min = Math.min; +var sin = Math.sin; +var sqrt = Math.sqrt; + +var epsilon = 1e-12; +var pi = Math.PI; +var halfPi = pi / 2; +var tau = 2 * pi; + +function acos(x) { + return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); +} + +function asin(x) { + return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/noop.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/noop.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function() {}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/offset/diverging.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/offset/diverging.js ***! + \****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { + if (!((n = series.length) > 0)) return; + for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { + for (yp = yn = 0, i = 0; i < n; ++i) { + if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) { + d[0] = yp, d[1] = yp += dy; + } else if (dy < 0) { + d[1] = yn, d[0] = yn += dy; + } else { + d[0] = yp; + } + } + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/offset/expand.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/offset/expand.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "../../../node_modules/d3-shape/src/offset/none.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { + if (!((n = series.length) > 0)) return; + for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { + for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; + if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; + } + Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/offset/none.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/offset/none.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { + if (!((n = series.length) > 1)) return; + for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { + s0 = s1, s1 = series[order[i]]; + for (j = 0; j < m; ++j) { + s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; + } + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/offset/silhouette.js": +/*!*****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/offset/silhouette.js ***! + \*****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "../../../node_modules/d3-shape/src/offset/none.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { + if (!((n = series.length) > 0)) return; + for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { + for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; + s0[j][1] += s0[j][0] = -y / 2; + } + Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/offset/wiggle.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/offset/wiggle.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "../../../node_modules/d3-shape/src/offset/none.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { + if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; + for (var y = 0, j = 1, s0, m, n; j < m; ++j) { + for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { + var si = series[order[i]], + sij0 = si[j][1] || 0, + sij1 = si[j - 1][1] || 0, + s3 = (sij0 - sij1) / 2; + for (var k = 0; k < i; ++k) { + var sk = series[order[k]], + skj0 = sk[j][1] || 0, + skj1 = sk[j - 1][1] || 0; + s3 += skj0 - skj1; + } + s1 += sij0, s2 += s3 * sij0; + } + s0[j - 1][1] += s0[j - 1][0] = y; + if (s1) y -= s2 / s1; + } + s0[j - 1][1] += s0[j - 1][0] = y; + Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/order/appearance.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/order/appearance.js ***! + \****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "../../../node_modules/d3-shape/src/order/none.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(series) { + var peaks = series.map(peak); + return Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series).sort(function(a, b) { return peaks[a] - peaks[b]; }); +}); + +function peak(series) { + var i = -1, j = 0, n = series.length, vi, vj = -Infinity; + while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i; + return j; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/order/ascending.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/order/ascending.js ***! + \***************************************************************************************************************/ +/*! exports provided: default, sum */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sum", function() { return sum; }); +/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "../../../node_modules/d3-shape/src/order/none.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(series) { + var sums = series.map(sum); + return Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series).sort(function(a, b) { return sums[a] - sums[b]; }); +}); + +function sum(series) { + var s = 0, i = -1, n = series.length, v; + while (++i < n) if (v = +series[i][1]) s += v; + return s; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/order/descending.js": +/*!****************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/order/descending.js ***! + \****************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "../../../node_modules/d3-shape/src/order/ascending.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(series) { + return Object(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"])(series).reverse(); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/order/insideOut.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/order/insideOut.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _appearance__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./appearance */ "../../../node_modules/d3-shape/src/order/appearance.js"); +/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending */ "../../../node_modules/d3-shape/src/order/ascending.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(series) { + var n = series.length, + i, + j, + sums = series.map(_ascending__WEBPACK_IMPORTED_MODULE_1__["sum"]), + order = Object(_appearance__WEBPACK_IMPORTED_MODULE_0__["default"])(series), + top = 0, + bottom = 0, + tops = [], + bottoms = []; + + for (i = 0; i < n; ++i) { + j = order[i]; + if (top < bottom) { + top += sums[j]; + tops.push(j); + } else { + bottom += sums[j]; + bottoms.push(j); + } + } + + return bottoms.reverse().concat(tops); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/order/none.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/order/none.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(series) { + var n = series.length, o = new Array(n); + while (--n >= 0) o[n] = n; + return o; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/order/reverse.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/order/reverse.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "../../../node_modules/d3-shape/src/order/none.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(series) { + return Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series).reverse(); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/pie.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/pie.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-shape/src/constant.js"); +/* harmony import */ var _descending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./descending */ "../../../node_modules/d3-shape/src/descending.js"); +/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./identity */ "../../../node_modules/d3-shape/src/identity.js"); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math */ "../../../node_modules/d3-shape/src/math.js"); + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var value = _identity__WEBPACK_IMPORTED_MODULE_2__["default"], + sortValues = _descending__WEBPACK_IMPORTED_MODULE_1__["default"], + sort = null, + startAngle = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0), + endAngle = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(_math__WEBPACK_IMPORTED_MODULE_3__["tau"]), + padAngle = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0); + + function pie(data) { + var i, + n = data.length, + j, + k, + sum = 0, + index = new Array(n), + arcs = new Array(n), + a0 = +startAngle.apply(this, arguments), + da = Math.min(_math__WEBPACK_IMPORTED_MODULE_3__["tau"], Math.max(-_math__WEBPACK_IMPORTED_MODULE_3__["tau"], endAngle.apply(this, arguments) - a0)), + a1, + p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), + pa = p * (da < 0 ? -1 : 1), + v; + + for (i = 0; i < n; ++i) { + if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { + sum += v; + } + } + + // Optionally sort the arcs by previously-computed values or by data. + if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); + else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); + + // Compute the arcs! They are stored in the original data's order. + for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { + j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { + data: data[j], + index: i, + value: v, + startAngle: a0, + endAngle: a1, + padAngle: p + }; + } + + return arcs; + } + + pie.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), pie) : value; + }; + + pie.sortValues = function(_) { + return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; + }; + + pie.sort = function(_) { + return arguments.length ? (sort = _, sortValues = null, pie) : sort; + }; + + pie.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), pie) : startAngle; + }; + + pie.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), pie) : endAngle; + }; + + pie.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), pie) : padAngle; + }; + + return pie; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/point.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/point.js ***! + \*****************************************************************************************************/ +/*! exports provided: x, y */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return x; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return y; }); +function x(p) { + return p[0]; +} + +function y(p) { + return p[1]; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/pointRadial.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/pointRadial.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x, y) { + return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)]; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/stack.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/stack.js ***! + \*****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "../../../node_modules/d3-shape/src/array.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-shape/src/constant.js"); +/* harmony import */ var _offset_none__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./offset/none */ "../../../node_modules/d3-shape/src/offset/none.js"); +/* harmony import */ var _order_none__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./order/none */ "../../../node_modules/d3-shape/src/order/none.js"); + + + + + +function stackValue(d, key) { + return d[key]; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var keys = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])([]), + order = _order_none__WEBPACK_IMPORTED_MODULE_3__["default"], + offset = _offset_none__WEBPACK_IMPORTED_MODULE_2__["default"], + value = stackValue; + + function stack(data) { + var kz = keys.apply(this, arguments), + i, + m = data.length, + n = kz.length, + sz = new Array(n), + oz; + + for (i = 0; i < n; ++i) { + for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { + si[j] = sij = [0, +value(data[j], ki, j, data)]; + sij.data = data[j]; + } + si.key = ki; + } + + for (i = 0, oz = order(sz); i < n; ++i) { + sz[oz[i]].index = i; + } + + offset(sz, oz); + return sz; + } + + stack.keys = function(_) { + return arguments.length ? (keys = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(_array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_)), stack) : keys; + }; + + stack.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), stack) : value; + }; + + stack.order = function(_) { + return arguments.length ? (order = _ == null ? _order_none__WEBPACK_IMPORTED_MODULE_3__["default"] : typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(_array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_)), stack) : order; + }; + + stack.offset = function(_) { + return arguments.length ? (offset = _ == null ? _offset_none__WEBPACK_IMPORTED_MODULE_2__["default"] : _, stack) : offset; + }; + + return stack; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/symbol.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/symbol.js ***! + \******************************************************************************************************/ +/*! exports provided: symbols, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "symbols", function() { return symbols; }); +/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "../../../node_modules/d3-path/src/index.js"); +/* harmony import */ var _symbol_circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./symbol/circle */ "../../../node_modules/d3-shape/src/symbol/circle.js"); +/* harmony import */ var _symbol_cross__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./symbol/cross */ "../../../node_modules/d3-shape/src/symbol/cross.js"); +/* harmony import */ var _symbol_diamond__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./symbol/diamond */ "../../../node_modules/d3-shape/src/symbol/diamond.js"); +/* harmony import */ var _symbol_star__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symbol/star */ "../../../node_modules/d3-shape/src/symbol/star.js"); +/* harmony import */ var _symbol_square__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./symbol/square */ "../../../node_modules/d3-shape/src/symbol/square.js"); +/* harmony import */ var _symbol_triangle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./symbol/triangle */ "../../../node_modules/d3-shape/src/symbol/triangle.js"); +/* harmony import */ var _symbol_wye__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./symbol/wye */ "../../../node_modules/d3-shape/src/symbol/wye.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-shape/src/constant.js"); + + + + + + + + + + +var symbols = [ + _symbol_circle__WEBPACK_IMPORTED_MODULE_1__["default"], + _symbol_cross__WEBPACK_IMPORTED_MODULE_2__["default"], + _symbol_diamond__WEBPACK_IMPORTED_MODULE_3__["default"], + _symbol_square__WEBPACK_IMPORTED_MODULE_5__["default"], + _symbol_star__WEBPACK_IMPORTED_MODULE_4__["default"], + _symbol_triangle__WEBPACK_IMPORTED_MODULE_6__["default"], + _symbol_wye__WEBPACK_IMPORTED_MODULE_7__["default"] +]; + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var type = Object(_constant__WEBPACK_IMPORTED_MODULE_8__["default"])(_symbol_circle__WEBPACK_IMPORTED_MODULE_1__["default"]), + size = Object(_constant__WEBPACK_IMPORTED_MODULE_8__["default"])(64), + context = null; + + function symbol() { + var buffer; + if (!context) context = buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])(); + type.apply(this, arguments).draw(context, +size.apply(this, arguments)); + if (buffer) return context = null, buffer + "" || null; + } + + symbol.type = function(_) { + return arguments.length ? (type = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_8__["default"])(_), symbol) : type; + }; + + symbol.size = function(_) { + return arguments.length ? (size = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_8__["default"])(+_), symbol) : size; + }; + + symbol.context = function(_) { + return arguments.length ? (context = _ == null ? null : _, symbol) : context; + }; + + return symbol; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/symbol/circle.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/symbol/circle.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-shape/src/math.js"); + + +/* harmony default export */ __webpack_exports__["default"] = ({ + draw: function(context, size) { + var r = Math.sqrt(size / _math__WEBPACK_IMPORTED_MODULE_0__["pi"]); + context.moveTo(r, 0); + context.arc(0, 0, r, 0, _math__WEBPACK_IMPORTED_MODULE_0__["tau"]); + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/symbol/cross.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/symbol/cross.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = ({ + draw: function(context, size) { + var r = Math.sqrt(size / 5) / 2; + context.moveTo(-3 * r, -r); + context.lineTo(-r, -r); + context.lineTo(-r, -3 * r); + context.lineTo(r, -3 * r); + context.lineTo(r, -r); + context.lineTo(3 * r, -r); + context.lineTo(3 * r, r); + context.lineTo(r, r); + context.lineTo(r, 3 * r); + context.lineTo(-r, 3 * r); + context.lineTo(-r, r); + context.lineTo(-3 * r, r); + context.closePath(); + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/symbol/diamond.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/symbol/diamond.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var tan30 = Math.sqrt(1 / 3), + tan30_2 = tan30 * 2; + +/* harmony default export */ __webpack_exports__["default"] = ({ + draw: function(context, size) { + var y = Math.sqrt(size / tan30_2), + x = y * tan30; + context.moveTo(0, -y); + context.lineTo(x, 0); + context.lineTo(0, y); + context.lineTo(-x, 0); + context.closePath(); + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/symbol/square.js": +/*!*************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/symbol/square.js ***! + \*************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = ({ + draw: function(context, size) { + var w = Math.sqrt(size), + x = -w / 2; + context.rect(x, x, w, w); + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/symbol/star.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/symbol/star.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "../../../node_modules/d3-shape/src/math.js"); + + +var ka = 0.89081309152928522810, + kr = Math.sin(_math__WEBPACK_IMPORTED_MODULE_0__["pi"] / 10) / Math.sin(7 * _math__WEBPACK_IMPORTED_MODULE_0__["pi"] / 10), + kx = Math.sin(_math__WEBPACK_IMPORTED_MODULE_0__["tau"] / 10) * kr, + ky = -Math.cos(_math__WEBPACK_IMPORTED_MODULE_0__["tau"] / 10) * kr; + +/* harmony default export */ __webpack_exports__["default"] = ({ + draw: function(context, size) { + var r = Math.sqrt(size * ka), + x = kx * r, + y = ky * r; + context.moveTo(0, -r); + context.lineTo(x, y); + for (var i = 1; i < 5; ++i) { + var a = _math__WEBPACK_IMPORTED_MODULE_0__["tau"] * i / 5, + c = Math.cos(a), + s = Math.sin(a); + context.lineTo(s * r, -c * r); + context.lineTo(c * x - s * y, s * x + c * y); + } + context.closePath(); + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/symbol/triangle.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/symbol/triangle.js ***! + \***************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var sqrt3 = Math.sqrt(3); + +/* harmony default export */ __webpack_exports__["default"] = ({ + draw: function(context, size) { + var y = -Math.sqrt(size / (sqrt3 * 3)); + context.moveTo(0, y * 2); + context.lineTo(-sqrt3 * y, -y); + context.lineTo(sqrt3 * y, -y); + context.closePath(); + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-shape/src/symbol/wye.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-shape/src/symbol/wye.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var c = -0.5, + s = Math.sqrt(3) / 2, + k = 1 / Math.sqrt(12), + a = (k / 2 + 1) * 3; + +/* harmony default export */ __webpack_exports__["default"] = ({ + draw: function(context, size) { + var r = Math.sqrt(size / a), + x0 = r / 2, + y0 = r * k, + x1 = x0, + y1 = r * k + r, + x2 = -x1, + y2 = y1; + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.lineTo(c * x0 - s * y0, s * x0 + c * y0); + context.lineTo(c * x1 - s * y1, s * x1 + c * y1); + context.lineTo(c * x2 - s * y2, s * x2 + c * y2); + context.lineTo(c * x0 + s * y0, c * y0 - s * x0); + context.lineTo(c * x1 + s * y1, c * y1 - s * x1); + context.lineTo(c * x2 + s * y2, c * y2 - s * x2); + context.closePath(); + } +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-time-format/src/defaultLocale.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time-format/src/defaultLocale.js ***! + \*******************************************************************************************************************/ +/*! exports provided: timeFormat, timeParse, utcFormat, utcParse, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeFormat", function() { return timeFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeParse", function() { return timeParse; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcFormat", function() { return utcFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcParse", function() { return utcParse; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return defaultLocale; }); +/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale */ "../../../node_modules/d3-time-format/src/locale.js"); + + +var locale; +var timeFormat; +var timeParse; +var utcFormat; +var utcParse; + +defaultLocale({ + dateTime: "%x, %X", + date: "%-m/%-d/%Y", + time: "%-I:%M:%S %p", + periods: ["AM", "PM"], + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +}); + +function defaultLocale(definition) { + locale = Object(_locale__WEBPACK_IMPORTED_MODULE_0__["default"])(definition); + timeFormat = locale.format; + timeParse = locale.parse; + utcFormat = locale.utcFormat; + utcParse = locale.utcParse; + return locale; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-time-format/src/index.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time-format/src/index.js ***! + \***********************************************************************************************************/ +/*! exports provided: timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale, isoFormat, isoParse */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _defaultLocale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale */ "../../../node_modules/d3-time-format/src/defaultLocale.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormatDefaultLocale", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormat", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["timeFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeParse", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["timeParse"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFormat", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["utcFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcParse", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["utcParse"]; }); + +/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale */ "../../../node_modules/d3-time-format/src/locale.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormatLocale", function() { return _locale__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _isoFormat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isoFormat */ "../../../node_modules/d3-time-format/src/isoFormat.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isoFormat", function() { return _isoFormat__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _isoParse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isoParse */ "../../../node_modules/d3-time-format/src/isoParse.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isoParse", function() { return _isoParse__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-time-format/src/isoFormat.js": +/*!***************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time-format/src/isoFormat.js ***! + \***************************************************************************************************************/ +/*! exports provided: isoSpecifier, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isoSpecifier", function() { return isoSpecifier; }); +/* harmony import */ var _defaultLocale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale */ "../../../node_modules/d3-time-format/src/defaultLocale.js"); + + +var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; + +function formatIsoNative(date) { + return date.toISOString(); +} + +var formatIso = Date.prototype.toISOString + ? formatIsoNative + : Object(_defaultLocale__WEBPACK_IMPORTED_MODULE_0__["utcFormat"])(isoSpecifier); + +/* harmony default export */ __webpack_exports__["default"] = (formatIso); + + +/***/ }), + +/***/ "../../../node_modules/d3-time-format/src/isoParse.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time-format/src/isoParse.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _isoFormat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isoFormat */ "../../../node_modules/d3-time-format/src/isoFormat.js"); +/* harmony import */ var _defaultLocale__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultLocale */ "../../../node_modules/d3-time-format/src/defaultLocale.js"); + + + +function parseIsoNative(string) { + var date = new Date(string); + return isNaN(date) ? null : date; +} + +var parseIso = +new Date("2000-01-01T00:00:00.000Z") + ? parseIsoNative + : Object(_defaultLocale__WEBPACK_IMPORTED_MODULE_1__["utcParse"])(_isoFormat__WEBPACK_IMPORTED_MODULE_0__["isoSpecifier"]); + +/* harmony default export */ __webpack_exports__["default"] = (parseIso); + + +/***/ }), + +/***/ "../../../node_modules/d3-time-format/src/locale.js": +/*!************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time-format/src/locale.js ***! + \************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return formatLocale; }); +/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-time */ "../../../node_modules/d3-time/src/index.js"); + + +function localDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); + date.setFullYear(d.y); + return date; + } + return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); +} + +function utcDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); + date.setUTCFullYear(d.y); + return date; + } + return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); +} + +function newYear(y) { + return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; +} + +function formatLocale(locale) { + var locale_dateTime = locale.dateTime, + locale_date = locale.date, + locale_time = locale.time, + locale_periods = locale.periods, + locale_weekdays = locale.days, + locale_shortWeekdays = locale.shortDays, + locale_months = locale.months, + locale_shortMonths = locale.shortMonths; + + var periodRe = formatRe(locale_periods), + periodLookup = formatLookup(locale_periods), + weekdayRe = formatRe(locale_weekdays), + weekdayLookup = formatLookup(locale_weekdays), + shortWeekdayRe = formatRe(locale_shortWeekdays), + shortWeekdayLookup = formatLookup(locale_shortWeekdays), + monthRe = formatRe(locale_months), + monthLookup = formatLookup(locale_months), + shortMonthRe = formatRe(locale_shortMonths), + shortMonthLookup = formatLookup(locale_shortMonths); + + var formats = { + "a": formatShortWeekday, + "A": formatWeekday, + "b": formatShortMonth, + "B": formatMonth, + "c": null, + "d": formatDayOfMonth, + "e": formatDayOfMonth, + "f": formatMicroseconds, + "H": formatHour24, + "I": formatHour12, + "j": formatDayOfYear, + "L": formatMilliseconds, + "m": formatMonthNumber, + "M": formatMinutes, + "p": formatPeriod, + "Q": formatUnixTimestamp, + "s": formatUnixTimestampSeconds, + "S": formatSeconds, + "u": formatWeekdayNumberMonday, + "U": formatWeekNumberSunday, + "V": formatWeekNumberISO, + "w": formatWeekdayNumberSunday, + "W": formatWeekNumberMonday, + "x": null, + "X": null, + "y": formatYear, + "Y": formatFullYear, + "Z": formatZone, + "%": formatLiteralPercent + }; + + var utcFormats = { + "a": formatUTCShortWeekday, + "A": formatUTCWeekday, + "b": formatUTCShortMonth, + "B": formatUTCMonth, + "c": null, + "d": formatUTCDayOfMonth, + "e": formatUTCDayOfMonth, + "f": formatUTCMicroseconds, + "H": formatUTCHour24, + "I": formatUTCHour12, + "j": formatUTCDayOfYear, + "L": formatUTCMilliseconds, + "m": formatUTCMonthNumber, + "M": formatUTCMinutes, + "p": formatUTCPeriod, + "Q": formatUnixTimestamp, + "s": formatUnixTimestampSeconds, + "S": formatUTCSeconds, + "u": formatUTCWeekdayNumberMonday, + "U": formatUTCWeekNumberSunday, + "V": formatUTCWeekNumberISO, + "w": formatUTCWeekdayNumberSunday, + "W": formatUTCWeekNumberMonday, + "x": null, + "X": null, + "y": formatUTCYear, + "Y": formatUTCFullYear, + "Z": formatUTCZone, + "%": formatLiteralPercent + }; + + var parses = { + "a": parseShortWeekday, + "A": parseWeekday, + "b": parseShortMonth, + "B": parseMonth, + "c": parseLocaleDateTime, + "d": parseDayOfMonth, + "e": parseDayOfMonth, + "f": parseMicroseconds, + "H": parseHour24, + "I": parseHour24, + "j": parseDayOfYear, + "L": parseMilliseconds, + "m": parseMonthNumber, + "M": parseMinutes, + "p": parsePeriod, + "Q": parseUnixTimestamp, + "s": parseUnixTimestampSeconds, + "S": parseSeconds, + "u": parseWeekdayNumberMonday, + "U": parseWeekNumberSunday, + "V": parseWeekNumberISO, + "w": parseWeekdayNumberSunday, + "W": parseWeekNumberMonday, + "x": parseLocaleDate, + "X": parseLocaleTime, + "y": parseYear, + "Y": parseFullYear, + "Z": parseZone, + "%": parseLiteralPercent + }; + + // These recursive directive definitions must be deferred. + formats.x = newFormat(locale_date, formats); + formats.X = newFormat(locale_time, formats); + formats.c = newFormat(locale_dateTime, formats); + utcFormats.x = newFormat(locale_date, utcFormats); + utcFormats.X = newFormat(locale_time, utcFormats); + utcFormats.c = newFormat(locale_dateTime, utcFormats); + + function newFormat(specifier, formats) { + return function(date) { + var string = [], + i = -1, + j = 0, + n = specifier.length, + c, + pad, + format; + + if (!(date instanceof Date)) date = new Date(+date); + + while (++i < n) { + if (specifier.charCodeAt(i) === 37) { + string.push(specifier.slice(j, i)); + if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); + else pad = c === "e" ? " " : "0"; + if (format = formats[c]) c = format(date, pad); + string.push(c); + j = i + 1; + } + } + + string.push(specifier.slice(j, i)); + return string.join(""); + }; + } + + function newParse(specifier, newDate) { + return function(string) { + var d = newYear(1900), + i = parseSpecifier(d, specifier, string += "", 0), + week, day; + if (i != string.length) return null; + + // If a UNIX timestamp is specified, return it. + if ("Q" in d) return new Date(d.Q); + + // The am-pm flag is 0 for AM, and 1 for PM. + if ("p" in d) d.H = d.H % 12 + d.p * 12; + + // Convert day-of-week and week-of-year to day-of-year. + if ("V" in d) { + if (d.V < 1 || d.V > 53) return null; + if (!("w" in d)) d.w = 1; + if ("Z" in d) { + week = utcDate(newYear(d.y)), day = week.getUTCDay(); + week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__["utcMonday"].ceil(week) : Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcMonday"])(week); + week = d3_time__WEBPACK_IMPORTED_MODULE_0__["utcDay"].offset(week, (d.V - 1) * 7); + d.y = week.getUTCFullYear(); + d.m = week.getUTCMonth(); + d.d = week.getUTCDate() + (d.w + 6) % 7; + } else { + week = newDate(newYear(d.y)), day = week.getDay(); + week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__["timeMonday"].ceil(week) : Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeMonday"])(week); + week = d3_time__WEBPACK_IMPORTED_MODULE_0__["timeDay"].offset(week, (d.V - 1) * 7); + d.y = week.getFullYear(); + d.m = week.getMonth(); + d.d = week.getDate() + (d.w + 6) % 7; + } + } else if ("W" in d || "U" in d) { + if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; + day = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); + d.m = 0; + d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7; + } + + // If a time zone is specified, all fields are interpreted as UTC and then + // offset according to the specified time zone. + if ("Z" in d) { + d.H += d.Z / 100 | 0; + d.M += d.Z % 100; + return utcDate(d); + } + + // Otherwise, all fields are in local time. + return newDate(d); + }; + } + + function parseSpecifier(d, specifier, string, j) { + var i = 0, + n = specifier.length, + m = string.length, + c, + parse; + + while (i < n) { + if (j >= m) return -1; + c = specifier.charCodeAt(i++); + if (c === 37) { + c = specifier.charAt(i++); + parse = parses[c in pads ? specifier.charAt(i++) : c]; + if (!parse || ((j = parse(d, string, j)) < 0)) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + + return j; + } + + function parsePeriod(d, string, i) { + var n = periodRe.exec(string.slice(i)); + return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortWeekday(d, string, i) { + var n = shortWeekdayRe.exec(string.slice(i)); + return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseWeekday(d, string, i) { + var n = weekdayRe.exec(string.slice(i)); + return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortMonth(d, string, i) { + var n = shortMonthRe.exec(string.slice(i)); + return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseMonth(d, string, i) { + var n = monthRe.exec(string.slice(i)); + return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseLocaleDateTime(d, string, i) { + return parseSpecifier(d, locale_dateTime, string, i); + } + + function parseLocaleDate(d, string, i) { + return parseSpecifier(d, locale_date, string, i); + } + + function parseLocaleTime(d, string, i) { + return parseSpecifier(d, locale_time, string, i); + } + + function formatShortWeekday(d) { + return locale_shortWeekdays[d.getDay()]; + } + + function formatWeekday(d) { + return locale_weekdays[d.getDay()]; + } + + function formatShortMonth(d) { + return locale_shortMonths[d.getMonth()]; + } + + function formatMonth(d) { + return locale_months[d.getMonth()]; + } + + function formatPeriod(d) { + return locale_periods[+(d.getHours() >= 12)]; + } + + function formatUTCShortWeekday(d) { + return locale_shortWeekdays[d.getUTCDay()]; + } + + function formatUTCWeekday(d) { + return locale_weekdays[d.getUTCDay()]; + } + + function formatUTCShortMonth(d) { + return locale_shortMonths[d.getUTCMonth()]; + } + + function formatUTCMonth(d) { + return locale_months[d.getUTCMonth()]; + } + + function formatUTCPeriod(d) { + return locale_periods[+(d.getUTCHours() >= 12)]; + } + + return { + format: function(specifier) { + var f = newFormat(specifier += "", formats); + f.toString = function() { return specifier; }; + return f; + }, + parse: function(specifier) { + var p = newParse(specifier += "", localDate); + p.toString = function() { return specifier; }; + return p; + }, + utcFormat: function(specifier) { + var f = newFormat(specifier += "", utcFormats); + f.toString = function() { return specifier; }; + return f; + }, + utcParse: function(specifier) { + var p = newParse(specifier, utcDate); + p.toString = function() { return specifier; }; + return p; + } + }; +} + +var pads = {"-": "", "_": " ", "0": "0"}, + numberRe = /^\s*\d+/, // note: ignores next directive + percentRe = /^%/, + requoteRe = /[\\^$*+?|[\]().{}]/g; + +function pad(value, fill, width) { + var sign = value < 0 ? "-" : "", + string = (sign ? -value : value) + "", + length = string.length; + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); +} + +function requote(s) { + return s.replace(requoteRe, "\\$&"); +} + +function formatRe(names) { + return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); +} + +function formatLookup(names) { + var map = {}, i = -1, n = names.length; + while (++i < n) map[names[i].toLowerCase()] = i; + return map; +} + +function parseWeekdayNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.w = +n[0], i + n[0].length) : -1; +} + +function parseWeekdayNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.u = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.U = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberISO(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.V = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.W = +n[0], i + n[0].length) : -1; +} + +function parseFullYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 4)); + return n ? (d.y = +n[0], i + n[0].length) : -1; +} + +function parseYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; +} + +function parseZone(d, string, i) { + var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); + return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; +} + +function parseMonthNumber(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.m = n[0] - 1, i + n[0].length) : -1; +} + +function parseDayOfMonth(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.d = +n[0], i + n[0].length) : -1; +} + +function parseDayOfYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; +} + +function parseHour24(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.H = +n[0], i + n[0].length) : -1; +} + +function parseMinutes(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.M = +n[0], i + n[0].length) : -1; +} + +function parseSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.S = +n[0], i + n[0].length) : -1; +} + +function parseMilliseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.L = +n[0], i + n[0].length) : -1; +} + +function parseMicroseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 6)); + return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; +} + +function parseLiteralPercent(d, string, i) { + var n = percentRe.exec(string.slice(i, i + 1)); + return n ? i + n[0].length : -1; +} + +function parseUnixTimestamp(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.Q = +n[0], i + n[0].length) : -1; +} + +function parseUnixTimestampSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1; +} + +function formatDayOfMonth(d, p) { + return pad(d.getDate(), p, 2); +} + +function formatHour24(d, p) { + return pad(d.getHours(), p, 2); +} + +function formatHour12(d, p) { + return pad(d.getHours() % 12 || 12, p, 2); +} + +function formatDayOfYear(d, p) { + return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_0__["timeDay"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d), d), p, 3); +} + +function formatMilliseconds(d, p) { + return pad(d.getMilliseconds(), p, 3); +} + +function formatMicroseconds(d, p) { + return formatMilliseconds(d, p) + "000"; +} + +function formatMonthNumber(d, p) { + return pad(d.getMonth() + 1, p, 2); +} + +function formatMinutes(d, p) { + return pad(d.getMinutes(), p, 2); +} + +function formatSeconds(d, p) { + return pad(d.getSeconds(), p, 2); +} + +function formatWeekdayNumberMonday(d) { + var day = d.getDay(); + return day === 0 ? 7 : day; +} + +function formatWeekNumberSunday(d, p) { + return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeSunday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d), d), p, 2); +} + +function formatWeekNumberISO(d, p) { + var day = d.getDay(); + d = (day >= 4 || day === 0) ? Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeThursday"])(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__["timeThursday"].ceil(d); + return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeThursday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d), d) + (Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d).getDay() === 4), p, 2); +} + +function formatWeekdayNumberSunday(d) { + return d.getDay(); +} + +function formatWeekNumberMonday(d, p) { + return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeMonday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d), d), p, 2); +} + +function formatYear(d, p) { + return pad(d.getFullYear() % 100, p, 2); +} + +function formatFullYear(d, p) { + return pad(d.getFullYear() % 10000, p, 4); +} + +function formatZone(d) { + var z = d.getTimezoneOffset(); + return (z > 0 ? "-" : (z *= -1, "+")) + + pad(z / 60 | 0, "0", 2) + + pad(z % 60, "0", 2); +} + +function formatUTCDayOfMonth(d, p) { + return pad(d.getUTCDate(), p, 2); +} + +function formatUTCHour24(d, p) { + return pad(d.getUTCHours(), p, 2); +} + +function formatUTCHour12(d, p) { + return pad(d.getUTCHours() % 12 || 12, p, 2); +} + +function formatUTCDayOfYear(d, p) { + return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_0__["utcDay"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d), d), p, 3); +} + +function formatUTCMilliseconds(d, p) { + return pad(d.getUTCMilliseconds(), p, 3); +} + +function formatUTCMicroseconds(d, p) { + return formatUTCMilliseconds(d, p) + "000"; +} + +function formatUTCMonthNumber(d, p) { + return pad(d.getUTCMonth() + 1, p, 2); +} + +function formatUTCMinutes(d, p) { + return pad(d.getUTCMinutes(), p, 2); +} + +function formatUTCSeconds(d, p) { + return pad(d.getUTCSeconds(), p, 2); +} + +function formatUTCWeekdayNumberMonday(d) { + var dow = d.getUTCDay(); + return dow === 0 ? 7 : dow; +} + +function formatUTCWeekNumberSunday(d, p) { + return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcSunday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d), d), p, 2); +} + +function formatUTCWeekNumberISO(d, p) { + var day = d.getUTCDay(); + d = (day >= 4 || day === 0) ? Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcThursday"])(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__["utcThursday"].ceil(d); + return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcThursday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d), d) + (Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d).getUTCDay() === 4), p, 2); +} + +function formatUTCWeekdayNumberSunday(d) { + return d.getUTCDay(); +} + +function formatUTCWeekNumberMonday(d, p) { + return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcMonday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d), d), p, 2); +} + +function formatUTCYear(d, p) { + return pad(d.getUTCFullYear() % 100, p, 2); +} + +function formatUTCFullYear(d, p) { + return pad(d.getUTCFullYear() % 10000, p, 4); +} + +function formatUTCZone() { + return "+0000"; +} + +function formatLiteralPercent() { + return "%"; +} + +function formatUnixTimestamp(d) { + return +d; +} + +function formatUnixTimestampSeconds(d) { + return Math.floor(+d / 1000); +} + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/day.js": +/*!**************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/day.js ***! + \**************************************************************************************************/ +/*! exports provided: default, days */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "days", function() { return days; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +var day = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setDate(date.getDate() + step); +}, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationDay"]; +}, function(date) { + return date.getDate() - 1; +}); + +/* harmony default export */ __webpack_exports__["default"] = (day); +var days = day.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/duration.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/duration.js ***! + \*******************************************************************************************************/ +/*! exports provided: durationSecond, durationMinute, durationHour, durationDay, durationWeek */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationSecond", function() { return durationSecond; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationMinute", function() { return durationMinute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationHour", function() { return durationHour; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationDay", function() { return durationDay; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationWeek", function() { return durationWeek; }); +var durationSecond = 1e3; +var durationMinute = 6e4; +var durationHour = 36e5; +var durationDay = 864e5; +var durationWeek = 6048e5; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/hour.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/hour.js ***! + \***************************************************************************************************/ +/*! exports provided: default, hours */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hours", function() { return hours; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +var hour = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration__WEBPACK_IMPORTED_MODULE_1__["durationSecond"] - date.getMinutes() * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]); +}, function(date, step) { + date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]); +}, function(start, end) { + return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]; +}, function(date) { + return date.getHours(); +}); + +/* harmony default export */ __webpack_exports__["default"] = (hour); +var hours = hour.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/index.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/index.js ***! + \****************************************************************************************************/ +/*! exports provided: timeInterval, timeMillisecond, timeMilliseconds, utcMillisecond, utcMilliseconds, timeSecond, timeSeconds, utcSecond, utcSeconds, timeMinute, timeMinutes, timeHour, timeHours, timeDay, timeDays, timeWeek, timeWeeks, timeSunday, timeSundays, timeMonday, timeMondays, timeTuesday, timeTuesdays, timeWednesday, timeWednesdays, timeThursday, timeThursdays, timeFriday, timeFridays, timeSaturday, timeSaturdays, timeMonth, timeMonths, timeYear, timeYears, utcMinute, utcMinutes, utcHour, utcHours, utcDay, utcDays, utcWeek, utcWeeks, utcSunday, utcSundays, utcMonday, utcMondays, utcTuesday, utcTuesdays, utcWednesday, utcWednesdays, utcThursday, utcThursdays, utcFriday, utcFridays, utcSaturday, utcSaturdays, utcMonth, utcMonths, utcYear, utcYears */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return _interval__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _millisecond__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./millisecond */ "../../../node_modules/d3-time/src/millisecond.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMillisecond", function() { return _millisecond__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMilliseconds", function() { return _millisecond__WEBPACK_IMPORTED_MODULE_1__["milliseconds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMillisecond", function() { return _millisecond__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMilliseconds", function() { return _millisecond__WEBPACK_IMPORTED_MODULE_1__["milliseconds"]; }); + +/* harmony import */ var _second__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./second */ "../../../node_modules/d3-time/src/second.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSecond", function() { return _second__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSeconds", function() { return _second__WEBPACK_IMPORTED_MODULE_2__["seconds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSecond", function() { return _second__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSeconds", function() { return _second__WEBPACK_IMPORTED_MODULE_2__["seconds"]; }); + +/* harmony import */ var _minute__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./minute */ "../../../node_modules/d3-time/src/minute.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMinute", function() { return _minute__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMinutes", function() { return _minute__WEBPACK_IMPORTED_MODULE_3__["minutes"]; }); + +/* harmony import */ var _hour__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hour */ "../../../node_modules/d3-time/src/hour.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeHour", function() { return _hour__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeHours", function() { return _hour__WEBPACK_IMPORTED_MODULE_4__["hours"]; }); + +/* harmony import */ var _day__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./day */ "../../../node_modules/d3-time/src/day.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeDay", function() { return _day__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeDays", function() { return _day__WEBPACK_IMPORTED_MODULE_5__["days"]; }); + +/* harmony import */ var _week__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./week */ "../../../node_modules/d3-time/src/week.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWeek", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["sunday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWeeks", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["sundays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSunday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["sunday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSundays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["sundays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["monday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMondays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["mondays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeTuesday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["tuesday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeTuesdays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["tuesdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWednesday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["wednesday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWednesdays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["wednesdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeThursday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["thursday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeThursdays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["thursdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFriday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["friday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFridays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["fridays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSaturday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["saturday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSaturdays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["saturdays"]; }); + +/* harmony import */ var _month__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./month */ "../../../node_modules/d3-time/src/month.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonth", function() { return _month__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonths", function() { return _month__WEBPACK_IMPORTED_MODULE_7__["months"]; }); + +/* harmony import */ var _year__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./year */ "../../../node_modules/d3-time/src/year.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeYear", function() { return _year__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeYears", function() { return _year__WEBPACK_IMPORTED_MODULE_8__["years"]; }); + +/* harmony import */ var _utcMinute__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utcMinute */ "../../../node_modules/d3-time/src/utcMinute.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMinute", function() { return _utcMinute__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMinutes", function() { return _utcMinute__WEBPACK_IMPORTED_MODULE_9__["utcMinutes"]; }); + +/* harmony import */ var _utcHour__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utcHour */ "../../../node_modules/d3-time/src/utcHour.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcHour", function() { return _utcHour__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcHours", function() { return _utcHour__WEBPACK_IMPORTED_MODULE_10__["utcHours"]; }); + +/* harmony import */ var _utcDay__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utcDay */ "../../../node_modules/d3-time/src/utcDay.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcDay", function() { return _utcDay__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcDays", function() { return _utcDay__WEBPACK_IMPORTED_MODULE_11__["utcDays"]; }); + +/* harmony import */ var _utcWeek__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utcWeek */ "../../../node_modules/d3-time/src/utcWeek.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWeek", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSunday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWeeks", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSundays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSunday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSunday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSundays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSundays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcMonday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMondays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcMondays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcTuesday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcTuesday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcTuesdays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcTuesdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWednesday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcWednesday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWednesdays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcWednesdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcThursday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcThursday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcThursdays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcThursdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFriday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcFriday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFridays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcFridays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSaturday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSaturday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSaturdays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSaturdays"]; }); + +/* harmony import */ var _utcMonth__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utcMonth */ "../../../node_modules/d3-time/src/utcMonth.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonth", function() { return _utcMonth__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonths", function() { return _utcMonth__WEBPACK_IMPORTED_MODULE_13__["utcMonths"]; }); + +/* harmony import */ var _utcYear__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utcYear */ "../../../node_modules/d3-time/src/utcYear.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcYear", function() { return _utcYear__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcYears", function() { return _utcYear__WEBPACK_IMPORTED_MODULE_14__["utcYears"]; }); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/interval.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/interval.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return newInterval; }); +var t0 = new Date, + t1 = new Date; + +function newInterval(floori, offseti, count, field) { + + function interval(date) { + return floori(date = new Date(+date)), date; + } + + interval.floor = interval; + + interval.ceil = function(date) { + return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; + }; + + interval.round = function(date) { + var d0 = interval(date), + d1 = interval.ceil(date); + return date - d0 < d1 - date ? d0 : d1; + }; + + interval.offset = function(date, step) { + return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; + }; + + interval.range = function(start, stop, step) { + var range = [], previous; + start = interval.ceil(start); + step = step == null ? 1 : Math.floor(step); + if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date + do range.push(previous = new Date(+start)), offseti(start, step), floori(start); + while (previous < start && start < stop); + return range; + }; + + interval.filter = function(test) { + return newInterval(function(date) { + if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); + }, function(date, step) { + if (date >= date) { + if (step < 0) while (++step <= 0) { + while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty + } else while (--step >= 0) { + while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty + } + } + }); + }; + + if (count) { + interval.count = function(start, end) { + t0.setTime(+start), t1.setTime(+end); + floori(t0), floori(t1); + return Math.floor(count(t0, t1)); + }; + + interval.every = function(step) { + step = Math.floor(step); + return !isFinite(step) || !(step > 0) ? null + : !(step > 1) ? interval + : interval.filter(field + ? function(d) { return field(d) % step === 0; } + : function(d) { return interval.count(0, d) % step === 0; }); + }; + } + + return interval; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/millisecond.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/millisecond.js ***! + \**********************************************************************************************************/ +/*! exports provided: default, milliseconds */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "milliseconds", function() { return milliseconds; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); + + +var millisecond = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function() { + // noop +}, function(date, step) { + date.setTime(+date + step); +}, function(start, end) { + return end - start; +}); + +// An optimized implementation for this simple case. +millisecond.every = function(k) { + k = Math.floor(k); + if (!isFinite(k) || !(k > 0)) return null; + if (!(k > 1)) return millisecond; + return Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setTime(Math.floor(date / k) * k); + }, function(date, step) { + date.setTime(+date + step * k); + }, function(start, end) { + return (end - start) / k; + }); +}; + +/* harmony default export */ __webpack_exports__["default"] = (millisecond); +var milliseconds = millisecond.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/minute.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/minute.js ***! + \*****************************************************************************************************/ +/*! exports provided: default, minutes */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "minutes", function() { return minutes; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +var minute = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration__WEBPACK_IMPORTED_MODULE_1__["durationSecond"]); +}, function(date, step) { + date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]); +}, function(start, end) { + return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]; +}, function(date) { + return date.getMinutes(); +}); + +/* harmony default export */ __webpack_exports__["default"] = (minute); +var minutes = minute.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/month.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/month.js ***! + \****************************************************************************************************/ +/*! exports provided: default, months */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "months", function() { return months; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); + + +var month = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setDate(1); + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setMonth(date.getMonth() + step); +}, function(start, end) { + return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; +}, function(date) { + return date.getMonth(); +}); + +/* harmony default export */ __webpack_exports__["default"] = (month); +var months = month.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/second.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/second.js ***! + \*****************************************************************************************************/ +/*! exports provided: default, seconds */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "seconds", function() { return seconds; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +var second = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setTime(date - date.getMilliseconds()); +}, function(date, step) { + date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationSecond"]); +}, function(start, end) { + return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationSecond"]; +}, function(date) { + return date.getUTCSeconds(); +}); + +/* harmony default export */ __webpack_exports__["default"] = (second); +var seconds = second.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/utcDay.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/utcDay.js ***! + \*****************************************************************************************************/ +/*! exports provided: default, utcDays */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcDays", function() { return utcDays; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +var utcDay = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCDate(date.getUTCDate() + step); +}, function(start, end) { + return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationDay"]; +}, function(date) { + return date.getUTCDate() - 1; +}); + +/* harmony default export */ __webpack_exports__["default"] = (utcDay); +var utcDays = utcDay.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/utcHour.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/utcHour.js ***! + \******************************************************************************************************/ +/*! exports provided: default, utcHours */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcHours", function() { return utcHours; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +var utcHour = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setUTCMinutes(0, 0, 0); +}, function(date, step) { + date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]); +}, function(start, end) { + return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]; +}, function(date) { + return date.getUTCHours(); +}); + +/* harmony default export */ __webpack_exports__["default"] = (utcHour); +var utcHours = utcHour.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/utcMinute.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/utcMinute.js ***! + \********************************************************************************************************/ +/*! exports provided: default, utcMinutes */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcMinutes", function() { return utcMinutes; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +var utcMinute = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setUTCSeconds(0, 0); +}, function(date, step) { + date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]); +}, function(start, end) { + return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]; +}, function(date) { + return date.getUTCMinutes(); +}); + +/* harmony default export */ __webpack_exports__["default"] = (utcMinute); +var utcMinutes = utcMinute.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/utcMonth.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/utcMonth.js ***! + \*******************************************************************************************************/ +/*! exports provided: default, utcMonths */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcMonths", function() { return utcMonths; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); + + +var utcMonth = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setUTCDate(1); + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCMonth(date.getUTCMonth() + step); +}, function(start, end) { + return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; +}, function(date) { + return date.getUTCMonth(); +}); + +/* harmony default export */ __webpack_exports__["default"] = (utcMonth); +var utcMonths = utcMonth.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/utcWeek.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/utcWeek.js ***! + \******************************************************************************************************/ +/*! exports provided: utcSunday, utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSundays, utcMondays, utcTuesdays, utcWednesdays, utcThursdays, utcFridays, utcSaturdays */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcSunday", function() { return utcSunday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcMonday", function() { return utcMonday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcTuesday", function() { return utcTuesday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcWednesday", function() { return utcWednesday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcThursday", function() { return utcThursday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcFriday", function() { return utcFriday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcSaturday", function() { return utcSaturday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcSundays", function() { return utcSundays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcMondays", function() { return utcMondays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcTuesdays", function() { return utcTuesdays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcWednesdays", function() { return utcWednesdays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcThursdays", function() { return utcThursdays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcFridays", function() { return utcFridays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcSaturdays", function() { return utcSaturdays; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +function utcWeekday(i) { + return Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCDate(date.getUTCDate() + step * 7); + }, function(start, end) { + return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationWeek"]; + }); +} + +var utcSunday = utcWeekday(0); +var utcMonday = utcWeekday(1); +var utcTuesday = utcWeekday(2); +var utcWednesday = utcWeekday(3); +var utcThursday = utcWeekday(4); +var utcFriday = utcWeekday(5); +var utcSaturday = utcWeekday(6); + +var utcSundays = utcSunday.range; +var utcMondays = utcMonday.range; +var utcTuesdays = utcTuesday.range; +var utcWednesdays = utcWednesday.range; +var utcThursdays = utcThursday.range; +var utcFridays = utcFriday.range; +var utcSaturdays = utcSaturday.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/utcYear.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/utcYear.js ***! + \******************************************************************************************************/ +/*! exports provided: default, utcYears */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcYears", function() { return utcYears; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); + + +var utcYear = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step); +}, function(start, end) { + return end.getUTCFullYear() - start.getUTCFullYear(); +}, function(date) { + return date.getUTCFullYear(); +}); + +// An optimized implementation for this simple case. +utcYear.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step * k); + }); +}; + +/* harmony default export */ __webpack_exports__["default"] = (utcYear); +var utcYears = utcYear.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/week.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/week.js ***! + \***************************************************************************************************/ +/*! exports provided: sunday, monday, tuesday, wednesday, thursday, friday, saturday, sundays, mondays, tuesdays, wednesdays, thursdays, fridays, saturdays */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sunday", function() { return sunday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monday", function() { return monday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tuesday", function() { return tuesday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wednesday", function() { return wednesday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thursday", function() { return thursday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "friday", function() { return friday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saturday", function() { return saturday; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sundays", function() { return sundays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mondays", function() { return mondays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tuesdays", function() { return tuesdays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wednesdays", function() { return wednesdays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thursdays", function() { return thursdays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fridays", function() { return fridays; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saturdays", function() { return saturdays; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-time/src/duration.js"); + + + +function weekday(i) { + return Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setDate(date.getDate() + step * 7); + }, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationWeek"]; + }); +} + +var sunday = weekday(0); +var monday = weekday(1); +var tuesday = weekday(2); +var wednesday = weekday(3); +var thursday = weekday(4); +var friday = weekday(5); +var saturday = weekday(6); + +var sundays = sunday.range; +var mondays = monday.range; +var tuesdays = tuesday.range; +var wednesdays = wednesday.range; +var thursdays = thursday.range; +var fridays = friday.range; +var saturdays = saturday.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-time/src/year.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-time/src/year.js ***! + \***************************************************************************************************/ +/*! exports provided: default, years */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "years", function() { return years; }); +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-time/src/interval.js"); + + +var year = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setFullYear(date.getFullYear() + step); +}, function(start, end) { + return end.getFullYear() - start.getFullYear(); +}, function(date) { + return date.getFullYear(); +}); + +// An optimized implementation for this simple case. +year.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { + date.setFullYear(Math.floor(date.getFullYear() / k) * k); + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setFullYear(date.getFullYear() + step * k); + }); +}; + +/* harmony default export */ __webpack_exports__["default"] = (year); +var years = year.range; + + +/***/ }), + +/***/ "../../../node_modules/d3-timer/src/index.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-timer/src/index.js ***! + \*****************************************************************************************************/ +/*! exports provided: now, timer, timerFlush, timeout, interval */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _timer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer */ "../../../node_modules/d3-timer/src/timer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "now", function() { return _timer__WEBPACK_IMPORTED_MODULE_0__["now"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return _timer__WEBPACK_IMPORTED_MODULE_0__["timer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timerFlush", function() { return _timer__WEBPACK_IMPORTED_MODULE_0__["timerFlush"]; }); + +/* harmony import */ var _timeout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timeout */ "../../../node_modules/d3-timer/src/timeout.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return _timeout__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interval */ "../../../node_modules/d3-timer/src/interval.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return _interval__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-timer/src/interval.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-timer/src/interval.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _timer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer */ "../../../node_modules/d3-timer/src/timer.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(callback, delay, time) { + var t = new _timer__WEBPACK_IMPORTED_MODULE_0__["Timer"], total = delay; + if (delay == null) return t.restart(callback, delay, time), t; + delay = +delay, time = time == null ? Object(_timer__WEBPACK_IMPORTED_MODULE_0__["now"])() : +time; + t.restart(function tick(elapsed) { + elapsed += total; + t.restart(tick, total += delay, time); + callback(elapsed); + }, delay, time); + return t; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-timer/src/timeout.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-timer/src/timeout.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _timer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer */ "../../../node_modules/d3-timer/src/timer.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(callback, delay, time) { + var t = new _timer__WEBPACK_IMPORTED_MODULE_0__["Timer"]; + delay = delay == null ? 0 : +delay; + t.restart(function(elapsed) { + t.stop(); + callback(elapsed + delay); + }, delay, time); + return t; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-timer/src/timer.js": +/*!*****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-timer/src/timer.js ***! + \*****************************************************************************************************/ +/*! exports provided: now, Timer, timer, timerFlush */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "now", function() { return now; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Timer", function() { return Timer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return timer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timerFlush", function() { return timerFlush; }); +var frame = 0, // is an animation frame pending? + timeout = 0, // is a timeout pending? + interval = 0, // are any timers active? + pokeDelay = 1000, // how frequently we check for clock skew + taskHead, + taskTail, + clockLast = 0, + clockNow = 0, + clockSkew = 0, + clock = typeof performance === "object" && performance.now ? performance : Date, + setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; + +function now() { + return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); +} + +function clearNow() { + clockNow = 0; +} + +function Timer() { + this._call = + this._time = + this._next = null; +} + +Timer.prototype = timer.prototype = { + constructor: Timer, + restart: function(callback, delay, time) { + if (typeof callback !== "function") throw new TypeError("callback is not a function"); + time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); + if (!this._next && taskTail !== this) { + if (taskTail) taskTail._next = this; + else taskHead = this; + taskTail = this; + } + this._call = callback; + this._time = time; + sleep(); + }, + stop: function() { + if (this._call) { + this._call = null; + this._time = Infinity; + sleep(); + } + } +}; + +function timer(callback, delay, time) { + var t = new Timer; + t.restart(callback, delay, time); + return t; +} + +function timerFlush() { + now(); // Get the current time, if not already set. + ++frame; // Pretend we’ve set an alarm, if we haven’t already. + var t = taskHead, e; + while (t) { + if ((e = clockNow - t._time) >= 0) t._call.call(null, e); + t = t._next; + } + --frame; +} + +function wake() { + clockNow = (clockLast = clock.now()) + clockSkew; + frame = timeout = 0; + try { + timerFlush(); + } finally { + frame = 0; + nap(); + clockNow = 0; + } +} + +function poke() { + var now = clock.now(), delay = now - clockLast; + if (delay > pokeDelay) clockSkew -= delay, clockLast = now; +} + +function nap() { + var t0, t1 = taskHead, t2, time = Infinity; + while (t1) { + if (t1._call) { + if (time > t1._time) time = t1._time; + t0 = t1, t1 = t1._next; + } else { + t2 = t1._next, t1._next = null; + t1 = t0 ? t0._next = t2 : taskHead = t2; + } + } + taskTail = t0; + sleep(time); +} + +function sleep(time) { + if (frame) return; // Soonest alarm already set, or will be. + if (timeout) timeout = clearTimeout(timeout); + var delay = time - clockNow; // Strictly less than if we recomputed clockNow. + if (delay > 24) { + if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); + if (interval) interval = clearInterval(interval); + } else { + if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); + frame = 1, setFrame(wake); + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/active.js": +/*!***********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/active.js ***! + \***********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _transition_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/index */ "../../../node_modules/d3-transition/src/transition/index.js"); +/* harmony import */ var _transition_schedule__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + + +var root = [null]; + +/* harmony default export */ __webpack_exports__["default"] = (function(node, name) { + var schedules = node.__transition, + schedule, + i; + + if (schedules) { + name = name == null ? null : name + ""; + for (i in schedules) { + if ((schedule = schedules[i]).state > _transition_schedule__WEBPACK_IMPORTED_MODULE_1__["SCHEDULED"] && schedule.name === name) { + return new _transition_index__WEBPACK_IMPORTED_MODULE_0__["Transition"]([[node]], root, name, +i); + } + } + } + + return null; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/index.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/index.js ***! + \**********************************************************************************************************/ +/*! exports provided: transition, active, interrupt */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ "../../../node_modules/d3-transition/src/selection/index.js"); +/* harmony import */ var _transition_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/index */ "../../../node_modules/d3-transition/src/transition/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transition", function() { return _transition_index__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _active__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./active */ "../../../node_modules/d3-transition/src/active.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "active", function() { return _active__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interrupt */ "../../../node_modules/d3-transition/src/interrupt.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interrupt", function() { return _interrupt__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + + + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/interrupt.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/interrupt.js ***! + \**************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _transition_schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(node, name) { + var schedules = node.__transition, + schedule, + active, + empty = true, + i; + + if (!schedules) return; + + name = name == null ? null : name + ""; + + for (i in schedules) { + if ((schedule = schedules[i]).name !== name) { empty = false; continue; } + active = schedule.state > _transition_schedule__WEBPACK_IMPORTED_MODULE_0__["STARTING"] && schedule.state < _transition_schedule__WEBPACK_IMPORTED_MODULE_0__["ENDING"]; + schedule.state = _transition_schedule__WEBPACK_IMPORTED_MODULE_0__["ENDED"]; + schedule.timer.stop(); + schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group); + delete schedules[i]; + } + + if (empty) delete node.__transition; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/selection/index.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/selection/index.js ***! + \********************************************************************************************************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./interrupt */ "../../../node_modules/d3-transition/src/selection/interrupt.js"); +/* harmony import */ var _transition__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transition */ "../../../node_modules/d3-transition/src/selection/transition.js"); + + + + +d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"].prototype.interrupt = _interrupt__WEBPACK_IMPORTED_MODULE_1__["default"]; +d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"].prototype.transition = _transition__WEBPACK_IMPORTED_MODULE_2__["default"]; + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/selection/interrupt.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/selection/interrupt.js ***! + \************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../interrupt */ "../../../node_modules/d3-transition/src/interrupt.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(name) { + return this.each(function() { + Object(_interrupt__WEBPACK_IMPORTED_MODULE_0__["default"])(this, name); + }); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/selection/transition.js": +/*!*************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/selection/transition.js ***! + \*************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _transition_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transition/index */ "../../../node_modules/d3-transition/src/transition/index.js"); +/* harmony import */ var _transition_schedule__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transition/schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); +/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-ease */ "../../../node_modules/d3-ease/src/index.js"); +/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-timer */ "../../../node_modules/d3-timer/src/index.js"); + + + + + +var defaultTiming = { + time: null, // Set on use. + delay: 0, + duration: 250, + ease: d3_ease__WEBPACK_IMPORTED_MODULE_2__["easeCubicInOut"] +}; + +function inherit(node, id) { + var timing; + while (!(timing = node.__transition) || !(timing = timing[id])) { + if (!(node = node.parentNode)) { + return defaultTiming.time = Object(d3_timer__WEBPACK_IMPORTED_MODULE_3__["now"])(), defaultTiming; + } + } + return timing; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name) { + var id, + timing; + + if (name instanceof _transition_index__WEBPACK_IMPORTED_MODULE_0__["Transition"]) { + id = name._id, name = name._name; + } else { + id = Object(_transition_index__WEBPACK_IMPORTED_MODULE_0__["newId"])(), (timing = defaultTiming).time = Object(d3_timer__WEBPACK_IMPORTED_MODULE_3__["now"])(), name = name == null ? null : name + ""; + } + + for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + Object(_transition_schedule__WEBPACK_IMPORTED_MODULE_1__["default"])(node, name, id, i, group, timing || inherit(node, id)); + } + } + } + + return new _transition_index__WEBPACK_IMPORTED_MODULE_0__["Transition"](groups, this._parents, name, id); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/attr.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/attr.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _tween__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tween */ "../../../node_modules/d3-transition/src/transition/tween.js"); +/* harmony import */ var _interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interpolate */ "../../../node_modules/d3-transition/src/transition/interpolate.js"); + + + + + +function attrRemove(name) { + return function() { + this.removeAttribute(name); + }; +} + +function attrRemoveNS(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; +} + +function attrConstant(name, interpolate, value1) { + var string00, + string1 = value1 + "", + interpolate0; + return function() { + var string0 = this.getAttribute(name); + return string0 === string1 ? null + : string0 === string00 ? interpolate0 + : interpolate0 = interpolate(string00 = string0, value1); + }; +} + +function attrConstantNS(fullname, interpolate, value1) { + var string00, + string1 = value1 + "", + interpolate0; + return function() { + var string0 = this.getAttributeNS(fullname.space, fullname.local); + return string0 === string1 ? null + : string0 === string00 ? interpolate0 + : interpolate0 = interpolate(string00 = string0, value1); + }; +} + +function attrFunction(name, interpolate, value) { + var string00, + string10, + interpolate0; + return function() { + var string0, value1 = value(this), string1; + if (value1 == null) return void this.removeAttribute(name); + string0 = this.getAttribute(name); + string1 = value1 + ""; + return string0 === string1 ? null + : string0 === string00 && string1 === string10 ? interpolate0 + : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); + }; +} + +function attrFunctionNS(fullname, interpolate, value) { + var string00, + string10, + interpolate0; + return function() { + var string0, value1 = value(this), string1; + if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); + string0 = this.getAttributeNS(fullname.space, fullname.local); + string1 = value1 + ""; + return string0 === string1 ? null + : string0 === string00 && string1 === string10 ? interpolate0 + : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { + var fullname = Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["namespace"])(name), i = fullname === "transform" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_0__["interpolateTransformSvg"] : _interpolate__WEBPACK_IMPORTED_MODULE_3__["default"]; + return this.attrTween(name, typeof value === "function" + ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, Object(_tween__WEBPACK_IMPORTED_MODULE_2__["tweenValue"])(this, "attr." + name, value)) + : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname) + : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/attrTween.js": +/*!*************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/attrTween.js ***! + \*************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); + + +function attrInterpolate(name, i) { + return function(t) { + this.setAttribute(name, i(t)); + }; +} + +function attrInterpolateNS(fullname, i) { + return function(t) { + this.setAttributeNS(fullname.space, fullname.local, i(t)); + }; +} + +function attrTweenNS(fullname, value) { + var t0, i0; + function tween() { + var i = value.apply(this, arguments); + if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i); + return t0; + } + tween._value = value; + return tween; +} + +function attrTween(name, value) { + var t0, i0; + function tween() { + var i = value.apply(this, arguments); + if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i); + return t0; + } + tween._value = value; + return tween; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { + var key = "attr." + name; + if (arguments.length < 2) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + var fullname = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["namespace"])(name); + return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/delay.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/delay.js ***! + \*********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + +function delayFunction(id, value) { + return function() { + Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["init"])(this, id).delay = +value.apply(this, arguments); + }; +} + +function delayConstant(id, value) { + return value = +value, function() { + Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["init"])(this, id).delay = value; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(value) { + var id = this._id; + + return arguments.length + ? this.each((typeof value === "function" + ? delayFunction + : delayConstant)(id, value)) + : Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).delay; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/duration.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/duration.js ***! + \************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + +function durationFunction(id, value) { + return function() { + Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id).duration = +value.apply(this, arguments); + }; +} + +function durationConstant(id, value) { + return value = +value, function() { + Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id).duration = value; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(value) { + var id = this._id; + + return arguments.length + ? this.each((typeof value === "function" + ? durationFunction + : durationConstant)(id, value)) + : Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).duration; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/ease.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/ease.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + +function easeConstant(id, value) { + if (typeof value !== "function") throw new Error; + return function() { + Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id).ease = value; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(value) { + var id = this._id; + + return arguments.length + ? this.each(easeConstant(id, value)) + : Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).ease; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/end.js": +/*!*******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/end.js ***! + \*******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var on0, on1, that = this, id = that._id, size = that.size(); + return new Promise(function(resolve, reject) { + var cancel = {value: reject}, + end = {value: function() { if (--size === 0) resolve(); }}; + + that.each(function() { + var schedule = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id), + on = schedule.on; + + // If this node shared a dispatch with the previous node, + // just assign the updated shared dispatch and we’re done! + // Otherwise, copy-on-write. + if (on !== on0) { + on1 = (on0 = on).copy(); + on1._.cancel.push(cancel); + on1._.interrupt.push(cancel); + on1._.end.push(end); + } + + schedule.on = on1; + }); + }); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/filter.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/filter.js ***! + \**********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-transition/src/transition/index.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(match) { + if (typeof match !== "function") match = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["matcher"])(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new _index__WEBPACK_IMPORTED_MODULE_1__["Transition"](subgroups, this._parents, this._name, this._id); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/index.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/index.js ***! + \*********************************************************************************************************************/ +/*! exports provided: Transition, default, newId */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transition", function() { return Transition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return transition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "newId", function() { return newId; }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _attr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./attr */ "../../../node_modules/d3-transition/src/transition/attr.js"); +/* harmony import */ var _attrTween__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./attrTween */ "../../../node_modules/d3-transition/src/transition/attrTween.js"); +/* harmony import */ var _delay__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./delay */ "../../../node_modules/d3-transition/src/transition/delay.js"); +/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./duration */ "../../../node_modules/d3-transition/src/transition/duration.js"); +/* harmony import */ var _ease__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ease */ "../../../node_modules/d3-transition/src/transition/ease.js"); +/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./filter */ "../../../node_modules/d3-transition/src/transition/filter.js"); +/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./merge */ "../../../node_modules/d3-transition/src/transition/merge.js"); +/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./on */ "../../../node_modules/d3-transition/src/transition/on.js"); +/* harmony import */ var _remove__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./remove */ "../../../node_modules/d3-transition/src/transition/remove.js"); +/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./select */ "../../../node_modules/d3-transition/src/transition/select.js"); +/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./selectAll */ "../../../node_modules/d3-transition/src/transition/selectAll.js"); +/* harmony import */ var _selection__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./selection */ "../../../node_modules/d3-transition/src/transition/selection.js"); +/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./style */ "../../../node_modules/d3-transition/src/transition/style.js"); +/* harmony import */ var _styleTween__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./styleTween */ "../../../node_modules/d3-transition/src/transition/styleTween.js"); +/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./text */ "../../../node_modules/d3-transition/src/transition/text.js"); +/* harmony import */ var _transition__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./transition */ "../../../node_modules/d3-transition/src/transition/transition.js"); +/* harmony import */ var _tween__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./tween */ "../../../node_modules/d3-transition/src/transition/tween.js"); +/* harmony import */ var _end__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./end */ "../../../node_modules/d3-transition/src/transition/end.js"); + + + + + + + + + + + + + + + + + + + + +var id = 0; + +function Transition(groups, parents, name, id) { + this._groups = groups; + this._parents = parents; + this._name = name; + this._id = id; +} + +function transition(name) { + return Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"])().transition(name); +} + +function newId() { + return ++id; +} + +var selection_prototype = d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"].prototype; + +Transition.prototype = transition.prototype = { + constructor: Transition, + select: _select__WEBPACK_IMPORTED_MODULE_10__["default"], + selectAll: _selectAll__WEBPACK_IMPORTED_MODULE_11__["default"], + filter: _filter__WEBPACK_IMPORTED_MODULE_6__["default"], + merge: _merge__WEBPACK_IMPORTED_MODULE_7__["default"], + selection: _selection__WEBPACK_IMPORTED_MODULE_12__["default"], + transition: _transition__WEBPACK_IMPORTED_MODULE_16__["default"], + call: selection_prototype.call, + nodes: selection_prototype.nodes, + node: selection_prototype.node, + size: selection_prototype.size, + empty: selection_prototype.empty, + each: selection_prototype.each, + on: _on__WEBPACK_IMPORTED_MODULE_8__["default"], + attr: _attr__WEBPACK_IMPORTED_MODULE_1__["default"], + attrTween: _attrTween__WEBPACK_IMPORTED_MODULE_2__["default"], + style: _style__WEBPACK_IMPORTED_MODULE_13__["default"], + styleTween: _styleTween__WEBPACK_IMPORTED_MODULE_14__["default"], + text: _text__WEBPACK_IMPORTED_MODULE_15__["default"], + remove: _remove__WEBPACK_IMPORTED_MODULE_9__["default"], + tween: _tween__WEBPACK_IMPORTED_MODULE_17__["default"], + delay: _delay__WEBPACK_IMPORTED_MODULE_3__["default"], + duration: _duration__WEBPACK_IMPORTED_MODULE_4__["default"], + ease: _ease__WEBPACK_IMPORTED_MODULE_5__["default"], + end: _end__WEBPACK_IMPORTED_MODULE_18__["default"] +}; + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/interpolate.js": +/*!***************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/interpolate.js ***! + \***************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { + var c; + return (typeof b === "number" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateNumber"] + : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_0__["color"] ? d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateRgb"] + : (c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["color"])(b)) ? (b = c, d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateRgb"]) + : d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateString"])(a, b); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/merge.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/merge.js ***! + \*********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-transition/src/transition/index.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function(transition) { + if (transition._id !== this._id) throw new Error; + + for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new _index__WEBPACK_IMPORTED_MODULE_0__["Transition"](merges, this._parents, this._name, this._id); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/on.js": +/*!******************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/on.js ***! + \******************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + +function start(name) { + return (name + "").trim().split(/^|\s+/).every(function(t) { + var i = t.indexOf("."); + if (i >= 0) t = t.slice(0, i); + return !t || t === "start"; + }); +} + +function onFunction(id, name, listener) { + var on0, on1, sit = start(name) ? _schedule__WEBPACK_IMPORTED_MODULE_0__["init"] : _schedule__WEBPACK_IMPORTED_MODULE_0__["set"]; + return function() { + var schedule = sit(this, id), + on = schedule.on; + + // If this node shared a dispatch with the previous node, + // just assign the updated shared dispatch and we’re done! + // Otherwise, copy-on-write. + if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); + + schedule.on = on1; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, listener) { + var id = this._id; + + return arguments.length < 2 + ? Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).on.on(name) + : this.each(onFunction(id, name, listener)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/remove.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/remove.js ***! + \**********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function removeFunction(id) { + return function() { + var parent = this.parentNode; + for (var i in this.__transition) if (+i !== id) return; + if (parent) parent.removeChild(this); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return this.on("end.remove", removeFunction(this._id)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/schedule.js": +/*!************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/schedule.js ***! + \************************************************************************************************************************/ +/*! exports provided: CREATED, SCHEDULED, STARTING, STARTED, RUNNING, ENDING, ENDED, default, init, set, get */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CREATED", function() { return CREATED; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SCHEDULED", function() { return SCHEDULED; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STARTING", function() { return STARTING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STARTED", function() { return STARTED; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RUNNING", function() { return RUNNING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ENDING", function() { return ENDING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ENDED", function() { return ENDED; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "init", function() { return init; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "set", function() { return set; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return get; }); +/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "../../../node_modules/d3-dispatch/src/index.js"); +/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-timer */ "../../../node_modules/d3-timer/src/index.js"); + + + +var emptyOn = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])("start", "end", "cancel", "interrupt"); +var emptyTween = []; + +var CREATED = 0; +var SCHEDULED = 1; +var STARTING = 2; +var STARTED = 3; +var RUNNING = 4; +var ENDING = 5; +var ENDED = 6; + +/* harmony default export */ __webpack_exports__["default"] = (function(node, name, id, index, group, timing) { + var schedules = node.__transition; + if (!schedules) node.__transition = {}; + else if (id in schedules) return; + create(node, id, { + name: name, + index: index, // For context during callback. + group: group, // For context during callback. + on: emptyOn, + tween: emptyTween, + time: timing.time, + delay: timing.delay, + duration: timing.duration, + ease: timing.ease, + timer: null, + state: CREATED + }); +}); + +function init(node, id) { + var schedule = get(node, id); + if (schedule.state > CREATED) throw new Error("too late; already scheduled"); + return schedule; +} + +function set(node, id) { + var schedule = get(node, id); + if (schedule.state > STARTED) throw new Error("too late; already running"); + return schedule; +} + +function get(node, id) { + var schedule = node.__transition; + if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found"); + return schedule; +} + +function create(node, id, self) { + var schedules = node.__transition, + tween; + + // Initialize the self timer when the transition is created. + // Note the actual delay is not known until the first callback! + schedules[id] = self; + self.timer = Object(d3_timer__WEBPACK_IMPORTED_MODULE_1__["timer"])(schedule, 0, self.time); + + function schedule(elapsed) { + self.state = SCHEDULED; + self.timer.restart(start, self.delay, self.time); + + // If the elapsed delay is less than our first sleep, start immediately. + if (self.delay <= elapsed) start(elapsed - self.delay); + } + + function start(elapsed) { + var i, j, n, o; + + // If the state is not SCHEDULED, then we previously errored on start. + if (self.state !== SCHEDULED) return stop(); + + for (i in schedules) { + o = schedules[i]; + if (o.name !== self.name) continue; + + // While this element already has a starting transition during this frame, + // defer starting an interrupting transition until that transition has a + // chance to tick (and possibly end); see d3/d3-transition#54! + if (o.state === STARTED) return Object(d3_timer__WEBPACK_IMPORTED_MODULE_1__["timeout"])(start); + + // Interrupt the active transition, if any. + if (o.state === RUNNING) { + o.state = ENDED; + o.timer.stop(); + o.on.call("interrupt", node, node.__data__, o.index, o.group); + delete schedules[i]; + } + + // Cancel any pre-empted transitions. + else if (+i < id) { + o.state = ENDED; + o.timer.stop(); + o.on.call("cancel", node, node.__data__, o.index, o.group); + delete schedules[i]; + } + } + + // Defer the first tick to end of the current frame; see d3/d3#1576. + // Note the transition may be canceled after start and before the first tick! + // Note this must be scheduled before the start event; see d3/d3-transition#16! + // Assuming this is successful, subsequent callbacks go straight to tick. + Object(d3_timer__WEBPACK_IMPORTED_MODULE_1__["timeout"])(function() { + if (self.state === STARTED) { + self.state = RUNNING; + self.timer.restart(tick, self.delay, self.time); + tick(elapsed); + } + }); + + // Dispatch the start event. + // Note this must be done before the tween are initialized. + self.state = STARTING; + self.on.call("start", node, node.__data__, self.index, self.group); + if (self.state !== STARTING) return; // interrupted + self.state = STARTED; + + // Initialize the tween, deleting null tween. + tween = new Array(n = self.tween.length); + for (i = 0, j = -1; i < n; ++i) { + if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { + tween[++j] = o; + } + } + tween.length = j + 1; + } + + function tick(elapsed) { + var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), + i = -1, + n = tween.length; + + while (++i < n) { + tween[i].call(node, t); + } + + // Dispatch the end event. + if (self.state === ENDING) { + self.on.call("end", node, node.__data__, self.index, self.group); + stop(); + } + } + + function stop() { + self.state = ENDED; + self.timer.stop(); + delete schedules[id]; + for (var i in schedules) return; // eslint-disable-line no-unused-vars + delete node.__transition; + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/select.js": +/*!**********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/select.js ***! + \**********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-transition/src/transition/index.js"); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + + + +/* harmony default export */ __webpack_exports__["default"] = (function(select) { + var name = this._name, + id = this._id; + + if (typeof select !== "function") select = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["selector"])(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["default"])(subgroup[i], name, id, i, subgroup, Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["get"])(node, id)); + } + } + } + + return new _index__WEBPACK_IMPORTED_MODULE_1__["Transition"](subgroups, this._parents, name, id); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/selectAll.js": +/*!*************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/selectAll.js ***! + \*************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-transition/src/transition/index.js"); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + + + +/* harmony default export */ __webpack_exports__["default"] = (function(select) { + var name = this._name, + id = this._id; + + if (typeof select !== "function") select = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["selectorAll"])(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + for (var children = select.call(node, node.__data__, i, group), child, inherit = Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["get"])(node, id), k = 0, l = children.length; k < l; ++k) { + if (child = children[k]) { + Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["default"])(child, name, id, k, children, inherit); + } + } + subgroups.push(children); + parents.push(node); + } + } + } + + return new _index__WEBPACK_IMPORTED_MODULE_1__["Transition"](subgroups, parents, name, id); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/selection.js": +/*!*************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/selection.js ***! + \*************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); + + +var Selection = d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"].prototype.constructor; + +/* harmony default export */ __webpack_exports__["default"] = (function() { + return new Selection(this._groups, this._parents); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/style.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/style.js ***! + \*********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); +/* harmony import */ var _tween__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tween */ "../../../node_modules/d3-transition/src/transition/tween.js"); +/* harmony import */ var _interpolate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./interpolate */ "../../../node_modules/d3-transition/src/transition/interpolate.js"); + + + + + + +function styleNull(name, interpolate) { + var string00, + string10, + interpolate0; + return function() { + var string0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name), + string1 = (this.style.removeProperty(name), Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name)); + return string0 === string1 ? null + : string0 === string00 && string1 === string10 ? interpolate0 + : interpolate0 = interpolate(string00 = string0, string10 = string1); + }; +} + +function styleRemove(name) { + return function() { + this.style.removeProperty(name); + }; +} + +function styleConstant(name, interpolate, value1) { + var string00, + string1 = value1 + "", + interpolate0; + return function() { + var string0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name); + return string0 === string1 ? null + : string0 === string00 ? interpolate0 + : interpolate0 = interpolate(string00 = string0, value1); + }; +} + +function styleFunction(name, interpolate, value) { + var string00, + string10, + interpolate0; + return function() { + var string0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name), + value1 = value(this), + string1 = value1 + ""; + if (value1 == null) string1 = value1 = (this.style.removeProperty(name), Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name)); + return string0 === string1 ? null + : string0 === string00 && string1 === string10 ? interpolate0 + : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); + }; +} + +function styleMaybeRemove(id, name) { + var on0, on1, listener0, key = "style." + name, event = "end." + key, remove; + return function() { + var schedule = Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["set"])(this, id), + on = schedule.on, + listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined; + + // If this node shared a dispatch with the previous node, + // just assign the updated shared dispatch and we’re done! + // Otherwise, copy-on-write. + if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener); + + schedule.on = on1; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value, priority) { + var i = (name += "") === "transform" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_0__["interpolateTransformCss"] : _interpolate__WEBPACK_IMPORTED_MODULE_4__["default"]; + return value == null ? this + .styleTween(name, styleNull(name, i)) + .on("end.style." + name, styleRemove(name)) + : typeof value === "function" ? this + .styleTween(name, styleFunction(name, i, Object(_tween__WEBPACK_IMPORTED_MODULE_3__["tweenValue"])(this, "style." + name, value))) + .each(styleMaybeRemove(this._id, name)) + : this + .styleTween(name, styleConstant(name, i, value), priority) + .on("end.style." + name, null); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/styleTween.js": +/*!**************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/styleTween.js ***! + \**************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function styleInterpolate(name, i, priority) { + return function(t) { + this.style.setProperty(name, i(t), priority); + }; +} + +function styleTween(name, value, priority) { + var t, i0; + function tween() { + var i = value.apply(this, arguments); + if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority); + return t; + } + tween._value = value; + return tween; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value, priority) { + var key = "style." + (name += ""); + if (arguments.length < 2) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/text.js": +/*!********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/text.js ***! + \********************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _tween__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tween */ "../../../node_modules/d3-transition/src/transition/tween.js"); + + +function textConstant(value) { + return function() { + this.textContent = value; + }; +} + +function textFunction(value) { + return function() { + var value1 = value(this); + this.textContent = value1 == null ? "" : value1; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(value) { + return this.tween("text", typeof value === "function" + ? textFunction(Object(_tween__WEBPACK_IMPORTED_MODULE_0__["tweenValue"])(this, "text", value)) + : textConstant(value == null ? "" : value + "")); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/transition.js": +/*!**************************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/transition.js ***! + \**************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "../../../node_modules/d3-transition/src/transition/index.js"); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var name = this._name, + id0 = this._id, + id1 = Object(_index__WEBPACK_IMPORTED_MODULE_0__["newId"])(); + + for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + var inherit = Object(_schedule__WEBPACK_IMPORTED_MODULE_1__["get"])(node, id0); + Object(_schedule__WEBPACK_IMPORTED_MODULE_1__["default"])(node, name, id1, i, group, { + time: inherit.time + inherit.delay + inherit.duration, + delay: 0, + duration: inherit.duration, + ease: inherit.ease + }); + } + } + } + + return new _index__WEBPACK_IMPORTED_MODULE_0__["Transition"](groups, this._parents, name, id1); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-transition/src/transition/tween.js": +/*!*********************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-transition/src/transition/tween.js ***! + \*********************************************************************************************************************/ +/*! exports provided: default, tweenValue */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tweenValue", function() { return tweenValue; }); +/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "../../../node_modules/d3-transition/src/transition/schedule.js"); + + +function tweenRemove(id, name) { + var tween0, tween1; + return function() { + var schedule = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id), + tween = schedule.tween; + + // If this node shared tween with the previous node, + // just assign the updated shared tween and we’re done! + // Otherwise, copy-on-write. + if (tween !== tween0) { + tween1 = tween0 = tween; + for (var i = 0, n = tween1.length; i < n; ++i) { + if (tween1[i].name === name) { + tween1 = tween1.slice(); + tween1.splice(i, 1); + break; + } + } + } + + schedule.tween = tween1; + }; +} + +function tweenFunction(id, name, value) { + var tween0, tween1; + if (typeof value !== "function") throw new Error; + return function() { + var schedule = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id), + tween = schedule.tween; + + // If this node shared tween with the previous node, + // just assign the updated shared tween and we’re done! + // Otherwise, copy-on-write. + if (tween !== tween0) { + tween1 = (tween0 = tween).slice(); + for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { + if (tween1[i].name === name) { + tween1[i] = t; + break; + } + } + if (i === n) tween1.push(t); + } + + schedule.tween = tween1; + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { + var id = this._id; + + name += ""; + + if (arguments.length < 2) { + var tween = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).tween; + for (var i = 0, n = tween.length, t; i < n; ++i) { + if ((t = tween[i]).name === name) { + return t.value; + } + } + return null; + } + + return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); +}); + +function tweenValue(transition, name, value) { + var id = transition._id; + + transition.each(function() { + var schedule = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id); + (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); + }); + + return function(node) { + return Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(node, id).value[name]; + }; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/Beach.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/Beach.js ***! + \*******************************************************************************************************/ +/*! exports provided: removeBeach, addBeach */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeBeach", function() { return removeBeach; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addBeach", function() { return addBeach; }); +/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RedBlackTree */ "../../../node_modules/d3-voronoi/src/RedBlackTree.js"); +/* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Cell */ "../../../node_modules/d3-voronoi/src/Cell.js"); +/* harmony import */ var _Circle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Circle */ "../../../node_modules/d3-voronoi/src/Circle.js"); +/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Edge */ "../../../node_modules/d3-voronoi/src/Edge.js"); +/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Diagram */ "../../../node_modules/d3-voronoi/src/Diagram.js"); + + + + + + +var beachPool = []; + +function Beach() { + Object(_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__["RedBlackNode"])(this); + this.edge = + this.site = + this.circle = null; +} + +function createBeach(site) { + var beach = beachPool.pop() || new Beach; + beach.site = site; + return beach; +} + +function detachBeach(beach) { + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(beach); + _Diagram__WEBPACK_IMPORTED_MODULE_4__["beaches"].remove(beach); + beachPool.push(beach); + Object(_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__["RedBlackNode"])(beach); +} + +function removeBeach(beach) { + var circle = beach.circle, + x = circle.x, + y = circle.cy, + vertex = [x, y], + previous = beach.P, + next = beach.N, + disappearing = [beach]; + + detachBeach(beach); + + var lArc = previous; + while (lArc.circle + && Math.abs(x - lArc.circle.x) < _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"] + && Math.abs(y - lArc.circle.cy) < _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { + previous = lArc.P; + disappearing.unshift(lArc); + detachBeach(lArc); + lArc = previous; + } + + disappearing.unshift(lArc); + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(lArc); + + var rArc = next; + while (rArc.circle + && Math.abs(x - rArc.circle.x) < _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"] + && Math.abs(y - rArc.circle.cy) < _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { + next = rArc.N; + disappearing.push(rArc); + detachBeach(rArc); + rArc = next; + } + + disappearing.push(rArc); + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(rArc); + + var nArcs = disappearing.length, + iArc; + for (iArc = 1; iArc < nArcs; ++iArc) { + rArc = disappearing[iArc]; + lArc = disappearing[iArc - 1]; + Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["setEdgeEnd"])(rArc.edge, lArc.site, rArc.site, vertex); + } + + lArc = disappearing[0]; + rArc = disappearing[nArcs - 1]; + rArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(lArc.site, rArc.site, null, vertex); + + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(lArc); + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(rArc); +} + +function addBeach(site) { + var x = site[0], + directrix = site[1], + lArc, + rArc, + dxl, + dxr, + node = _Diagram__WEBPACK_IMPORTED_MODULE_4__["beaches"]._; + + while (node) { + dxl = leftBreakPoint(node, directrix) - x; + if (dxl > _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) node = node.L; else { + dxr = x - rightBreakPoint(node, directrix); + if (dxr > _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { + if (!node.R) { + lArc = node; + break; + } + node = node.R; + } else { + if (dxl > -_Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { + lArc = node.P; + rArc = node; + } else if (dxr > -_Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { + lArc = node; + rArc = node.N; + } else { + lArc = rArc = node; + } + break; + } + } + } + + Object(_Cell__WEBPACK_IMPORTED_MODULE_1__["createCell"])(site); + var newArc = createBeach(site); + _Diagram__WEBPACK_IMPORTED_MODULE_4__["beaches"].insert(lArc, newArc); + + if (!lArc && !rArc) return; + + if (lArc === rArc) { + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(lArc); + rArc = createBeach(lArc.site); + _Diagram__WEBPACK_IMPORTED_MODULE_4__["beaches"].insert(newArc, rArc); + newArc.edge = rArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(lArc.site, newArc.site); + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(lArc); + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(rArc); + return; + } + + if (!rArc) { // && lArc + newArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(lArc.site, newArc.site); + return; + } + + // else lArc !== rArc + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(lArc); + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(rArc); + + var lSite = lArc.site, + ax = lSite[0], + ay = lSite[1], + bx = site[0] - ax, + by = site[1] - ay, + rSite = rArc.site, + cx = rSite[0] - ax, + cy = rSite[1] - ay, + d = 2 * (bx * cy - by * cx), + hb = bx * bx + by * by, + hc = cx * cx + cy * cy, + vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; + + Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["setEdgeEnd"])(rArc.edge, lSite, rSite, vertex); + newArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(lSite, site, null, vertex); + rArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(site, rSite, null, vertex); + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(lArc); + Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(rArc); +} + +function leftBreakPoint(arc, directrix) { + var site = arc.site, + rfocx = site[0], + rfocy = site[1], + pby2 = rfocy - directrix; + + if (!pby2) return rfocx; + + var lArc = arc.P; + if (!lArc) return -Infinity; + + site = lArc.site; + var lfocx = site[0], + lfocy = site[1], + plby2 = lfocy - directrix; + + if (!plby2) return lfocx; + + var hl = lfocx - rfocx, + aby2 = 1 / pby2 - 1 / plby2, + b = hl / plby2; + + if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; + + return (rfocx + lfocx) / 2; +} + +function rightBreakPoint(arc, directrix) { + var rArc = arc.N; + if (rArc) return leftBreakPoint(rArc, directrix); + var site = arc.site; + return site[1] === directrix ? site[0] : Infinity; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/Cell.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/Cell.js ***! + \******************************************************************************************************/ +/*! exports provided: createCell, cellHalfedgeStart, cellHalfedgeEnd, sortCellHalfedges, clipCells */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCell", function() { return createCell; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cellHalfedgeStart", function() { return cellHalfedgeStart; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cellHalfedgeEnd", function() { return cellHalfedgeEnd; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sortCellHalfedges", function() { return sortCellHalfedges; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clipCells", function() { return clipCells; }); +/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Edge */ "../../../node_modules/d3-voronoi/src/Edge.js"); +/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Diagram */ "../../../node_modules/d3-voronoi/src/Diagram.js"); + + + +function createCell(site) { + return _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][site.index] = { + site: site, + halfedges: [] + }; +} + +function cellHalfedgeAngle(cell, edge) { + var site = cell.site, + va = edge.left, + vb = edge.right; + if (site === vb) vb = va, va = site; + if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); + if (site === va) va = edge[1], vb = edge[0]; + else va = edge[0], vb = edge[1]; + return Math.atan2(va[0] - vb[0], vb[1] - va[1]); +} + +function cellHalfedgeStart(cell, edge) { + return edge[+(edge.left !== cell.site)]; +} + +function cellHalfedgeEnd(cell, edge) { + return edge[+(edge.left === cell.site)]; +} + +function sortCellHalfedges() { + for (var i = 0, n = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"].length, cell, halfedges, j, m; i < n; ++i) { + if ((cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][i]) && (m = (halfedges = cell.halfedges).length)) { + var index = new Array(m), + array = new Array(m); + for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"][halfedges[j]]); + index.sort(function(i, j) { return array[j] - array[i]; }); + for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; + for (j = 0; j < m; ++j) halfedges[j] = array[j]; + } + } +} + +function clipCells(x0, y0, x1, y1) { + var nCells = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"].length, + iCell, + cell, + site, + iHalfedge, + halfedges, + nHalfedges, + start, + startX, + startY, + end, + endX, + endY, + cover = true; + + for (iCell = 0; iCell < nCells; ++iCell) { + if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][iCell]) { + site = cell.site; + halfedges = cell.halfedges; + iHalfedge = halfedges.length; + + // Remove any dangling clipped edges. + while (iHalfedge--) { + if (!_Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"][halfedges[iHalfedge]]) { + halfedges.splice(iHalfedge, 1); + } + } + + // Insert any border edges as necessary. + iHalfedge = 0, nHalfedges = halfedges.length; + while (iHalfedge < nHalfedges) { + end = cellHalfedgeEnd(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"][halfedges[iHalfedge]]), endX = end[0], endY = end[1]; + start = cellHalfedgeStart(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"][halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; + if (Math.abs(endX - startX) > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] || Math.abs(endY - startY) > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) { + halfedges.splice(iHalfedge, 0, _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site, end, + Math.abs(endX - x0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && y1 - endY > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? [x0, Math.abs(startX - x0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? startY : y1] + : Math.abs(endY - y1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && x1 - endX > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? [Math.abs(startY - y1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? startX : x1, y1] + : Math.abs(endX - x1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && endY - y0 > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? [x1, Math.abs(startX - x1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? startY : y0] + : Math.abs(endY - y0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && endX - x0 > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? [Math.abs(startY - y0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? startX : x0, y0] + : null)) - 1); + ++nHalfedges; + } + } + + if (nHalfedges) cover = false; + } + } + + // If there weren’t any edges, have the closest site cover the extent. + // It doesn’t matter which corner of the extent we measure! + if (cover) { + var dx, dy, d2, dc = Infinity; + + for (iCell = 0, cover = null; iCell < nCells; ++iCell) { + if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][iCell]) { + site = cell.site; + dx = site[0] - x0; + dy = site[1] - y0; + d2 = dx * dx + dy * dy; + if (d2 < dc) dc = d2, cover = cell; + } + } + + if (cover) { + var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; + cover.halfedges.push( + _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site = cover.site, v00, v01)) - 1, + _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site, v01, v11)) - 1, + _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site, v11, v10)) - 1, + _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site, v10, v00)) - 1 + ); + } + } + + // Lastly delete any cells with no edges; these were entirely clipped. + for (iCell = 0; iCell < nCells; ++iCell) { + if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][iCell]) { + if (!cell.halfedges.length) { + delete _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][iCell]; + } + } + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/Circle.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/Circle.js ***! + \********************************************************************************************************/ +/*! exports provided: firstCircle, attachCircle, detachCircle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "firstCircle", function() { return firstCircle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "attachCircle", function() { return attachCircle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detachCircle", function() { return detachCircle; }); +/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RedBlackTree */ "../../../node_modules/d3-voronoi/src/RedBlackTree.js"); +/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Diagram */ "../../../node_modules/d3-voronoi/src/Diagram.js"); + + + +var circlePool = []; + +var firstCircle; + +function Circle() { + Object(_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__["RedBlackNode"])(this); + this.x = + this.y = + this.arc = + this.site = + this.cy = null; +} + +function attachCircle(arc) { + var lArc = arc.P, + rArc = arc.N; + + if (!lArc || !rArc) return; + + var lSite = lArc.site, + cSite = arc.site, + rSite = rArc.site; + + if (lSite === rSite) return; + + var bx = cSite[0], + by = cSite[1], + ax = lSite[0] - bx, + ay = lSite[1] - by, + cx = rSite[0] - bx, + cy = rSite[1] - by; + + var d = 2 * (ax * cy - ay * cx); + if (d >= -_Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon2"]) return; + + var ha = ax * ax + ay * ay, + hc = cx * cx + cy * cy, + x = (cy * ha - ay * hc) / d, + y = (ax * hc - cx * ha) / d; + + var circle = circlePool.pop() || new Circle; + circle.arc = arc; + circle.site = cSite; + circle.x = x + bx; + circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom + + arc.circle = circle; + + var before = null, + node = _Diagram__WEBPACK_IMPORTED_MODULE_1__["circles"]._; + + while (node) { + if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { + if (node.L) node = node.L; + else { before = node.P; break; } + } else { + if (node.R) node = node.R; + else { before = node; break; } + } + } + + _Diagram__WEBPACK_IMPORTED_MODULE_1__["circles"].insert(before, circle); + if (!before) firstCircle = circle; +} + +function detachCircle(arc) { + var circle = arc.circle; + if (circle) { + if (!circle.P) firstCircle = circle.N; + _Diagram__WEBPACK_IMPORTED_MODULE_1__["circles"].remove(circle); + circlePool.push(circle); + Object(_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__["RedBlackNode"])(circle); + arc.circle = null; + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/Diagram.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/Diagram.js ***! + \*********************************************************************************************************/ +/*! exports provided: epsilon, epsilon2, beaches, cells, circles, edges, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon", function() { return epsilon; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon2", function() { return epsilon2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "beaches", function() { return beaches; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cells", function() { return cells; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circles", function() { return circles; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "edges", function() { return edges; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Diagram; }); +/* harmony import */ var _Beach__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Beach */ "../../../node_modules/d3-voronoi/src/Beach.js"); +/* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Cell */ "../../../node_modules/d3-voronoi/src/Cell.js"); +/* harmony import */ var _Circle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Circle */ "../../../node_modules/d3-voronoi/src/Circle.js"); +/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Edge */ "../../../node_modules/d3-voronoi/src/Edge.js"); +/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RedBlackTree */ "../../../node_modules/d3-voronoi/src/RedBlackTree.js"); + + + + + + +var epsilon = 1e-6; +var epsilon2 = 1e-12; +var beaches; +var cells; +var circles; +var edges; + +function triangleArea(a, b, c) { + return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); +} + +function lexicographic(a, b) { + return b[1] - a[1] + || b[0] - a[0]; +} + +function Diagram(sites, extent) { + var site = sites.sort(lexicographic).pop(), + x, + y, + circle; + + edges = []; + cells = new Array(sites.length); + beaches = new _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__["default"]; + circles = new _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__["default"]; + + while (true) { + circle = _Circle__WEBPACK_IMPORTED_MODULE_2__["firstCircle"]; + if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { + if (site[0] !== x || site[1] !== y) { + Object(_Beach__WEBPACK_IMPORTED_MODULE_0__["addBeach"])(site); + x = site[0], y = site[1]; + } + site = sites.pop(); + } else if (circle) { + Object(_Beach__WEBPACK_IMPORTED_MODULE_0__["removeBeach"])(circle.arc); + } else { + break; + } + } + + Object(_Cell__WEBPACK_IMPORTED_MODULE_1__["sortCellHalfedges"])(); + + if (extent) { + var x0 = +extent[0][0], + y0 = +extent[0][1], + x1 = +extent[1][0], + y1 = +extent[1][1]; + Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["clipEdges"])(x0, y0, x1, y1); + Object(_Cell__WEBPACK_IMPORTED_MODULE_1__["clipCells"])(x0, y0, x1, y1); + } + + this.edges = edges; + this.cells = cells; + + beaches = + circles = + edges = + cells = null; +} + +Diagram.prototype = { + constructor: Diagram, + + polygons: function() { + var edges = this.edges; + + return this.cells.map(function(cell) { + var polygon = cell.halfedges.map(function(i) { return Object(_Cell__WEBPACK_IMPORTED_MODULE_1__["cellHalfedgeStart"])(cell, edges[i]); }); + polygon.data = cell.site.data; + return polygon; + }); + }, + + triangles: function() { + var triangles = [], + edges = this.edges; + + this.cells.forEach(function(cell, i) { + if (!(m = (halfedges = cell.halfedges).length)) return; + var site = cell.site, + halfedges, + j = -1, + m, + s0, + e1 = edges[halfedges[m - 1]], + s1 = e1.left === site ? e1.right : e1.left; + + while (++j < m) { + s0 = s1; + e1 = edges[halfedges[j]]; + s1 = e1.left === site ? e1.right : e1.left; + if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { + triangles.push([site.data, s0.data, s1.data]); + } + } + }); + + return triangles; + }, + + links: function() { + return this.edges.filter(function(edge) { + return edge.right; + }).map(function(edge) { + return { + source: edge.left.data, + target: edge.right.data + }; + }); + }, + + find: function(x, y, radius) { + var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; + + // Use the previously-found cell, or start with an arbitrary one. + while (!(cell = that.cells[i1])) if (++i1 >= n) return null; + var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; + + // Traverse the half-edges to find a closer cell, if any. + do { + cell = that.cells[i0 = i1], i1 = null; + cell.halfedges.forEach(function(e) { + var edge = that.edges[e], v = edge.left; + if ((v === cell.site || !v) && !(v = edge.right)) return; + var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; + if (v2 < d2) d2 = v2, i1 = v.index; + }); + } while (i1 !== null); + + that._found = i0; + + return radius == null || d2 <= radius * radius ? cell.site : null; + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/Edge.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/Edge.js ***! + \******************************************************************************************************/ +/*! exports provided: createEdge, createBorderEdge, setEdgeEnd, clipEdges */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEdge", function() { return createEdge; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createBorderEdge", function() { return createBorderEdge; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setEdgeEnd", function() { return setEdgeEnd; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clipEdges", function() { return clipEdges; }); +/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Diagram */ "../../../node_modules/d3-voronoi/src/Diagram.js"); + + +function createEdge(left, right, v0, v1) { + var edge = [null, null], + index = _Diagram__WEBPACK_IMPORTED_MODULE_0__["edges"].push(edge) - 1; + edge.left = left; + edge.right = right; + if (v0) setEdgeEnd(edge, left, right, v0); + if (v1) setEdgeEnd(edge, right, left, v1); + _Diagram__WEBPACK_IMPORTED_MODULE_0__["cells"][left.index].halfedges.push(index); + _Diagram__WEBPACK_IMPORTED_MODULE_0__["cells"][right.index].halfedges.push(index); + return edge; +} + +function createBorderEdge(left, v0, v1) { + var edge = [v0, v1]; + edge.left = left; + return edge; +} + +function setEdgeEnd(edge, left, right, vertex) { + if (!edge[0] && !edge[1]) { + edge[0] = vertex; + edge.left = left; + edge.right = right; + } else if (edge.left === right) { + edge[1] = vertex; + } else { + edge[0] = vertex; + } +} + +// Liang–Barsky line clipping. +function clipEdge(edge, x0, y0, x1, y1) { + var a = edge[0], + b = edge[1], + ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; + + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? + + if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; + if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; + return true; +} + +function connectEdge(edge, x0, y0, x1, y1) { + var v1 = edge[1]; + if (v1) return true; + + var v0 = edge[0], + left = edge.left, + right = edge.right, + lx = left[0], + ly = left[1], + rx = right[0], + ry = right[1], + fx = (lx + rx) / 2, + fy = (ly + ry) / 2, + fm, + fb; + + if (ry === ly) { + if (fx < x0 || fx >= x1) return; + if (lx > rx) { + if (!v0) v0 = [fx, y0]; + else if (v0[1] >= y1) return; + v1 = [fx, y1]; + } else { + if (!v0) v0 = [fx, y1]; + else if (v0[1] < y0) return; + v1 = [fx, y0]; + } + } else { + fm = (lx - rx) / (ry - ly); + fb = fy - fm * fx; + if (fm < -1 || fm > 1) { + if (lx > rx) { + if (!v0) v0 = [(y0 - fb) / fm, y0]; + else if (v0[1] >= y1) return; + v1 = [(y1 - fb) / fm, y1]; + } else { + if (!v0) v0 = [(y1 - fb) / fm, y1]; + else if (v0[1] < y0) return; + v1 = [(y0 - fb) / fm, y0]; + } + } else { + if (ly < ry) { + if (!v0) v0 = [x0, fm * x0 + fb]; + else if (v0[0] >= x1) return; + v1 = [x1, fm * x1 + fb]; + } else { + if (!v0) v0 = [x1, fm * x1 + fb]; + else if (v0[0] < x0) return; + v1 = [x0, fm * x0 + fb]; + } + } + } + + edge[0] = v0; + edge[1] = v1; + return true; +} + +function clipEdges(x0, y0, x1, y1) { + var i = _Diagram__WEBPACK_IMPORTED_MODULE_0__["edges"].length, + edge; + + while (i--) { + if (!connectEdge(edge = _Diagram__WEBPACK_IMPORTED_MODULE_0__["edges"][i], x0, y0, x1, y1) + || !clipEdge(edge, x0, y0, x1, y1) + || !(Math.abs(edge[0][0] - edge[1][0]) > _Diagram__WEBPACK_IMPORTED_MODULE_0__["epsilon"] + || Math.abs(edge[0][1] - edge[1][1]) > _Diagram__WEBPACK_IMPORTED_MODULE_0__["epsilon"])) { + delete _Diagram__WEBPACK_IMPORTED_MODULE_0__["edges"][i]; + } + } +} + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/RedBlackTree.js": +/*!**************************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/RedBlackTree.js ***! + \**************************************************************************************************************/ +/*! exports provided: RedBlackNode, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RedBlackNode", function() { return RedBlackNode; }); +function RedBlackTree() { + this._ = null; // root node +} + +function RedBlackNode(node) { + node.U = // parent node + node.C = // color - true for red, false for black + node.L = // left node + node.R = // right node + node.P = // previous node + node.N = null; // next node +} + +RedBlackTree.prototype = { + constructor: RedBlackTree, + + insert: function(after, node) { + var parent, grandpa, uncle; + + if (after) { + node.P = after; + node.N = after.N; + if (after.N) after.N.P = node; + after.N = node; + if (after.R) { + after = after.R; + while (after.L) after = after.L; + after.L = node; + } else { + after.R = node; + } + parent = after; + } else if (this._) { + after = RedBlackFirst(this._); + node.P = null; + node.N = after; + after.P = after.L = node; + parent = after; + } else { + node.P = node.N = null; + this._ = node; + parent = null; + } + node.L = node.R = null; + node.U = parent; + node.C = true; + + after = node; + while (parent && parent.C) { + grandpa = parent.U; + if (parent === grandpa.L) { + uncle = grandpa.R; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.R) { + RedBlackRotateLeft(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + RedBlackRotateRight(this, grandpa); + } + } else { + uncle = grandpa.L; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.L) { + RedBlackRotateRight(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + RedBlackRotateLeft(this, grandpa); + } + } + parent = after.U; + } + this._.C = false; + }, + + remove: function(node) { + if (node.N) node.N.P = node.P; + if (node.P) node.P.N = node.N; + node.N = node.P = null; + + var parent = node.U, + sibling, + left = node.L, + right = node.R, + next, + red; + + if (!left) next = right; + else if (!right) next = left; + else next = RedBlackFirst(right); + + if (parent) { + if (parent.L === node) parent.L = next; + else parent.R = next; + } else { + this._ = next; + } + + if (left && right) { + red = next.C; + next.C = node.C; + next.L = left; + left.U = next; + if (next !== right) { + parent = next.U; + next.U = node.U; + node = next.R; + parent.L = node; + next.R = right; + right.U = next; + } else { + next.U = parent; + parent = next; + node = next.R; + } + } else { + red = node.C; + node = next; + } + + if (node) node.U = parent; + if (red) return; + if (node && node.C) { node.C = false; return; } + + do { + if (node === this._) break; + if (node === parent.L) { + sibling = parent.R; + if (sibling.C) { + sibling.C = false; + parent.C = true; + RedBlackRotateLeft(this, parent); + sibling = parent.R; + } + if ((sibling.L && sibling.L.C) + || (sibling.R && sibling.R.C)) { + if (!sibling.R || !sibling.R.C) { + sibling.L.C = false; + sibling.C = true; + RedBlackRotateRight(this, sibling); + sibling = parent.R; + } + sibling.C = parent.C; + parent.C = sibling.R.C = false; + RedBlackRotateLeft(this, parent); + node = this._; + break; + } + } else { + sibling = parent.L; + if (sibling.C) { + sibling.C = false; + parent.C = true; + RedBlackRotateRight(this, parent); + sibling = parent.L; + } + if ((sibling.L && sibling.L.C) + || (sibling.R && sibling.R.C)) { + if (!sibling.L || !sibling.L.C) { + sibling.R.C = false; + sibling.C = true; + RedBlackRotateLeft(this, sibling); + sibling = parent.L; + } + sibling.C = parent.C; + parent.C = sibling.L.C = false; + RedBlackRotateRight(this, parent); + node = this._; + break; + } + } + sibling.C = true; + node = parent; + parent = parent.U; + } while (!node.C); + + if (node) node.C = false; + } +}; + +function RedBlackRotateLeft(tree, node) { + var p = node, + q = node.R, + parent = p.U; + + if (parent) { + if (parent.L === p) parent.L = q; + else parent.R = q; + } else { + tree._ = q; + } + + q.U = parent; + p.U = q; + p.R = q.L; + if (p.R) p.R.U = p; + q.L = p; +} + +function RedBlackRotateRight(tree, node) { + var p = node, + q = node.L, + parent = p.U; + + if (parent) { + if (parent.L === p) parent.L = q; + else parent.R = q; + } else { + tree._ = q; + } + + q.U = parent; + p.U = q; + p.L = q.R; + if (p.L) p.L.U = p; + q.R = p; +} + +function RedBlackFirst(node) { + while (node.L) node = node.L; + return node; +} + +/* harmony default export */ __webpack_exports__["default"] = (RedBlackTree); + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/constant.js": +/*!**********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/constant.js ***! + \**********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/index.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/index.js ***! + \*******************************************************************************************************/ +/*! exports provided: voronoi */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _voronoi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./voronoi */ "../../../node_modules/d3-voronoi/src/voronoi.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "voronoi", function() { return _voronoi__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + + + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/point.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/point.js ***! + \*******************************************************************************************************/ +/*! exports provided: x, y */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return x; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return y; }); +function x(d) { + return d[0]; +} + +function y(d) { + return d[1]; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-voronoi/src/voronoi.js": +/*!*********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-voronoi/src/voronoi.js ***! + \*********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-voronoi/src/constant.js"); +/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "../../../node_modules/d3-voronoi/src/point.js"); +/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Diagram */ "../../../node_modules/d3-voronoi/src/Diagram.js"); + + + + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var x = _point__WEBPACK_IMPORTED_MODULE_1__["x"], + y = _point__WEBPACK_IMPORTED_MODULE_1__["y"], + extent = null; + + function voronoi(data) { + return new _Diagram__WEBPACK_IMPORTED_MODULE_2__["default"](data.map(function(d, i) { + var s = [Math.round(x(d, i, data) / _Diagram__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) * _Diagram__WEBPACK_IMPORTED_MODULE_2__["epsilon"], Math.round(y(d, i, data) / _Diagram__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) * _Diagram__WEBPACK_IMPORTED_MODULE_2__["epsilon"]]; + s.index = i; + s.data = d; + return s; + }), extent); + } + + voronoi.polygons = function(data) { + return voronoi(data).polygons(); + }; + + voronoi.links = function(data) { + return voronoi(data).links(); + }; + + voronoi.triangles = function(data) { + return voronoi(data).triangles(); + }; + + voronoi.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), voronoi) : x; + }; + + voronoi.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), voronoi) : y; + }; + + voronoi.extent = function(_) { + return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; + }; + + voronoi.size = function(_) { + return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; + }; + + return voronoi; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-zoom/src/constant.js": +/*!*******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-zoom/src/constant.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function(x) { + return function() { + return x; + }; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-zoom/src/event.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-zoom/src/event.js ***! + \****************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ZoomEvent; }); +function ZoomEvent(target, type, transform) { + this.target = target; + this.type = type; + this.transform = transform; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-zoom/src/index.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-zoom/src/index.js ***! + \****************************************************************************************************/ +/*! exports provided: zoom, zoomTransform, zoomIdentity */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _zoom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zoom */ "../../../node_modules/d3-zoom/src/zoom.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoom", function() { return _zoom__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transform */ "../../../node_modules/d3-zoom/src/transform.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoomTransform", function() { return _transform__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoomIdentity", function() { return _transform__WEBPACK_IMPORTED_MODULE_1__["identity"]; }); + + + + + +/***/ }), + +/***/ "../../../node_modules/d3-zoom/src/noevent.js": +/*!******************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-zoom/src/noevent.js ***! + \******************************************************************************************************/ +/*! exports provided: nopropagation, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nopropagation", function() { return nopropagation; }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); + + +function nopropagation() { + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].preventDefault(); + d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +}); + + +/***/ }), + +/***/ "../../../node_modules/d3-zoom/src/transform.js": +/*!********************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-zoom/src/transform.js ***! + \********************************************************************************************************/ +/*! exports provided: Transform, identity, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transform", function() { return Transform; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return transform; }); +function Transform(k, x, y) { + this.k = k; + this.x = x; + this.y = y; +} + +Transform.prototype = { + constructor: Transform, + scale: function(k) { + return k === 1 ? this : new Transform(this.k * k, this.x, this.y); + }, + translate: function(x, y) { + return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); + }, + apply: function(point) { + return [point[0] * this.k + this.x, point[1] * this.k + this.y]; + }, + applyX: function(x) { + return x * this.k + this.x; + }, + applyY: function(y) { + return y * this.k + this.y; + }, + invert: function(location) { + return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; + }, + invertX: function(x) { + return (x - this.x) / this.k; + }, + invertY: function(y) { + return (y - this.y) / this.k; + }, + rescaleX: function(x) { + return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); + }, + rescaleY: function(y) { + return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); + }, + toString: function() { + return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; + } +}; + +var identity = new Transform(1, 0, 0); + +transform.prototype = Transform.prototype; + +function transform(node) { + return node.__zoom || identity; +} + + +/***/ }), + +/***/ "../../../node_modules/d3-zoom/src/zoom.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3-zoom/src/zoom.js ***! + \***************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "../../../node_modules/d3-dispatch/src/index.js"); +/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-drag */ "../../../node_modules/d3-drag/src/index.js"); +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-transition */ "../../../node_modules/d3-transition/src/index.js"); +/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constant */ "../../../node_modules/d3-zoom/src/constant.js"); +/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event */ "../../../node_modules/d3-zoom/src/event.js"); +/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./transform */ "../../../node_modules/d3-zoom/src/transform.js"); +/* harmony import */ var _noevent__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./noevent */ "../../../node_modules/d3-zoom/src/noevent.js"); + + + + + + + + + + +// Ignore right-click, since that should open the context menu. +function defaultFilter() { + return !d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].button; +} + +function defaultExtent() { + var e = this, w, h; + if (e instanceof SVGElement) { + e = e.ownerSVGElement || e; + w = e.width.baseVal.value; + h = e.height.baseVal.value; + } else { + w = e.clientWidth; + h = e.clientHeight; + } + return [[0, 0], [w, h]]; +} + +function defaultTransform() { + return this.__zoom || _transform__WEBPACK_IMPORTED_MODULE_7__["identity"]; +} + +function defaultWheelDelta() { + return -d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].deltaY * (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].deltaMode ? 120 : 1) / 500; +} + +function defaultTouchable() { + return "ontouchstart" in this; +} + +function defaultConstrain(transform, extent, translateExtent) { + var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0], + dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0], + dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1], + dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1]; + return transform.translate( + dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), + dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) + ); +} + +/* harmony default export */ __webpack_exports__["default"] = (function() { + var filter = defaultFilter, + extent = defaultExtent, + constrain = defaultConstrain, + wheelDelta = defaultWheelDelta, + touchable = defaultTouchable, + scaleExtent = [0, Infinity], + translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], + duration = 250, + interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_2__["interpolateZoom"], + gestures = [], + listeners = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])("start", "zoom", "end"), + touchstarting, + touchending, + touchDelay = 500, + wheelDelay = 150, + clickDistance2 = 0; + + function zoom(selection) { + selection + .property("__zoom", defaultTransform) + .on("wheel.zoom", wheeled) + .on("mousedown.zoom", mousedowned) + .on("dblclick.zoom", dblclicked) + .filter(touchable) + .on("touchstart.zoom", touchstarted) + .on("touchmove.zoom", touchmoved) + .on("touchend.zoom touchcancel.zoom", touchended) + .style("touch-action", "none") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); + } + + zoom.transform = function(collection, transform) { + var selection = collection.selection ? collection.selection() : collection; + selection.property("__zoom", defaultTransform); + if (collection !== selection) { + schedule(collection, transform); + } else { + selection.interrupt().each(function() { + gesture(this, arguments) + .start() + .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform) + .end(); + }); + } + }; + + zoom.scaleBy = function(selection, k) { + zoom.scaleTo(selection, function() { + var k0 = this.__zoom.k, + k1 = typeof k === "function" ? k.apply(this, arguments) : k; + return k0 * k1; + }); + }; + + zoom.scaleTo = function(selection, k) { + zoom.transform(selection, function() { + var e = extent.apply(this, arguments), + t0 = this.__zoom, + p0 = centroid(e), + p1 = t0.invert(p0), + k1 = typeof k === "function" ? k.apply(this, arguments) : k; + return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); + }); + }; + + zoom.translateBy = function(selection, x, y) { + zoom.transform(selection, function() { + return constrain(this.__zoom.translate( + typeof x === "function" ? x.apply(this, arguments) : x, + typeof y === "function" ? y.apply(this, arguments) : y + ), extent.apply(this, arguments), translateExtent); + }); + }; + + zoom.translateTo = function(selection, x, y) { + zoom.transform(selection, function() { + var e = extent.apply(this, arguments), + t = this.__zoom, + p = centroid(e); + return constrain(_transform__WEBPACK_IMPORTED_MODULE_7__["identity"].translate(p[0], p[1]).scale(t.k).translate( + typeof x === "function" ? -x.apply(this, arguments) : -x, + typeof y === "function" ? -y.apply(this, arguments) : -y + ), e, translateExtent); + }); + }; + + function scale(transform, k) { + k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); + return k === transform.k ? transform : new _transform__WEBPACK_IMPORTED_MODULE_7__["Transform"](k, transform.x, transform.y); + } + + function translate(transform, p0, p1) { + var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k; + return x === transform.x && y === transform.y ? transform : new _transform__WEBPACK_IMPORTED_MODULE_7__["Transform"](transform.k, x, y); + } + + function centroid(extent) { + return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; + } + + function schedule(transition, transform, center) { + transition + .on("start.zoom", function() { gesture(this, arguments).start(); }) + .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) + .tween("zoom", function() { + var that = this, + args = arguments, + g = gesture(that, args), + e = extent.apply(that, args), + p = center || centroid(e), + w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), + a = that.__zoom, + b = typeof transform === "function" ? transform.apply(that, args) : transform, + i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); + return function(t) { + if (t === 1) t = b; // Avoid rounding error on end. + else { var l = i(t), k = w / l[2]; t = new _transform__WEBPACK_IMPORTED_MODULE_7__["Transform"](k, p[0] - l[0] * k, p[1] - l[1] * k); } + g.zoom(null, t); + }; + }); + } + + function gesture(that, args) { + for (var i = 0, n = gestures.length, g; i < n; ++i) { + if ((g = gestures[i]).that === that) { + return g; + } + } + return new Gesture(that, args); + } + + function Gesture(that, args) { + this.that = that; + this.args = args; + this.index = -1; + this.active = 0; + this.extent = extent.apply(that, args); + } + + Gesture.prototype = { + start: function() { + if (++this.active === 1) { + this.index = gestures.push(this) - 1; + this.emit("start"); + } + return this; + }, + zoom: function(key, transform) { + if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]); + if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]); + if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]); + this.that.__zoom = transform; + this.emit("zoom"); + return this; + }, + end: function() { + if (--this.active === 0) { + gestures.splice(this.index, 1); + this.index = -1; + this.emit("end"); + } + return this; + }, + emit: function(type) { + Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["customEvent"])(new _event__WEBPACK_IMPORTED_MODULE_6__["default"](zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); + } + }; + + function wheeled() { + if (!filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + t = this.__zoom, + k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), + p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(this); + + // If the mouse is in the same location as before, reuse it. + // If there were recent wheel events, reset the wheel idle timeout. + if (g.wheel) { + if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { + g.mouse[1] = t.invert(g.mouse[0] = p); + } + clearTimeout(g.wheel); + } + + // If this wheel event won’t trigger a transform change, ignore it. + else if (t.k === k) return; + + // Otherwise, capture the mouse point and location at the start. + else { + g.mouse = [p, t.invert(p)]; + Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(this); + g.start(); + } + + Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); + g.wheel = setTimeout(wheelidled, wheelDelay); + g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); + + function wheelidled() { + g.wheel = null; + g.end(); + } + } + + function mousedowned() { + if (touchending || !filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + v = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), + p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(this), + x0 = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].clientX, + y0 = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].clientY; + + Object(d3_drag__WEBPACK_IMPORTED_MODULE_1__["dragDisable"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view); + Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["nopropagation"])(); + g.mouse = [p, this.__zoom.invert(p)]; + Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(this); + g.start(); + + function mousemoved() { + Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); + if (!g.moved) { + var dx = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].clientX - x0, dy = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].clientY - y0; + g.moved = dx * dx + dy * dy > clickDistance2; + } + g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(g.that), g.mouse[1]), g.extent, translateExtent)); + } + + function mouseupped() { + v.on("mousemove.zoom mouseup.zoom", null); + Object(d3_drag__WEBPACK_IMPORTED_MODULE_1__["dragEnable"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view, g.moved); + Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); + g.end(); + } + } + + function dblclicked() { + if (!filter.apply(this, arguments)) return; + var t0 = this.__zoom, + p0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(this), + p1 = t0.invert(p0), + k1 = t0.k * (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].shiftKey ? 0.5 : 2), + t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent); + + Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); + if (duration > 0) Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this).transition().duration(duration).call(schedule, t1, p0); + else Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this).call(zoom.transform, t1); + } + + function touchstarted() { + if (!filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + touches = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].changedTouches, + started, + n = touches.length, i, t, p; + + Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["nopropagation"])(); + for (i = 0; i < n; ++i) { + t = touches[i], p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["touch"])(this, touches, t.identifier); + p = [p, this.__zoom.invert(p), t.identifier]; + if (!g.touch0) g.touch0 = p, started = true; + else if (!g.touch1) g.touch1 = p; + } + + // If this is a dbltap, reroute to the (optional) dblclick.zoom handler. + if (touchstarting) { + touchstarting = clearTimeout(touchstarting); + if (!g.touch1) { + g.end(); + p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this).on("dblclick.zoom"); + if (p) p.apply(this, arguments); + return; + } + } + + if (started) { + touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); + Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(this); + g.start(); + } + } + + function touchmoved() { + var g = gesture(this, arguments), + touches = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].changedTouches, + n = touches.length, i, t, p, l; + + Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); + if (touchstarting) touchstarting = clearTimeout(touchstarting); + for (i = 0; i < n; ++i) { + t = touches[i], p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["touch"])(this, touches, t.identifier); + if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; + else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; + } + t = g.that.__zoom; + if (g.touch1) { + var p0 = g.touch0[0], l0 = g.touch0[1], + p1 = g.touch1[0], l1 = g.touch1[1], + dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, + dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; + t = scale(t, Math.sqrt(dp / dl)); + p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; + l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; + } + else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; + else return; + g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); + } + + function touchended() { + var g = gesture(this, arguments), + touches = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].changedTouches, + n = touches.length, i, t; + + Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["nopropagation"])(); + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, touchDelay); + for (i = 0; i < n; ++i) { + t = touches[i]; + if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; + else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; + } + if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; + if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); + else g.end(); + } + + zoom.wheelDelta = function(_) { + return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])(+_), zoom) : wheelDelta; + }; + + zoom.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])(!!_), zoom) : filter; + }; + + zoom.touchable = function(_) { + return arguments.length ? (touchable = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])(!!_), zoom) : touchable; + }; + + zoom.extent = function(_) { + return arguments.length ? (extent = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; + }; + + zoom.scaleExtent = function(_) { + return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; + }; + + zoom.translateExtent = function(_) { + return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]]; + }; + + zoom.constrain = function(_) { + return arguments.length ? (constrain = _, zoom) : constrain; + }; + + zoom.duration = function(_) { + return arguments.length ? (duration = +_, zoom) : duration; + }; + + zoom.interpolate = function(_) { + return arguments.length ? (interpolate = _, zoom) : interpolate; + }; + + zoom.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? zoom : value; + }; + + zoom.clickDistance = function(_) { + return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); + }; + + return zoom; +}); + + +/***/ }), + +/***/ "../../../node_modules/d3/dist/package.js": +/*!**************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3/dist/package.js ***! + \**************************************************************************************************/ +/*! exports provided: name, version, description, keywords, homepage, license, author, main, unpkg, jsdelivr, module, repository, scripts, devDependencies, dependencies */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "version", function() { return version; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "description", function() { return description; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keywords", function() { return keywords; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "homepage", function() { return homepage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "license", function() { return license; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "author", function() { return author; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "main", function() { return main; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unpkg", function() { return unpkg; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "jsdelivr", function() { return jsdelivr; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "module", function() { return module; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repository", function() { return repository; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scripts", function() { return scripts; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "devDependencies", function() { return devDependencies; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dependencies", function() { return dependencies; }); +var name = "d3"; +var version = "5.9.2"; +var description = "Data-Driven Documents"; +var keywords = ["dom","visualization","svg","animation","canvas"]; +var homepage = "https://d3js.org"; +var license = "BSD-3-Clause"; +var author = {"name":"Mike Bostock","url":"https://bost.ocks.org/mike"}; +var main = "dist/d3.node.js"; +var unpkg = "dist/d3.min.js"; +var jsdelivr = "dist/d3.min.js"; +var module = "index.js"; +var repository = {"type":"git","url":"https://github.com/d3/d3.git"}; +var scripts = {"pretest":"rimraf dist && mkdir dist && json2module package.json > dist/package.js && node rollup.node","test":"tape 'test/**/*-test.js'","prepublishOnly":"yarn test && rollup -c","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \"d3 ${npm_package_version}\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \"${npm_package_version}\" && git tag -am \"${npm_package_version}\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js"}; +var devDependencies = {"json2module":"0.0","rimraf":"2","rollup":"0.64","rollup-plugin-ascii":"0.0","rollup-plugin-node-resolve":"3","rollup-plugin-terser":"1","tape":"4"}; +var dependencies = {"d3-array":"1","d3-axis":"1","d3-brush":"1","d3-chord":"1","d3-collection":"1","d3-color":"1","d3-contour":"1","d3-dispatch":"1","d3-drag":"1","d3-dsv":"1","d3-ease":"1","d3-fetch":"1","d3-force":"1","d3-format":"1","d3-geo":"1","d3-hierarchy":"1","d3-interpolate":"1","d3-path":"1","d3-polygon":"1","d3-quadtree":"1","d3-random":"1","d3-scale":"2","d3-scale-chromatic":"1","d3-selection":"1","d3-shape":"1","d3-time":"1","d3-time-format":"2","d3-timer":"1","d3-transition":"1","d3-voronoi":"1","d3-zoom":"1"}; + + +/***/ }), + +/***/ "../../../node_modules/d3/index.js": +/*!*******************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/d3/index.js ***! + \*******************************************************************************************/ +/*! exports provided: version, bisect, bisectRight, bisectLeft, ascending, bisector, cross, descending, deviation, extent, histogram, thresholdFreedmanDiaconis, thresholdScott, thresholdSturges, max, mean, median, merge, min, pairs, permute, quantile, range, scan, shuffle, sum, ticks, tickIncrement, tickStep, transpose, variance, zip, axisTop, axisRight, axisBottom, axisLeft, brush, brushX, brushY, brushSelection, chord, ribbon, nest, set, map, keys, values, entries, color, rgb, hsl, lab, hcl, lch, gray, cubehelix, contours, contourDensity, dispatch, drag, dragDisable, dragEnable, dsvFormat, csvParse, csvParseRows, csvFormat, csvFormatBody, csvFormatRows, tsvParse, tsvParseRows, tsvFormat, tsvFormatBody, tsvFormatRows, autoType, easeLinear, easeQuad, easeQuadIn, easeQuadOut, easeQuadInOut, easeCubic, easeCubicIn, easeCubicOut, easeCubicInOut, easePoly, easePolyIn, easePolyOut, easePolyInOut, easeSin, easeSinIn, easeSinOut, easeSinInOut, easeExp, easeExpIn, easeExpOut, easeExpInOut, easeCircle, easeCircleIn, easeCircleOut, easeCircleInOut, easeBounce, easeBounceIn, easeBounceOut, easeBounceInOut, easeBack, easeBackIn, easeBackOut, easeBackInOut, easeElastic, easeElasticIn, easeElasticOut, easeElasticInOut, blob, buffer, dsv, csv, tsv, image, json, text, xml, html, svg, forceCenter, forceCollide, forceLink, forceManyBody, forceRadial, forceSimulation, forceX, forceY, formatDefaultLocale, format, formatPrefix, formatLocale, formatSpecifier, precisionFixed, precisionPrefix, precisionRound, geoArea, geoBounds, geoCentroid, geoCircle, geoClipAntimeridian, geoClipCircle, geoClipExtent, geoClipRectangle, geoContains, geoDistance, geoGraticule, geoGraticule10, geoInterpolate, geoLength, geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEqualAreaRaw, geoAzimuthalEquidistant, geoAzimuthalEquidistantRaw, geoConicConformal, geoConicConformalRaw, geoConicEqualArea, geoConicEqualAreaRaw, geoConicEquidistant, geoConicEquidistantRaw, geoEqualEarth, geoEqualEarthRaw, geoEquirectangular, geoEquirectangularRaw, geoGnomonic, geoGnomonicRaw, geoIdentity, geoProjection, geoProjectionMutator, geoMercator, geoMercatorRaw, geoNaturalEarth1, geoNaturalEarth1Raw, geoOrthographic, geoOrthographicRaw, geoStereographic, geoStereographicRaw, geoTransverseMercator, geoTransverseMercatorRaw, geoRotation, geoStream, geoTransform, cluster, hierarchy, pack, packSiblings, packEnclose, partition, stratify, tree, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify, interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateDate, interpolateDiscrete, interpolateHue, interpolateNumber, interpolateObject, interpolateRound, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateZoom, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateHsl, interpolateHslLong, interpolateLab, interpolateHcl, interpolateHclLong, interpolateCubehelix, interpolateCubehelixLong, piecewise, quantize, path, polygonArea, polygonCentroid, polygonHull, polygonContains, polygonLength, quadtree, randomUniform, randomNormal, randomLogNormal, randomBates, randomIrwinHall, randomExponential, scaleBand, scalePoint, scaleIdentity, scaleLinear, scaleLog, scaleSymlog, scaleOrdinal, scaleImplicit, scalePow, scaleSqrt, scaleQuantile, scaleQuantize, scaleThreshold, scaleTime, scaleUtc, scaleSequential, scaleSequentialLog, scaleSequentialPow, scaleSequentialSqrt, scaleSequentialSymlog, scaleSequentialQuantile, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSqrt, scaleDivergingSymlog, tickFormat, schemeCategory10, schemeAccent, schemeDark2, schemePaired, schemePastel1, schemePastel2, schemeSet1, schemeSet2, schemeSet3, interpolateBrBG, schemeBrBG, interpolatePRGn, schemePRGn, interpolatePiYG, schemePiYG, interpolatePuOr, schemePuOr, interpolateRdBu, schemeRdBu, interpolateRdGy, schemeRdGy, interpolateRdYlBu, schemeRdYlBu, interpolateRdYlGn, schemeRdYlGn, interpolateSpectral, schemeSpectral, interpolateBuGn, schemeBuGn, interpolateBuPu, schemeBuPu, interpolateGnBu, schemeGnBu, interpolateOrRd, schemeOrRd, interpolatePuBuGn, schemePuBuGn, interpolatePuBu, schemePuBu, interpolatePuRd, schemePuRd, interpolateRdPu, schemeRdPu, interpolateYlGnBu, schemeYlGnBu, interpolateYlGn, schemeYlGn, interpolateYlOrBr, schemeYlOrBr, interpolateYlOrRd, schemeYlOrRd, interpolateBlues, schemeBlues, interpolateGreens, schemeGreens, interpolateGreys, schemeGreys, interpolatePurples, schemePurples, interpolateReds, schemeReds, interpolateOranges, schemeOranges, interpolateCubehelixDefault, interpolateRainbow, interpolateWarm, interpolateCool, interpolateSinebow, interpolateViridis, interpolateMagma, interpolateInferno, interpolatePlasma, create, creator, local, matcher, mouse, namespace, namespaces, clientPoint, select, selectAll, selection, selector, selectorAll, style, touch, touches, window, event, customEvent, arc, area, line, pie, areaRadial, radialArea, lineRadial, radialLine, pointRadial, linkHorizontal, linkVertical, linkRadial, symbol, symbols, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye, curveBasisClosed, curveBasisOpen, curveBasis, curveBundle, curveCardinalClosed, curveCardinalOpen, curveCardinal, curveCatmullRomClosed, curveCatmullRomOpen, curveCatmullRom, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, stack, stackOffsetExpand, stackOffsetDiverging, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderAppearance, stackOrderAscending, stackOrderDescending, stackOrderInsideOut, stackOrderNone, stackOrderReverse, timeInterval, timeMillisecond, timeMilliseconds, utcMillisecond, utcMilliseconds, timeSecond, timeSeconds, utcSecond, utcSeconds, timeMinute, timeMinutes, timeHour, timeHours, timeDay, timeDays, timeWeek, timeWeeks, timeSunday, timeSundays, timeMonday, timeMondays, timeTuesday, timeTuesdays, timeWednesday, timeWednesdays, timeThursday, timeThursdays, timeFriday, timeFridays, timeSaturday, timeSaturdays, timeMonth, timeMonths, timeYear, timeYears, utcMinute, utcMinutes, utcHour, utcHours, utcDay, utcDays, utcWeek, utcWeeks, utcSunday, utcSundays, utcMonday, utcMondays, utcTuesday, utcTuesdays, utcWednesday, utcWednesdays, utcThursday, utcThursdays, utcFriday, utcFridays, utcSaturday, utcSaturdays, utcMonth, utcMonths, utcYear, utcYears, timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale, isoFormat, isoParse, now, timer, timerFlush, timeout, interval, transition, active, interrupt, voronoi, zoom, zoomTransform, zoomIdentity */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _dist_package__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dist/package */ "../../../node_modules/d3/dist/package.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "version", function() { return _dist_package__WEBPACK_IMPORTED_MODULE_0__["version"]; }); + +/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ "../../../node_modules/d3-array/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisect", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["bisect"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisectRight", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["bisectRight"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisectLeft", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["bisectLeft"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ascending", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["ascending"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisector", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["bisector"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cross", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["cross"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "descending", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["descending"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "deviation", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["deviation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "extent", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["extent"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "histogram", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["histogram"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdFreedmanDiaconis", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["thresholdFreedmanDiaconis"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdScott", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["thresholdScott"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdSturges", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["thresholdSturges"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["max"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mean", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["mean"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "median", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["median"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["merge"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["min"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["pairs"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "permute", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["permute"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quantile", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["quantile"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "range", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["range"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["scan"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shuffle", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["shuffle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sum", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["sum"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ticks", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["ticks"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickIncrement", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["tickIncrement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickStep", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["tickStep"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transpose", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["transpose"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "variance", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["variance"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["zip"]; }); + +/* harmony import */ var d3_axis__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-axis */ "../../../node_modules/d3-axis/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisTop", function() { return d3_axis__WEBPACK_IMPORTED_MODULE_2__["axisTop"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisRight", function() { return d3_axis__WEBPACK_IMPORTED_MODULE_2__["axisRight"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisBottom", function() { return d3_axis__WEBPACK_IMPORTED_MODULE_2__["axisBottom"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisLeft", function() { return d3_axis__WEBPACK_IMPORTED_MODULE_2__["axisLeft"]; }); + +/* harmony import */ var d3_brush__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-brush */ "../../../node_modules/d3-brush/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brush", function() { return d3_brush__WEBPACK_IMPORTED_MODULE_3__["brush"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushX", function() { return d3_brush__WEBPACK_IMPORTED_MODULE_3__["brushX"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushY", function() { return d3_brush__WEBPACK_IMPORTED_MODULE_3__["brushY"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushSelection", function() { return d3_brush__WEBPACK_IMPORTED_MODULE_3__["brushSelection"]; }); + +/* harmony import */ var d3_chord__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-chord */ "../../../node_modules/d3-chord/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "chord", function() { return d3_chord__WEBPACK_IMPORTED_MODULE_4__["chord"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ribbon", function() { return d3_chord__WEBPACK_IMPORTED_MODULE_4__["ribbon"]; }); + +/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-collection */ "../../../node_modules/d3-collection/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "nest", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["nest"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "set", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["set"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["map"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "keys", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["keys"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "values", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["values"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "entries", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["entries"]; }); + +/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-color */ "../../../node_modules/d3-color/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "color", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["color"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rgb", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["rgb"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hsl", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["hsl"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lab", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["lab"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hcl", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["hcl"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lch", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["lch"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "gray", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["gray"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cubehelix", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["cubehelix"]; }); + +/* harmony import */ var d3_contour__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-contour */ "../../../node_modules/d3-contour/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "contours", function() { return d3_contour__WEBPACK_IMPORTED_MODULE_7__["contours"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "contourDensity", function() { return d3_contour__WEBPACK_IMPORTED_MODULE_7__["contourDensity"]; }); + +/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-dispatch */ "../../../node_modules/d3-dispatch/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return d3_dispatch__WEBPACK_IMPORTED_MODULE_8__["dispatch"]; }); + +/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-drag */ "../../../node_modules/d3-drag/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drag", function() { return d3_drag__WEBPACK_IMPORTED_MODULE_9__["drag"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragDisable", function() { return d3_drag__WEBPACK_IMPORTED_MODULE_9__["dragDisable"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragEnable", function() { return d3_drag__WEBPACK_IMPORTED_MODULE_9__["dragEnable"]; }); + +/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-dsv */ "../../../node_modules/d3-dsv/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dsvFormat", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["dsvFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvParse", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvParse"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvParseRows", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvParseRows"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormat", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormatBody", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvFormatBody"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormatRows", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvFormatRows"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvParse", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvParse"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvParseRows", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvParseRows"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormat", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormatBody", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvFormatBody"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormatRows", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvFormatRows"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "autoType", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["autoType"]; }); + +/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! d3-ease */ "../../../node_modules/d3-ease/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeLinear", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeLinear"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuad", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeQuad"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeQuadIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeQuadOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeQuadInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubic", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCubic"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCubicIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCubicOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCubicInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePoly", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easePoly"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easePolyIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easePolyOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easePolyInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSin", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeSin"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeSinIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeSinOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeSinInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExp", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeExp"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeExpIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeExpOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeExpInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircle", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCircle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCircleIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCircleOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCircleInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounce", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBounce"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBounceIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBounceOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBounceInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBack", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBack"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBackIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBackOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBackInOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElastic", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeElastic"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeElasticIn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeElasticOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeElasticInOut"]; }); + +/* harmony import */ var d3_fetch__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! d3-fetch */ "../../../node_modules/d3-fetch/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["blob"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["buffer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dsv", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["dsv"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csv", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["csv"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsv", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["tsv"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "image", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["image"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "json", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["json"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "text", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["text"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "xml", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["xml"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "html", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["html"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "svg", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["svg"]; }); + +/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! d3-force */ "../../../node_modules/d3-force/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceCenter", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceCenter"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceCollide", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceCollide"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceLink", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceLink"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceManyBody", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceManyBody"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceRadial", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceRadial"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceSimulation", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceSimulation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceX", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceX"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceY", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceY"]; }); + +/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! d3-format */ "../../../node_modules/d3-format/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatDefaultLocale", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["formatDefaultLocale"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "format", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["format"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatPrefix", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["formatPrefix"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatLocale", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["formatLocale"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatSpecifier", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["formatSpecifier"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionFixed", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["precisionFixed"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionPrefix", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["precisionPrefix"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionRound", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["precisionRound"]; }); + +/* harmony import */ var d3_geo__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! d3-geo */ "../../../node_modules/d3-geo/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoArea", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoArea"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoBounds", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoBounds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoCentroid", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoCentroid"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoCircle", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoCircle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipAntimeridian", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoClipAntimeridian"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipCircle", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoClipCircle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipExtent", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoClipExtent"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipRectangle", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoClipRectangle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoContains", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoContains"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoDistance", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoDistance"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGraticule", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoGraticule"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGraticule10", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoGraticule10"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoInterpolate", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoInterpolate"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoLength", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoLength"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoPath", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoPath"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAlbers", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAlbers"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAlbersUsa", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAlbersUsa"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualArea", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAzimuthalEqualArea"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualAreaRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAzimuthalEqualAreaRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistant", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAzimuthalEquidistant"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistantRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAzimuthalEquidistantRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicConformal", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicConformal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicConformalRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicConformalRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualArea", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicEqualArea"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualAreaRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicEqualAreaRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistant", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicEquidistant"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistantRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicEquidistantRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEqualEarth", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoEqualEarth"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEqualEarthRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoEqualEarthRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangular", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoEquirectangular"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangularRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoEquirectangularRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGnomonic", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoGnomonic"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGnomonicRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoGnomonicRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoIdentity", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoIdentity"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoProjection", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoProjection"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoProjectionMutator", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoProjectionMutator"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoMercator", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoMercator"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoMercatorRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoMercatorRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoNaturalEarth1", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoNaturalEarth1"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoNaturalEarth1Raw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoNaturalEarth1Raw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoOrthographic", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoOrthographic"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoOrthographicRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoOrthographicRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStereographic", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoStereographic"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStereographicRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoStereographicRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercator", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoTransverseMercator"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercatorRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoTransverseMercatorRaw"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoRotation", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoRotation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStream", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoStream"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransform", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoTransform"]; }); + +/* harmony import */ var d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! d3-hierarchy */ "../../../node_modules/d3-hierarchy/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cluster", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["cluster"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hierarchy", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["hierarchy"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pack", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["pack"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "packSiblings", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["packSiblings"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "packEnclose", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["packEnclose"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["partition"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stratify", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["stratify"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tree", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["tree"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemap", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemap"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapBinary", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapBinary"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapDice", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapDice"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSlice", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapSlice"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSliceDice", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapSliceDice"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSquarify", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapSquarify"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapResquarify", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapResquarify"]; }); + +/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! d3-interpolate */ "../../../node_modules/d3-interpolate/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolate", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolate"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateArray", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateArray"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBasis", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateBasis"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBasisClosed", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateBasisClosed"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateDate", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateDate"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateDiscrete", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateDiscrete"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHue", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHue"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateNumber", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateNumber"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateObject", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateObject"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRound", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateRound"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateString", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateString"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformCss", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateTransformCss"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformSvg", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateTransformSvg"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateZoom", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateZoom"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgb", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateRgb"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasis", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateRgbBasis"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasisClosed", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateRgbBasisClosed"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHsl", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHsl"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHslLong", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHslLong"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateLab", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateLab"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHcl", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHcl"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHclLong", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHclLong"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelix", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateCubehelix"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixLong", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateCubehelixLong"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "piecewise", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["piecewise"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quantize", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["quantize"]; }); + +/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! d3-path */ "../../../node_modules/d3-path/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "path", function() { return d3_path__WEBPACK_IMPORTED_MODULE_18__["path"]; }); + +/* harmony import */ var d3_polygon__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! d3-polygon */ "../../../node_modules/d3-polygon/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonArea", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonArea"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonCentroid", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonCentroid"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonHull", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonHull"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonContains", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonContains"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonLength", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonLength"]; }); + +/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! d3-quadtree */ "../../../node_modules/d3-quadtree/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quadtree", function() { return d3_quadtree__WEBPACK_IMPORTED_MODULE_20__["quadtree"]; }); + +/* harmony import */ var d3_random__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! d3-random */ "../../../node_modules/d3-random/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomUniform", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomUniform"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomNormal", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomNormal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomLogNormal", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomLogNormal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomBates", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomBates"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomIrwinHall", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomIrwinHall"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomExponential", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomExponential"]; }); + +/* harmony import */ var d3_scale__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! d3-scale */ "../../../node_modules/d3-scale/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleBand", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleBand"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scalePoint", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scalePoint"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleIdentity", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleIdentity"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleLinear", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleLinear"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleLog", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleLog"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSymlog", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSymlog"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleOrdinal", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleOrdinal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleImplicit", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleImplicit"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scalePow", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scalePow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSqrt", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSqrt"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleQuantile", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleQuantile"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleQuantize", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleQuantize"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleThreshold", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleThreshold"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleTime", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleTime"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleUtc", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleUtc"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequential", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSequential"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialLog", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSequentialLog"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialPow", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSequentialPow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialSqrt", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSequentialSqrt"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialSymlog", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSequentialSymlog"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequentialQuantile", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSequentialQuantile"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDiverging", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleDiverging"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDivergingLog", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleDivergingLog"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDivergingPow", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleDivergingPow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDivergingSqrt", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleDivergingSqrt"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDivergingSymlog", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleDivergingSymlog"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickFormat", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["tickFormat"]; }); + +/* harmony import */ var d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! d3-scale-chromatic */ "../../../node_modules/d3-scale-chromatic/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeCategory10", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeCategory10"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeAccent", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeAccent"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeDark2", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeDark2"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePaired", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePaired"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePastel1", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePastel1"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePastel2", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePastel2"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet1", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeSet1"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet2", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeSet2"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet3", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeSet3"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBrBG", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateBrBG"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBrBG", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeBrBG"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePRGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePRGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePRGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePRGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePiYG", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePiYG"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePiYG", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePiYG"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuOr", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePuOr"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuOr", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePuOr"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdGy", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdGy"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdGy", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdGy"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdYlBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdYlBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdYlBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdYlBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdYlGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdYlGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdYlGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdYlGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateSpectral", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateSpectral"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSpectral", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeSpectral"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBuGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateBuGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBuGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeBuGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBuPu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateBuPu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBuPu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeBuPu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGnBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateGnBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGnBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeGnBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateOrRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateOrRd"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeOrRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeOrRd"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuBuGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePuBuGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuBuGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePuBuGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePuBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePuBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePuRd"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePuRd"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdPu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdPu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdPu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdPu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlGnBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateYlGnBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlGnBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeYlGnBu"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateYlGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeYlGn"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlOrBr", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateYlOrBr"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlOrBr", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeYlOrBr"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlOrRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateYlOrRd"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlOrRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeYlOrRd"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBlues", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateBlues"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBlues", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeBlues"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGreens", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateGreens"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGreens", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeGreens"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGreys", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateGreys"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGreys", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeGreys"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePurples", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePurples"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePurples", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePurples"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateReds", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateReds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeReds", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeReds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateOranges", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateOranges"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeOranges", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeOranges"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixDefault", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateCubehelixDefault"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRainbow", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRainbow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateWarm", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateWarm"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCool", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateCool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateSinebow", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateSinebow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateViridis", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateViridis"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateMagma", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateMagma"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateInferno", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateInferno"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePlasma", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePlasma"]; }); + +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! d3-selection */ "../../../node_modules/d3-selection/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "create", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["create"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "creator", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["creator"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "local", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["local"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["matcher"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouse", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["mouse"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "namespace", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["namespace"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "namespaces", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["namespaces"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "clientPoint", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["clientPoint"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "select", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["select"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectAll", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["selectAll"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selection", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["selection"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selector", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["selector"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectorAll", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["selectorAll"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "style", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["style"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touch", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["touch"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touches", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["touches"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["window"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "event", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["event"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "customEvent", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["customEvent"]; }); + +/* harmony import */ var d3_shape__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! d3-shape */ "../../../node_modules/d3-shape/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "arc", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["arc"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "area", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["area"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "line", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["line"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pie", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["pie"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "areaRadial", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["areaRadial"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "radialArea", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["radialArea"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lineRadial", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["lineRadial"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "radialLine", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["radialLine"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pointRadial", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["pointRadial"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkHorizontal", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["linkHorizontal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkVertical", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["linkVertical"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkRadial", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["linkRadial"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbol", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbol"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbols", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbols"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolCircle", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolCircle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolCross", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolCross"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolDiamond", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolDiamond"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolSquare", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolSquare"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolStar", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolStar"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolTriangle", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolTriangle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolWye", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolWye"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasisClosed", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveBasisClosed"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasisOpen", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveBasisOpen"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasis", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveBasis"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBundle", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveBundle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinalClosed", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCardinalClosed"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinalOpen", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCardinalOpen"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinal", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCardinal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomClosed", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCatmullRomClosed"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomOpen", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCatmullRomOpen"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRom", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCatmullRom"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveLinearClosed", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveLinearClosed"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveLinear", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveLinear"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneX", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveMonotoneX"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneY", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveMonotoneY"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveNatural", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveNatural"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStep", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveStep"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStepAfter", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveStepAfter"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStepBefore", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveStepBefore"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stack", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stack"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetExpand", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetExpand"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetDiverging", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetDiverging"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetNone", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetNone"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetSilhouette", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetSilhouette"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetWiggle", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetWiggle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderAppearance", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderAppearance"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderAscending", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderAscending"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderDescending", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderDescending"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderInsideOut", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderInsideOut"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderNone", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderNone"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderReverse", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderReverse"]; }); + +/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! d3-time */ "../../../node_modules/d3-time/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeInterval"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMillisecond", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMillisecond"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMilliseconds", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMilliseconds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMillisecond", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMillisecond"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMilliseconds", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMilliseconds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSecond", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSecond"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSeconds", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSeconds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSecond", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSecond"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSeconds", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSeconds"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMinute", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMinute"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMinutes", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMinutes"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeHour", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeHour"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeHours", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeHours"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeDay", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeDay"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeDays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeDays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWeek", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeWeek"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWeeks", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeWeeks"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSunday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSunday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSundays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSundays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMonday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMondays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMondays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeTuesday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeTuesday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeTuesdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeTuesdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWednesday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeWednesday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWednesdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeWednesdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeThursday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeThursday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeThursdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeThursdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFriday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeFriday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFridays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeFridays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSaturday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSaturday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSaturdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSaturdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonth", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMonth"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonths", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMonths"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeYear", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeYear"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeYears", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeYears"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMinute", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMinute"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMinutes", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMinutes"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcHour", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcHour"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcHours", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcHours"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcDay", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcDay"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcDays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcDays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWeek", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcWeek"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWeeks", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcWeeks"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSunday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSunday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSundays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSundays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMonday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMondays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMondays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcTuesday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcTuesday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcTuesdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcTuesdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWednesday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcWednesday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWednesdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcWednesdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcThursday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcThursday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcThursdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcThursdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFriday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcFriday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFridays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcFridays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSaturday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSaturday"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSaturdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSaturdays"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonth", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMonth"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonths", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMonths"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcYear", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcYear"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcYears", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcYears"]; }); + +/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! d3-time-format */ "../../../node_modules/d3-time-format/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormatDefaultLocale", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["timeFormatDefaultLocale"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormat", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["timeFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeParse", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["timeParse"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFormat", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["utcFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcParse", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["utcParse"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormatLocale", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["timeFormatLocale"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isoFormat", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["isoFormat"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isoParse", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["isoParse"]; }); + +/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! d3-timer */ "../../../node_modules/d3-timer/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "now", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["now"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["timer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timerFlush", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["timerFlush"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["timeout"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["interval"]; }); + +/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! d3-transition */ "../../../node_modules/d3-transition/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transition", function() { return d3_transition__WEBPACK_IMPORTED_MODULE_29__["transition"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "active", function() { return d3_transition__WEBPACK_IMPORTED_MODULE_29__["active"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interrupt", function() { return d3_transition__WEBPACK_IMPORTED_MODULE_29__["interrupt"]; }); + +/* harmony import */ var d3_voronoi__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! d3-voronoi */ "../../../node_modules/d3-voronoi/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "voronoi", function() { return d3_voronoi__WEBPACK_IMPORTED_MODULE_30__["voronoi"]; }); + +/* harmony import */ var d3_zoom__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! d3-zoom */ "../../../node_modules/d3-zoom/src/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoom", function() { return d3_zoom__WEBPACK_IMPORTED_MODULE_31__["zoom"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoomTransform", function() { return d3_zoom__WEBPACK_IMPORTED_MODULE_31__["zoomTransform"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoomIdentity", function() { return d3_zoom__WEBPACK_IMPORTED_MODULE_31__["zoomIdentity"]; }); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + /***/ "../../../node_modules/hsdatab/Data.js": /*!***********************************************************************************************!*\ !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/hsdatab/Data.js ***! @@ -2074,6 +31017,48 @@ exports.SeriesConfig = SeriesConfig; /***/ }), +/***/ "../../../node_modules/hsgraph/d3/graph2.js": +/*!****************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/hsgraph/d3/graph2.js ***! + \****************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const hsutil_1 = __webpack_require__(/*! hsutil */ "../../../node_modules/hsutil/index.js"); +const log = hsutil_1.log('d3.graph'); +const d3 = __webpack_require__(/*! d3 */ "../../../node_modules/d3/index.js"); +const m = __webpack_require__(/*! mithril */ "../../../node_modules/mithril/mithril.js"); +class Graph2 { + draw() { + log.info(d3); + } +} +exports.Graph2 = Graph2; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2QzL2dyYXBoMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWVBLG1DQUFxQztBQUFHLE1BQU0sR0FBRyxHQUFHLFlBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRSx5QkFBeUI7QUFDekIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRTdCLE1BQWEsTUFBTTtJQUNmLElBQUk7UUFDQSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQUpELHdCQUlDIn0= + +/***/ }), + +/***/ "../../../node_modules/hsgraph/d3/index.js": +/*!***************************************************************************************************!*\ + !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/hsgraph/d3/index.js ***! + \***************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const graph2_1 = __webpack_require__(/*! ./graph2 */ "../../../node_modules/hsgraph/d3/graph2.js"); +exports.d3 = { + Graph: graph2_1.Graph2 +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZDMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBcUM7QUFFeEIsUUFBQSxFQUFFLEdBQUc7SUFDZCxLQUFLLEVBQUcsZUFBTTtDQUNqQixDQUFDIn0= + +/***/ }), + /***/ "../../../node_modules/hsgraph/index.js": /*!************************************************************************************************!*\ !*** /Users/sth1pal/Documents/Development/JavaScript/nodejs/ts6/node_modules/hsgraph/index.js ***! @@ -2096,7 +31081,9 @@ var Grid_1 = __webpack_require__(/*! ./Grid */ "../../../node_modules/hsgraph/Gr exports.Grid = Grid_1.Grid; var Legend_1 = __webpack_require__(/*! ./Legend */ "../../../node_modules/hsgraph/Legend.js"); exports.Legend = Legend_1.Legend; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBbUM7QUFBMUIsd0JBQUEsS0FBSyxDQUFBO0FBQ2QsbUNBRW9DO0FBRjNCLDBCQUFBLE1BQU0sQ0FBQTtBQUdmLCtCQUFrQztBQUF6QixzQkFBQSxJQUFJLENBQUE7QUFDYixpQ0FBbUM7QUFBMUIsd0JBQUEsS0FBSyxDQUFBO0FBQ2QsK0JBQWtDO0FBQXpCLHNCQUFBLElBQUksQ0FBQTtBQUNiLG1DQUFvQztBQUEzQiwwQkFBQSxNQUFNLENBQUEifQ== +var d3_1 = __webpack_require__(/*! ./d3 */ "../../../node_modules/hsgraph/d3/index.js"); +exports.d3 = d3_1.d3; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBbUM7QUFBMUIsd0JBQUEsS0FBSyxDQUFBO0FBQ2QsbUNBRW9DO0FBRjNCLDBCQUFBLE1BQU0sQ0FBQTtBQUdmLCtCQUFrQztBQUF6QixzQkFBQSxJQUFJLENBQUE7QUFDYixpQ0FBbUM7QUFBMUIsd0JBQUEsS0FBSyxDQUFBO0FBQ2QsK0JBQWtDO0FBQXpCLHNCQUFBLElBQUksQ0FBQTtBQUNiLG1DQUFvQztBQUEzQiwwQkFBQSxNQUFNLENBQUE7QUFDZiwyQkFBZ0M7QUFBdkIsa0JBQUEsRUFBRSxDQUFBIn0= /***/ }), @@ -2798,14 +31785,6 @@ exports.log = log_1.log; "use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; Object.defineProperty(exports, "__esModule", { value: true }); const Date_1 = __webpack_require__(/*! ./Date */ "../../../node_modules/hsutil/Date.js"); const DEBUG = Symbol('DEBUG'); @@ -2823,7 +31802,7 @@ const gLevels = { let gGlobalLevel = gLevels[INFO]; const defDateFormat = '%YYYY%MM%DD %hh:%mm:%ss.%jjj'; let gDateFormat = defDateFormat; -let gColors = false; +let gColors = true; const color = { red: '\x1b[31m', yellow: '\x1b[33m', @@ -2864,18 +31843,10 @@ function create(_prefix, logToFile, pathExists) { } return newLevel.sym; } - function debug(msg, log2File = true) { - return __awaiter(this, void 0, void 0, function* () { return yield out(DEBUG, msg, log2File); }); - } - function info(msg, log2File = true) { - return __awaiter(this, void 0, void 0, function* () { return yield out(INFO, msg, log2File); }); - } - function warn(msg, log2File = true) { - return __awaiter(this, void 0, void 0, function* () { return yield out(WARN, msg, log2File); }); - } - function error(msg, log2File = true) { - return __awaiter(this, void 0, void 0, function* () { return yield out(ERROR, msg, log2File); }); - } + function debug(msg, log2File = true) { return out(DEBUG, msg, log2File); } + function info(msg, log2File = true) { return out(INFO, msg, log2File); } + function warn(msg, log2File = true) { return out(WARN, msg, log2File); } + function error(msg, log2File = true) { return out(ERROR, msg, log2File); } function format(fmtStr) { if (fmtStr === null) { gDateFormat = defDateFormat; @@ -2892,62 +31863,59 @@ function create(_prefix, logToFile, pathExists) { return context.prefix; } function out(lvl, msg, log2File = true) { - return __awaiter(this, void 0, void 0, function* () { - const colors = { [ERROR]: color.red + color.bold, [WARN]: color.yellow + color.bold, [DEBUG]: color.blue, [INFO]: color.green }; - let desc = gLevels[lvl]; - const filterLevel = context.level || gGlobalLevel; - if (desc.importance >= filterLevel.importance) { - const dateStr = Date_1.date(gDateFormat); - let line = (typeof msg === 'string') ? msg : inspect(msg, 0); - const logLine = `${dateStr} ${context.prefix} ${desc.desc} ${line}`; - const colorLine = `${colors[lvl] || ''} ${dateStr} ${context.prefix} ${desc.desc} ${color.clear} ${line}`; - console.log(gColors ? colorLine : logLine); - if (msg && msg.stack) { - console.log(msg.stack); - } - if (gLogFile && log2File) { - return yield context.logToFile(Date_1.date(gLogFile), logLine); - } + const colors = { [ERROR]: color.red + color.bold, [WARN]: color.yellow + color.bold, [DEBUG]: color.blue, [INFO]: color.green }; + let desc = gLevels[lvl]; + const filterLevel = context.level || gGlobalLevel; + if (desc.importance >= filterLevel.importance) { + const dateStr = Date_1.date(gDateFormat); + let line = (typeof msg === 'string') ? msg : inspect(msg, 0); + const logLine = (dateStr + ' ' + context.prefix + desc.desc + ' ' + line); + const colorLine = `${colors[lvl] || ''} ${dateStr} ${context.prefix} ${desc.desc} ${color.clear} ${line}`; + console.log(gColors ? colorLine : logLine); + if (msg && msg.stack) { + console.log(msg.stack); } - return undefined; - }); + if (gLogFile && log2File) { + return context.logToFile(Date_1.date(gLogFile), logLine); + } + } + return Promise.resolve(undefined); } function logFile(file) { - return __awaiter(this, void 0, void 0, function* () { - if (file === null) { - gLogFile = undefined; - return yield info("disabling logfile"); - } - else if (file === undefined) { - return Date_1.date(gLogFile); - } - else if (file.indexOf('/') >= 0) { - return yield context.pathExists(file) - .then((exists) => __awaiter(this, void 0, void 0, function* () { - if (!exists) { - gLogFile = undefined; - return yield warn(`path '${file}' doesn't exists; logfile disabled`); - } - gLogFile = file; - return yield info("now logging to file " + Date_1.date(file)); - })) - .catch(() => __awaiter(this, void 0, void 0, function* () { + if (file === null) { + gLogFile = undefined; + return info("disabling logfile"); + } + else if (file === undefined) { + return Promise.resolve(Date_1.date(gLogFile)); + } + else if (file.indexOf('/') >= 0) { + return context.pathExists(file) + .then((exists) => { + if (!exists) { gLogFile = undefined; - return yield error(`checking path ${file}; logfile disabled`); - })); - } - else if (file === '') { - file = 'log-%YYYY-%MM-%DD.txt'; - } - else { - } - gLogFile = file; - return yield info(gLogFile ? `now logging to file ${Date_1.date(gLogFile)}` : 'logfile disbaled'); - }); + return warn(`path '${file}' doesn't exists; logfile disabled`); + } + gLogFile = file; + return info("now logging to file " + Date_1.date(file)); + }) + .catch(() => { + gLogFile = undefined; + return error(`checking path ${file}; logfile disabled`); + }); + } + else if (file === '') { + file = 'log-%YYYY-%MM-%DD.txt'; + } + else { + } + gLogFile = file; + return info(gLogFile ? `now logging to file ${Date_1.date(gLogFile)}` : 'logfile disbaled'); } function config(cfg) { + let colors = true; if (cfg.colors !== undefined) { - gColors = cfg.colors; + gColors = colors = cfg.colors; } if (cfg.format !== undefined) { format(cfg.format); @@ -3003,7 +31971,7 @@ function create(_prefix, logToFile, pathExists) { newLog.inspect = inspect; return newLog; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBK0VBLGlDQUFrQztBQUdsQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFHOUIsTUFBTSxJQUFJLEdBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRzlCLE1BQU0sSUFBSSxHQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUc5QixNQUFNLEtBQUssR0FBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFHL0IsSUFBSSxRQUFnQixDQUFDO0FBTThDLENBQUM7QUFHcEUsTUFBTSxPQUFPLEdBQUc7SUFDWixDQUFDLEtBQUssQ0FBQyxFQUFLLEVBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUM7SUFDdEQsQ0FBQyxJQUFJLENBQUMsRUFBTSxFQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRyxJQUFJLEVBQUUsTUFBTSxFQUFDO0lBQ3JELENBQUMsSUFBSSxDQUFDLEVBQU0sRUFBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUcsSUFBSSxFQUFFLE1BQU0sRUFBQztJQUNyRCxDQUFDLEtBQUssQ0FBQyxFQUFLLEVBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUM7Q0FDekQsQ0FBQztBQUdGLElBQUksWUFBWSxHQUFhLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUczQyxNQUFNLGFBQWEsR0FBRyw4QkFBOEIsQ0FBQztBQUNyRCxJQUFJLFdBQVcsR0FBTyxhQUFhLENBQUM7QUFHcEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBR3BCLE1BQU0sS0FBSyxHQUFHO0lBQ1YsR0FB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 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStFQSxpQ0FBa0M7QUFHbEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRzlCLE1BQU0sSUFBSSxHQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUc5QixNQUFNLElBQUksR0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFHOUIsTUFBTSxLQUFLLEdBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRy9CLElBQUksUUFBZ0IsQ0FBQztBQU04QyxDQUFDO0FBR3BFLE1BQU0sT0FBTyxHQUFHO0lBQ1osQ0FBQyxLQUFLLENBQUMsRUFBSyxFQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDO0lBQ3RELENBQUMsSUFBSSxDQUFDLEVBQU0sRUFBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUcsSUFBSSxFQUFFLE1BQU0sRUFBQztJQUNyRCxDQUFDLElBQUksQ0FBQyxFQUFNLEVBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFHLElBQUksRUFBRSxNQUFNLEVBQUM7SUFDckQsQ0FBQyxLQUFLLENBQUMsRUFBSyxFQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDO0NBQ3pELENBQUM7QUFHRixJQUFJLFlBQVksR0FBYSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFHM0MsTUFBTSxhQUFhLEdBQUcsOEJBQThCLENBQUM7QUFDckQsSUFBSSxXQUFXLEdBQU8sYUFBYSxDQUFDO0FBR3BDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUduQixNQUFNLEtBQUssR0FBRztJQUNWLEdBQUcsRUFBSyxV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 /***/ }), @@ -11669,6 +40637,9 @@ function signature(s, mdl) { case 'Method': case 'Function': case 'Constructor': + case 'External module': + case 'Class': + case 'Variable': sig.unshift(index_js_1.m('span.hs-item-name', '(')); sig.push(index_js_1.m('span.hs-item-name', ')')); break; @@ -11756,7 +40727,7 @@ function makeID(section, mdl) { return (result !== '') ? result : undefined; } exports.makeID = makeID; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlldy9QYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1FQUErRDtBQUMvRCx1Q0FBb0M7QUFDcEMsd0NBQXFDO0FBQ3JDLGlFQUFrRTtBQUFFLE1BQU0sR0FBRyxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUU5RixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFJL0IsU0FBZ0IsS0FBSyxDQUFDLEdBQU8sRUFBRSxTQUFnQixFQUFFO0lBQzdDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEQsTUFBTSxVQUFVLEdBQUc7UUFDZixVQUFVLEVBQWMsUUFBUTtRQUNoQyxVQUFVLEVBQWMsVUFBVTtRQUNsQyxRQUFRLEVBQWdCLFFBQVE7UUFDaEMsU0FBUyxFQUFlLFNBQVM7UUFDakMsV0FBVyxFQUFhLFdBQVc7UUFDbkMscUJBQXFCLEVBQUcscUJBQXFCO1FBQzdDLFVBQVUsRUFBYyxVQUFVO1FBQ2xDLE9BQU8sRUFBaUIsT0FBTztRQUMvQixLQUFLLEVBQW1CLEtBQUs7UUFDN0IsS0FBSyxFQUFtQixLQUFLO1FBQzdCLFFBQVEsRUFBZ0IsUUFBUTtRQUNoQyxVQUFVLEVBQWMsVUFBVTtLQUNyQyxDQUFDO0lBQ0YsT0FBTyxZQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUNwQyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7WUFDaEIsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFB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 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlldy9QYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1FQUErRDtBQUMvRCx1Q0FBb0M7QUFDcEMsd0NBQXFDO0FBQ3JDLGlFQUFrRTtBQUFFLE1BQU0sR0FBRyxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUU5RixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFJL0IsU0FBZ0IsS0FBSyxDQUFDLEdBQU8sRUFBRSxTQUFnQixFQUFFO0lBQzdDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEQsTUFBTSxVQUFVLEdBQUc7UUFDZixVQUFVLEVBQWMsUUFBUTtRQUNoQyxVQUFVLEVBQWMsVUFBVTtRQUNsQyxRQUFRLEVBQWdCLFFBQVE7UUFDaEMsU0FBUyxFQUFlLFNBQVM7UUFDakMsV0FBVyxFQUFhLFdBQVc7UUFDbkMscUJBQXFCLEVBQUcscUJBQXFCO1FBQzdDLFVBQVUsRUFBYyxVQUFVO1FBQ2xDLE9BQU8sRUFBaUIsT0FBTztRQUMvQixLQUFLLEVBQW1CLEtBQUs7UUFDN0IsS0FBSyxFQUFtQixLQUFLO1FBQzdCLFFBQVEsRUFBZ0IsUUFBUTtRQUNoQyxVQUFVLEVBQWMsVUFBVTtLQUNyQyxDQUFDO0lBQ0YsT0FBTyxZQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUNwQyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7WUFDaEIsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFB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 /***/ }), @@ -11780,4 +40751,4 @@ exports.tooltip = tooltip; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZGF0YWIvRGF0YS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNkYXRhYi9EYXRhRmlsdGVycy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNkYXRhYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9BeGVzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2dyYXBoL0NhbnZhcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9DaGFydC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9HcmFwaC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9HcmlkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2dyYXBoL0xlZ2VuZC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9QbG90LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2dyYXBoL1Bsb3RBcmVhLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2dyYXBoL1Bsb3RCYXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvUGxvdExpbmUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvUGxvdE1hcmtlcnMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvU1ZHRWxlbS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9TY2FsZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9TZXJpZXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzbGF5b3V0L0NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzbGF5b3V0L21pdGhyaWwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzbGF5b3V0L3ZpZXcvTGF5b3V0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2xheW91dC92aWV3L0xheW91dGVyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2xheW91dC92aWV3L1BpbGxhcmVkTGF5b3V0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzbGF5b3V0L3ZpZXcvVGlsZUxheW91dGVyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2xheW91dC92aWV3L1Rva2Vucy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN1dGlsL0NoZWNrc3VtLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3V0aWwvRGF0ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN1dGlsL051bWJlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN1dGlsL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3V0aWwvbG9nLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3V0aWwvcHJvbWlzZXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L0J1dHRvbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvQ29sbGFwc2libGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L0xhYmVsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9NZW51LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9Nb2RhbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvT3B0aW9uc0J1dHRvbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvUmFkaW9CdXR0b24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L1NlbGVjdG9yLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9TbGlkZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L1RvZ2dsZUJ1dHRvbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvVG9vbGJhckJ1dHRvbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvVHlwZUFoZWFkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvbWl0aHJpbC9taXRocmlsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL3Nob3dkb3duL2Rpc3Qvc2hvd2Rvd24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vRG9jU2V0cy5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vU2l0ZS5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vYmluL21hcmtkb3duLmpzIiwid2VicGFjazovLy8uL2Jpbi92aWV3L0RvY3NNZW51LmpzIiwid2VicGFjazovLy8uL2Jpbi92aWV3L0xlZnROYXYuanMiLCJ3ZWJwYWNrOi8vLy4vYmluL3ZpZXcvTWFpbkNvbW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vYmluL3ZpZXcvTWFpbkRldGFpbC5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vdmlldy9NYWluRXhhbXBsZS5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vdmlldy9QYXJ0cy5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vdmlldy9Ub29sdGlwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxzQkFBc0IsbUJBQU8sQ0FBQyxtRUFBZTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxJQUFJO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYSxZQUFZO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QyxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLDJEQUEyRDtBQUMzRCxxRkFBcUY7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtQkFBbUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEhBQTRIO0FBQzVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIscUJBQXFCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Ozs7O0FDeHVDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOzs7Ozs7Ozs7Ozs7QUN2THRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3pMRCxtQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHlDQUF5QyxFQUFFO0FBQzNDO0FBQ0E7QUFD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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGlCQUFpQjtBQUNqRSxvREFBb0Qs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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBLCtEQUErRDtBQUMvRDs7QUFFQTs7QUFFQTtBQUNBLHlDQUF5QztBQUN6QyxxRUFBcUU7QUFDckU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxFQUFFO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQSxvRUFBb0UsRUFBRTtBQUN0RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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QTtBQUNBLDJDQUEyQywyWiIsImZpbGUiOiJoc0RvY3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL2Jpbi9pbmRleC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgRGF0YUZpbHRlcnNfMSA9IHJlcXVpcmUoXCIuL0RhdGFGaWx0ZXJzXCIpO1xuO1xuY2xhc3MgRGF0YSB7XG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5tZXRhID0gW107XG4gICAgICAgIHRoaXMuaW1wb3J0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9EYXRhU2V0KGRhdGEsIG5hbWUpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEgfHwgW3t9XTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhkYXRhWzBdKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKChyKSA9PiBuYW1lcy5tYXAoKG4pID0+IHJbbl0pKTtcbiAgICAgICAgcmV0dXJuIHsgcm93czogcm93cywgY29sTmFtZXM6IG5hbWVzLCBuYW1lOiBuYW1lIHx8IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBnZXROYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cbiAgICBpbXBvcnQoZGF0YSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhLnJvd3MsIGRhdGEuY29sTmFtZXMpO1xuICAgIH1cbiAgICBleHBvcnQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3dzOiB0aGlzLmdldERhdGEoKSxcbiAgICAgICAgICAgIGNvbE5hbWVzOiB0aGlzLmNvbE5hbWVzKClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG4gICAgZ2V0Q29sdW1uKGNvbCkge1xuICAgICAgICBjb25zdCBjbiA9IHRoaXMuY29sTnVtYmVyKGNvbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWFwKChyb3cpID0+IHJvd1tjbl0pO1xuICAgIH1cbiAgICBjb2xBZGQoY29sKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5nZXRNZXRhKGNvbCk7XG4gICAgICAgIGlmIChtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG0gPSB0aGlzLm1ldGFbY29sXSA9IHt9O1xuICAgICAgICAgICAgbS5uYW1lID0gY29sO1xuICAgICAgICAgICAgbS5jb2x1bW4gPSB0aGlzLm1ldGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5tZXRhLnB1c2gobSk7XG4gICAgICAgICAgICBtLmNhc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIG0uYWNjZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG4gICAgY29sSW5pdGlhbGl6ZShjb2wsIGluaXRpYWxpemVyKSB7XG4gICAgICAgIGNvbnN0IGZuID0gdHlwZW9mIGluaXRpYWxpemVyID09PSAnZnVuY3Rpb24nO1xuICAgICAgICBsZXQgY24gPSB0aGlzLmdldE1ldGEoY29sKTtcbiAgICAgICAgaWYgKCFjbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2wgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY24gPSB0aGlzLmNvbEFkZChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb2x1bW4gJHtjb2x9IGRvZXMgbm90IGV4aXN0IGluIERhdGFgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGEubWFwKChyb3csIHJvd0luZGV4KSA9PiByb3dbY24uY29sdW1uXSA9IGZuID8gaW5pdGlhbGl6ZXIocm93W2NuLmNvbHVtbl0sIHJvd0luZGV4LCByb3cpIDogaW5pdGlhbGl6ZXIpO1xuICAgICAgICByZXR1cm4gY24uY29sdW1uO1xuICAgIH1cbiAgICBjb2xOdW1iZXIoY29sKSB7XG4gICAgICAgIGNvbnN0IG0gPSB0aGlzLmdldE1ldGEoY29sKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbS5hY2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbS5jb2x1bW47XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29sTmFtZShjb2wpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzLmdldE1ldGEoY29sKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIG0uYWNjZXNzZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gbS5uYW1lO1xuICAgIH1cbiAgICBjb2xOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YS5tYXAoKG0pID0+IG0ubmFtZSk7XG4gICAgfVxuICAgIGNvbFR5cGUoY29sKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldE1ldGEoY29sKTtcbiAgICAgICAgcmV0dXJuIG1ldGEgPyBtZXRhLnR5cGVzWzBdLnR5cGUgOiBEYXRhLnR5cGUubmFtZTtcbiAgICB9XG4gICAgZmluZERvbWFpbihjb2wsIGRvbWFpbikge1xuICAgICAgICBpZiAoZG9tYWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRvbWFpbiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZG9tYWluWzBdID0gMDtcbiAgICAgICAgICAgIGRvbWFpblsxXSA9IHRoaXMuZGF0YS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuY29sTnVtYmVyKGNvbCk7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5jb2xUeXBlKGNvbCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERhdGEudHlwZS5uYW1lOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9tRG9tID0gZG9tYWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vbURvbS5pbmRleE9mKCcnICsgcltjXSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9tRG9tLnB1c2goJycgKyByW2NdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YS50eXBlLmRhdGU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMudG9EYXRlKHJbY10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWFpblswXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluWzBdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21haW5bMV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblsxXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA8IGRvbWFpblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5bMF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2ID4gZG9tYWluWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblsxXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2ID0gcGFyc2VGbG9hdChyW2NdLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWFpblswXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluWzBdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21haW5bMV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblsxXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA8IGRvbWFpblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5bMF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2ID4gZG9tYWluWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblsxXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tYWluO1xuICAgIH1cbiAgICBjYXN0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5tZXRhLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGMuY29sdW1uO1xuICAgICAgICAgICAgaWYgKCFjLmNhc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocm93KSA9PiByb3dbY29sXSA9IHRoaXMuY2FzdFZhbChjLnR5cGVzWzBdLnR5cGUsIHJvd1tjb2xdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjLmNhc3QgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmlsdGVyKGNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gRGF0YUZpbHRlcnNfMS5maWx0ZXIodGhpcywgY29uZGl0aW9uKTtcbiAgICB9XG4gICAgc29ydChzb3J0Rm4sIGNvbCkge1xuICAgICAgICBsZXQgZm4gPSBzb3J0Rm47XG4gICAgICAgIGlmICghY29sKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc29ydChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb2wgPSB0aGlzLmNvbE51bWJlcihjb2wpO1xuICAgICAgICAgICAgaWYgKHNvcnRGbiA9PT0gJ2Rlc2NlbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgZm4gPSAoYSwgYikgPT4gKGIgPiBhKSA/IDEgOiAoKGIgPCBhKSA/IC0xIDogMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc29ydEZuID09PSAnYXNjZW5kaW5nJykge1xuICAgICAgICAgICAgICAgIGZuID0gKGEsIGIpID0+IChiIDwgYSkgPyAxIDogKChiID4gYSkgPyAtMSA6IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRhLnNvcnQoKHIxLCByMikgPT4gZm4ocjFbY29sXSwgcjJbY29sXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBtYXAobWFwRm4sIGNvbCkge1xuICAgICAgICBjb25zdCBub29wID0gKHZhbCkgPT4gdmFsO1xuICAgICAgICBjb25zdCBjdW11bGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuICh2YWwsIGkpID0+IHsgc3VtICs9ICt2YWw7IHJldHVybiBzdW07IH07XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIGdldEZuKCkge1xuICAgICAgICAgICAgbGV0IGZuO1xuICAgICAgICAgICAgc3dpdGNoIChtYXBGbikge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2N1bXVsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgZm4gPSBjdW11bGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdub29wJzpcbiAgICAgICAgICAgICAgICAgICAgZm4gPSBub29wO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmbiA9IG1hcEZuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmbiA9IGdldEZuKCk7XG4gICAgICAgIGNvbnN0IGMgPSBjb2wgPyB0aGlzLmNvbE51bWJlcihjb2wpIDogdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IERhdGEoe1xuICAgICAgICAgICAgY29sTmFtZXM6IHRoaXMuY29sTmFtZXMoKSxcbiAgICAgICAgICAgIHJvd3M6IHRoaXMuZGF0YS5tYXAoKHJvdywgcm93SW5kZXgsIHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICByb3dbY10gPSBmbihyb3dbY10sIGMsIHJvd0luZGV4LCByb3dzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3Nbcm93SW5kZXhdID0gZm4ocm93LCByb3dJbmRleCwgcm93cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0TmFtZSgpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBnZXRNZXRhKGNvbCkge1xuICAgICAgICBpZiAoIXRoaXMubWV0YVtjb2xdKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YVtjb2xdLmFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YVtjb2xdO1xuICAgIH1cbiAgICBzZXREYXRhKGRhdGEsIG5hbWVzLCBhdXRvVHlwZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5tZXRhID0gW107XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIG5hbWVzLmZvckVhY2goKGNvbCkgPT4gdGhpcy5jb2xBZGQoY29sKSk7XG4gICAgICAgIG5hbWVzLmZvckVhY2goKGNvbCkgPT4gdGhpcy5maW5kVHlwZXMoY29sKSk7XG4gICAgICAgIHRoaXMuY2FzdERhdGEoKTtcbiAgICB9XG4gICAgZmluZFR5cGVzKGNvbCkge1xuICAgICAgICBjb25zdCBtID0gdGhpcy5nZXRNZXRhKGNvbCk7XG4gICAgICAgIGNvbnN0IHR5cGVzID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKERhdGEudHlwZSkuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHMgPSB7IHR5cGU6IERhdGEudHlwZVt0XSwgY291bnQ6IDAgfTtcbiAgICAgICAgICAgIHR5cGVzLnB1c2godHMpO1xuICAgICAgICAgICAgdHlwZXNbRGF0YS50eXBlW3RdXSA9IHRzO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChsZXQgdiBvZiB0aGlzLmFsbFJvd3MoY29sKSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMuZmluZFR5cGUodik7XG4gICAgICAgICAgICBpZiAodCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHR5cGVzW3RdLmNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHlwZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgaWYgKGEudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJiBhLmNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiLnR5cGUgPT09ICdjdXJyZW5jeScgJiYgYi5jb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiLmNvdW50IC0gYS5jb3VudDtcbiAgICAgICAgfSk7XG4gICAgICAgIG0udHlwZXMgPSB0eXBlcztcbiAgICAgICAgcmV0dXJuIHR5cGVzWzBdLnR5cGU7XG4gICAgfVxuICAgIGZpbmRUeXBlKHZhbCkge1xuICAgICAgICBpZiAodmFsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGEudHlwZS5kYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGEudHlwZS5udW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJWYWwgPSAnJyArIHZhbDtcbiAgICAgICAgICAgIGlmICgnJyArIHBhcnNlRmxvYXQoc3RyVmFsKSA9PT0gc3RyVmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGEudHlwZS5udW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyVmFsLnN0YXJ0c1dpdGgoJyQnKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChzdHJWYWwuc2xpY2UoMSkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBEYXRhLnR5cGUuY3VycmVuY3k7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyVmFsLmVuZHNXaXRoKCclJykgJiYgIWlzTmFOKHBhcnNlRmxvYXQoc3RyVmFsKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0YS50eXBlLnBlcmNlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMudG9EYXRlKHN0clZhbCkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBEYXRhLnR5cGUuZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RyVmFsLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVsbFwiOiBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiI3JlZiFcIjogYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogaWYgKHZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRhLnR5cGUubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgICphbGxSb3dzKGNvbHVtbikge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jb2xOdW1iZXIoY29sdW1uKTtcbiAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCB0aGlzLmRhdGEubGVuZ3RoOyByKyspIHtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuZGF0YVtyXVtjXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0RhdGUodmFsLCBsaW1pdFllYXIgPSAxOTcwKSB7XG4gICAgICAgIGxldCBkO1xuICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgZCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICAgICAgaWYgKCFpc05hTihkLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IFJlZ0V4cChgXFxcXGRcXFxcZCR7ZC5nZXRGdWxsWWVhcigpICUgMTAwfWAsICdnJyk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWwubWF0Y2gocikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeXIgPSAxOTAwICsgZC5nZXRGdWxsWWVhcigpICUgMTAwO1xuICAgICAgICAgICAgICAgICAgICBkLnNldEZ1bGxZZWFyKCh5ciA8IGxpbWl0WWVhcikgPyB5ciArIDEwMCA6IHlyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuICAgIGNhc3RWYWwodHlwZSwgdmFsKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB2YWw7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhLnR5cGUuZGF0ZTpcbiAgICAgICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLnRvRGF0ZSh2YWwpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihyZXN1bHQuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGF0YS50eXBlLnBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IHBhcnNlRmxvYXQodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsLmVuZHNXaXRoKCclJykgPyBudW0gLyAxMDAgOiBudW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc05hTihyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhLnR5cGUuY3VycmVuY3k6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSA/IHZhbC5yZXBsYWNlKC9bXmVFXFwrXFwtXFwuXFxkXS9nLCAnJykgOiB2YWw7XG4gICAgICAgICAgICBjYXNlIERhdGEudHlwZS5udW1iZXI6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlRmxvYXQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXN1bHQgPSAnJyArIHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbkRhdGEudHlwZSA9IHtcbiAgICBudW1iZXI6ICdudW1iZXInLFxuICAgIG5hbWU6ICduYW1lJyxcbiAgICBkYXRlOiAnZGF0ZScsXG4gICAgY3VycmVuY3k6ICdjdXJyZW5jeScsXG4gICAgcGVyY2VudDogJ3BlcmNlbnQnLFxufTtcbmV4cG9ydHMuRGF0YSA9IERhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSR0YwWVM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OUVZWFJoTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJTVUVzSzBOQlFXdEVPMEZCZFVORkxFTkJRVU03UVVGelFuSkVMRTFCUVdFc1NVRkJTVHRKUVdkRFlpeFpRVUZaTEVsQlFXRTdVVUZwVldwQ0xGTkJRVWtzUjBGQmFVSXNSVUZCUlN4RFFVRkRPMUZCUTNoQ0xGTkJRVWtzUjBGQmFVSXNSVUZCUlN4RFFVRkRPMUZCYWxVMVFpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRM1JDTEVOQlFVTTdTVUZXVFN4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVzFDTEVWQlFVVXNTVUZCV1R0UlFVTnlSQ3hKUVVGSkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRjRUlzVFVGQlRTeExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnVReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVVzUTBGRE5VSXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51UXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVWQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJReXhKUVVGSkxFbEJRVVVzVTBGQlV5eEZRVUZGTEVOQlFVTTdTVUZETDBRc1EwRkJRenRKUVZOTkxFOUJRVTg3VVVGRFZpeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRja0lzUTBGQlF6dEpRVTFOTEUxQlFVMHNRMEZCUXl4SlFVRlpPMUZCUTNSQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOMFFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMGxCUXpORExFTkJRVU03U1VGTFRTeE5RVUZOTzFGQlExUXNUMEZCVHp0WlFVTklMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEzQkNMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTzFOQlF6TkNMRU5CUVVNN1NVRkRUaXhEUVVGRE8wbEJTMDBzVDBGQlR6dFJRVU5XTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVOeVFpeERRVUZETzBsQlRVMHNVMEZCVXl4RFFVRkRMRWRCUVcxQ08xRkJRMmhETEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZETDBJc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVZjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRia1FzUTBGQlF6dEpRVkZOTEUxQlFVMHNRMEZCUXl4SFFVRlZPMUZCUTNCQ0xFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhGUVVGRk8xbEJRMnBDTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZsTEVWQlFVVXNRMEZCUXp0WlFVTndReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZMTEVkQlFVY3NRMEZCUXp0WlFVTm1MRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1dVRkROVUlzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGJFSXNRMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJUeXhMUVVGTExFTkJRVU03V1VGRGJrSXNRMEZCUXl4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03VTBGRGRFSTdVVUZEUkN4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVOaUxFTkJRVU03U1VGWlRTeGhRVUZoTEVOQlFVTXNSMEZCYlVJc1JVRkJSU3hYUVVFd1FqdFJRVU5vUlN4TlFVRk5MRVZCUVVVc1IwRkJSeXhQUVVGUExGZEJRVmNzUzBGQlN5eFZRVUZWTEVOQlFVTTdVVUZETjBNc1NVRkJTU3hGUVVGRkxFZEJRV01zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTB3c1NVRkJTU3hQUVVGUExFZEJRVWNzUzBGQlN5eFJRVUZSTEVWQlFVVTdaMEpCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1lVRkJSVHRwUWtGRGJFUTdaMEpCUVVVc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFZRVUZWTEVkQlFVY3NlVUpCUVhsQ0xFTkJRVU1zUTBGQlF6dGhRVUZGTzFOQlEzQkZPMUZCUTBRc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRlhMRVZCUVVVc1VVRkJaU3hGUVVGRkxFVkJRVVVzUTBGRE0wTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVRXNRMEZCUXl4RFFVRlZMRmRCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFWVXNWMEZCVnl4RFFVTnVSeXhEUVVGRE8xRkJRMFlzVDBGQlR5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUTNKQ0xFTkJRVU03U1VGUlRTeFRRVUZUTEVOQlFVTXNSMEZCYlVJN1VVRkRhRU1zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU0xUWl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRk8xbEJRVVVzVDBGQlR5eFRRVUZUTEVOQlFVTTdVMEZCUlR0aFFVTjRRanRaUVVORUxFTkJRVU1zUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUTJ4Q0xFOUJRVThzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0VFFVTnVRanRKUVVOTUxFTkJRVU03U1VGUlRTeFBRVUZQTEVOQlFVTXNSMEZCYlVJN1VVRkRPVUlzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU14UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRk8xbEJRVVVzVDBGQlR5eFRRVUZUTEVOQlFVTTdVMEZCUlR0UlFVTTNRaXhEUVVGRExFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnNRaXhQUVVGUExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVUxTkxGRkJRVkU3VVVGRFdDeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQldTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGJrUXNRMEZCUXp0SlFWRk5MRTlCUVU4c1EwRkJReXhIUVVGdFFqdFJRVU01UWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUXk5Q0xFOUJRVThzU1VGQlNTeERRVUZCTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTTdTVUZEY2tRc1EwRkJRenRKUVZOTkxGVkJRVlVzUTBGQlF5eEhRVUZ2UWl4RlFVRkZMRTFCUVdNN1VVRkRiRVFzU1VGQlNTeE5RVUZOTEV0QlFVY3NVMEZCVXl4RlFVRkZPMWxCUVVVc1RVRkJUU3hIUVVGWExFVkJRVVVzUTBGQlF6dFRRVUZGTzFGQlEyaEVMRWxCUVVrc1IwRkJSeXhMUVVGTExGTkJRVk1zUlVGQlJUdFpRVU51UWl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyUXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOc1F6dGhRVUZOTzFsQlEwZ3NUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTTVRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJReTlDTEZGQlFVOHNTVUZCU1N4RlFVRkZPMmRDUVVOVUxFdEJRVXNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpPMjlDUVVObUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJVeXhGUVVGRkxFVkJRVVU3ZDBKQlF6VkNMRTFCUVUwc1RVRkJUU3hIUVVGaExFMUJRVTBzUTBGQlF6dDNRa0ZEYUVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVTdORUpCUVVVc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZVVKQlFVVTdiMEpCUXpsRUxFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTklMRTFCUVUwN1owSkJRMVlzUzBGQlN5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrN2IwSkJRMllzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGVExFVkJRVVVzUlVGQlJUdDNRa0ZETlVJc1NVRkJTU3hEUVVGRExFZEJRVkVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dDNRa0ZETDBJc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVY3NVMEZCVXl4RlFVRkZPelJDUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2VVSkJRVVU3ZDBKQlF6ZERMRWxCUVVrc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZITEZOQlFWTXNSVUZCUlRzMFFrRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPM2xDUVVGRk8zZENRVU0zUXl4SlFVRkpMRU5CUVVNc1MwRkJSeXhUUVVGVExFbEJRVWtzUTBGQlF5eExRVUZITEVsQlFVa3NSVUZCUlRzMFFrRkRNMElzU1VGQlNTeERRVUZETEVkQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZERRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03TmtKQlFVVTdhVU5CUXpsQ0xFbEJRVWtzUTBGQlF5eEhRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVHRuUTBGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE96WkNRVUZGTzNsQ1FVTXpRenR2UWtGRFRDeERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRTQ3hOUVVGTk8yZENRVU5XTzI5Q1FVTkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVVVN2QwSkJRelZDTEVsQlFVa3NRMEZCUXl4SFFVRlZMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJRenQzUWtGRE0wTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVWNzVTBGQlV5eEZRVUZGT3pSQ1FVRkZMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdlVUpCUVVVN2QwSkJRemRETEVsQlFVa3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGSExGTkJRVk1zUlVGQlJUczBRa0ZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzNsQ1FVRkZPM2RDUVVNM1F5eEpRVUZKTEVOQlFVTXNTMEZCUnl4VFFVRlRMRWxCUVVrc1EwRkJReXhMUVVGSExFbEJRVWtzUlVGQlJUczBRa0ZETTBJc1NVRkJTU3hEUVVGRExFZEJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmREUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN05rSkJRVVU3YVVOQlF6bENMRWxCUVVrc1EwRkJReXhIUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0blEwRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPelpDUVVGRk8zbENRVU16UXp0dlFrRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5XTzFOQlEwbzdVVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlJVMHNVVUZCVVR0UlFVTllMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCV1N4RlFVRkZMRVZCUVVVN1dVRkRMMElzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVOeVFpeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSVHRuUWtGRFZDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVmNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU14Ump0WlFVTkVMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEyeENMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMUFzUTBGQlF6dEpRVk5OTEUxQlFVMHNRMEZCUXl4VFFVRnRRanRSUVVNM1FpeFBRVUZQTEc5Q1FVRk5MRU5CUVVNc1NVRkJTU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzBsQlEyNURMRU5CUVVNN1NVRTBRazBzU1VGQlNTeERRVUZETEUxQlFXOUNMRVZCUVVVc1IwRkJiMEk3VVVGRGJFUXNTVUZCU1N4RlFVRkZMRWRCUVZjc1RVRkJUU3hEUVVGRE8xRkJRM2hDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVN1dVRkRUaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRUUVVOMFFqdGhRVUZOTzFsQlEwZ3NSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZETVVJc1NVRkJTU3hOUVVGTkxFdEJRVXNzV1VGQldTeEZRVUZGTzJkQ1FVRkZMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVXNzUlVGQlJTeERRVUZMTEVWQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVGRk8xbEJRemxGTEVsQlFVa3NUVUZCVFN4TFFVRkxMRmRCUVZjc1JVRkJSenRuUWtGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkxMRVZCUVVVc1EwRkJTeXhGUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZCUlR0WlFVTTVSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVZFc1JVRkJSU3hGUVVGUkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOb1JUdFJRVU5FTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VFMFEwMHNSMEZCUnl4RFFVRkRMRXRCUVRKQ0xFVkJRVVVzUjBGQmIwSTdVVUZEZUVRc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEhRVUZQTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVNNVFpeE5RVUZOTEZGQlFWRXNSMEZCUnl4SFFVRkhMRVZCUVVVN1dVRkRiRUlzU1VGQlNTeEhRVUZITEVkQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTFZc1QwRkJUeXhEUVVGRExFZEJRVlVzUlVGQlJTeERRVUZSTEVWQlFVVXNSVUZCUlN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMnhGTEVOQlFVTXNRMEZCUXp0UlFVTkdMRk5CUVZNc1MwRkJTenRaUVVOV0xFbEJRVWtzUlVGQlJTeERRVUZETzFsQlExQXNVVUZCVVN4TFFVRkxMRVZCUVVVN1owSkJRMWdzUzBGQlN5eFZRVUZWTzI5Q1FVRkZMRVZCUVVVc1IwRkJSeXhSUVVGUkxFVkJRVVVzUTBGQlF6dHZRa0ZCUXl4TlFVRk5PMmRDUVVONFF5eExRVUZMTEUxQlFVMDdiMEpCUVUwc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF6dHZRa0ZCUXl4TlFVRk5PMmRDUVVOc1F5eFBRVUZQTEVOQlFVTXNRMEZCVXl4RlFVRkZMRWRCUVcxQ0xFdEJRVXNzUTBGQlF6dGhRVU12UXp0WlFVTkVMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMlFzUTBGQlF6dFJRVVZFTEVsQlFVa3NSVUZCUlN4SFFVRkhMRXRCUVVzc1JVRkJSU3hEUVVGRE8xRkJRMnBDTEUxQlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJRU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETzFGQlF5OURMRWxCUVVrc1RVRkJUU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETzFsQlEyeENMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTzFsQlEzaENMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVZNc1JVRkJSU3hSUVVGbExFVkJRVVVzU1VGQldTeEZRVUZGTEVWQlFVVTdaMEpCUXpWRUxFbEJRVWtzUTBGQlF5eEZRVUZGTzI5Q1FVTklMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlZ5eEZRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN2FVSkJRMjVFTzNGQ1FVRk5PMjlDUVVOSUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCWXl4RlFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0cFFrRkRlRVE3WjBKQlEwUXNUMEZCVHl4SFFVRkhMRU5CUVVNN1dVRkRaaXhEUVVGRExFTkJRVU03V1VGRFJpeEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRUUVVOMFFpeERRVUZETEVOQlFVTTdVVUZEU0N4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlUwOHNUMEZCVHl4RFFVRkRMRWRCUVcxQ08xRkJSUzlDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTzFsQlFVVXNUMEZCVHl4VFFVRlRMRU5CUVVNN1UwRkJSVHRSUVVNeFF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZETDBJc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpGQ0xFTkJRVU03U1VGWFR5eFBRVUZQTEVOQlFVTXNTVUZCWXl4RlFVRkZMRXRCUVdNc1JVRkJSU3hSUVVGUkxFZEJRVU1zU1VGQlNUdFJRVU42UkN4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU5tTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5vUkN4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYmtRc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzBsQlEzQkNMRU5CUVVNN1NVRlRUeXhUUVVGVExFTkJRVU1zUjBGQmJVSTdVVUZEYWtNc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVNMVFpeE5RVUZOTEV0QlFVc3NSMEZCWjBJc1JVRkJSU3hEUVVGRE8xRkJRemxDTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRk8xbEJRM2hETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6VkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdXVUZEWml4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNM1FpeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRXRCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSVHRaUVVNM1FpeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6TkNMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWtzUlVGQlJUdG5Ra0ZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdZVUZCUlR0VFFVTjRRenRSUVVORUxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVXl4RFFVRlpMRVZCUVVVc1EwRkJXVHRaUVVNeFF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRXRCUVVjc1ZVRkJWU3hKUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZCUlR0WlFVTnNSQ3hKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEV0QlFVY3NWVUZCVlN4SlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8yRkJRVVU3V1VGRGFrUXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdVVUZETjBJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOb1FpeFBRVUZQTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03U1VGRGVrSXNRMEZCUXp0SlFXRlBMRkZCUVZFc1EwRkJReXhIUVVGWE8xRkJRM2hDTEVsQlFVa3NSMEZCUnl4SlFVRkpMRWRCUVVjc1MwRkJSeXhGUVVGRkxFVkJRVVU3V1VGRGFrSXNTVUZCU1N4SFFVRkhMRmxCUVZrc1NVRkJTU3hGUVVGRk8yZENRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03WVVGQlJUdFpRVU51UkN4SlFVRkpMRTlCUVU4c1IwRkJSeXhMUVVGTExGRkJRVkVzUlVGQlJUdG5Ra0ZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzJGQlFVVTdXVUZIZWtRc1RVRkJUU3hOUVVGTkxFZEJRVWNzUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUXp0WlFVTjBRaXhKUVVGSkxFVkJRVVVzUjBGQlF5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1RVRkJUU3hGUVVFclFqdG5Ra0ZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzJGQlFVVTdXVUZETDBZc1NVRkJTU3hOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdG5Ra0ZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzJGQlFVVTdXVUZEYWtjc1NVRkJTU3hOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRmhPMmRDUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1lVRkJSVHRaUVVOb1J5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJlVUk3WjBKQlFVVXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF6dGhRVUZGTzFsQlVUVkdMRkZCUVZFc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeEZRVUZGTzJkQ1FVTXhRaXhMUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETEUxQlFVMDdaMEpCUTI1Q0xFdEJRVXNzVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFR0blFrRkRjRUlzVDBGQlR5eERRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUlVGQlJUdHZRa0ZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETzJsQ1FVRkZPMkZCUTNoRU8xTkJRMG83VVVGRFJDeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTm9RaXhEUVVGRE8wbEJUVThzUTBGQlJTeFBRVUZQTEVOQlFVTXNUVUZCYzBJN1VVRkRjRU1zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU5xUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEYmtNc1RVRkJUU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM3BDTzBsQlEwd3NRMEZCUXp0SlFXRlBMRTFCUVUwc1EwRkJReXhIUVVGWExFVkJRVVVzVTBGQlV5eEhRVUZETEVsQlFVazdVVUZEZEVNc1NVRkJTU3hEUVVGTkxFTkJRVU03VVVGRFdDeEpRVUZKTEVkQlFVY3NXVUZCV1N4SlFVRkpMRVZCUVVVN1dVRkJSU3hEUVVGRExFZEJRVk1zUjBGQlJ5eERRVUZETzFOQlFVVTdZVUZEZEVNN1dVRkRSQ3hEUVVGRExFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFWTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRNVUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZEY2tJc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFZEJRVWNzUjBGQlJ5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRelZFTEVsQlFVa3NRMEZCVlN4SFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzI5Q1FVTjZRaXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRmRCUVZjc1JVRkJSU3hIUVVGSExFZEJRVWNzUTBGQlF6dHZRa0ZEZUVNc1EwRkJReXhEUVVGRExGZEJRVmNzUTBGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03YVVKQlEycEVPMkZCUTBvN1UwRkRTanRSUVVORUxFOUJRVThzUTBGQlF5eERRVUZETzBsQlEySXNRMEZCUXp0SlFWTlBMRTlCUVU4c1EwRkJReXhKUVVGWExFVkJRVVVzUjBGQlZ6dFJRVU53UXl4SlFVRkpMRTFCUVUwc1IwRkJWeXhIUVVGSExFTkJRVU03VVVGRGVrSXNVVUZCVVN4SlFVRkpMRVZCUVVVN1dVRkRWaXhMUVVGTExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1R0blFrRkJTeXhKUVVGSkxFZEJRVWNzV1VGQldTeEpRVUZKTEVWQlFVVTdiMEpCUVVVc1QwRkJUeXhIUVVGSExFTkJRVU03YVVKQlFVVTdaMEpCUTJoRUxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU14UWl4SlFVRkpMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlR0dlFrRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzJsQ1FVRkZPMmRDUVVNdlF5eE5RVUZOTzFsQlEzUkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTzJkQ1FVRkZMRWxCUVVrc1QwRkJUeXhIUVVGSExFdEJRVXNzVVVGQlVTeEZRVUZGTzI5Q1FVTnFReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRelZDTEUxQlFVMHNSMEZCV1N4SFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTTdhVUpCUTNaRU8zRkNRVUZOTzI5Q1FVTklMRTFCUVUwc1IwRkJSeXhIUVVGSExFTkJRVU03YVVKQlEyaENPMmRDUVVORUxFbEJRVWtzUzBGQlN5eERRVUZUTEUxQlFVMHNRMEZCUXl4RlFVRkZPMjlDUVVGRkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTTdhVUpCUVVVN1owSkJRemRETEUxQlFVMDdXVUZEZEVJc1MwRkJTeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRTdaMEpCUTFBc1RVRkJUU3hIUVVGSExFTkJRVU1zVDBGQlR5eEhRVUZITEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRaUVVVMVJpeExRVUZMTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUVHRuUWtGQlJ5eEpRVUZKTEU5QlFVOHNUVUZCVFN4TFFVRkxMRkZCUVZFc1JVRkJSVHR2UWtGQlJTeE5RVUZOTEVkQlFVY3NWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8ybENRVUZGTzJkQ1FVTjRSU3hKUVVGSkxFdEJRVXNzUTBGQlV5eE5RVUZOTEVOQlFVTXNSVUZCUlR0dlFrRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzJsQ1FVRkZPMmRDUVVNM1F5eE5RVUZOTzFsQlEzUkNMRTlCUVU4c1EwRkJReXhEUVVGUkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RFFVRkRPMU5CUTI1RE8xRkJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYWtJc1EwRkJRenM3UVVGb1owSlpMRk5CUVVrc1IwRkJSenRKUVVWcVFpeE5RVUZOTEVWQlFXZENMRkZCUVZFN1NVRkZPVUlzU1VGQlNTeEZRVUZyUWl4TlFVRk5PMGxCUlRWQ0xFbEJRVWtzUlVGQmEwSXNUVUZCVFR0SlFVVTFRaXhSUVVGUkxFVkJRV01zVlVGQlZUdEpRVVZvUXl4UFFVRlBMRVZCUVdVc1UwRkJVenREUVVWc1F5eERRVUZETzBGQmFFSk9MRzlDUVhGblFrTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBEYXRhXzEgPSByZXF1aXJlKFwiLi9EYXRhXCIpO1xuO1xuO1xuZnVuY3Rpb24gcmVzb2x2ZVRlcm1pbmFsQ29uZGl0aW9uKG5hbWUsIHZhbCwgcm93LCBjb2xOdW1iZXIpIHtcbiAgICBjb25zdCBjb2wgPSBjb2xOdW1iZXIobmFtZSk7XG4gICAgY29uc3QgdmFsSXNGdW5jdGlvbiA9ICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKTtcbiAgICBjb25zdCB2YWxJc0FycmF5ID0gKCh0eXBlb2YgdmFsID09PSAnb2JqZWN0JykgJiYgKHZhbC5sZW5ndGggIT09IHVuZGVmaW5lZCkpO1xuICAgIGlmIChpc05hTihjb2wpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBjb2x1bW4gbmFtZSAnJHtuYW1lfScgY2Fubm90IGJlIHJlc29sdmVkIGluIHRlcm1pbmFsIGNvbmRpdGlvbiAke25hbWV9PSR7dmFsfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhyb3cpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbElzRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbChyb3dbY29sXSwgcm93KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsSXNBcnJheSkge1xuICAgICAgICByZXR1cm4gKHZhbC5sZW5ndGggPT09IDApIHx8IHZhbC5zb21lKCh2KSA9PiByb3dbY29sXSA9PT0gdik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHJvd1tjb2xdID09PSB2YWwpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVDb25kaXRpb24oY29uZGl0aW9uLCByb3csIHIsIGNvbE51bWJlciwgYW5kKSB7XG4gICAgbGV0IG9yUmVzdWx0ID0gZmFsc2U7XG4gICAgbGV0IGFuZFJlc3VsdCA9IHRydWU7XG4gICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gKGNvbmRpdGlvbiA9PT0gcik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25kaXRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IG1jID0gY29uZGl0aW9uO1xuICAgICAgICBpZiAobWMubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChhbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFuZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1jLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhbmQgP1xuICAgICAgICAgICAgICAgIG1jLmV2ZXJ5KChjZCkgPT4gcmVzb2x2ZUNvbmRpdGlvbihjZCwgcm93LCByLCBjb2xOdW1iZXIsIGFuZCkpIDpcbiAgICAgICAgICAgICAgICBtYy5zb21lKChjZCkgPT4gcmVzb2x2ZUNvbmRpdGlvbihjZCwgcm93LCByLCBjb2xOdW1iZXIsIGFuZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBjb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBsZXQgY29uZGl0aW9uTWV0ID0gYW5kO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNldENvbmQgPSBjb25kaXRpb247XG4gICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ29yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbk1ldCA9IHJlc29sdmVDb25kaXRpb24oc2V0Q29uZC5vciwgcm93LCByLCBjb2xOdW1iZXIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdhbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uTWV0ID0gcmVzb2x2ZUNvbmRpdGlvbihzZXRDb25kLmFuZCwgcm93LCByLCBjb2xOdW1iZXIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25NZXQgPSAhcmVzb2x2ZUNvbmRpdGlvbihzZXRDb25kLm5vdCwgcm93LCByLCBjb2xOdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGNvbmRpdGlvbk1ldCA9IHJlc29sdmVUZXJtaW5hbENvbmRpdGlvbihuYW1lLCBjb25kaXRpb25bbmFtZV0sIHJvdywgY29sTnVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbk1ldCkge1xuICAgICAgICAgICAgICAgICAgICBvclJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYW5kUmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGB1bnJlY29nbml6ZWQgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGNvbmRpdGlvbil9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGFuZCA/IGFuZFJlc3VsdCA6IG9yUmVzdWx0O1xufVxuZnVuY3Rpb24gZmlsdGVyKGRhdGEsIGNvbmQpIHtcbiAgICBjb25zdCBjb2xOdW1iZXIgPSAobmFtZSkgPT4gZGF0YS5jb2xOdW1iZXIobmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhXzEuRGF0YSh7XG4gICAgICAgICAgICBuYW1lOiBkYXRhLmdldE5hbWUoKSxcbiAgICAgICAgICAgIGNvbE5hbWVzOiBkYXRhLmNvbE5hbWVzKCksXG4gICAgICAgICAgICByb3dzOiBkYXRhLmdldERhdGEoKS5maWx0ZXIoKHJvdywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtlZXAgPSByZXNvbHZlQ29uZGl0aW9uKGNvbmQsIHJvdywgaSwgY29sTnVtYmVyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2VlcDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIGNvbnNvbGUubG9nKGVyci5zdGFjayk7XG4gICAgfVxufVxuZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSR0YwWVVacGJIUmxjbk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlJHRjBZVVpwYkhSbGNuTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVFeVNFRXNhVU5CUjJkQ08wRkJaV1lzUTBGQlF6dEJRVkZFTEVOQlFVTTdRVUZKUml4VFFVRlRMSGRDUVVGM1FpeERRVUZETEVsQlFWY3NSVUZCUlN4SFFVRlBMRVZCUVVVc1IwRkJWeXhGUVVGRkxGTkJRU3RDTzBsQlEyaEhMRTFCUVUwc1IwRkJSeXhIUVVGSExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTTFRaXhOUVVGTkxHRkJRV0VzUjBGQlJ5eERRVUZETEU5QlFVOHNSMEZCUnl4TFFVRkxMRlZCUVZVc1EwRkJReXhEUVVGRE8wbEJRMnhFTEUxQlFVMHNWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFZEJRVWNzUzBGQlN5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFdEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTXpSU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0UlFVTmFMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zWjBKQlFXZENMRWxCUVVrc09FTkJRVGhETEVsQlFVa3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRemRHTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGFrSXNUMEZCVHl4TFFVRkxMRU5CUVVNN1MwRkRhRUk3VTBGQlRTeEpRVUZKTEdGQlFXRXNSVUZCUlR0UlFVVjBRaXhQUVVGUExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRE4wSTdVMEZCVFN4SlFVRkpMRlZCUVZVc1JVRkJSVHRSUVVWdVFpeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGNFVTdVMEZCVFR0UlFVTklMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkROMEk3UVVGRFRDeERRVUZETzBGQlUwUXNVMEZCVXl4blFrRkJaMElzUTBGQlF5eFRRVUZ0UWl4RlFVRkZMRWRCUVZjc1JVRkJSU3hEUVVGUkxFVkJRVVVzVTBGQkswSXNSVUZCUlN4SFFVRlpPMGxCUXk5SExFbEJRVWtzVVVGQlVTeEhRVUZITEV0QlFVc3NRMEZCUXp0SlFVTnlRaXhKUVVGSkxGTkJRVk1zUjBGQlJTeEpRVUZKTEVOQlFVTTdTVUZGY0VJc1NVRkJTU3hUUVVGVExFdEJRVWNzVTBGQlV5eEZRVUZGTzFGQlFVVXNUMEZCVHl4SlFVRkpMRU5CUVVNN1MwRkJSVHRUUVVkMFF5eEpRVUZKTEU5QlFVOHNVMEZCVXl4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVGRkxFOUJRVThzUTBGQlF5eFRRVUZUTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkJSVHRUUVVkb1JTeEpRVUZKTEU5QlFVOHNVMEZCVXl4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVWd1F5eE5RVUZOTEVWQlFVVXNSMEZCYlVJc1UwRkJVeXhEUVVGRE8xRkJSM0pETEVsQlFVa3NSVUZCUlN4RFFVRkRMRTFCUVUwc1MwRkJTeXhUUVVGVExFVkJRVVU3V1VGRGVrSXNTVUZCU1N4SFFVRkhMRXRCUVVzc1UwRkJVeXhGUVVGRk8yZENRVUZGTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNN1lVRkJSVHRaUVVOMlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhGUVVGRk8yZENRVUZGTEU5QlFVOHNTMEZCU3l4RFFVRkRPMkZCUVVVN1dVRkZkRU1zVDBGQlR5eEhRVUZITEVOQlFVRXNRMEZCUXp0blFrRkRVQ3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCWlN4RlFVRkZMRVZCUVVVc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RlFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU0zUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlpTeEZRVUZGTEVWQlFVVXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTnNSanRoUVVWSk8xbEJRMFFzU1VGQlNTeEhRVUZITEV0QlFVc3NVMEZCVXl4RlFVRkZPMmRDUVVGRkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdZVUZCUlR0WlFVTjBReXhMUVVGTExFMUJRVTBzU1VGQlNTeEpRVUZKTEZOQlFWTXNSVUZCUlR0blFrRkRNVUlzU1VGQlNTeFpRVUZaTEVkQlFVY3NSMEZCUnl4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTEU5QlFVOHNSMEZCYjBJc1UwRkJVeXhEUVVGRE8yZENRVWN6UXl4UlFVRlJMRWxCUVVrc1JVRkJSVHR2UWtGRFZpeExRVUZMTEVsQlFVazdkMEpCUVVjc1dVRkJXU3hIUVVGSExHZENRVUZuUWl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4VFFVRlRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03ZDBKQlFVTXNUVUZCVFR0dlFrRkRla1lzUzBGQlN5eExRVUZMTzNkQ1FVRkZMRmxCUVZrc1IwRkJSeXhuUWtGQlowSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8zZENRVUZETEUxQlFVMDdiMEpCUTNwR0xFdEJRVXNzUzBGQlN6dDNRa0ZCUlN4WlFVRlpMRWRCUVVjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN2QwSkJRVU1zVFVGQlRUdHZRa0ZEY0VZc1QwRkJUeXhEUVVGRExFTkJRVWtzV1VGQldTeEhRVUZITEhkQ1FVRjNRaXhEUVVGRExFbEJRVWtzUlVGQlJTeFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzJsQ1FVTTVSanRuUWtGRFJDeEpRVUZKTEZsQlFWa3NSVUZCUlR0dlFrRkJSU3hSUVVGUkxFZEJRVWtzU1VGQlNTeERRVUZETzI5Q1FVRkZMRWxCUVVjc1EwRkJReXhIUVVGSExFVkJRVVU3ZDBKQlFVVXNUVUZCVFR0eFFrRkJSVHRwUWtGQlF6dHhRa0ZEZWtNN2IwSkJRVVVzVTBGQlV5eEhRVUZITEV0QlFVc3NRMEZCUXp0dlFrRkJReXhKUVVGSExFZEJRVWNzUlVGQlJ6dDNRa0ZCUlN4TlFVRk5PM0ZDUVVGRk8ybENRVUZETzJGQlF6bEVPMU5CUTBvN1MwRkRTanRUUVVGTk8xRkJRMGdzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl3eVFrRkJNa0lzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRGRFVXNUMEZCVHl4TFFVRkxMRU5CUVVNN1MwRkRhRUk3U1VGRFJDeFBRVUZQTEVkQlFVY3NRMEZCUVN4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZEY2tNc1EwRkJRenRCUVZORUxGTkJRV2RDTEUxQlFVMHNRMEZCUXl4SlFVRlRMRVZCUVVVc1NVRkJZenRKUVVNMVF5eE5RVUZOTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWxCUVZjc1JVRkJVeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNdlJDeEpRVUZKTzFGQlEwRXNUMEZCVHl4SlFVRkpMRmRCUVVrc1EwRkJRenRaUVVOYUxFbEJRVWtzUlVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMWxCUTNoQ0xGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZPMWxCUTNwQ0xFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlZ5eEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZPMmRDUVVOcVJDeE5RVUZOTEVsQlFVa3NSMEZCUnl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dG5Ra0ZEZGtRc1QwRkJUeXhKUVVGSkxFTkJRVU03V1VGRGFFSXNRMEZCUXl4RFFVRkRPMU5CUTB3c1EwRkJReXhEUVVGRE8wdEJRMDQ3U1VGQlF5eFBRVUZOTEVkQlFVY3NSVUZCUlR0UlFVTlVMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYWtJc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1MwRkRNVUk3UVVGRFRDeERRVUZETzBGQlprUXNkMEpCWlVNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBEYXRhXzEgPSByZXF1aXJlKFwiLi9EYXRhXCIpO1xuZXhwb3J0cy5EYXRhID0gRGF0YV8xLkRhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3clFrRlhPRUk3UVVGTWNrSXNjMEpCUVVFc1NVRkJTU3hEUVVGQkluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubSA9IHJlcXVpcmUoXCJtaXRocmlsXCIpO1xuO1xuY29uc3QgU1ZHRWxlbV8xID0gcmVxdWlyZShcIi4vU1ZHRWxlbVwiKTtcbmZ1bmN0aW9uIGdldENyb3NzQXQoY3Jvc3MsIHNjYWxlKSB7XG4gICAgbGV0IGNyb3NzZXNBdDtcbiAgICBzd2l0Y2ggKGNyb3NzKSB7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgICBjcm9zc2VzQXQgPSBzY2FsZS5kb21haW4oKVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtYXgnOlxuICAgICAgICAgICAgY3Jvc3Nlc0F0ID0gc2NhbGUuZG9tYWluKClbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogY3Jvc3Nlc0F0ID0gY3Jvc3MgfHwgMDtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlLmNvbnZlcnQoY3Jvc3Nlc0F0KTtcbn1cbmNsYXNzIEF4ZXMgZXh0ZW5kcyBTVkdFbGVtXzEuU1ZHRWxlbSB7XG4gICAgc3RhdGljIGRlZmF1bHRDb25maWcoY2ZnKSB7XG4gICAgICAgIGZ1bmN0aW9uIHNjYWxlQ2ZnKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgZG9tYWluOiBbJ2F1dG8nLCAnYXV0byddXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxhYmVsQ2ZnKHByaW1hcnksIHgsIG1ham9yKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZpc2libGU6IG1ham9yLCB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICB4cG9zOiB4ID8gU1ZHRWxlbV8xLlRleHRIQWxpZ24ubWlkZGxlIDogKHByaW1hcnkgPyBTVkdFbGVtXzEuVGV4dEhBbGlnbi5lbmQgOiBTVkdFbGVtXzEuVGV4dEhBbGlnbi5zdGFydCksXG4gICAgICAgICAgICAgICAgeXBvczogeCA/IChwcmltYXJ5ID8gU1ZHRWxlbV8xLlRleHRWQWxpZ24udG9wIDogU1ZHRWxlbV8xLlRleHRWQWxpZ24uYm90dG9tKSA6IFNWR0VsZW1fMS5UZXh0VkFsaWduLmNlbnRlcixcbiAgICAgICAgICAgICAgICBoT2Zmc2V0OiB4ID8gMCA6IChwcmltYXJ5ID8gLTEgOiAwLjcpLFxuICAgICAgICAgICAgICAgIHZPZmZzZXQ6IHggPyAocHJpbWFyeSA/IDAuNyA6IC0wLjcpIDogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYXJrQ2ZnKHByaW1hcnksIG1ham9yKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZpc2libGU6IG1ham9yLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogKHByaW1hcnkgPyAxIDogLTEpICogKG1ham9yID8gMTAgOiA1KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0aXRsZUNmZyhwcmltYXJ5LCB4KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsIHRleHQ6ICh4ID8gJ3gnIDogJ3knKSArIChwcmltYXJ5ID8gJycgOiAnMicpLFxuICAgICAgICAgICAgICAgIHhwb3M6IHggPyBTVkdFbGVtXzEuVGV4dEhBbGlnbi5lbmQgOiAocHJpbWFyeSA/IFNWR0VsZW1fMS5UZXh0SEFsaWduLm1pZGRsZSA6IFNWR0VsZW1fMS5UZXh0SEFsaWduLnN0YXJ0KSxcbiAgICAgICAgICAgICAgICB5cG9zOiB4ID8gU1ZHRWxlbV8xLlRleHRWQWxpZ24udG9wIDogKHByaW1hcnkgPyBTVkdFbGVtXzEuVGV4dFZBbGlnbi5ib3R0b20gOiBTVkdFbGVtXzEuVGV4dFZBbGlnbi50b3ApLFxuICAgICAgICAgICAgICAgIGhPZmZzZXQ6IHggPyAtMiA6IChwcmltYXJ5ID8gMCA6IDAuMyksXG4gICAgICAgICAgICAgICAgdk9mZnNldDogeCA/IChwcmltYXJ5ID8gMC40IDogLTEuMikgOiAocHJpbWFyeSA/IC0wLjUgOiAwLjcpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGF4aXNDZmcocHJpbWFyeSwgeCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiBwcmltYXJ5ID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNyb3NzZXNBdDogcHJpbWFyeSA/ICdtaW4nIDogJ21heCcsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHNjYWxlQ2ZnKCksXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlQ2ZnKHByaW1hcnksIHgpLFxuICAgICAgICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1ham9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrczogbWFya0NmZyhwcmltYXJ5LCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsczogbGFiZWxDZmcocHJpbWFyeSwgeCwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbEZtdDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1pbm9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrczogbWFya0NmZyhwcmltYXJ5LCBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM6IGxhYmVsQ2ZnKHByaW1hcnksIHgsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsRm10OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2ZnLmF4ZXMgPSB7XG4gICAgICAgICAgICBwcmltYXJ5OiB7XG4gICAgICAgICAgICAgICAgeDogYXhpc0NmZyh0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICB5OiBheGlzQ2ZnKHRydWUsIGZhbHNlKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlY29uZGFyeToge1xuICAgICAgICAgICAgICAgIHg6IGF4aXNDZmcoZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgICAgIHk6IGF4aXNDZmcoZmFsc2UsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgYWRqdXN0Q29uZmlnKGNmZykge1xuICAgIH1cbiAgICBkcmF3QXhpc0xpbmUoeCwgcmFuZ2UsIGNyb3NzKSB7XG4gICAgICAgIHJldHVybiB4ID8gdGhpcy5ob3JMaW5lKHJhbmdlWzBdLCByYW5nZVsxXSwgY3Jvc3MsICdocy1ncmFwaC1heGlzLWxpbmUnKSA6XG4gICAgICAgICAgICB0aGlzLnZlckxpbmUoY3Jvc3MsIHJhbmdlWzBdLCByYW5nZVsxXSwgJ2hzLWdyYXBoLWF4aXMtbGluZScpO1xuICAgIH1cbiAgICBkcmF3VGl0bGUoeCwgdHRsQ2ZnLCB0eXBlLCByYW5nZSwgY3Jvc3MpIHtcbiAgICAgICAgdHRsQ2ZnLmNzc0NsYXNzID0gJ2hzLWdyYXBoLWF4aXMtdGl0bGUnO1xuICAgICAgICBjb25zdCB4eSA9IHsgdHJhbnNmb3JtOiBgdHJhbnNsYXRlKCR7eCA/IHJhbmdlWzFdIDogY3Jvc3N9LCAke3ggPyBjcm9zcyA6IHJhbmdlWzFdfSlgIH07XG4gICAgICAgIHJldHVybiAhdHRsQ2ZnLnZpc2libGUgPyB1bmRlZmluZWQgOlxuICAgICAgICAgICAgZXhwb3J0cy5tKCdnJywgeHksIHRoaXMudGV4dCh0dGxDZmcsIHR0bENmZy50ZXh0KSk7XG4gICAgfVxuICAgIGRyYXdUaWNrTWFya3MoeCwgdHlwZSwgY3Jvc3Nlc0F0LCBzY2FsZSwgdGlja3MsIGNmZykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiBgaHMtZ3JhcGgtYXhpcy0ke3R5cGV9LXRpY2stbWFya3NgIH0sICFjZmcubWFya3MudmlzaWJsZSA/ICcnIDogdGlja3MubWFya3MubWFwKCh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geCA/IHRoaXMudmVyTGluZShzY2FsZS5jb252ZXJ0KHQpLCBjcm9zc2VzQXQsIGNyb3NzZXNBdCArIGNmZy5tYXJrcy5sZW5ndGgpIDpcbiAgICAgICAgICAgICAgICB0aGlzLmhvckxpbmUoY3Jvc3Nlc0F0LCBjcm9zc2VzQXQgLSBjZmcubWFya3MubGVuZ3RoLCBzY2FsZS5jb252ZXJ0KHQpKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBkcmF3VGlja0xhYmVscyh4LCB0eXBlLCBjcm9zc2VzQXQsIHNjYWxlLCB0aWNrcywgY2ZnKSB7XG4gICAgICAgIHNjYWxlLnNldExhYmVsRm9ybWF0KGNmZy5sYWJlbEZtdCk7XG4gICAgICAgIGNvbnN0IGxhYmVsQ2ZnID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGNmZy5sYWJlbHMpLmZvckVhY2goKGspID0+IGxhYmVsQ2ZnW2tdID0gY2ZnLmxhYmVsc1trXSk7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6IGBocy1ncmFwaC1heGlzLSR7dHlwZX0tdGljay1sYWJlbGAgfSwgIWxhYmVsQ2ZnLnZpc2libGUgPyAnJyA6IHRpY2tzLmxhYmVscy5tYXAoKHQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBzY2FsZS5jb252ZXJ0KHQucG9zKTtcbiAgICAgICAgICAgIGNvbnN0IHh5ID0geyB0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHt4ID8gdiA6IGNyb3NzZXNBdH0sICR7eCA/IGNyb3NzZXNBdCA6IHZ9KWAgfTtcbiAgICAgICAgICAgIGlmICh4ICYmIGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsYWJlbENmZy54cG9zID0gU1ZHRWxlbV8xLlRleHRIQWxpZ24uc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh4ICYmIGkgPT09IHRpY2tzLmxhYmVscy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbGFiZWxDZmcueHBvcyA9IFNWR0VsZW1fMS5UZXh0SEFsaWduLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxhYmVsQ2ZnLnhwb3MgPSBTVkdFbGVtXzEuVGV4dEhBbGlnbi5taWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdnJywgeHksIHRoaXMudGV4dChsYWJlbENmZywgdC50ZXh0KSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgZHJhd0F4aXMoZGlyLCBzY2FsZXMsIHR5cGUsIGF4aXNDZmcpIHtcbiAgICAgICAgY29uc3QgeCA9IGRpciA9PT0gJ3gnO1xuICAgICAgICBjb25zdCByYW5nZSA9IHNjYWxlc1tkaXJdLnJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGNmZyA9IGF4aXNDZmdbdHlwZV1bZGlyXTtcbiAgICAgICAgY29uc3QgY3Jvc3Nlc0F0ID0gZ2V0Q3Jvc3NBdChjZmcuY3Jvc3Nlc0F0LCBzY2FsZXNbeCA/ICd5JyA6ICd4J10pO1xuICAgICAgICBjb25zdCB0aWNrcyA9IHNjYWxlc1tkaXJdLnRpY2tzKCk7XG4gICAgICAgIHJldHVybiAhY2ZnLnZpc2libGUgPyB1bmRlZmluZWQgOiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6IGBocy1ncmFwaC1heGlzLSR7ZGlyfSBocy1ncmFwaC1heGlzLSR7dHlwZX1gIH0sIFtcbiAgICAgICAgICAgIHRoaXMuZHJhd0F4aXNMaW5lKHgsIHJhbmdlLCBjcm9zc2VzQXQpLFxuICAgICAgICAgICAgdGhpcy5kcmF3VGl0bGUoeCwgY2ZnLnRpdGxlLCB0eXBlLCByYW5nZSwgY3Jvc3Nlc0F0KSxcbiAgICAgICAgICAgIHRoaXMuZHJhd1RpY2tNYXJrcyh4LCAnbWlub3InLCBjcm9zc2VzQXQsIHNjYWxlc1tkaXJdLCB0aWNrcy5taW5vciwgY2ZnLnRpY2tzLm1pbm9yKSxcbiAgICAgICAgICAgIHRoaXMuZHJhd1RpY2tNYXJrcyh4LCAnbWFqb3InLCBjcm9zc2VzQXQsIHNjYWxlc1tkaXJdLCB0aWNrcy5tYWpvciwgY2ZnLnRpY2tzLm1ham9yKSxcbiAgICAgICAgICAgIHRoaXMuZHJhd1RpY2tMYWJlbHMoeCwgJ21pbm9yJywgY3Jvc3Nlc0F0LCBzY2FsZXNbZGlyXSwgdGlja3MubWlub3IsIGNmZy50aWNrcy5taW5vciksXG4gICAgICAgICAgICB0aGlzLmRyYXdUaWNrTGFiZWxzKHgsICdtYWpvcicsIGNyb3NzZXNBdCwgc2NhbGVzW2Rpcl0sIHRpY2tzLm1ham9yLCBjZmcudGlja3MubWFqb3IpXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICB2aWV3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2ZnID0gbm9kZS5hdHRycy5jZmc7XG4gICAgICAgIGNvbnN0IHNjYWxlcyA9IG5vZGUuYXR0cnMuc2NhbGVzO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgtYXhpcycgfSwgW1xuICAgICAgICAgICAgdGhpcy5kcmF3QXhpcygneCcsIHNjYWxlcy5wcmltYXJ5LCAncHJpbWFyeScsIGNmZyksXG4gICAgICAgICAgICB0aGlzLmRyYXdBeGlzKCd5Jywgc2NhbGVzLnByaW1hcnksICdwcmltYXJ5JywgY2ZnKSxcbiAgICAgICAgICAgIHRoaXMuZHJhd0F4aXMoJ3gnLCBzY2FsZXMuc2Vjb25kYXJ5LCAnc2Vjb25kYXJ5JywgY2ZnKSxcbiAgICAgICAgICAgIHRoaXMuZHJhd0F4aXMoJ3knLCBzY2FsZXMuc2Vjb25kYXJ5LCAnc2Vjb25kYXJ5JywgY2ZnKVxuICAgICAgICBdKTtcbiAgICB9XG59XG5BeGVzLnR5cGUgPSB7XG4gICAgbGluZWFyOiAnbGluZWFyIGF4aXMnLFxuICAgIGxvZzogJ2xvZyBheGlzJyxcbiAgICBkYXRlOiAnZGF0ZSBheGlzJyxcbiAgICBpbmRleDogJ2luZGV4IGF4aXMnLFxuICAgIHBlcmNlbnQ6ICdwZXJjZW50IGF4aXMnLFxuICAgIG9yZGluYWw6ICdvcmRpbmFsIGF4aXMnLFxuICAgIG5vbWluYWw6ICdub21pbmFsIGF4aXMnLFxuICAgIGF1dG86ICdhdXRvJ1xufTtcbmV4cG9ydHMuQXhlcyA9IEF4ZXM7XG5jbGFzcyBFeGFtcGxlTGluZWFyQXhpcyB7XG59XG5jbGFzcyBFeGFtcGxlTG9nQXhpcyB7XG59XG5jbGFzcyBFeGFtcGxlRGF0ZUF4aXMge1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUVhobGN5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlCZUdWekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCTmtSaExGRkJRVUVzUTBGQlF5eEhRVUZITEU5QlFVOHNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRCUVdGd1F5eERRVUZETzBGQlMwUXNkVU5CUjNGRE8wRkJVWEpETEZOQlFWTXNWVUZCVlN4RFFVRkRMRXRCUVcxQ0xFVkJRVVVzUzBGQlZ6dEpRVU5vUkN4SlFVRkpMRk5CUVdkQ0xFTkJRVU03U1VGRGNrSXNVVUZCVVN4TFFVRkxMRVZCUVVVN1VVRkRXQ3hMUVVGTExFdEJRVXM3V1VGQlJTeFRRVUZUTEVkQlFWY3NTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlFVTXNUVUZCVFR0UlFVTjZSQ3hMUVVGTExFdEJRVXM3V1VGQlJTeFRRVUZUTEVkQlFWY3NTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlFVTXNUVUZCVFR0UlFVTjZSQ3hQUVVGUExFTkJRVU1zUTBGQlNTeFRRVUZUTEVkQlFWY3NTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVNNVF6dEpRVU5FTEU5QlFVOHNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU53UXl4RFFVRkRPMEZCUlVRc1RVRkJZU3hKUVVGTExGTkJRVkVzYVVKQlFVODdTVUZ0UnpkQ0xFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCVlR0UlFVTXpRaXhUUVVGVExGRkJRVkU3V1VGRFlpeFBRVUZQTzJkQ1FVTklMRWxCUVVrc1JVRkJSU3hOUVVGTk8yZENRVU5hTEUxQlFVMHNSVUZCVXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU03WVVGRGJFTXNRMEZCUXp0UlFVTk9MRU5CUVVNN1VVRkRSQ3hUUVVGVExGRkJRVkVzUTBGQlF5eFBRVUZsTEVWQlFVVXNRMEZCVXl4RlFVRkZMRXRCUVdFN1dVRkRka1FzVDBGQlR6dG5Ra0ZEU0N4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTzJkQ1FVTjRRaXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4dlFrRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExHOUNRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXh2UWtGQlZTeERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRla1VzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVUVzUTBGQlF5eERRVUZETEc5Q1FVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eHZRa0ZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eHZRa0ZCVlN4RFFVRkRMRTFCUVUwN1owSkJRekZGTEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1owSkJRMjVETEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRlRU1zUTBGQlF6dFJRVU5PTEVOQlFVTTdVVUZEUkN4VFFVRlRMRTlCUVU4c1EwRkJReXhQUVVGblFpeEZRVUZGTEV0QlFXRTdXVUZETlVNc1QwRkJUenRuUWtGRFNDeFBRVUZQTEVWQlFVVXNTMEZCU3p0blFrRkRaQ3hOUVVGTkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJRU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRPVU1zUTBGQlF6dFJRVU5PTEVOQlFVTTdVVUZEUkN4VFFVRlRMRkZCUVZFc1EwRkJReXhQUVVGbExFVkJRVVVzUTBGQlV6dFpRVU40UXl4UFFVRlBPMmRDUVVOSUxFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVY3NTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6dG5Ra0ZETVVRc1NVRkJTU3hGUVVGSExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNiMEpCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkJMRU5CUVVNc1EwRkJReXh2UWtGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc2IwSkJRVlVzUTBGQlF5eExRVUZMTEVOQlFVTTdaMEpCUXpGRkxFbEJRVWtzUlVGQlJ5eERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRzlDUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJRU3hEUVVGRExFTkJRVU1zYjBKQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExHOUNRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVONFJTeFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVOdVF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlFTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJRU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRoUVVNMVJDeERRVUZETzFGQlEwNHNRMEZCUXp0UlFVTkVMRk5CUVZNc1QwRkJUeXhEUVVGRExFOUJRV1VzUlVGQlJTeERRVUZUTzFsQlEzWkRMRTlCUVU4N1owSkJRMGdzVDBGQlR5eEZRVUZMTEU5QlFVOHNRMEZCUVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTzJkQ1FVTnFReXhUUVVGVExFVkJRVWNzVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUVN4TFFVRkxMRU5CUVVFc1EwRkJReXhEUVVGQkxFdEJRVXM3WjBKQlF5OUNMRXRCUVVzc1JVRkJUeXhSUVVGUkxFVkJRVVU3WjBKQlEzUkNMRXRCUVVzc1JVRkJUeXhSUVVGUkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNRMEZCUXp0blFrRkRhRU1zUzBGQlN5eEZRVUZGTzI5Q1FVTklMRXRCUVVzc1JVRkJSVHQzUWtGRFNDeExRVUZMTEVWQlFVY3NUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU03ZDBKQlF6bENMRTFCUVUwc1JVRkJSU3hSUVVGUkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNN2QwSkJRMnhETEZGQlFWRXNSVUZCUlN4VFFVRlRPM0ZDUVVOMFFqdHZRa0ZEUkN4TFFVRkxMRVZCUVVVN2QwSkJRMGdzUzBGQlN5eEZRVUZITEU5QlFVOHNRMEZCUXl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRE8zZENRVU12UWl4TlFVRk5MRVZCUVVVc1VVRkJVU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRPM2RDUVVOdVF5eFJRVUZSTEVWQlFVVXNVMEZCVXp0eFFrRkRkRUk3YVVKQlEwbzdZVUZEU2l4RFFVRkRPMUZCUTA0c1EwRkJRenRSUVVORUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVYzdXVUZEVUN4UFFVRlBMRVZCUVVVN1owSkJRMHdzUTBGQlF5eEZRVUZGTEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRE8yZENRVU4wUWl4RFFVRkRMRVZCUVVVc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTTdZVUZETVVJN1dVRkRSQ3hUUVVGVExFVkJRVVU3WjBKQlExQXNRMEZCUXl4RlFVRkZMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETzJkQ1FVTjJRaXhEUVVGRExFVkJRVVVzVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNN1lVRkRNMEk3VTBGRFNpeERRVUZETzBsQlEwNHNRMEZCUXp0SlFVMUVMRTFCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlZUdEpRVU01UWl4RFFVRkRPMGxCUzBRc1dVRkJXU3hEUVVGRExFTkJRVk1zUlVGQlJTeExRVUZWTEVWQlFVVXNTMEZCV1R0UlFVTTFReXhQUVVGUExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUlVGQlJTeHZRa0ZCYjBJc1EwRkJReXhEUVVGRExFTkJRVU03V1VGREwwUXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeHZRa0ZCYjBJc1EwRkJReXhEUVVGRE8wbEJRelZGTEVOQlFVTTdTVUZMUkN4VFFVRlRMRU5CUVVNc1EwRkJVeXhGUVVGRkxFMUJRV1VzUlVGQlJTeEpRVUZaTEVWQlFVVXNTMEZCVlN4RlFVRkZMRXRCUVZrN1VVRkRlRVVzVFVGQlRTeERRVUZETEZGQlFWRXNSMEZCUnl4eFFrRkJjVUlzUTBGQlF6dFJRVU40UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxGTkJRVk1zUlVGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4TFFVRkxMRXRCUVVzc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlFTeExRVUZMTEVOQlFVRXNRMEZCUXl4RFFVRkJMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZETDBVc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJReTlDTEZOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEyNUVMRU5CUVVNN1NVRkxSQ3hoUVVGaExFTkJRVU1zUTBGQlV5eEZRVUZGTEVsQlFWY3NSVUZCUlN4VFFVRm5RaXhGUVVGRkxFdEJRVmNzUlVGQlJTeExRVUZqTEVWQlFVVXNSMEZCWXp0UlFVTXZSaXhQUVVGUExGTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVNc2FVSkJRV2xDTEVsQlFVa3NZVUZCWVN4RlFVRkRMRVZCUTNaRUxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZSTEVWQlFVVXNSVUZCUlR0WlFVTnNSQ3hQUVVGUExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSU3hUUVVGVExFZEJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU4yUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGTkJRVk1zUlVGQlJTeFRRVUZUTEVkQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0JHTEVOQlFVTXNRMEZCUXl4RFFVTk1MRU5CUVVNN1NVRkRUaXhEUVVGRE8wbEJTMFFzWTBGQll5eERRVUZETEVOQlFWTXNSVUZCUlN4SlFVRlhMRVZCUVVVc1UwRkJaMElzUlVGQlJTeExRVUZYTEVWQlFVVXNTMEZCWXl4RlFVRkZMRWRCUVdNN1VVRkRhRWNzUzBGQlN5eERRVUZETEdOQlFXTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRGJrTXNUVUZCVFN4UlFVRlJMRWRCUVU4c1JVRkJSU3hEUVVGRE8xRkJRM2hDTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXpSU3hQUVVGUExGTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUXl4TFFVRkxMRVZCUVVNc2FVSkJRV2xDTEVsQlFVa3NZVUZCWVN4RlFVRkRMRVZCUTNSRUxFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZSTEVWQlFVVXNSVUZCUlR0WlFVTXZSQ3hOUVVGTkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU12UWl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxGTkJRVk1zUlVGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlFTeFRRVUZUTEV0QlFVc3NRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJRU3hUUVVGVExFTkJRVUVzUTBGQlF5eERRVUZCTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1dVRkRla1VzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkhMRU5CUVVNc1JVRkJSVHRuUWtGRFdpeFJRVUZSTEVOQlFVTXNTVUZCU1N4SFFVRkhMRzlDUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETzJGQlEzQkRPMmxDUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCUnl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTNaRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVkQlFVY3NiMEpCUVZVc1EwRkJReXhIUVVGSExFTkJRVU03WVVGRGJFTTdhVUpCUVUwN1owSkJRMGdzVVVGQlVTeERRVUZETEVsQlFVa3NSMEZCUnl4dlFrRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF6dGhRVU55UXp0WlFVTkVMRTlCUVU4c1UwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRia1FzUTBGQlF5eERRVUZETEVOQlEwd3NRMEZCUXp0SlFVTk9MRU5CUVVNN1NVRlZSQ3hSUVVGUkxFTkJRVU1zUjBGQlZTeEZRVUZGTEUxQlFXVXNSVUZCUlN4SlFVRlhMRVZCUVVVc1QwRkJhMEk3VVVGRGFrVXNUVUZCVFN4RFFVRkRMRWRCUVVjc1IwRkJSeXhMUVVGSExFZEJRVWNzUTBGQlF6dFJRVU53UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1VVRkRiRU1zVFVGQlRTeEhRVUZITEVkQlFVc3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXcERMRTFCUVUwc1UwRkJVeXhIUVVGVkxGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZCTEVkQlFVY3NRMEZCUVN4RFFVRkRMRU5CUVVFc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUlN4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1VVRkRiRU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlF5eHBRa0ZCYVVJc1IwRkJSeXhyUWtGQmEwSXNTVUZCU1N4RlFVRkZMRVZCUVVNc1JVRkJSVHRaUVVNM1JpeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzVTBGQlV5eERRVUZETzFsQlEzUkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFRRVUZUTEVOQlFVTTdXVUZEY0VRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVWQlFVVXNUMEZCVHl4RlFVRkZMRk5CUVZNc1JVRkJSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXp0WlFVTndSaXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNSVUZCUlN4UFFVRlBMRVZCUVVVc1UwRkJVeXhGUVVGRkxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRPMWxCUTNCR0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hUUVVGVExFVkJRVVVzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRja1lzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1QwRkJUeXhGUVVGRkxGTkJRVk1zUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJRenRUUVVONFJpeERRVUZETEVOQlFVTTdTVUZEVUN4RFFVRkRPMGxCUlVRc1NVRkJTU3hEUVVGRExFbEJRVms3VVVGRFlpeE5RVUZOTEVkQlFVY3NSMEZCWXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU4wUXl4TlFVRk5MRTFCUVUwc1IwRkJWeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0UlFVTjZReXhQUVVGUExGTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUXl4TFFVRkxMRVZCUVVNc1pVRkJaU3hGUVVGRExFVkJRVVU3V1VGRGNrTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEU5QlFVOHNSVUZCUlN4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRE8xbEJRMnhFTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVXNVMEZCVXl4RlFVRkZMRWRCUVVjc1EwRkJRenRaUVVOc1JDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJSU3hOUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEZkQlFWY3NSVUZCUlN4SFFVRkhMRU5CUVVNN1dVRkRkRVFzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRVZCUVVVc1RVRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeFhRVUZYTEVWQlFVVXNSMEZCUnl4RFFVRkRPMU5CUTNwRUxFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdPMEZCY2xCTkxGTkJRVWtzUjBGQlJ6dEpRVU5XTEUxQlFVMHNSVUZCWjBJc1lVRkJZVHRKUVVOdVF5eEhRVUZITEVWQlFXMUNMRlZCUVZVN1NVRkRhRU1zU1VGQlNTeEZRVUZyUWl4WFFVRlhPMGxCUTJwRExFdEJRVXNzUlVGQmFVSXNXVUZCV1R0SlFVTnNReXhQUVVGUExFVkJRV1VzWTBGQll6dEpRVU53UXl4UFFVRlBMRVZCUVdVc1kwRkJZenRKUVVOd1F5eFBRVUZQTEVWQlFXVXNZMEZCWXp0SlFVTndReXhKUVVGSkxFVkJRV3RDTEUxQlFVMDdRMEZETDBJc1EwRkJRenRCUVhCQ1RpeHZRa0ZwVVVNN1FVRm5RMFFzVFVGQlRTeHBRa0ZCYVVJN1EwRkJSenRCUVRSQ01VSXNUVUZCVFN4alFVRmpPME5CUVVjN1FVRXlRblpDTEUxQlFVMHNaVUZCWlR0RFFVRkhJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm0gPSByZXF1aXJlKFwibWl0aHJpbFwiKTtcbmNvbnN0IFNWR0VsZW1fMSA9IHJlcXVpcmUoXCIuL1NWR0VsZW1cIik7XG5jbGFzcyBDYW52YXMgZXh0ZW5kcyBTVkdFbGVtXzEuU1ZHRWxlbSB7XG4gICAgc3RhdGljIGRlZmF1bHRDb25maWcoY2ZnKSB7XG4gICAgICAgIGNmZy5jYW52YXMgPSB7XG4gICAgICAgICAgICByYW5nZToge1xuICAgICAgICAgICAgICAgIHc6IDEwMCwgd3VuaXQ6ICclJyxcbiAgICAgICAgICAgICAgICBoOiAxMDAsIGh1bml0OiAnJSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGFkanVzdENvbmZpZyhjZmcpIHtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNnID0gbm9kZS5hdHRycy5jZmc7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1jYW52YXMnLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9LCBbXG4gICAgICAgICAgICB0aGlzLnJlY3QoeyB4OiAwLCB5OiAwIH0sIHsgdzogY2cucmFuZ2UudywgaDogY2cucmFuZ2UuaCwgd3VuaXQ6IGNnLnJhbmdlLnd1bml0LCBodW5pdDogY2cucmFuZ2UuaHVuaXQgfSwgJycpXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2FudmFzID0gQ2FudmFzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUTJGdWRtRnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDBOaGJuWmhjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFXVmhMRkZCUVVFc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0QlFVVndReXgxUTBGQmFVUTdRVUZUYWtRc1RVRkJZU3hOUVVGUExGTkJRVkVzYVVKQlFVODdTVUZ0UWk5Q0xFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCVlR0UlFVTXpRaXhIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZwUWp0WlFVTjJRaXhMUVVGTExFVkJRVk03WjBKQlExWXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hMUVVGTExFVkJRVU1zUjBGQlJ6dG5Ra0ZEYWtJc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeExRVUZMTEVWQlFVTXNSMEZCUnp0aFFVTndRanRUUVVOS0xFTkJRVU03U1VGRFRpeERRVUZETzBsQlRVUXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGVk8wbEJRemxDTEVOQlFVTTdTVUZGUkN4SlFVRkpMRU5CUVVNc1NVRkJXVHRSUVVOaUxFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRE8xRkJRekZDTEU5QlFVOHNVMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRExFdEJRVXNzUlVGQlF5eHBRa0ZCYVVJc1JVRkJSU3hMUVVGTExFVkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUXl4TlFVRk5MRVZCUVVNc1JVRkJSVHRaUVVOd1JTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRVZCUTJoQ0xFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkRMRVZCUTNwRkxFVkJRVVVzUTBGRFREdFRRVU5LTEVOQlFVTXNRMEZCUXp0SlFVTlFMRU5CUVVNN1EwRkRTanRCUVRWRFJDeDNRa0UwUTBNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubSA9IHJlcXVpcmUoXCJtaXRocmlsXCIpO1xuY29uc3QgU1ZHRWxlbV8xID0gcmVxdWlyZShcIi4vU1ZHRWxlbVwiKTtcbjtcbmNsYXNzIENoYXJ0IGV4dGVuZHMgU1ZHRWxlbV8xLlNWR0VsZW0ge1xuICAgIHN0YXRpYyBkZWZhdWx0Q29uZmlnKGNmZykge1xuICAgICAgICBjZmcuY2hhcnQgPSB7XG4gICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRleHQ6ICcnLFxuICAgICAgICAgICAgICAgIGhPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgdk9mZnNldDogLTEuNSxcbiAgICAgICAgICAgICAgICB4cG9zOiAnbWlkZGxlJyxcbiAgICAgICAgICAgICAgICB5cG9zOiAndG9wJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY2ZnO1xuICAgIH1cbiAgICBzdGF0aWMgYWRqdXN0Q29uZmlnKGNmZykge1xuICAgIH1cbiAgICBvbnVwZGF0ZShub2RlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGVTaXplKG5vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVUaXRsZVNpemUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kb20pIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBub2RlLmRvbS5sYXN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoYyAmJiBjLmNsaWVudFdpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChDaGFydC5jbGllbnRXaWR0aCAhPT0gYy5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBDaGFydC5jbGllbnRXaWR0aCA9IGMuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIENoYXJ0LmNsaWVudEhlaWdodCA9IGMuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBkcmF3QmFja2dyb3VuZChwbG90QXJlYSkge1xuICAgICAgICBjb25zdCB0bCA9IHBsb3RBcmVhLnRsO1xuICAgICAgICBjb25zdCBiciA9IHBsb3RBcmVhLmJyO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWN0KHsgeDogdGwueCwgeTogdGwueSB9LCB7IHc6IGJyLnggLSB0bC54LCBoOiBici55IC0gdGwueSB9LCAnJyk7XG4gICAgfVxuICAgIGRyYXdUaXRsZShwbG90QXJlYSwgY2ZnKSB7XG4gICAgICAgIGNvbnN0IHRsID0gcGxvdEFyZWEudGw7XG4gICAgICAgIGNvbnN0IGJyID0gcGxvdEFyZWEuYnI7XG4gICAgICAgIGNmZy50aXRsZS5jc3NDbGFzcyA9ICdocy1ncmFwaC1jaGFydC10aXRsZSc7XG4gICAgICAgIHN3aXRjaCAoY2ZnLnRpdGxlLnhwb3MpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICBjZmcudGl0bGUueCA9IHRsLnggKyAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICAgICAgY2ZnLnRpdGxlLnggPSAodGwueCArIGJyLngpIC8gMiArICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICBjZmcudGl0bGUueCA9IGJyLnggKyAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGNmZy50aXRsZS55cG9zKSB7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgIGNmZy50aXRsZS55ID0gdGwueSArICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgICAgICBjZmcudGl0bGUueSA9ICh0bC55ICsgYnIueSkgLyAyICsgJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgIGNmZy50aXRsZS55ID0gYnIueSArICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhY2ZnLnRpdGxlLnZpc2libGUgPyB1bmRlZmluZWQgOiB0aGlzLnRleHQoY2ZnLnRpdGxlLCBjZmcudGl0bGUudGV4dCk7XG4gICAgfVxuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCBjZmcgPSBub2RlLmF0dHJzLmNmZztcbiAgICAgICAgY29uc3QgcGxvdEFyZWEgPSBub2RlLmF0dHJzLnBsb3RBcmVhO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgtY2hhcnQnIH0sIFtcbiAgICAgICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQocGxvdEFyZWEpLFxuICAgICAgICAgICAgdGhpcy5kcmF3VGl0bGUocGxvdEFyZWEsIGNmZylcbiAgICAgICAgXSk7XG4gICAgfVxufVxuZXhwb3J0cy5DaGFydCA9IENoYXJ0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUTJoaGNuUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12UTJoaGNuUXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGblFtTXNVVUZCUVN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlMzSkRMSFZEUVVFMlF6dEJRVTgxUXl4RFFVRkRPMEZCUzBZc1RVRkJZU3hMUVVGTkxGTkJRVkVzYVVKQlFVODdTVUZ6UWpsQ0xFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCVlR0UlFVTXpRaXhIUVVGSExFTkJRVU1zUzBGQlN5eEhRVUZuUWp0WlFVTnlRaXhQUVVGUExFVkJRVVVzU1VGQlNUdFpRVU5pTEV0QlFVc3NSVUZCWVR0blFrRkRaQ3hQUVVGUExFVkJRVVVzU1VGQlNUdG5Ra0ZEWWl4SlFVRkpMRVZCUVVNc1JVRkJSVHRuUWtGRFVDeFBRVUZQTEVWQlFVVXNRMEZCUXp0blFrRkRWaXhQUVVGUExFVkJRVVVzUTBGQlF5eEhRVUZITzJkQ1FVTmlMRWxCUVVrc1JVRkJReXhSUVVGUk8yZENRVU5pTEVsQlFVa3NSVUZCUXl4TFFVRkxPMkZCUTJJN1UwRkRTaXhEUVVGRE8xRkJRMDRzVDBGQlR5eEhRVUZITEVOQlFVTTdTVUZEV0N4RFFVRkRPMGxCVFVRc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZWTzBsQlF6bENMRU5CUVVNN1NVRkxSQ3hSUVVGUkxFTkJRVU1zU1VGQldUdFJRVU5xUWl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlJTOUNMRU5CUVVNN1NVRkZSQ3hsUVVGbExFTkJRVU1zU1VGQlZ6dFJRVVYyUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVU3V1VGRFZpeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF6dFpRVU0zUWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zVjBGQlZ5eEhRVUZETEVOQlFVTXNSVUZCUlR0blFrRkRkRUlzU1VGQlNTeExRVUZMTEVOQlFVTXNWMEZCVnl4TFFVRkxMRU5CUVVNc1EwRkJReXhYUVVGWExFVkJRVVU3YjBKQlEzSkRMRXRCUVVzc1EwRkJReXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETEZkQlFWY3NRMEZCUXp0dlFrRkRiRU1zUzBGQlN5eERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVGRE8ybENRVU4yUXp0aFFVTktPMU5CUTBvN1NVRkRUQ3hEUVVGRE8wbEJSVVFzWTBGQll5eERRVUZETEZGQlFXRTdVVUZEZUVJc1RVRkJUU3hGUVVGRkxFZEJRVWNzVVVGQlVTeERRVUZETEVWQlFVVXNRMEZCUXp0UlFVTjJRaXhOUVVGTkxFVkJRVVVzUjBGQlJ5eFJRVUZSTEVOQlFVTXNSVUZCUlN4RFFVRkRPMUZCUTNaQ0xFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVONFJTeERRVUZETzBsQlJVUXNVMEZCVXl4RFFVRkRMRkZCUVdFc1JVRkJSU3hIUVVGbE8xRkJRM0JETEUxQlFVMHNSVUZCUlN4SFFVRkhMRkZCUVZFc1EwRkJReXhGUVVGRkxFTkJRVU03VVVGRGRrSXNUVUZCVFN4RlFVRkZMRWRCUVVjc1VVRkJVU3hEUVVGRExFVkJRVVVzUTBGQlF6dFJRVU4yUWl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUjBGQlJ5eHpRa0ZCYzBJc1EwRkJRenRSUVVNMVF5eFJRVUZQTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRk8xbEJRMjVDTEV0QlFVc3NUMEZCVHp0blFrRkJTU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGRExFVkJRVVVzUTBGQlF6dG5Ra0ZCUnl4TlFVRk5PMWxCUXk5RExFdEJRVXNzVVVGQlVUdG5Ra0ZCUnl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVOQlFVTXNSMEZCUXl4RlFVRkZMRU5CUVVNN1owSkJRVVVzVFVGQlRUdFpRVU4yUkN4TFFVRkxMRXRCUVVzN1owSkJRVTBzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlF5eEZRVUZGTEVOQlFVTTdaMEpCUVVNc1RVRkJUVHRUUVVOb1JEdFJRVU5FTEZGQlFVOHNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFVkJRVVU3V1VGRGJrSXNTMEZCU3l4TFFVRkxPMmRDUVVGTkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVU1zUlVGQlJTeERRVUZETzJkQ1FVRkhMRTFCUVUwN1dVRkRMME1zUzBGQlN5eFJRVUZSTzJkQ1FVRkhMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4SFFVRkRMRVZCUVVVc1EwRkJRenRuUWtGQlJTeE5RVUZOTzFsQlEzWkVMRXRCUVVzc1VVRkJVVHRuUWtGQlJ5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZETEVWQlFVVXNRMEZCUXp0blFrRkJReXhOUVVGTk8xTkJRMmhFTzFGQlEwUXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTJoR0xFTkJRVU03U1VGRlJDeEpRVUZKTEVOQlFVTXNTVUZCV1R0UlFVTmlMRTFCUVUwc1IwRkJSeXhIUVVGbExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNaRExFMUJRVTBzVVVGQlVTeEhRVUZSTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRekZETEU5QlFVOHNVMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlF5eG5Ra0ZCWjBJc1JVRkJReXhGUVVGRk8xbEJRM1pETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1VVRkJVU3hEUVVGRE8xbEJRemRDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFZEJRVWNzUTBGQlF6dFRRVU5vUXl4RFFVRkRMRU5CUVVNN1NVRkRVQ3hEUVVGRE8wTkJRMG83UVVGb1IwUXNjMEpCWjBkREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubSA9IHJlcXVpcmUoXCJtaXRocmlsXCIpO1xuY29uc3QgaHNkYXRhYl8xID0gcmVxdWlyZShcImhzZGF0YWJcIik7XG5jb25zdCBBeGVzXzEgPSByZXF1aXJlKFwiLi9BeGVzXCIpO1xuY29uc3QgU2NhbGVfMSA9IHJlcXVpcmUoXCIuL1NjYWxlXCIpO1xuY29uc3QgQ2FudmFzXzEgPSByZXF1aXJlKFwiLi9DYW52YXNcIik7XG5jb25zdCBTZXJpZXNfMSA9IHJlcXVpcmUoXCIuL1Nlcmllc1wiKTtcbmNvbnN0IENoYXJ0XzEgPSByZXF1aXJlKFwiLi9DaGFydFwiKTtcbmNvbnN0IEdyaWRfMSA9IHJlcXVpcmUoXCIuL0dyaWRcIik7XG5jb25zdCBMZWdlbmRfMSA9IHJlcXVpcmUoXCIuL0xlZ2VuZFwiKTtcbmNvbnN0IFNWR0VsZW1fMSA9IHJlcXVpcmUoXCIuL1NWR0VsZW1cIik7XG5jb25zdCBoc3V0aWxfMSA9IHJlcXVpcmUoXCJoc3V0aWxcIik7XG5jb25zdCB2aWV3Qm94V2lkdGggPSAxMDAwO1xubGV0IHZpZXdCb3hIZWlnaHQgPSA3MDA7XG5jbGFzcyBHcmFwaCBleHRlbmRzIFNWR0VsZW1fMS5TVkdFbGVtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5tYXJnaW5PZmZzZXQgPSB7XG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIG1ha2VDb25maWcodXNlckNmZykge1xuICAgICAgICBjb25zdCBjZmcgPSB7fTtcbiAgICAgICAgR3JhcGguZGVmYXVsdENvbmZpZyhjZmcpO1xuICAgICAgICBDYW52YXNfMS5DYW52YXMuZGVmYXVsdENvbmZpZyhjZmcpO1xuICAgICAgICBBeGVzXzEuQXhlcy5kZWZhdWx0Q29uZmlnKGNmZyk7XG4gICAgICAgIFNlcmllc18xLlNlcmllcy5kZWZhdWx0Q29uZmlnKGNmZyk7XG4gICAgICAgIEdyaWRfMS5HcmlkLmRlZmF1bHRDb25maWcoY2ZnKTtcbiAgICAgICAgQ2hhcnRfMS5DaGFydC5kZWZhdWx0Q29uZmlnKGNmZyk7XG4gICAgICAgIExlZ2VuZF8xLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKGNmZyk7XG4gICAgICAgIGlmICh1c2VyQ2ZnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHVzZXJDZmcoY2ZnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGluIHVzZXJjZmcnKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2ZnO1xuICAgIH1cbiAgICBzdGF0aWMgZGVmYXVsdENvbmZpZyhjZmcpIHtcbiAgICAgICAgY2ZnLmdyYXBoID0ge1xuICAgICAgICAgICAgbWFyZ2luOiB7XG4gICAgICAgICAgICAgICAgdG9wOiAxMCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAxMCxcbiAgICAgICAgICAgICAgICBib3R0b206IDEwLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAxMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpbWVDb25kOiB7fVxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgYWRqdXN0Q29uZmlnKGNmZykge1xuICAgICAgICBDYW52YXNfMS5DYW52YXMuYWRqdXN0Q29uZmlnKGNmZyk7XG4gICAgICAgIEF4ZXNfMS5BeGVzLmFkanVzdENvbmZpZyhjZmcpO1xuICAgICAgICBTZXJpZXNfMS5TZXJpZXMuYWRqdXN0Q29uZmlnKGNmZyk7XG4gICAgICAgIEdyaWRfMS5HcmlkLmFkanVzdENvbmZpZyhjZmcpO1xuICAgICAgICBDaGFydF8xLkNoYXJ0LmFkanVzdENvbmZpZyhjZmcpO1xuICAgICAgICBMZWdlbmRfMS5MZWdlbmQuYWRqdXN0Q29uZmlnKGNmZyk7XG4gICAgfVxuICAgIGNyZWF0ZVBsb3RBcmVhKGNmZ20pIHtcbiAgICAgICAgY29uc3QgdGwgPSB7XG4gICAgICAgICAgICB4OiBjZmdtLmxlZnQgKyB0aGlzLm1hcmdpbk9mZnNldC5sZWZ0LFxuICAgICAgICAgICAgeTogY2ZnbS50b3AgKyB0aGlzLm1hcmdpbk9mZnNldC50b3BcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYnIgPSB7XG4gICAgICAgICAgICB4OiB2aWV3Qm94V2lkdGggLSBjZmdtLnJpZ2h0IC0gdGhpcy5tYXJnaW5PZmZzZXQucmlnaHQsXG4gICAgICAgICAgICB5OiB2aWV3Qm94SGVpZ2h0IC0gY2ZnbS5ib3R0b20gLSB0aGlzLm1hcmdpbk9mZnNldC5ib3R0b21cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgdGw6IHRsLCBicjogYnIgfTtcbiAgICB9XG4gICAgY3JlYXRlRGF0YShjZmcpIHtcbiAgICAgICAgaWYgKCFjZmcuc2VyaWVzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjZmcuc2VyaWVzLmRhdGEgbm90IHNldCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGNmZy5zZXJpZXMuZGF0YS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NmZy5zZXJpZXMuZGF0YSBub3QgaW5pdGlhbGlzZWQgd2l0aCBhcnJheSBvZiBEYXRhU2V0cycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpbWVDb25kID0gY2ZnLmdyYXBoLnRpbWVDb25kO1xuICAgICAgICByZXR1cm4gY2ZnLnNlcmllcy5kYXRhLm1hcCgoZCkgPT4gKChkIGluc3RhbmNlb2YgaHNkYXRhYl8xLkRhdGEpID8gZCA6IG5ldyBoc2RhdGFiXzEuRGF0YShkKSkuZmlsdGVyKHRpbWVDb25kKSk7XG4gICAgfVxuICAgIGNyZWF0ZVNjYWxlcyhheGVzKSB7XG4gICAgICAgIGlmICghdGhpcy5zY2FsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGVzID0ge1xuICAgICAgICAgICAgICAgIHByaW1hcnk6IHsgeDogbmV3IFNjYWxlXzEuU2NhbGUoYXhlcy5wcmltYXJ5Lnguc2NhbGUpLCB5OiBuZXcgU2NhbGVfMS5TY2FsZShheGVzLnByaW1hcnkueS5zY2FsZSkgfSxcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHsgeDogbmV3IFNjYWxlXzEuU2NhbGUoYXhlcy5zZWNvbmRhcnkueC5zY2FsZSksIHk6IG5ldyBTY2FsZV8xLlNjYWxlKGF4ZXMuc2Vjb25kYXJ5Lnkuc2NhbGUpIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGVzO1xuICAgIH1cbiAgICBzZXRTY2FsZVJhbmdlKHBsb3RBcmVhLCBzY2FsZXMpIHtcbiAgICAgICAgc2NhbGVzLnByaW1hcnkueC5yYW5nZShbcGxvdEFyZWEudGwueCwgcGxvdEFyZWEuYnIueF0pO1xuICAgICAgICBzY2FsZXMucHJpbWFyeS55LnJhbmdlKFtwbG90QXJlYS5ici55LCBwbG90QXJlYS50bC55XSk7XG4gICAgICAgIHNjYWxlcy5zZWNvbmRhcnkueC5yYW5nZShbcGxvdEFyZWEudGwueCwgcGxvdEFyZWEuYnIueF0pO1xuICAgICAgICBzY2FsZXMuc2Vjb25kYXJ5LnkucmFuZ2UoW3Bsb3RBcmVhLmJyLnksIHBsb3RBcmVhLnRsLnldKTtcbiAgICB9XG4gICAgc2V0U2NhbGVEb21haW5zKGNmZywgc2NhbGVzLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBbWzFlMjAsIC0xZTIwXSwgWzFlMjAsIC0xZTIwXV07XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURvbWFpbnMocykge1xuICAgICAgICAgICAgbGV0IGRlZlg7XG4gICAgICAgICAgICBpZiAocy54KSB7XG4gICAgICAgICAgICAgICAgZGF0YVtzLmRhdGFJbmRleF0uZmluZERvbWFpbihzLngsIGRvbWFpbnNbMF0pO1xuICAgICAgICAgICAgICAgIGRlZlggPSBkYXRhW3MuZGF0YUluZGV4XS5jb2xUeXBlKHMueCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb21haW5zWzBdWzBdID0gMDtcbiAgICAgICAgICAgICAgICBkb21haW5zWzBdWzFdID0gZGF0YVtzLmRhdGFJbmRleF0uZXhwb3J0KCkucm93cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMueSkge1xuICAgICAgICAgICAgICAgIGRhdGFbcy5kYXRhSW5kZXhdLmZpbmREb21haW4ocy55LCBkb21haW5zWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzLnlCYXNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YVtzLmRhdGFJbmRleF0uZmluZERvbWFpbihzLnlCYXNlLCBkb21haW5zWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWZYICYmIHNjYWxlcy5wcmltYXJ5Lnguc2NhbGVUeXBlKCkgPT09IEF4ZXNfMS5BeGVzLnR5cGUuYXV0bykge1xuICAgICAgICAgICAgICAgIHNjYWxlcy5wcmltYXJ5Lnguc2NhbGVUeXBlKGRlZlgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNmZy5zZXJpZXMubWFwKHVwZGF0ZURvbWFpbnMpO1xuICAgICAgICBzY2FsZXMucHJpbWFyeS54LnNldEF1dG9Eb21haW4oZG9tYWluc1swXSk7XG4gICAgICAgIHNjYWxlcy5wcmltYXJ5Lnkuc2V0QXV0b0RvbWFpbihkb21haW5zWzFdKTtcbiAgICB9XG4gICAgYWRqdXN0SGVpZ2h0KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuZG9tICYmIG5vZGUuZG9tLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBub2RlLmRvbS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHZpZXdCb3hXaWR0aCAqIHAuY2xpZW50SGVpZ2h0IC8gcC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIGlmICghaXNOYU4odGVtcCkgJiYgdGVtcCAhPT0gdmlld0JveEhlaWdodCkge1xuICAgICAgICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFkanVzdE1hcmdpbnMoY2ZnKSB7XG4gICAgICAgIGNvbnN0IGNmZ20gPSBjZmcuZ3JhcGgubWFyZ2luO1xuICAgICAgICBjb25zdCBtYXJnaW4gPSB7IHQ6IC0xZTYsIGw6IC0xZTYsIGI6IC0xZTYsIHI6IC0xZTYgfTtcbiAgICAgICAgZnVuY3Rpb24gZ2V0QkJveChjc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3MpO1xuICAgICAgICAgICAgY29uc3QgYm94ID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGVsZW1zLCAoZSkgPT4gZS5nZXRCQm94KCkpO1xuICAgICAgICAgICAgaWYgKGJveCAmJiBib3hbMF0pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4udCA9IE1hdGgubWF4KG1hcmdpbi50LCBjZmdtLnRvcCAtIGJveFswXS55KTtcbiAgICAgICAgICAgICAgICBtYXJnaW4ubCA9IE1hdGgubWF4KG1hcmdpbi5sLCBjZmdtLmxlZnQgLSBib3hbMF0ueCk7XG4gICAgICAgICAgICAgICAgbWFyZ2luLmIgPSBNYXRoLm1heChtYXJnaW4uYiwgYm94WzBdLnkgKyBib3hbMF0uaGVpZ2h0ICsgY2ZnbS5ib3R0b20gLSB2aWV3Qm94SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBtYXJnaW4uciA9IE1hdGgubWF4KG1hcmdpbi5yLCBib3hbMF0ueCArIGJveFswXS53aWR0aCArIGNmZ20ucmlnaHQgLSB2aWV3Qm94V2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldEJCb3goJ2hzLWdyYXBoLWF4aXMnKTtcbiAgICAgICAgZ2V0QkJveCgnaHMtZ3JhcGgtY2hhcnQnKTtcbiAgICAgICAgdGhpcy5tYXJnaW5PZmZzZXQudG9wID0gbWFyZ2luLnQ7XG4gICAgICAgIHRoaXMubWFyZ2luT2Zmc2V0LmxlZnQgPSBtYXJnaW4ubDtcbiAgICAgICAgdGhpcy5tYXJnaW5PZmZzZXQuYm90dG9tID0gbWFyZ2luLmI7XG4gICAgICAgIHRoaXMubWFyZ2luT2Zmc2V0LnJpZ2h0ID0gbWFyZ2luLnI7XG4gICAgfVxuICAgIG9udXBkYXRlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hZGp1c3RIZWlnaHQobm9kZSk7XG4gICAgfVxuICAgIG9uY3JlYXRlKG5vZGUpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgZnVuY3Rpb24gKCkgeyBleHBvcnRzLm0ucmVkcmF3KCk7IH0pO1xuICAgICAgICB0aGlzLmFkanVzdEhlaWdodChub2RlKTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG5vZGUuYXR0cnMuY2ZnKVxuICAgICAgICAgICAgLnRoZW4oaHN1dGlsXzEuZGVsYXkoMTApKVxuICAgICAgICAgICAgLnRoZW4odGhpcy5hZGp1c3RNYXJnaW5zLmJpbmQodGhpcykpXG4gICAgICAgICAgICAudGhlbihleHBvcnRzLm0ucmVkcmF3KTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNmZ0ZuID0gbm9kZS5hdHRycy5jZmdGbjtcbiAgICAgICAgY29uc3QgY2ZnID0gR3JhcGgubWFrZUNvbmZpZyhjZmdGbik7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNyZWF0ZURhdGEoY2ZnKTtcbiAgICAgICAgY29uc3QgcGxvdEFyZWEgPSB0aGlzLmNyZWF0ZVBsb3RBcmVhKGNmZy5ncmFwaC5tYXJnaW4pO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSB0aGlzLmNyZWF0ZVNjYWxlcyhjZmcuYXhlcyk7XG4gICAgICAgIHRoaXMuc2V0U2NhbGVSYW5nZShwbG90QXJlYSwgc2NhbGVzKTtcbiAgICAgICAgdGhpcy5zZXRTY2FsZURvbWFpbnMoY2ZnLnNlcmllcywgc2NhbGVzLCBkYXRhKTtcbiAgICAgICAgR3JhcGguYWRqdXN0Q29uZmlnKGNmZyk7XG4gICAgICAgIG5vZGUuYXR0cnMuY2ZnID0gY2ZnO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgnLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHZpZXdCb3g6IGAwIDAgJHtTVkdFbGVtXzEucm91bmQodmlld0JveFdpZHRoKX0gJHtTVkdFbGVtXzEucm91bmQodmlld0JveEhlaWdodCl9YCB9LCBbXG4gICAgICAgICAgICBleHBvcnRzLm0oQ2FudmFzXzEuQ2FudmFzLCB7IGNmZzogY2ZnLmNhbnZhcyB9KSxcbiAgICAgICAgICAgIGV4cG9ydHMubShDaGFydF8xLkNoYXJ0LCB7IGNmZzogY2ZnLmNoYXJ0LCBwbG90QXJlYTogcGxvdEFyZWEgfSksXG4gICAgICAgICAgICBleHBvcnRzLm0oR3JpZF8xLkdyaWQsIHsgY2ZnOiBjZmcuZ3JpZCwgc2NhbGVzOiBzY2FsZXMgfSksXG4gICAgICAgICAgICBleHBvcnRzLm0oU2VyaWVzXzEuU2VyaWVzLCB7IGNmZzogY2ZnLnNlcmllcywgc2NhbGVzOiBzY2FsZXMsIGRhdGE6IGRhdGEgfSksXG4gICAgICAgICAgICBleHBvcnRzLm0oQXhlc18xLkF4ZXMsIHsgY2ZnOiBjZmcuYXhlcywgc2NhbGVzOiBzY2FsZXMgfSksXG4gICAgICAgICAgICBleHBvcnRzLm0oTGVnZW5kXzEuTGVnZW5kLCB7IGNmZzogY2ZnLmxlZ2VuZCB9KVxuICAgICAgICBdKTtcbiAgICB9XG59XG5leHBvcnRzLkdyYXBoID0gR3JhcGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0poY0dndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZSM0poY0dndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUVyUldFc1VVRkJRU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUlhCRExIRkRRVWQxUXp0QlFVTjJReXhwUTBGQmMwTTdRVUZIZEVNc2JVTkJRWFZETzBGQlEzWkRMSEZEUVVOM1F6dEJRVU40UXl4eFEwRkZkME03UVVGRGVFTXNiVU5CUTNWRE8wRkJRM1pETEdsRFFVTnpRenRCUVVOMFF5eHhRMEZEZDBNN1FVRkRlRU1zZFVOQlIzbERPMEZCUTNwRExHMURRVUZ6UXp0QlFVVjBReXhOUVVGTkxGbEJRVmtzUjBGQlZ5eEpRVUZKTEVOQlFVTTdRVUZEYkVNc1NVRkJUU3hoUVVGaExFZEJRVlVzUjBGQlJ5eERRVUZETzBGQmMwUnFReXhOUVVGaExFdEJRVTBzVTBGQlVTeHBRa0ZCVHp0SlFVRnNRenM3VVVGclJsa3NhVUpCUVZrc1IwRkJSenRaUVVOdVFpeEpRVUZKTEVWQlFVa3NRMEZCUXp0WlFVTlVMRXRCUVVzc1JVRkJSeXhEUVVGRE8xbEJRMVFzUjBGQlJ5eEZRVUZMTEVOQlFVTTdXVUZEVkN4TlFVRk5MRVZCUVVVc1EwRkJRenRUUVVOYUxFTkJRVU03U1VFNFNrNHNRMEZCUXp0SlFYQlBWeXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFXTTdVVUZEY0VNc1RVRkJUU3hIUVVGSExFZEJRVlVzUlVGQlJTeERRVUZETzFGQlEzUkNMRXRCUVVzc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZWtJc1pVRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTXhRaXhYUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNoQ0xHVkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRNVUlzVjBGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVONFFpeGhRVUZMTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM3BDTEdWQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE1VSXNTVUZCU1N4UFFVRlBMRVZCUVVVN1dVRkRWQ3hKUVVGSk8yZENRVU5CTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRoUVVOb1FqdFpRVUZETEU5QlFVMHNRMEZCUXl4RlFVRkZPMmRDUVVOUUxFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dG5Ra0ZEYUVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRaaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVONFFqdFRRVU5LTzFGQlEwUXNUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRaaXhEUVVGRE8wbEJiMEpUTEUxQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJWVHRSUVVOeVF5eEhRVUZITEVOQlFVTXNTMEZCU3l4SFFVRm5RanRaUVVOeVFpeE5RVUZOTEVWQlFVVTdaMEpCUTBvc1IwRkJSeXhGUVVGRkxFVkJRVVU3WjBKQlExQXNTVUZCU1N4RlFVRkZMRVZCUVVVN1owSkJRMUlzVFVGQlRTeEZRVUZGTEVWQlFVVTdaMEpCUTFZc1MwRkJTeXhGUVVGRkxFVkJRVVU3WVVGRFdqdFpRVU5FTEZGQlFWRXNSVUZCUlN4RlFVRkZPMU5CUTJZc1EwRkJRenRKUVVOT0xFTkJRVU03U1VGUFV5eE5RVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVZVN1VVRkRjRU1zWlVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVONlFpeFhRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM1pDTEdWQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGVrSXNWMEZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4aFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzaENMR1ZCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETjBJc1EwRkJRenRKUVZsUExHTkJRV01zUTBGQlF5eEpRVUV5UkR0UlFVTTVSU3hOUVVGTkxFVkJRVVVzUjBGQlJ6dFpRVU5RTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1R0WlFVTnlReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWM3VTBGRGRFTXNRMEZCUXp0UlFVTkdMRTFCUVUwc1JVRkJSU3hIUVVGSE8xbEJRMUFzUTBGQlF5eEZRVUZGTEZsQlFWa3NSMEZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTMEZCU3p0WlFVTjRSQ3hEUVVGRExFVkJRVVVzWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTzFOQlF6VkVMRU5CUVVNN1VVRkRSaXhQUVVGUExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU03U1VGRE9VSXNRMEZCUXp0SlFVVlBMRlZCUVZVc1EwRkJReXhIUVVGUE8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU5zUWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExIbENRVUY1UWl4RFFVRkRMRU5CUVVNN1UwRkRNVU03VVVGRFJDeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVN1dVRkRMMElzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4M1JFRkJkMFFzUTBGQlF5eERRVUZETzFOQlEzcEZPMUZCUTBRc1RVRkJUU3hSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNN1VVRkRjRU1zVDBGQlR5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZqTEVWQlFVVXNSVUZCUlN4RFFVTXhReXhEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEdOQlFVa3NRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NZMEZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRha1VzUTBGQlF6dEpRVVZQTEZsQlFWa3NRMEZCUXl4SlFVRlJPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPMWxCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ6dG5Ra0ZET1VJc1QwRkJUeXhGUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NZVUZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkpMRU5CUVVNc1JVRkJSU3hKUVVGSkxHRkJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdG5Ra0ZEZGtZc1UwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NZVUZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxHRkJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdGhRVU0xUml4RFFVRkRPMU5CUVVNN1VVRkRTQ3hQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEZGtJc1EwRkJRenRKUVU5RUxHRkJRV0VzUTBGQlF5eFJRVUZoTEVWQlFVVXNUVUZCWVR0UlFVTjBReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtRc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzWkVMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42UkN4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE4wUXNRMEZCUXp0SlFWRkVMR1ZCUVdVc1EwRkJReXhIUVVGblFpeEZRVUZGTEUxQlFXRXNSVUZCUlN4SlFVRlhPMUZCUlhoRUxFMUJRVTBzVDBGQlR5eEhRVUZuUWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJUVkVMRk5CUVZNc1lVRkJZU3hEUVVGRExFTkJRVmM3V1VGRE9VSXNTVUZCU1N4SlFVRmpMRU5CUVVNN1dVRkRia0lzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOTUxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6bERMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEZWtNN2FVSkJRVTA3WjBKQlEwZ3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXp0aFFVTXZSVHRaUVVORUxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCVFR0blFrRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRVVU3V1VGREwwUXNTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRk8yZENRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZCUlR0WlFVTnVSU3hKUVVGSkxFbEJRVWtzU1VGQlNTeE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUzBGQlN5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSVHRuUWtGQlJTeE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdZVUZCUlR0UlFVTjBSeXhEUVVGRE8xRkJSVVFzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU03VVVGRE9VSXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRek5ETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNdlF5eERRVUZETzBsQlVVUXNXVUZCV1N4RFFVRkRMRWxCUVZjN1VVRkRjRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zWVVGQllTeEZRVUZGTzFsQlEzQkRMRTFCUVUwc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTJwRExFMUJRVTBzU1VGQlNTeEhRVUZITEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1dVRkJXU3hIUVVGSExFTkJRVU1zUTBGQlF5eFhRVUZYTEVOQlFVTTdXVUZETTBRc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRXRCUVVzc1lVRkJZU3hGUVVGRk8yZENRVU40UXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRE8yRkJRM2hDTzFOQlEwbzdTVUZEVEN4RFFVRkRPMGxCUzBRc1lVRkJZU3hEUVVGRExFZEJRVlU3VVVGRGNFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZET1VJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXp0UlFVVTNReXhUUVVGVExFOUJRVThzUTBGQlF5eEhRVUZYTzFsQlEzaENMRTFCUVUwc1MwRkJTeXhIUVVGSExGRkJRVkVzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU51UkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU1zUTBGQlN5eEZRVUZETEVWQlFVVXNRMEZCUVN4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFpRVU5zUlN4SlFVRkhMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTJRc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJwRUxFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOc1JDeE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRuUWtGRGFrWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVVc1dVRkJXU3hEUVVGRExFTkJRVU03WVVGRGJFWTdVVUZKVEN4RFFVRkRPMUZCUlVRc1QwRkJUeXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETzFGQlEzcENMRTlCUVU4c1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4SFFVRk5MRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGNFTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFZEJRVXNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTndReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0JETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhIUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZUVNc1EwRkJRenRKUVVWRUxGRkJRVkVzUTBGQlF5eEpRVUZYTzFGQlEyaENMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZGTlVJc1EwRkJRenRKUVVWRUxGRkJRVkVzUTBGQlF5eEpRVUZYTzFGQlEyaENMRTFCUVUwc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UlFVRlJMRVZCUVVVc1kwRkJZU3hUUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNNVJDeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM2hDTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTTdZVUZETVVJc1NVRkJTU3hEUVVGRExHTkJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0aFFVTm1MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRoUVVOdVF5eEpRVUZKTEVOQlFVTXNVMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRM2hDTEVOQlFVTTdTVUZIUkN4SlFVRkpMRU5CUVVNc1NVRkJWenRSUVVOYUxFMUJRVTBzUzBGQlN5eEhRVUZUTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRM0pETEUxQlFVMHNSMEZCUnl4SFFVRlZMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZETTBNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOc1F5eE5RVUZOTEZGQlFWRXNSMEZCVVN4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkROVVFzVFVGQlRTeE5RVUZOTEVkQlFWVXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYkVRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRja01zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVVXZReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJRenRSUVVOeVFpeFBRVUZQTEZOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVU1zVlVGQlZTeEZRVUZGTEV0QlFVc3NSVUZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRExFMUJRVTA3V1VGRGRrUXNUMEZCVHl4RlFVRkRMRTlCUVU4c1pVRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEdWQlFVc3NRMEZCUXl4aFFVRmhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVU3V1VGRGNFVXNVMEZCUXl4RFFVRkRMR1ZCUVUwc1JVRkJSU3hGUVVGRkxFZEJRVWNzUlVGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNN1dVRkROVUlzVTBGQlF5eERRVUZETEdGQlFVc3NSVUZCUlN4RlFVRkZMRWRCUVVjc1JVRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eEZRVUZGTEZGQlFWRXNSVUZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRaUVVNNVF5eFRRVUZETEVOQlFVTXNWMEZCU1N4RlFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xbEJRM2hETEZOQlFVTXNRMEZCUXl4bFFVRk5MRVZCUVVVc1JVRkJSU3hIUVVGSExFVkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0WlFVTjJSQ3hUUVVGRExFTkJRVU1zVjBGQlNTeEZRVUZGTEVWQlFVVXNSMEZCUnl4RlFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeEZRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMWxCUTNoRExGTkJRVU1zUTBGQlF5eGxRVUZOTEVWQlFVVXNSVUZCUlN4SFFVRkhMRVZCUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFOQlEyaERMRU5CUVVNc1EwRkJRenRKUVVOUUxFTkJRVU03UTBGRFNqdEJRWEpRUkN4elFrRnhVRU1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBTVkdFbGVtXzEgPSByZXF1aXJlKFwiLi9TVkdFbGVtXCIpO1xuY2xhc3MgR3JpZCBleHRlbmRzIFNWR0VsZW1fMS5TVkdFbGVtIHtcbiAgICBzdGF0aWMgZGVmYXVsdENvbmZpZyhjZmcpIHtcbiAgICAgICAgY2ZnLmdyaWQgPSB7XG4gICAgICAgICAgICBtYWpvcjoge1xuICAgICAgICAgICAgICAgIGhvcjogeyB2aXNpYmxlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgdmVyOiB7IHZpc2libGU6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1pbm9yOiB7XG4gICAgICAgICAgICAgICAgaG9yOiB7IHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgdmVyOiB7IHZpc2libGU6IGZhbHNlIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGFkanVzdENvbmZpZyhjZmcpIHtcbiAgICB9XG4gICAgZHJhd0hvckdyaWQoY2ZnLCBzY2FsZSwgcmFuZ2UsIHRpY2tzKSB7XG4gICAgICAgIHJldHVybiAhY2ZnLnZpc2libGUgPyBleHBvcnRzLm0oJ3N2ZycpIDogZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgtZ3JpZC1ob3InIH0sIHRpY2tzLm1hcmtzLm1hcCgodCkgPT4gdGhpcy5ob3JMaW5lKHJhbmdlWzBdLCByYW5nZVsxXSwgc2NhbGUuY29udmVydCh0KSkpKTtcbiAgICB9XG4gICAgZHJhd1ZlckdyaWQoY2ZnLCBzY2FsZSwgcmFuZ2UsIHRpY2tzKSB7XG4gICAgICAgIHJldHVybiAhY2ZnLnZpc2libGUgPyBleHBvcnRzLm0oJ3N2ZycpIDogZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgtZ3JpZC12ZXInIH0sIHRpY2tzLm1hcmtzLm1hcCgodCkgPT4gdGhpcy52ZXJMaW5lKHNjYWxlLmNvbnZlcnQodCksIHJhbmdlWzBdLCByYW5nZVsxXSkpKTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IG5vZGUuYXR0cnMuY2ZnO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSBub2RlLmF0dHJzLnNjYWxlcztcbiAgICAgICAgY29uc3QgcHMgPSBzY2FsZXMucHJpbWFyeTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnc3ZnJywgeyBjbGFzczogJ2hzLWdyYXBoLWdyaWQnIH0sIFtcbiAgICAgICAgICAgIGV4cG9ydHMubSgnc3ZnJywgeyBjbGFzczogJ2hzLWdyYXBoLWdyaWQtbWlub3InIH0sIFtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdIb3JHcmlkKGNmZy5taW5vci5ob3IsIHBzLnksIHBzLngucmFuZ2UoKSwgcHMueS50aWNrcygpLm1pbm9yKSxcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdWZXJHcmlkKGNmZy5taW5vci52ZXIsIHBzLngsIHBzLnkucmFuZ2UoKSwgcHMueC50aWNrcygpLm1pbm9yKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1ncmlkLW1ham9yJyB9LCBbXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3SG9yR3JpZChjZmcubWFqb3IuaG9yLCBwcy55LCBwcy54LnJhbmdlKCksIHBzLnkudGlja3MoKS5tYWpvciksXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3VmVyR3JpZChjZmcubWFqb3IudmVyLCBwcy54LCBwcy55LnJhbmdlKCksIHBzLngudGlja3MoKS5tYWpvcilcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuR3JpZCA9IEdyaWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0pwWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OUhjbWxrTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJhVUpoTEZGQlFVRXNRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVWx3UXl4MVEwRkJlVU03UVVGNVFucERMRTFCUVdFc1NVRkJTeXhUUVVGUkxHbENRVUZQTzBsQmNVSTNRaXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFWVTdVVUZETTBJc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlowSTdXVUZEY0VJc1MwRkJTeXhGUVVGRk8yZENRVU5JTEVkQlFVY3NSVUZCUlN4RlFVRkZMRTlCUVU4c1JVRkJReXhKUVVGSkxFVkJRVVU3WjBKQlEzSkNMRWRCUVVjc1JVRkJSU3hGUVVGRkxFOUJRVThzUlVGQlF5eEpRVUZKTEVWQlFVVTdZVUZEZUVJN1dVRkRSQ3hMUVVGTExFVkJRVVU3WjBKQlEwZ3NSMEZCUnl4RlFVRkZMRVZCUVVVc1QwRkJUeXhGUVVGRExFdEJRVXNzUlVGQlJUdG5Ra0ZEZEVJc1IwRkJSeXhGUVVGRkxFVkJRVVVzVDBGQlR5eEZRVUZETEV0QlFVc3NSVUZCUlR0aFFVTjZRanRUUVVOS0xFTkJRVU03U1VGRFRpeERRVUZETzBsQlRVUXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGVk8wbEJRemxDTEVOQlFVTTdTVUZMVHl4WFFVRlhMRU5CUVVNc1IwRkJjVUlzUlVGQlJTeExRVUZYTEVWQlFVVXNTMEZCWXl4RlFVRkZMRXRCUVdNN1VVRkRiRVlzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExGTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUXl4dFFrRkJiVUlzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZETVVZc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGRGNrUXNRMEZCUXl4RFFVRkRPMGxCUTFBc1EwRkJRenRKUVV0UExGZEJRVmNzUTBGQlF5eEhRVUZ4UWl4RlFVRkZMRXRCUVZjc1JVRkJSU3hMUVVGakxFVkJRVVVzUzBGQll6dFJRVU5zUml4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlFTeERRVUZETEVOQlFVTXNVMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRExHMUNRVUZ0UWl4RlFVRkZMRVZCUVVVc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVNeFJpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVTnlSQ3hEUVVGRExFTkJRVU03U1VGRFVDeERRVUZETzBsQlIwUXNTVUZCU1N4RFFVRkRMRWxCUVZrN1VVRkRZaXhOUVVGTkxFZEJRVWNzUjBGQlpTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVOMlF5eE5RVUZOTEUxQlFVMHNSMEZCVlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU40UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETzFGQlF6RkNMRTlCUVU4c1UwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUXl4bFFVRmxMRVZCUVVNc1JVRkJSVHRaUVVOMFF5eFRRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRExIRkNRVUZ4UWl4RlFVRkZMRVZCUVVVN1owSkJRM1JETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlJTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXp0aFFVTXhSU3hEUVVGRE8xbEJRMFlzVTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJReXh4UWtGQmNVSXNSVUZCUlN4RlFVRkZPMmRDUVVOMFF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRka1VzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTTdZVUZETVVVc1EwRkJRenRUUVVOTUxFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdRMEZEU2p0QlFUTkZSQ3h2UWtFeVJVTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm0gPSByZXF1aXJlKFwibWl0aHJpbFwiKTtcbjtcbmNsYXNzIExlZ2VuZCB7XG4gICAgc3RhdGljIGRlZmF1bHRDb25maWcoY2ZnKSB7XG4gICAgICAgIGNmZy5sZWdlbmQgPSB7fTtcbiAgICB9XG4gICAgc3RhdGljIGFkanVzdENvbmZpZyhjZmcpIHtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1sZWdlbmQnLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9KTtcbiAgICB9XG59XG5leHBvcnRzLkxlZ2VuZCA9IExlZ2VuZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRHVm5aVzVrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwweGxaMlZ1WkM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRV2RDWVN4UlFVRkJMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdRVUZSYmtNc1EwRkJRenRCUVVWR0xFMUJRV0VzVFVGQlRUdEpRV0ZtTEUxQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJWVHRSUVVNelFpeEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRnBRaXhGUVVNeFFpeERRVUZETzBsQlEwNHNRMEZCUXp0SlFVMUVMRTFCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlZUdEpRVVU1UWl4RFFVRkRPMGxCUlVRc1NVRkJTU3hEUVVGRExFbEJRVms3VVVGRFlpeFBRVUZQTEZOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVU1zYVVKQlFXbENMRVZCUVVVc1MwRkJTeXhGUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1EwRkJRenRKUVVNM1JTeERRVUZETzBOQlEwbzdRVUUzUWtRc2QwSkJOa0pESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBTVkdFbGVtXzEgPSByZXF1aXJlKFwiLi9TVkdFbGVtXCIpO1xuY29uc3QgU2VyaWVzXzEgPSByZXF1aXJlKFwiLi9TZXJpZXNcIik7XG5jb25zdCBoc3V0aWxfMSA9IHJlcXVpcmUoXCJoc3V0aWxcIik7XG5jbGFzcyBQbG90IGV4dGVuZHMgU1ZHRWxlbV8xLlNWR0VsZW0ge1xuICAgIGRyYXdMaW5lKGNsaXBJRCwgZGF0YSwgeCwgeSwgc2NhbGVzLCBzU3R5bGUsIHRpdGxlKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gYHN0cm9rZTogJHtzU3R5bGUubGluZS5jb2xvcn07IHN0cm9rZS13aWR0aDoke3NTdHlsZS5saW5lLndpZHRofTtgO1xuICAgICAgICByZXR1cm4gIXNTdHlsZS5saW5lLnZpc2libGUgPyBleHBvcnRzLm0oJy5pbnZpc2libGUtbGluZScsICcnKSA6IHRoaXMucG9seWxpbmUoZGF0YSwgeCwgeSwgc2NhbGVzLCBjbGlwSUQsIHN0eWxlLCB0aXRsZSk7XG4gICAgfVxuICAgIGRyYXdNYXJrZXIoY2xpcElELCBkYXRhLCB4LCB5LCBzY2FsZXMsIHNTdHlsZSwgdGl0bGUpIHtcbiAgICAgICAgY29uc3QgbXJrID0gU2VyaWVzXzEuU2VyaWVzLm1hcmtlcjtcbiAgICAgICAgbGV0IHN0eWxlID0gYGZpbGw6JHtzU3R5bGUubWFya2VyLmNvbG9yfWA7XG4gICAgICAgIHJldHVybiAhc1N0eWxlLm1hcmtlci52aXNpYmxlID8gZXhwb3J0cy5tKCcuaW52aXNpYmxlLW1hcmtlcicsICcnKSA6IGV4cG9ydHMubSgnc3ZnJywgeyBjbGFzczogJ2hzLWdyYXBoLXNlcmllcy1tYXJrZXJzJyB9LCBkYXRhLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3ggPSBzY2FsZXMueC5jb252ZXJ0KHBbeF0pO1xuICAgICAgICAgICAgY29uc3QgY3kgPSBzY2FsZXMueS5jb252ZXJ0KHBbeV0pO1xuICAgICAgICAgICAgY29uc3QgciA9IHNTdHlsZS5tYXJrZXIuc2l6ZTtcbiAgICAgICAgICAgIHN3aXRjaCAoc1N0eWxlLm1hcmtlci5zaGFwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgbXJrLmNpcmNsZTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2lyY2xlKHsgeDogY3gsIHk6IGN5IH0sIHIsIHN0eWxlLCB0aXRsZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBtcmsuc3F1YXJlOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWN0KHsgeDogY3ggLSByLCB5OiBjeSAtIHIgfSwgeyB3OiAyICogciwgaDogMiAqIHIgfSwgc3R5bGUsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICBjYXNlIG1yay5kaWFtb25kOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFwZShbW2N4IC0gciwgY3ldLCBbY3gsIGN5ICsgcl0sIFtjeCArIHIsIGN5XSwgW2N4LCBjeSAtIHJdXSwgdW5kZWZpbmVkLCBzdHlsZSwgdGl0bGUpO1xuICAgICAgICAgICAgICAgIGNhc2UgbXJrLnVwVHJpYW5nbGU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYXBlKFtbY3ggLSByLCBjeSArIHJdLCBbY3ggKyByLCBjeSArIHJdLCBbY3gsIGN5IC0gcl1dLCB1bmRlZmluZWQsIHN0eWxlLCB0aXRsZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBtcmsuZG93blRyaWFuZ2xlOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFwZShbW2N4IC0gciwgY3kgLSByXSwgW2N4ICsgciwgY3kgLSByXSwgW2N4LCBjeSArIHJdXSwgdW5kZWZpbmVkLCBzdHlsZSwgdGl0bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMubShgLnVua293bi1tYXJrZXItJHtzU3R5bGUubWFya2VyLnNoYXBlfWAsICcnKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBkcmF3TGFiZWwoY2xpcElELCBkYXRhLCB4LCB5LCBsYmwsIHNjYWxlcywgc0RlZikge1xuICAgICAgICBjb25zdCBzU3R5bGUgPSBzRGVmLnN0eWxlO1xuICAgICAgICBjb25zdCBjZmcgPSB7XG4gICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgIGNzc0NsYXNzOiBgYCxcbiAgICAgICAgICAgIHN0eWxlOiBgZmlsbDoke3NTdHlsZS5sYWJlbC5jb2xvcn1gLFxuICAgICAgICAgICAgeHBvczogU1ZHRWxlbV8xLlRleHRIQWxpZ24ubWlkZGxlLFxuICAgICAgICAgICAgeXBvczogU1ZHRWxlbV8xLlRleHRWQWxpZ24uY2VudGVyLFxuICAgICAgICAgICAgaE9mZnNldDogc0RlZi5oT2Zmc2V0LFxuICAgICAgICAgICAgdk9mZnNldDogc0RlZi52T2Zmc2V0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAhc1N0eWxlLm1hcmtlci52aXNpYmxlID8gZXhwb3J0cy5tKCcuaW52aXNpYmxlLW1hcmtlcicsICcnKSA6IGV4cG9ydHMubSgnc3ZnJywgeyBjbGFzczogJ2hzLWdyYXBoLXNlcmllcy1sYWJlbHMnIH0sIGRhdGEubWFwKChwKSA9PiB7XG4gICAgICAgICAgICBjZmcueCA9ICcnICsgc2NhbGVzLnguY29udmVydChwW3hdKTtcbiAgICAgICAgICAgIGNmZy55ID0gJycgKyBzY2FsZXMueS5jb252ZXJ0KHBbeV0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChjZmcsIGhzdXRpbF8xLnJvdW5kKHBbbGJsXSwgMykpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGRyYXdBcmVhKGNsaXBJRCwgZGF0YSwgeCwgeUZvcmUsIHlCYWNrLCBzY2FsZXMsIHNTdHlsZSwgdGl0bGUpIHtcbiAgICAgICAgaWYgKHNTdHlsZS5maWxsLnZpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gYGZpbGw6ICR7c1N0eWxlLmZpbGwuY29sb3J9O2A7XG4gICAgICAgICAgICBjb25zdCBkcmF3Rm9yZSA9IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBkcmF3QmFjayA9IGRhdGEuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb2x5Z29uKGRyYXdGb3JlLCBkcmF3QmFjaywgeCwgeUZvcmUsIHlCYWNrLCBzY2FsZXMsIGNsaXBJRCwgc3R5bGUsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMubSgnLmludmlzaWJsZS1saW5lJywgJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldERlZmF1bHRzKGRhdGEsIHNlcmllcywgc2NhbGVzKSB7XG4gICAgfVxufVxuZXhwb3J0cy5QbG90ID0gUGxvdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVVHeHZkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5UWJHOTBMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlMyRXNVVUZCUVN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlJYQkRMSFZEUVVkNVF6dEJRVWw2UXl4eFEwRkZkME03UVVGRGVFTXNiVU5CUVhORE8wRkJSWFJETEUxQlFYTkNMRWxCUVVzc1UwRkJVU3hwUWtGQlR6dEpRVU4wUXl4UlFVRlJMRU5CUVVNc1RVRkJZU3hGUVVGRkxFbEJRV01zUlVGQlJTeERRVUZSTEVWQlFVVXNRMEZCVVN4RlFVRkZMRTFCUVdNc1JVRkJSU3hOUVVGclFpeEZRVUZGTEV0QlFXRTdVVUZEZWtjc1RVRkJUU3hMUVVGTExFZEJRVWNzVjBGQlZ5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc2EwSkJRV3RDTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU03VVVGRGFrWXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4VFFVRkRMRU5CUVVNc2FVSkJRV2xDTEVWQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03U1VGRGJrZ3NRMEZCUXp0SlFVVkVMRlZCUVZVc1EwRkJReXhOUVVGaExFVkJRVVVzU1VGQll5eEZRVUZGTEVOQlFWRXNSVUZCUlN4RFFVRlJMRVZCUVVVc1RVRkJZeXhGUVVGRkxFMUJRV3RDTEVWQlFVVXNTMEZCWVR0UlFVTXpSeXhOUVVGTkxFZEJRVWNzUjBGQlJ5eGxRVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzUzBGQlN5eEhRVUZITEZGQlFWRXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU14UXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRk5CUVVNc1EwRkJReXh0UWtGQmJVSXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJReXg1UWtGQmVVSXNSVUZCUXl4RlFVTnFSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVlN4RlFVRkZMRVZCUVVVN1dVRkRjRUlzVFVGQlRTeEZRVUZGTEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRiRU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRiRU1zVFVGQlRTeERRVUZETEVkQlFVa3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE9VSXNVVUZCVVN4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUlVGQlJUdG5Ra0ZEZWtJc1MwRkJTeXhIUVVGSExFTkJRVU1zVFVGQlRUdHZRa0ZEV0N4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU4wUkN4TFFVRkxMRWRCUVVjc1EwRkJReXhOUVVGTk8yOUNRVU5ZTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFZEJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0blFrRkRja1VzUzBGQlN5eEhRVUZITEVOQlFVTXNUMEZCVHp0dlFrRkRXaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU5xUnl4TFFVRkxMRWRCUVVjc1EwRkJReXhWUVVGVk8yOUNRVU5tTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1IwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU42Uml4TFFVRkxMRWRCUVVjc1EwRkJReXhaUVVGWk8yOUNRVU5xUWl4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFZEJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dGhRVU0xUmp0WlFVTkVMRTlCUVU4c1UwRkJReXhEUVVGRExHdENRVUZyUWl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNwRUxFTkJRVU1zUTBGQlF5eERRVU5NTEVOQlFVTTdTVUZEVGl4RFFVRkRPMGxCUlVRc1UwRkJVeXhEUVVGRExFMUJRV0VzUlVGQlJTeEpRVUZqTEVWQlFVVXNRMEZCVVN4RlFVRkZMRU5CUVZFc1JVRkJSU3hIUVVGVkxFVkJRVVVzVFVGQll5eEZRVUZGTEVsQlFXTTdVVUZEYmtjc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTXhRaXhOUVVGTkxFZEJRVWNzUjBGQldUdFpRVU5xUWl4SlFVRkpMRVZCUVZFc1JVRkJSVHRaUVVOa0xGRkJRVkVzUlVGQlNTeEZRVUZGTzFsQlEyUXNTMEZCU3l4RlFVRlBMRkZCUVZFc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVTdXVUZEZUVNc1NVRkJTU3hGUVVGUkxHOUNRVUZWTEVOQlFVTXNUVUZCVFR0WlFVTTNRaXhKUVVGSkxFVkJRVkVzYjBKQlFWVXNRMEZCUXl4TlFVRk5PMWxCUXpkQ0xFOUJRVThzUlVGQlN5eEpRVUZKTEVOQlFVTXNUMEZCVHp0WlFVTjRRaXhQUVVGUExFVkJRVXNzU1VGQlNTeERRVUZETEU5QlFVODdVMEZETTBJc1EwRkJRenRSUVVOR0xFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJRU3hEUVVGRExFTkJRVU1zVTBGQlF5eERRVUZETEcxQ1FVRnRRaXhGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVU1zUzBGQlN5eEZRVUZETEhkQ1FVRjNRaXhGUVVGRExFVkJRMmhITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGVExFVkJRVVVzUlVGQlJUdFpRVU51UWl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXhReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNeFF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxHTkJRVXNzUTBGQlV5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53UkN4RFFVRkRMRU5CUVVNc1EwRkRUQ3hEUVVGRE8wbEJRMDRzUTBGQlF6dEpRVVZFTEZGQlFWRXNRMEZCUXl4TlFVRmhMRVZCUVVVc1NVRkJZeXhGUVVGRkxFTkJRVkVzUlVGQlJTeExRVUZaTEVWQlFVVXNTMEZCV1N4RlFVRkZMRTFCUVdNc1JVRkJSU3hOUVVGclFpeEZRVUZGTEV0QlFWazdVVUZETVVnc1NVRkJTU3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTnlRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eFRRVUZUTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU03V1VGRE5VTXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRM1JDTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTjRReXhQUVVGUExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkZMRkZCUVZFc1JVRkJSU3hEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0VFFVTXhSanRoUVVGTk8xbEJRMGdzVTBGQlF5eERRVUZETEdsQ1FVRnBRaXhGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFOQlF6TkNPMGxCUTB3c1EwRkJRenRKUVVsRUxGZEJRVmNzUTBGQlF5eEpRVUZUTEVWQlFVVXNUVUZCWjBJc1JVRkJSU3hOUVVGak8wbEJRM1pFTEVOQlFVTTdRMEZEU2p0QlFXeEZSQ3h2UWtGclJVTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm0gPSByZXF1aXJlKFwibWl0aHJpbFwiKTtcbmNvbnN0IFBsb3RfMSA9IHJlcXVpcmUoXCIuL1Bsb3RcIik7XG5jbGFzcyBQbG90QXJlYSBleHRlbmRzIFBsb3RfMS5QbG90IHtcbiAgICBwbG90KGRhdGEsIHNlcmllcywgc2NhbGVzLCBpLCBjbGlwSUQpIHtcbiAgICAgICAgY29uc3QgeCA9IGRhdGEuY29sTnVtYmVyKHNlcmllcy54KTtcbiAgICAgICAgY29uc3QgeSA9IGRhdGEuY29sTnVtYmVyKHNlcmllcy55KTtcbiAgICAgICAgY29uc3QgeUJhc2UgPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueUJhc2UpO1xuICAgICAgICBjb25zdCB5TWF4ID0gZGF0YS5jb2xOdW1iZXIoJyRzdW0nKTtcbiAgICAgICAgY29uc3QgbWFwUm93ID0gKHJvdykgPT4gKHlNYXggPT09IHVuZGVmaW5lZCkgPyBbXG4gICAgICAgICAgICByb3dbeF0sXG4gICAgICAgICAgICByb3dbeV0gKyByb3dbeUJhc2VdLFxuICAgICAgICAgICAgcm93W3lCYXNlXVxuICAgICAgICBdIDogW1xuICAgICAgICAgICAgcm93W3hdLFxuICAgICAgICAgICAgKHJvd1t5XSArIHJvd1t5QmFzZV0pIC8gcm93W3lNYXhdLFxuICAgICAgICAgICAgcm93W3lCYXNlXSAvIHJvd1t5TWF4XVxuICAgICAgICBdO1xuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCcuZXJyb3InLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcmllcy5tYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBkYXRhLmdldERhdGEoKS5tYXAobWFwUm93KTtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5kcmF3QXJlYShjbGlwSUQsIGQsIDAsIDEsIDIsIHNjYWxlcywgc2VyaWVzLnN0eWxlLCBzZXJpZXMueSldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZCA9IGRhdGEuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmRyYXdBcmVhKGNsaXBJRCwgZCwgeCwgeSwgeUJhc2UsIHNjYWxlcywgc2VyaWVzLnN0eWxlLCBzZXJpZXMueSldO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5QbG90QXJlYSA9IFBsb3RBcmVhO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVUd4dmRFRnlaV0V1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlVHeHZkRUZ5WldFdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUYxUkdFc1VVRkJRU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCU1hCRExHbERRVUZ6UXp0QlFVZDBReXhOUVVGaExGRkJRVk1zVTBGQlVTeFhRVUZKTzBsQlF6bENMRWxCUVVrc1EwRkJReXhKUVVGVExFVkJRVVVzVFVGQlowSXNSVUZCUlN4TlFVRmpMRVZCUVVVc1EwRkJVU3hGUVVGRkxFMUJRV0U3VVVGRGNrVXNUVUZCVFN4RFFVRkRMRWRCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka01zVFVGQlRTeERRVUZETEVkQlFVOHNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtNc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE0wTXNUVUZCVFN4SlFVRkpMRWRCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTnlReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVkQlFWTXNSVUZCUlN4RlFVRkZMRU5CUTNwQ0xFTkJRVU1zU1VGQlNTeExRVUZITEZOQlFWTXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJRenRaUVVOb1FpeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTA0c1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRha0lzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXp0VFFVTmlMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMEVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTk9MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZETDBJc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNN1UwRkRla0lzUTBGQlF6dFJRVU5PTEVsQlFVa3NRMEZCUXl4TFFVRkhMRk5CUVZNc1JVRkJSVHRaUVVGRkxFOUJRVThzVTBGQlF5eERRVUZETEZGQlFWRXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRUUVVGRk8xRkJRemRETEVsQlFVa3NUVUZCVFN4RFFVRkRMRWRCUVVjc1JVRkJSVHRaUVVOYUxFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEY2tNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNNVJUdGhRVUZOTzFsQlEwZ3NUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzFsQlEzcENMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRiRVk3U1VGRFRDeERRVUZETzBOQlEwbzdRVUY2UWtRc05FSkJlVUpESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBQbG90XzEgPSByZXF1aXJlKFwiLi9QbG90XCIpO1xuY2xhc3MgUGxvdEJhciBleHRlbmRzIFBsb3RfMS5QbG90IHtcbiAgICBkcmF3QmFyKGNsaXBJRCwgZGF0YSwgeCwgeSwgeTAsIHNjYWxlcywgc1N0eWxlLCBzKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gYGZpbGw6ICR7c1N0eWxlLmJhci5jb2xvcn07YDtcbiAgICAgICAgY29uc3QgaW5kZXggPSAoeCA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgZG9tYWluID0gc2NhbGVzLnguZG9tYWluKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHMgKiBzU3R5bGUuYmFyLm9mZnNldCAqIChkb21haW5bMV0gLSBkb21haW5bMF0pIC8gKDEwMCAqIGRhdGEuZ2V0RGF0YSgpLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gc1N0eWxlLmJhci53aWR0aCAqIChkb21haW5bMV0gLSBkb21haW5bMF0pIC8gKDEwMCAqIGRhdGEuZ2V0RGF0YSgpLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1zZXJpZXMtYmFycycgfSwgZGF0YS5nZXREYXRhKCkubWFwKChwLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByeDAgPSBzY2FsZXMueC5jb252ZXJ0KChpbmRleCA/IGkgOiBwW3hdKSArIG9mZnNldCAtIHdpZHRoIC8gMik7XG4gICAgICAgICAgICBjb25zdCByeDEgPSBzY2FsZXMueC5jb252ZXJ0KChpbmRleCA/IGkgOiBwW3hdKSArIG9mZnNldCArIHdpZHRoIC8gMik7XG4gICAgICAgICAgICBjb25zdCByeTAgPSBzY2FsZXMueS5jb252ZXJ0KHkwID09PSB1bmRlZmluZWQgPyAwIDogcFt5MF0pO1xuICAgICAgICAgICAgY29uc3QgcnkgPSBzY2FsZXMueS5jb252ZXJ0KHBbeV0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjdCh7IHg6IHJ4MCwgeTogcnkwIH0sIHsgaDogcnkgLSByeTAsIHc6IHJ4MSAtIHJ4MCB9LCBzdHlsZSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgc2V0RGVmYXVsdHMoZGF0YSwgc2VyaWVzLCBzY2FsZXMpIHtcbiAgICAgICAgc3VwZXIuc2V0RGVmYXVsdHMoZGF0YSwgc2VyaWVzLCBzY2FsZXMpO1xuICAgICAgICBsZXQgZG9tID0gc2NhbGVzLnkuZG9tYWluKCk7XG4gICAgICAgIGlmIChkb21bMF0gPiAwKSB7XG4gICAgICAgICAgICBkb21bMF0gPSAwO1xuICAgICAgICAgICAgc2NhbGVzLnkuZG9tYWluKGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcmllcy54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNjYWxlcy54LmRvbWFpbihbLTAuNSwgZGF0YS5nZXREYXRhKCkubGVuZ3RoIC0gMC41XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGxvdChkYXRhLCBzZXJpZXMsIHNjYWxlcywgaSwgY2xpcElEKSB7XG4gICAgICAgIGNvbnN0IHggPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueCk7XG4gICAgICAgIGNvbnN0IHkgPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueSk7XG4gICAgICAgIGNvbnN0IHlCYXNlID0gc2VyaWVzLnlCYXNlID8gZGF0YS5jb2xOdW1iZXIoc2VyaWVzLnlCYXNlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnLmVycm9yJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLmRyYXdCYXIoY2xpcElELCBkYXRhLCB4LCB5LCB5QmFzZSwgc2NhbGVzLCBzZXJpZXMuc3R5bGUsIGkpLFxuICAgICAgICBdO1xuICAgIH1cbn1cbmV4cG9ydHMuUGxvdEJhciA9IFBsb3RCYXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVR3h2ZEVKaGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlRYkc5MFFtRnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQmFVUmhMRkZCUVVFc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0QlFVdHdReXhwUTBGQmMwTTdRVUZKZEVNc1RVRkJZU3hQUVVGUkxGTkJRVkVzVjBGQlNUdEpRVU0zUWl4UFFVRlBMRU5CUVVNc1RVRkJZU3hGUVVGRkxFbEJRVk1zUlVGQlJTeERRVUZSTEVWQlFVVXNRMEZCVVN4RlFVRkZMRVZCUVZNc1JVRkJSU3hOUVVGakxFVkJRVVVzVFVGQmEwSXNSVUZCUlN4RFFVRlJPMUZCUTNwSExFMUJRVTBzUzBGQlN5eEhRVUZITEZOQlFWTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF6dFJRVU16UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eFRRVUZUTEVOQlFVTXNRMEZCUXp0UlFVTm9ReXhOUVVGTkxFMUJRVTBzUjBGQll5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRelZETEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1IwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRE5VWXNUVUZCVFN4TFFVRkxMRWRCUVVrc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVkQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRelZHTEU5QlFVOHNVMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRExFdEJRVXNzUlVGQlF5eHpRa0ZCYzBJc1JVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUXpsRUxFTkJRVU1zUTBGQlZTeEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZPMWxCUTNKQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZCTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTFCUVUwc1IwRkJSeXhMUVVGTExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYmtVc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVUVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4SFFVRkhMRXRCUVVzc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU51UlN4TlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVjc1UwRkJVeXhEUVVGQkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzaEVMRTFCUVUwc1JVRkJSU3hIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEyeERMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRExFZEJRVWNzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZETEVkQlFVY3NSMEZCUXl4SFFVRkhMRVZCUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU51UlN4RFFVRkRMRU5CUVVNc1EwRkRUQ3hEUVVGRE8wbEJRMDRzUTBGQlF6dEpRVVZFTEZkQlFWY3NRMEZCUXl4SlFVRlRMRVZCUVVVc1RVRkJaMElzUlVGQlJTeE5RVUZqTzFGQlEyNUVMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVONFF5eEpRVUZMTEVkQlFVY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlF6ZENMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVTmFMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEV0N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTjRRanRSUVVORUxFbEJRVWtzVFVGQlRTeERRVUZETEVOQlFVTXNTMEZCU3l4VFFVRlRMRVZCUVVVN1dVRkRlRUlzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1RVRkJUU3hIUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEZEVRN1NVRkRUQ3hEUVVGRE8wbEJSVVFzU1VGQlNTeERRVUZETEVsQlFWTXNSVUZCUlN4TlFVRm5RaXhGUVVGRkxFMUJRV01zUlVGQlJTeERRVUZSTEVWQlFVVXNUVUZCWVR0UlFVTnlSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51UXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOdVF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGQkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTNKRkxFbEJRVWtzUTBGQlF5eExRVUZITEZOQlFWTXNSVUZCUlR0WlFVRkZMRTlCUVU4c1UwRkJReXhEUVVGRExGRkJRVkVzUlVGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VFFVRkZPMUZCUXpkRExFOUJRVTg3V1VGRFNDeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMU5CUTI1RkxFTkJRVU03U1VGRFRpeERRVUZETzBOQlEwbzdRVUYyUTBRc01FSkJkVU5ESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBQbG90XzEgPSByZXF1aXJlKFwiLi9QbG90XCIpO1xuY2xhc3MgUGxvdExpbmUgZXh0ZW5kcyBQbG90XzEuUGxvdCB7XG4gICAgcGxvdChkYXRhLCBzZXJpZXMsIHNjYWxlcywgaSwgY2xpcElEKSB7XG4gICAgICAgIGNvbnN0IHggPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueCk7XG4gICAgICAgIGNvbnN0IHkgPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueSk7XG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLm0oJy5lcnJvcicsICcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCcuZXJyb3InLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuZHJhd0xpbmUoY2xpcElELCBkYXRhLmdldERhdGEoKSwgeCwgeSwgc2NhbGVzLCBzZXJpZXMuc3R5bGUsIHNlcmllcy55KSxcbiAgICAgICAgICAgIHRoaXMuZHJhd01hcmtlcihjbGlwSUQsIGRhdGEuZ2V0RGF0YSgpLCB4LCB5LCBzY2FsZXMsIHNlcmllcy5zdHlsZSwgc2VyaWVzLnkpXG4gICAgICAgIF07XG4gICAgfVxufVxuZXhwb3J0cy5QbG90TGluZSA9IFBsb3RMaW5lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVUd4dmRFeHBibVV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlVHeHZkRXhwYm1VdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZuUTJFc1VVRkJRU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCU1hCRExHbERRVUZyUXp0QlFVZHNReXhOUVVGaExGRkJRVk1zVTBGQlVTeFhRVUZKTzBsQlF6bENMRWxCUVVrc1EwRkJReXhKUVVGVExFVkJRVVVzVFVGQlowSXNSVUZCUlN4TlFVRmpMRVZCUVVVc1EwRkJVU3hGUVVGRkxFMUJRV0U3VVVGRGNrVXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRia01zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hEUVVGRExFdEJRVWNzVTBGQlV5eEZRVUZGTzFsQlFVVXNUMEZCVHl4VFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFOQlFVVTdVVUZETjBNc1NVRkJTU3hEUVVGRExFdEJRVWNzVTBGQlV5eEZRVUZGTzFsQlFVVXNUMEZCVHl4VFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFOQlFVVTdVVUZETjBNc1QwRkJUenRaUVVOSUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zUzBGQlN5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNMFVzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOb1JpeERRVUZETzBsQlEwNHNRMEZCUXp0RFFVTktPMEZCV0VRc05FSkJWME1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBQbG90XzEgPSByZXF1aXJlKFwiLi9QbG90XCIpO1xuY2xhc3MgUGxvdE1hcmtlcnMgZXh0ZW5kcyBQbG90XzEuUGxvdCB7XG4gICAgcGxvdChkYXRhLCBzZXJpZXMsIHNjYWxlcywgaSwgY2xpcElEKSB7XG4gICAgICAgIGNvbnN0IHggPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueCk7XG4gICAgICAgIGNvbnN0IHkgPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueSk7XG4gICAgICAgIGNvbnN0IGwgPSBzZXJpZXMubCA/IGRhdGEuY29sTnVtYmVyKHNlcmllcy5sKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnLmVycm9yJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLm0oJy5lcnJvcicsICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5kcmF3TWFya2VyKGNsaXBJRCwgZGF0YS5nZXREYXRhKCksIHgsIHksIHNjYWxlcywgc2VyaWVzLnN0eWxlLCBzZXJpZXMueSksXG4gICAgICAgICAgICAobCA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3TGFiZWwoY2xpcElELCBkYXRhLmdldERhdGEoKSwgeCwgeSwgbCwgc2NhbGVzLCBzZXJpZXMpXG4gICAgICAgIF07XG4gICAgfVxufVxuZXhwb3J0cy5QbG90TWFya2VycyA9IFBsb3RNYXJrZXJzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVUd4dmRFMWhjbXRsY25NdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZVR3h2ZEUxaGNtdGxjbk11ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRnBRMkVzVVVGQlFTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8wRkJTWEJETEdsRFFVRnJRenRCUVVkc1F5eE5RVUZoTEZkQlFWa3NVMEZCVVN4WFFVRkpPMGxCUTJwRExFbEJRVWtzUTBGQlF5eEpRVUZUTEVWQlFVVXNUVUZCWjBJc1JVRkJSU3hOUVVGakxFVkJRVVVzUTBGQlVTeEZRVUZGTEUxQlFXRTdVVUZEY2tVc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGJrTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRia01zVFVGQlRTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTjZSQ3hKUVVGSkxFTkJRVU1zUzBGQlJ5eFRRVUZUTEVWQlFVVTdXVUZCUlN4UFFVRlBMRk5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVMEZCUlR0UlFVTTNReXhKUVVGSkxFTkJRVU1zUzBGQlJ5eFRRVUZUTEVWQlFVVTdXVUZCUlN4UFFVRlBMRk5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVMEZCUlR0UlFVTTNReXhQUVVGUE8xbEJRMGdzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNM1JTeERRVUZETEVOQlFVTXNTMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdaMEpCUTNoQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETzFOQlEzUkZMRU5CUVVNN1NVRkRUaXhEUVVGRE8wTkJRMG83UVVGaVJDeHJRMEZoUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5mdW5jdGlvbiByb3VuZChudW0pIHtcbiAgICBjb25zdCByZXN1bHQgPSBudW0udG9GaXhlZCgxKTtcbiAgICBpZiAocmVzdWx0ID09PSAnSW5maW5pdHknKSB7XG4gICAgICAgIHJldHVybiAnMWUyMCc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnJvdW5kID0gcm91bmQ7XG52YXIgVGV4dEhBbGlnbjtcbihmdW5jdGlvbiAoVGV4dEhBbGlnbikge1xuICAgIFRleHRIQWxpZ25bXCJzdGFydFwiXSA9IFwic3RhcnRcIjtcbiAgICBUZXh0SEFsaWduW1wibWlkZGxlXCJdID0gXCJtaWRkbGVcIjtcbiAgICBUZXh0SEFsaWduW1wiZW5kXCJdID0gXCJlbmRcIjtcbn0pKFRleHRIQWxpZ24gPSBleHBvcnRzLlRleHRIQWxpZ24gfHwgKGV4cG9ydHMuVGV4dEhBbGlnbiA9IHt9KSk7XG52YXIgVGV4dFZBbGlnbjtcbihmdW5jdGlvbiAoVGV4dFZBbGlnbikge1xuICAgIFRleHRWQWxpZ25bXCJ0b3BcIl0gPSBcInRvcFwiO1xuICAgIFRleHRWQWxpZ25bXCJjZW50ZXJcIl0gPSBcImNlbnRlclwiO1xuICAgIFRleHRWQWxpZ25bXCJib3R0b21cIl0gPSBcImJvdHRvbVwiO1xufSkoVGV4dFZBbGlnbiA9IGV4cG9ydHMuVGV4dFZBbGlnbiB8fCAoZXhwb3J0cy5UZXh0VkFsaWduID0ge30pKTtcbmNsYXNzIFNWR0VsZW0ge1xuICAgIHRleHQoY2ZnLCB0ZXh0KSB7XG4gICAgICAgIGxldCB5U2hpZnQgPSAwO1xuICAgICAgICBsZXQgaEFsaWduO1xuICAgICAgICBzd2l0Y2ggKGNmZy54cG9zKSB7XG4gICAgICAgICAgICBjYXNlIFRleHRIQWxpZ24uc3RhcnQ6XG4gICAgICAgICAgICAgICAgaEFsaWduID0gY2ZnLnhwb3M7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRleHRIQWxpZ24uZW5kOlxuICAgICAgICAgICAgICAgIGhBbGlnbiA9IGNmZy54cG9zO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUZXh0SEFsaWduLm1pZGRsZTpcbiAgICAgICAgICAgIGRlZmF1bHQ6IGhBbGlnbiA9IFRleHRIQWxpZ24ubWlkZGxlO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoY2ZnLnlwb3MpIHtcbiAgICAgICAgICAgIGNhc2UgVGV4dFZBbGlnbi50b3A6XG4gICAgICAgICAgICAgICAgeVNoaWZ0ID0gMC43O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUZXh0VkFsaWduLmNlbnRlcjpcbiAgICAgICAgICAgICAgICB5U2hpZnQgPSAwLjM1O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUZXh0VkFsaWduLmJvdHRvbTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgeVNoaWZ0ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgICAgIHg6IGNmZy54IHx8ICcnLFxuICAgICAgICAgICAgeTogY2ZnLnkgfHwgJycsXG4gICAgICAgICAgICBkeDogcm91bmQoY2ZnLmhPZmZzZXQgfHwgMCkgKyAnZW0nLFxuICAgICAgICAgICAgZHk6IHJvdW5kKChjZmcudk9mZnNldCB8fCAwKSArIHlTaGlmdCkgKyAnZW0nLFxuICAgICAgICAgICAgc3R5bGU6IGB0ZXh0LWFuY2hvcjoke2hBbGlnbn07ICR7Y2ZnLnN0eWxlIHx8ICcnfWAsXG4gICAgICAgICAgICBjbGFzczogY2ZnLmNzc0NsYXNzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCd0ZXh0JywgcGFyYW0sIHRleHQpO1xuICAgIH1cbiAgICByZWN0KHRsLCBhcmVhLCBzdHlsZSwgdGl0bGUpIHtcbiAgICAgICAgaWYgKGFyZWEudyA8IDApIHtcbiAgICAgICAgICAgIHRsLnggKz0gYXJlYS53O1xuICAgICAgICAgICAgYXJlYS53ID0gLWFyZWEudztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJlYS5oIDwgMCkge1xuICAgICAgICAgICAgdGwueSArPSBhcmVhLmg7XG4gICAgICAgICAgICBhcmVhLmggPSAtYXJlYS5oO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICAgICAgeDogcm91bmQodGwueCksIHk6IHJvdW5kKHRsLnkpLFxuICAgICAgICAgICAgd2lkdGg6IHJvdW5kKGFyZWEudykgKyAoYXJlYS53dW5pdCB8fCAnJyksXG4gICAgICAgICAgICBoZWlnaHQ6IHJvdW5kKGFyZWEuaCkgKyAoYXJlYS5odW5pdCB8fCAnJyksXG4gICAgICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgncmVjdCcsIHBhcmFtKTtcbiAgICB9XG4gICAgY2lyY2xlKGMsIHIsIHN0eWxlLCB0aXRsZSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdjaXJjbGUnLCB7IGN4OiByb3VuZChjLngpLCBjeTogcm91bmQoYy55KSwgcjogcm91bmQociksIHN0eWxlOiBzdHlsZSB9LCBleHBvcnRzLm0oJ3RpdGxlJywgdGl0bGUpKTtcbiAgICB9XG4gICAgY2xpcFJlY3QodGwsIGFyZWEsIGlkKSB7XG4gICAgICAgIGlmIChhcmVhLmggPCAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhhcmVhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgICAgIHg6IHJvdW5kKHRsLngpLCB5OiByb3VuZCh0bC55KSxcbiAgICAgICAgICAgIHdpZHRoOiByb3VuZChNYXRoLmFicyhhcmVhLncpKSArIChhcmVhLnd1bml0IHx8ICcnKSxcbiAgICAgICAgICAgIGhlaWdodDogcm91bmQoTWF0aC5hYnMoYXJlYS5oKSkgKyAoYXJlYS5odW5pdCB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnZGVmcycsIGV4cG9ydHMubSgnY2xpcFBhdGgnLCB7IGlkOiBpZCB9LCBleHBvcnRzLm0oJ3JlY3QnLCBwYXJhbSkpKTtcbiAgICB9XG4gICAgbGluZSh4MCwgeDEsIHkwLCB5MSwgY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICAgICAgICB4MTogcm91bmQoeDApLCB5MTogcm91bmQoeTApLFxuICAgICAgICAgICAgeDI6IHJvdW5kKHgxKSwgeTI6IHJvdW5kKHkxKSxcbiAgICAgICAgICAgIGNsYXNzOiBjc3NDbGFzc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdsaW5lJywgcGFyYW0pO1xuICAgIH1cbiAgICBob3JMaW5lKHgwLCB4MSwgeSwgY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICAgICAgICB4MTogcm91bmQoeDApLCB5MTogcm91bmQoeSksXG4gICAgICAgICAgICB4Mjogcm91bmQoeDEpLCB5Mjogcm91bmQoeSksXG4gICAgICAgICAgICBjbGFzczogY3NzQ2xhc3NcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnbGluZScsIHBhcmFtKTtcbiAgICB9XG4gICAgdmVyTGluZSh4LCB5MCwgeTEsIGNzc0NsYXNzKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICAgICAgeDE6IHJvdW5kKHgpLCB5MTogcm91bmQoeTApLFxuICAgICAgICAgICAgeDI6IHJvdW5kKHgpLCB5Mjogcm91bmQoeTEpLFxuICAgICAgICAgICAgY2xhc3M6IGNzc0NsYXNzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ2xpbmUnLCBwYXJhbSk7XG4gICAgfVxuICAgIHBvbHlsaW5lKGRhdGEsIHgsIHksIHNjYWxlcywgaWQsIHN0eWxlLCB0aXRsZSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdwb2x5bGluZScsIHtcbiAgICAgICAgICAgICdjbGlwLXBhdGgnOiBpZCA/IGB1cmwoIyR7aWR9KWAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgICAgICBwb2ludHM6IGRhdGEubWFwKChyb3cpID0+IGAke3JvdW5kKHNjYWxlcy54LmNvbnZlcnQocm93W3hdKSl9LCR7cm91bmQoc2NhbGVzLnkuY29udmVydChyb3dbeV0pKX1gKS5qb2luKCcgJylcbiAgICAgICAgfSwgZXhwb3J0cy5tKCd0aXRsZScsIHRpdGxlKSk7XG4gICAgfVxuICAgIHBvbHlnb24oZGF0YUZvcmUsIGRhdGFCYWNrLCB4LCB5Rm9yZSwgeUJhY2ssIHNjYWxlcywgaWQsIHN0eWxlLCB0aXRsZSkge1xuICAgICAgICBjb25zdCBpbmRleGVkID0gKHggPT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHN4ID0gKF94KSA9PiByb3VuZChzY2FsZXMueC5jb252ZXJ0KF94KSk7XG4gICAgICAgIGNvbnN0IHN5ID0gKF95KSA9PiByb3VuZChzY2FsZXMueS5jb252ZXJ0KF95KSk7XG4gICAgICAgIGNvbnN0IGNsaXAgPSBpZCA/IGB1cmwoIyR7aWR9KWAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IGRhdGFGb3JlLm1hcCgocm93LCBpKSA9PiBgJHtzeChpbmRleGVkID8gaSA6IHJvd1t4XSl9LCR7c3kocm93W3lGb3JlXSl9YClcbiAgICAgICAgICAgIC5jb25jYXQoZGF0YUJhY2subWFwKChyb3csIGkpID0+IGAke3N4KGluZGV4ZWQgPyAoZGF0YUJhY2subGVuZ3RoIC0gaSAtIDEpIDogcm93W3hdKX0sJHtzeSh5QmFjayA/IHJvd1t5QmFja10gOiAwKX1gKSkuam9pbignICcpO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdwb2x5Z29uJywgeyAnY2xpcC1wYXRoJzogY2xpcCwgc3R5bGU6IHN0eWxlLCBwb2ludHM6IHBvaW50cyB9LCBleHBvcnRzLm0oJ3RpdGxlJywgdGl0bGUpKTtcbiAgICB9XG4gICAgc2hhcGUocG9pbnRzLCBpZCwgc3R5bGUsIHRpdGxlKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3BvbHlsaW5lJywge1xuICAgICAgICAgICAgJ2NsaXAtcGF0aCc6IGlkID8gYHVybCgjJHtpZH0pYCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgICAgIHBvaW50czogcG9pbnRzLm1hcCgocm93KSA9PiBgJHtyb3VuZChyb3dbMF0pfSwke3JvdW5kKHJvd1sxXSl9YCkuam9pbignICcpXG4gICAgICAgIH0sIGV4cG9ydHMubSgndGl0bGUnLCB0aXRsZSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuU1ZHRWxlbSA9IFNWR0VsZW07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMVpIUld4bGJTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlUVmtkRmJHVnRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFXRXNVVUZCUVN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQmVVVndReXhUUVVGblFpeExRVUZMTEVOQlFVVXNSMEZCVlR0SlFVTTNRaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRemxDTEVsQlFVa3NUVUZCVFN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOMlFpeFBRVUZQTEUxQlFVMHNRMEZCUXp0TFFVTnFRanRKUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyeENMRU5CUVVNN1FVRk9SQ3h6UWtGTlF6dEJRVVZFTEVsQlFWa3NWVUZKV0R0QlFVcEVMRmRCUVZrc1ZVRkJWVHRKUVVOc1FpdzJRa0ZCYVVJc1EwRkJRVHRKUVVOcVFpd3JRa0ZCYTBJc1EwRkJRVHRKUVVOc1FpeDVRa0ZCWlN4RFFVRkJPMEZCUTI1Q0xFTkJRVU1zUlVGS1Z5eFZRVUZWTEVkQlFWWXNhMEpCUVZVc1MwRkJWaXhyUWtGQlZTeFJRVWx5UWp0QlFVVkVMRWxCUVZrc1ZVRkpXRHRCUVVwRUxGZEJRVmtzVlVGQlZUdEpRVU5zUWl4NVFrRkJaU3hEUVVGQk8wbEJRMllzSzBKQlFXdENMRU5CUVVFN1NVRkRiRUlzSzBKQlFXdENMRU5CUVVFN1FVRkRkRUlzUTBGQlF5eEZRVXBYTEZWQlFWVXNSMEZCVml4clFrRkJWU3hMUVVGV0xHdENRVUZWTEZGQlNYSkNPMEZCUlVRc1RVRkJjMElzVDBGQlR6dEpRVTE2UWl4SlFVRkpMRU5CUVVNc1IwRkJXU3hGUVVGRkxFbEJRVmM3VVVGRE1VSXNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMllzU1VGQlNTeE5RVUZwUWl4RFFVRkRPMUZCUTNSQ0xGRkJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlR0WlFVTmlMRXRCUVVzc1ZVRkJWU3hEUVVGRExFdEJRVXM3WjBKQlFVY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU03WjBKQlFVTXNUVUZCVFR0WlFVTnFSQ3hMUVVGTExGVkJRVlVzUTBGQlF5eEhRVUZITzJkQ1FVRkxMRTFCUVUwc1IwRkJSeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETzJkQ1FVRkRMRTFCUVUwN1dVRkRha1FzUzBGQlN5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUTNaQ0xFOUJRVThzUTBGQlF5eERRVUZuUWl4TlFVRk5MRWRCUVVjc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF6dFRRVU4wUkR0UlFVTkVMRkZCUVU4c1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU5pTEV0QlFVc3NWVUZCVlN4RFFVRkRMRWRCUVVjN1owSkJRVXNzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXp0blFrRkJReXhOUVVGTk8xbEJRelZETEV0QlFVc3NWVUZCVlN4RFFVRkRMRTFCUVUwN1owSkJRVVVzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXp0blFrRkJReXhOUVVGTk8xbEJRemRETEV0QlFVc3NWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVOMlFqdG5Ra0ZCZDBJc1RVRkJUU3hIUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZCUXl4TlFVRk5PMU5CUXpsRE8xRkJRMFFzVFVGQlRTeExRVUZMTEVkQlFVYzdXVUZEVml4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTzFsQlEyUXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU5rTEVWQlFVVXNSVUZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzU1VGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpPMWxCUXk5Q0xFVkJRVVVzUlVGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhKUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRWxCUVVrN1dVRkRlRU1zUzBGQlN5eEZRVUZGTEdWQlFXVXNUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhMUVVGTExFbEJRVVVzUlVGQlJTeEZRVUZGTzFsQlEyaEVMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVUdFRRVU4wUWl4RFFVRkRPMUZCUTBZc1QwRkJUeXhUUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOc1F5eERRVUZETzBsQlVVUXNTVUZCU1N4RFFVRkRMRVZCUVZFc1JVRkJSU3hKUVVGVExFVkJRVVVzUzBGQldTeEZRVUZGTEV0QlFXRTdVVUZEYWtRc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVTmFMRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm1MRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNCQ08xRkJRMFFzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSVHRaUVVOYUxFVkJRVVVzUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVObUxFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM0JDTzFGQlEwUXNUVUZCVFN4TFFVRkxMRWRCUVVjN1dVRkRWaXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJVU3hEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRjRU1zUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkZMRVZCUVVVc1EwRkJRenRaUVVONFF5eE5RVUZOTEVWQlFVVXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVVc1JVRkJSU3hEUVVGRE8xbEJRM2hETEV0QlFVc3NSVUZCUlN4TFFVRkxPMU5CUTJZc1EwRkJRenRSUVVOR0xFOUJRVThzVTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlVVUXNUVUZCVFN4RFFVRkRMRU5CUVU4c1JVRkJSU3hEUVVGUkxFVkJRVVVzUzBGQldTeEZRVUZGTEV0QlFXRTdVVUZEYWtRc1QwRkJUeXhUUVVGRExFTkJRVU1zVVVGQlVTeEZRVU5pTEVWQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNTMEZCU3l4RlFVRkZMRVZCUXpkRUxGTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUTNCQ0xFTkJRVU03U1VGRFRpeERRVUZETzBsQlVVUXNVVUZCVVN4RFFVRkRMRVZCUVZFc1JVRkJSU3hKUVVGVExFVkJRVVVzUlVGQlV6dFJRVU16UXl4SlFVRkpMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTzFsQlExb3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFRRVU55UWp0UlFVTlBMRTFCUVUwc1MwRkJTeXhIUVVGSE8xbEJRMVlzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVkVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM0JETEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVsQlFVVXNSVUZCUlN4RFFVRkRPMWxCUTJ4RUxFMUJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVVVzUlVGQlJTeERRVUZETzFOQlEzSkVMRU5CUVVNN1VVRkRSaXhQUVVGUExGTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNVMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVTXNSVUZCUlN4VFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTm9SU3hEUVVGRE8wbEJWVVFzU1VGQlNTeERRVUZETEVWQlFWTXNSVUZCUlN4RlFVRlRMRVZCUVVVc1JVRkJVeXhGUVVGRkxFVkJRVk1zUlVGQlJTeFJRVUZuUWp0UlFVTTNSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ6dFpRVU5XTEVWQlFVVXNSVUZCUlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNN1dVRkROVUlzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJTU3hGUVVGRkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXp0WlFVTTVRaXhMUVVGTExFVkJRVVVzVVVGQlVUdFRRVU5zUWl4RFFVRkRPMUZCUTBZc1QwRkJUeXhUUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUXpWQ0xFTkJRVU03U1VGVFJDeFBRVUZQTEVOQlFVTXNSVUZCVXl4RlFVRkZMRVZCUVZNc1JVRkJSU3hEUVVGUkxFVkJRVVVzVVVGQlowSTdVVUZEY0VRc1RVRkJUU3hMUVVGTExFZEJRVWM3V1VGRFZpeEZRVUZGTEVWQlFVVXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpOQ0xFVkJRVVVzUlVGQlJTeExRVUZMTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETTBJc1MwRkJTeXhGUVVGRkxGRkJRVkU3VTBGRGJFSXNRMEZCUXp0UlFVTkdMRTlCUVU4c1UwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTTFRaXhEUVVGRE8wbEJVMFFzVDBGQlR5eERRVUZETEVOQlFWRXNSVUZCUlN4RlFVRlRMRVZCUVVVc1JVRkJVeXhGUVVGRkxGRkJRV2RDTzFGQlEzQkVMRTFCUVUwc1MwRkJTeXhIUVVGSE8xbEJRMVlzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXp0WlFVTXpRaXhGUVVGRkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hMUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6TkNMRXRCUVVzc1JVRkJSU3hSUVVGUk8xTkJRMnhDTEVOQlFVTTdVVUZEUml4UFFVRlBMRk5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdTVUZETlVJc1EwRkJRenRKUVdORUxGRkJRVkVzUTBGQlF5eEpRVUZqTEVWQlFVVXNRMEZCVVN4RlFVRkZMRU5CUVZFc1JVRkJSU3hOUVVGakxFVkJRVVVzUlVGQlV5eEZRVUZGTEV0QlFXRXNSVUZCUlN4TFFVRmhPMUZCUTJoSExFOUJRVThzVTBGQlF5eERRVUZETEZWQlFWVXNSVUZCUlR0WlFVTnFRaXhYUVVGWExFVkJRVVVzUlVGQlJTeERRVUZCTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTzFsQlF6RkRMRXRCUVVzc1JVRkJSU3hMUVVGTE8xbEJRMW9zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGWkxFVkJRVVVzUlVGQlJTeERRVU01UWl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMU5CUTNwR0xFVkJRVVVzVTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRekZDTEVOQlFVTTdTVUZqUkN4UFFVRlBMRU5CUVVNc1VVRkJhMElzUlVGQlJTeFJRVUZyUWl4RlFVRkZMRU5CUVZFc1JVRkJSU3hMUVVGWkxFVkJRVVVzUzBGQldTeEZRVUZGTEUxQlFXTXNSVUZCUlN4RlFVRlRMRVZCUVVVc1MwRkJZU3hGUVVGRkxFdEJRV0U3VVVGRGVra3NUVUZCVFN4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRExFdEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEYUVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZUTEVWQlFVVXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM1JFTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjBSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVRXNRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTXpReXhOUVVGTkxFMUJRVTBzUjBGRFNpeFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJXU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlEzQkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlFTeERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJRU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXp0aFFVTjJSQ3hOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVZrc1JVRkJSU3hEUVVGUkxFVkJRVVVzUlVGQlJTeERRVU53UXl4SFFVRkhMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVUVzUTBGQlF5eERRVUZCTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkJMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVFc1EwRkJReXhEUVVGQkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGRGJFWXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5pTEU5QlFVOHNVMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hGUVVGRkxGZEJRVmNzUlVGQlJTeEpRVUZKTEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNVMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEyaEhMRU5CUVVNN1NVRmpSQ3hMUVVGTExFTkJRVU1zVFVGQlowSXNSVUZCUlN4RlFVRlRMRVZCUVVVc1MwRkJXU3hGUVVGRkxFdEJRV0U3VVVGRE1VUXNUMEZCVHl4VFFVRkRMRU5CUVVNc1ZVRkJWU3hGUVVGRk8xbEJRMnBDTEZkQlFWY3NSVUZCUlN4RlFVRkZMRU5CUVVFc1EwRkJReXhEUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNN1dVRkRNVU1zUzBGQlN5eEZRVUZGTEV0QlFVczdXVUZEV2l4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFWa3NSVUZCUlN4RlFVRkZMRU5CUTJoRExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXp0VFFVTnFSQ3hGUVVGRkxGTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNNVFpeERRVUZETzBOQlEwbzdRVUV6VFVRc01FSkJNazFESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNkYXRhYl8xID0gcmVxdWlyZShcImhzZGF0YWJcIik7XG5jb25zdCBBeGVzXzEgPSByZXF1aXJlKFwiLi9BeGVzXCIpO1xuY29uc3QgaHN1dGlsXzEgPSByZXF1aXJlKFwiaHN1dGlsXCIpO1xuZnVuY3Rpb24gYWRkVGlja051bWJlcih0LCB2KSB7XG4gICAgdC5sYWJlbHMucHVzaCh7IHBvczogdiwgdGV4dDogJycgKyBNYXRoLnJvdW5kKHYgKiAxMDAwMDAwKSAvIDEwMDAwMDAgfSk7XG59XG5mdW5jdGlvbiBhZGRUaWNrRGF0ZSh0LCB2LCBmbXQpIHtcbiAgICB0LmxhYmVscy5wdXNoKHsgcG9zOiB2LmdldFRpbWUoKSwgdGV4dDogaHN1dGlsXzEuZGF0ZShmbXQsIHYpIH0pO1xufVxuZnVuY3Rpb24gbGluU2NhbGVUaWNrTWFya3MoZG9tLCB0aWNrcywgbnVtVGlja3MpIHtcbiAgICBmdW5jdGlvbiBhZGRUaWNrcyh1bml0LCB0aWNrcykge1xuICAgICAgICBsZXQgZXhwID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMCh1bml0KSkpO1xuICAgICAgICB1bml0ID0gTWF0aC5mbG9vcih1bml0IC8gZXhwKSAqIGV4cDtcbiAgICAgICAgY29uc3QgbWluID0gTWF0aC5mbG9vcihkb21bMF0gLyB1bml0KSAqIHVuaXQ7XG4gICAgICAgIGNvbnN0IG1heCA9IE1hdGguY2VpbChkb21bMV0gLyB1bml0KSAqIHVuaXQ7XG4gICAgICAgIGZvciAobGV0IHYgPSBtaW47IHYgPD0gbWF4OyB2ICs9IHVuaXQpIHtcbiAgICAgICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MsIHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bml0O1xuICAgIH1cbiAgICBjb25zdCBtYWpvclVuaXQgPSBhZGRUaWNrcygoZG9tWzFdIC0gZG9tWzBdKSAvIG51bVRpY2tzLCB0aWNrcy5tYWpvcik7XG4gICAgYWRkVGlja3MobWFqb3JVbml0IC8gbnVtVGlja3MsIHRpY2tzLm1pbm9yKTtcbn1cbmZ1bmN0aW9uIHBlcmNlbnRTY2FsZVRpY2tNYXJrcyhkb20sIHRpY2tzLCBudW1UaWNrcykge1xuICAgIGNvbnN0IGZvcm1hdFBlcmNlbnQgPSAobSkgPT4gbS50ZXh0ID0gYCR7TWF0aC5yb3VuZChtLnBvcykgKiAxMDB9JWA7XG4gICAgbGluU2NhbGVUaWNrTWFya3MoZG9tLCB0aWNrcywgbnVtVGlja3MpO1xuICAgIHRpY2tzLm1ham9yLmxhYmVscy5mb3JFYWNoKGZvcm1hdFBlcmNlbnQpO1xuICAgIHRpY2tzLm1pbm9yLmxhYmVscy5mb3JFYWNoKGZvcm1hdFBlcmNlbnQpO1xufVxuZnVuY3Rpb24gbG9nU2NhbGVUaWNrTWFya3MoZG9tLCB0aWNrcykge1xuICAgIGRvbVswXSA9IE1hdGgubWF4KGRvbVswXSwgMWUtMjApO1xuICAgIGRvbVsxXSA9IE1hdGgubWF4KGRvbVsxXSwgMWUtMjApO1xuICAgIGxldCBkaWYgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZzEwKGRvbVsxXSAtIGRvbVswXSkpKTtcbiAgICBsZXQgbWluID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMChkb21bMF0pKSk7XG4gICAgbGV0IG1heCA9IE1hdGgucG93KDEwLCBNYXRoLmNlaWwoTWF0aC5sb2cxMChkb21bMV0pKSk7XG4gICAgaWYgKGRpZiA+IG1pbikge1xuICAgICAgICBmb3IgKGxldCB2ID0gbWluOyB2IDw9IG1heDsgdiAqPSAxMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMjA7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAxICYmIHYgKiBpIDwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MubWFqb3IsIHYgKiBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaSAlIDEwID09PSAwKSB7IH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpIDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkVGlja051bWJlcih0aWNrcy5taW5vciwgdiAqIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRUaWNrTnVtYmVyKHRpY2tzLm1pbm9yLCB2ICogaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtaW4gPSBNYXRoLmZsb29yKGRvbVswXSAvIGRpZikgKiBkaWY7XG4gICAgICAgIG1heCA9IE1hdGguY2VpbChkb21bMV0gLyBkaWYpICogZGlmO1xuICAgICAgICBpZiAoKG1heCAtIG1pbikgLyBkaWYgPCA0KSB7XG4gICAgICAgICAgICBkaWYgLz0gMjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCB2ID0gbWluOyB2IDw9IG1heDsgdiArPSBkaWYpIHtcbiAgICAgICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MubWFqb3IsIHYpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MubWFqb3IsIG1pbik7XG4gICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MubWFqb3IsIG1heCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGF0ZVNjYWxlVGlja01hcmtzKGRvbSwgdGlja3MsIGZtdCA9ICclTU0vJURELyVZWScpIHtcbiAgICBmdW5jdGlvbiBtYWpvclRpY2tJbmNyKGQpIHtcbiAgICAgICAgY29uc3QgdW5pdHMgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IG1pbnMgPSBoc3V0aWxfMS5tcy50b01pbnV0ZXMoZCk7XG4gICAgICAgIGNvbnN0IGRheXMgPSBoc3V0aWxfMS5tcy50b0RheXMoZCk7XG4gICAgICAgIGlmIChkYXlzID4gMzY1KSB7XG4gICAgICAgICAgICB1bml0c1swXSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF5cyA+IDI3MCkge1xuICAgICAgICAgICAgdW5pdHNbMV0gPSAzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRheXMgPiAyMCkge1xuICAgICAgICAgICAgdW5pdHNbMV0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRheXMgPiA0KSB7XG4gICAgICAgICAgICB1bml0c1syXSA9IDc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWlucyA+IDMwMCkge1xuICAgICAgICAgICAgdW5pdHNbMl0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbnMgPiA3NSkge1xuICAgICAgICAgICAgdW5pdHNbM10gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbnMgPiA0NSkge1xuICAgICAgICAgICAgdW5pdHNbNF0gPSAxNTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaW5zID4gMTApIHtcbiAgICAgICAgICAgIHVuaXRzWzRdID0gNTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaW5zID4gMikge1xuICAgICAgICAgICAgdW5pdHNbNF0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdW5pdHNbNV0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG4gICAgZnVuY3Rpb24gcm91bmQoZCwgdW5pdHMsIHJuZCkge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBpZiAodW5pdHNbMF0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBEYXRlKHJuZChkLmdldEZ1bGxZZWFyKCkgLyB1bml0c1swXSkgKiB1bml0c1swXSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdHNbMV0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgcm5kKGQuZ2V0TW9udGgoKSAvIHVuaXRzWzFdKSAqIHVuaXRzWzFdLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0c1syXSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIHJuZChkLmdldERhdGUoKSAvIHVuaXRzWzJdKSAqIHVuaXRzWzJdLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0c1szXSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpLCBybmQoZC5nZXRIb3VycygpIC8gdW5pdHNbM10pICogdW5pdHNbM10sIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRzWzRdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSwgZC5nZXREYXRlKCksIGQuZ2V0SG91cnMoKSwgcm5kKGQuZ2V0TWludXRlcygpIC8gdW5pdHNbNF0pICogdW5pdHNbNF0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRzWzVdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSwgZC5nZXREYXRlKCksIGQuZ2V0SG91cnMoKSwgZC5nZXRNaW51dGVzKCksIHJuZChkLmdldFNlY29uZHMoKSAvIHVuaXRzWzVdKSAqIHVuaXRzWzVdLCAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBkYXRlRG9tID0gW1xuICAgICAgICAodHlwZW9mIGRvbVswXSA9PT0gJ251bWJlcicpID8gbmV3IERhdGUoZG9tWzBdKSA6IGRvbVswXSxcbiAgICAgICAgKHR5cGVvZiBkb21bMV0gPT09ICdudW1iZXInKSA/IG5ldyBEYXRlKGRvbVsxXSkgOiBkb21bMV1cbiAgICBdO1xuICAgIGlmIChpc05hTihkYXRlRG9tWzBdLmdldFRpbWUoKSkpIHtcbiAgICAgICAgZGF0ZURvbVswXSA9IG5ldyBEYXRlKCcxLzEvMTk4MCcpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oZGF0ZURvbVsxXS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIGRhdGVEb21bMF0gPSBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBjb25zdCBpbmNyID0gbWFqb3JUaWNrSW5jcihkYXRlRG9tWzFdLmdldFRpbWUoKSAtIGRhdGVEb21bMF0uZ2V0VGltZSgpKTtcbiAgICBjb25zdCBkYXRlMCA9IHJvdW5kKGRhdGVEb21bMF0sIGluY3IsIE1hdGguZmxvb3IpO1xuICAgIGNvbnN0IGRhdGUxID0gcm91bmQoZGF0ZURvbVsxXSwgaW5jciwgTWF0aC5jZWlsKTtcbiAgICBsZXQgZCA9IGRhdGUwO1xuICAgIHdoaWxlIChkIDw9IGRhdGUxKSB7XG4gICAgICAgIGFkZFRpY2tEYXRlKHRpY2tzLm1ham9yLCBkLCBmbXQpO1xuICAgICAgICBkID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpICsgaW5jclswXSwgZC5nZXRNb250aCgpICsgaW5jclsxXSwgZC5nZXREYXRlKCkgKyBpbmNyWzJdLCBkLmdldEhvdXJzKCkgKyBpbmNyWzNdLCBkLmdldE1pbnV0ZXMoKSArIGluY3JbNF0sIGQuZ2V0U2Vjb25kcygpICsgaW5jcls1XSk7XG4gICAgfVxuICAgIDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRpY2tMYWJlbHModHlwZSwgZG9tYWluLCBudW1UaWNrcywgZm10KSB7XG4gICAgY29uc3Qgc29ydCA9IChhLCBiKSA9PiBhLnBvcyAtIGIucG9zO1xuICAgIGZ1bmN0aW9uIHNvcnRUaWNrcygpIHtcbiAgICAgICAgdGlja3MubWlub3IubGFiZWxzLnNvcnQoc29ydCk7XG4gICAgICAgIHRpY2tzLm1ham9yLmxhYmVscy5zb3J0KHNvcnQpO1xuICAgIH1cbiAgICA7XG4gICAgY29uc3QgZG9tID0gW2RvbWFpblswXSwgZG9tYWluWzFdXTtcbiAgICBjb25zdCB0aWNrcyA9IHtcbiAgICAgICAgbWFqb3I6IHsgbWFya3M6IFtdLCBsYWJlbHM6IFtdIH0sXG4gICAgICAgIG1pbm9yOiB7IG1hcmtzOiBbXSwgbGFiZWxzOiBbXSB9XG4gICAgfTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmxvZzpcbiAgICAgICAgICAgIGxvZ1NjYWxlVGlja01hcmtzKGRvbSwgdGlja3MpO1xuICAgICAgICAgICAgc29ydFRpY2tzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmRhdGU6XG4gICAgICAgICAgICBkYXRlU2NhbGVUaWNrTWFya3MoZG9tLCB0aWNrcywgZm10KTtcbiAgICAgICAgICAgIHNvcnRUaWNrcygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5wZXJjZW50OlxuICAgICAgICAgICAgcGVyY2VudFNjYWxlVGlja01hcmtzKGRvbSwgdGlja3MsIG51bVRpY2tzKTtcbiAgICAgICAgICAgIHNvcnRUaWNrcygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5vcmRpbmFsOiBicmVhaztcbiAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLm5vbWluYWw6IGJyZWFrO1xuICAgICAgICBjYXNlIEF4ZXNfMS5BeGVzLnR5cGUuaW5kZXg6XG4gICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5saW5lYXI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBsaW5TY2FsZVRpY2tNYXJrcyhkb20sIHRpY2tzLCBudW1UaWNrcyk7XG4gICAgICAgICAgICBzb3J0VGlja3MoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xufVxuY2xhc3MgU2NhbGUge1xuICAgIGNvbnN0cnVjdG9yKGNmZykge1xuICAgICAgICB0aGlzLmNmZyA9IGNmZztcbiAgICAgICAgdGhpcy50eXBlVmFsID0gQXhlc18xLkF4ZXMudHlwZS5saW5lYXI7XG4gICAgICAgIHRoaXMucmFuZ2VWYWwgPSBbMCwgMV07XG4gICAgICAgIHRoaXMuZG9tVmFsID0gWzAsIDFdO1xuICAgICAgICB0aGlzLmRvbU1pbkF1dG8gPSAwO1xuICAgICAgICB0aGlzLmRvbU1heEF1dG8gPSAwO1xuICAgICAgICB0aGlzLnR5cGVWYWwgPSBjZmcudHlwZTtcbiAgICAgICAgdGhpcy5kb21haW4oY2ZnLmRvbWFpbik7XG4gICAgfVxuICAgIHNldExhYmVsRm9ybWF0KGxhYmVsRm10KSB7XG4gICAgICAgIHRoaXMubGFiZWxGbXQgPSBsYWJlbEZtdDtcbiAgICB9XG4gICAgcmFuZ2Uocikge1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgdGhpcy5yYW5nZVZhbCA9IHI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VWYWw7XG4gICAgfVxuICAgIGRvbWFpbihkb20pIHtcbiAgICAgICAgaWYgKGRvbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NhbGVUeXBlKCkgPT09IEF4ZXNfMS5BeGVzLnR5cGUuZGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tWzBdID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZG9tWzFdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbVZhbFswXSA9IChkb21bMF0gPT09ICdhdXRvJykgPyAwIDogRGF0ZS5wYXJzZShkb21bMF0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbVZhbFsxXSA9IChkb21bMV0gPT09ICdhdXRvJykgPyAxIDogRGF0ZS5wYXJzZShkb21bMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9tVmFsWzBdID0gKGRvbVswXSA9PT0gJ2F1dG8nKSA/IDAgOiBkb21bMF07XG4gICAgICAgICAgICAgICAgdGhpcy5kb21WYWxbMV0gPSAoZG9tWzFdID09PSAnYXV0bycpID8gMSA6IGRvbVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZG9tWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGlnaHQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbU1pbkF1dG8gPSAyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21NaW5BdXRvID0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhpcy5kb21NaW5BdXRvID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZG9tWzFdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGlnaHQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbU1heEF1dG8gPSAyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21NYXhBdXRvID0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhpcy5kb21NYXhBdXRvID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50eXBlVmFsID09PSBBeGVzXzEuQXhlcy50eXBlLmxvZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9tVmFsWzFdIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbVZhbFsxXSA9IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZG9tVmFsWzBdIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbVZhbFswXSA9IHRoaXMuZG9tVmFsWzFdIC8gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZG9tVmFsO1xuICAgIH1cbiAgICBzY2FsZVR5cGUocykge1xuICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgc3dpdGNoIChzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBoc2RhdGFiXzEuRGF0YS50eXBlLmRhdGU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVZhbCA9IEF4ZXNfMS5BeGVzLnR5cGUuZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBoc2RhdGFiXzEuRGF0YS50eXBlLm5hbWU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVZhbCA9IEF4ZXNfMS5BeGVzLnR5cGUubm9taW5hbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBoc2RhdGFiXzEuRGF0YS50eXBlLnBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVZhbCA9IEF4ZXNfMS5BeGVzLnR5cGUucGVyY2VudDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBoc2RhdGFiXzEuRGF0YS50eXBlLm51bWJlcjpcbiAgICAgICAgICAgICAgICBjYXNlIGhzZGF0YWJfMS5EYXRhLnR5cGUuY3VycmVuY3k6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhpcy50eXBlVmFsID0gQXhlc18xLkF4ZXMudHlwZS5saW5lYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZVZhbDtcbiAgICB9XG4gICAgc2V0QXV0b0RvbWFpbihkb20pIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSBjcmVhdGVUaWNrTGFiZWxzKHRoaXMuc2NhbGVUeXBlKCksIGRvbSwgNCwgdGhpcy5sYWJlbEZtdCk7XG4gICAgICAgIHN3aXRjaCAodGhpcy5kb21NaW5BdXRvKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5kb21WYWxbMF0gPSB0aWNrcy5tYWpvci5sYWJlbHNbMF0gPyB0aWNrcy5tYWpvci5sYWJlbHNbMF0ucG9zIDogZG9tWzBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMuZG9tVmFsWzBdID0gZG9tWzBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5kb21NYXhBdXRvKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5kb21WYWxbMV0gPSB0aWNrcy5tYWpvci5sYWJlbHMubGVuZ3RoID4gMSA/IHRpY2tzLm1ham9yLmxhYmVsc1t0aWNrcy5tYWpvci5sYWJlbHMubGVuZ3RoIC0gMV0ucG9zIDogZG9tWzFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMuZG9tVmFsWzFdID0gZG9tWzFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRpY2tzKG51bVRpY2tzID0gNCkge1xuICAgICAgICBmdW5jdGlvbiBtYXJrc0Zyb21MYWJlbHModGlja3MsIHR5cGUpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5ub21pbmFsOlxuICAgICAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5pbmRleDpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtTGFiZWxzID0gdGlja3MubWFqb3IubGFiZWxzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdGlja3MubWFqb3IubWFya3MgPSBBcnJheShudW1MYWJlbHMgKyAxKS5maWxsKDEpLm1hcCgoZSwgaSkgPT4gaSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tzLm1pbm9yLm1hcmtzID0gdGlja3MubWlub3IubGFiZWxzID8gdGlja3MubWlub3IubGFiZWxzLm1hcCgobCkgPT4gbC5wb3MpIDogW107XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5sb2c6XG4gICAgICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmRhdGU6XG4gICAgICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLnBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLm9yZGluYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmxpbmVhcjpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aWNrcy5tYWpvci5tYXJrcyA9IHRpY2tzLm1ham9yLmxhYmVscyA/IHRpY2tzLm1ham9yLmxhYmVscy5tYXAoKGwpID0+IGwucG9zKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aWNrcy5taW5vci5tYXJrcyA9IHRpY2tzLm1pbm9yLmxhYmVscyA/IHRpY2tzLm1pbm9yLmxhYmVscy5tYXAoKGwpID0+IGwucG9zKSA6IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvbSA9IFt0aGlzLmRvbWFpbigpWzBdLCB0aGlzLmRvbWFpbigpWzFdXTtcbiAgICAgICAgY29uc3QgaW5SYW5nZSA9ICh0KSA9PiB0LnBvcyA+PSBkb21bMF0gJiYgdC5wb3MgPD0gZG9tWzFdO1xuICAgICAgICBjb25zdCB0aWNrcyA9IGNyZWF0ZVRpY2tMYWJlbHModGhpcy5zY2FsZVR5cGUoKSwgdGhpcy5kb21haW4oKSwgbnVtVGlja3MsIHRoaXMubGFiZWxGbXQpO1xuICAgICAgICB0aWNrcy5taW5vci5sYWJlbHMgPSB0aWNrcy5taW5vci5sYWJlbHMuZmlsdGVyKGluUmFuZ2UpO1xuICAgICAgICB0aWNrcy5tYWpvci5sYWJlbHMgPSB0aWNrcy5tYWpvci5sYWJlbHMuZmlsdGVyKGluUmFuZ2UpO1xuICAgICAgICBpZiAodGlja3MubWFqb3IubGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGlja3MubWFqb3IubGFiZWxzID0gdGlja3MubWlub3IubGFiZWxzO1xuICAgICAgICAgICAgdGlja3MubWlub3IubGFiZWxzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgbWFya3NGcm9tTGFiZWxzKHRpY2tzLCB0aGlzLnNjYWxlVHlwZSgpKTtcbiAgICAgICAgcmV0dXJuIHRpY2tzO1xuICAgIH1cbiAgICBjb252ZXJ0KGRvbVZhbCkge1xuICAgICAgICBjb25zdCBkb20gPSB0aGlzLmRvbWFpbigpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucmFuZ2UoKTtcbiAgICAgICAgY29uc3QgZG9tTWluID0gZG9tWzBdO1xuICAgICAgICBjb25zdCBkb21NYXggPSBkb21bMV07XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zY2FsZVR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmxvZzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLmxvZyhkb21WYWwgLyBkb21NaW4pIC8gTWF0aC5sb2coZG9tTWF4IC8gZG9tTWluKSAqIChyYW5nZVsxXSAtIHJhbmdlWzBdKSArIHJhbmdlWzBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLm5vbWluYWw6IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEF4ZXNfMS5BeGVzLnR5cGUucGVyY2VudDpcbiAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5pbmRleDpcbiAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5vcmRpbmFsOlxuICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmxpbmVhcjpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGRvbVZhbCAtIGRvbU1pbikgLyAoZG9tTWF4IC0gZG9tTWluKSAqIChyYW5nZVsxXSAtIHJhbmdlWzBdKSArIHJhbmdlWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0cy5TY2FsZSA9IFNjYWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVTJOaGJHVXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12VTJOaGJHVXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGTFFTeHhRMEZIZFVNN1FVRkRka01zYVVOQlFYTkRPMEZCUTNSRExHMURRVUZ6UXp0QlFWRjBReXhUUVVGVExHRkJRV0VzUTBGQlF5eERRVUZWTEVWQlFVVXNRMEZCVVR0SlFVTjJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVXNSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRM1JGTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmRCUVZjc1EwRkJReXhEUVVGVkxFVkJRVVVzUTBGQlRTeEZRVUZGTEVkQlFWVTdTVUZETDBNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVsQlFVa3NSVUZCUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTXpSQ3hEUVVGRE8wRkJTVVFzVTBGQlV5eHBRa0ZCYVVJc1EwRkJReXhIUVVGWkxFVkJRVVVzUzBGQlZ5eEZRVUZGTEZGQlFXVTdTVUZEYWtVc1UwRkJVeXhSUVVGUkxFTkJRVU1zU1VGQlZ5eEZRVUZGTEV0QlFXTTdVVUZEZWtNc1NVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU55UkN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVNc1IwRkJSeXhEUVVGRE8xRkJRMnhETEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF6dFJRVU42UXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEZUVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVVVzU1VGQlNTeEZRVUZGTzFsQlFVVXNZVUZCWVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dFRRVUZGTzFGQlF6ZEVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMmhDTEVOQlFVTTdTVUZEUkN4TlFVRk5MRk5CUVZNc1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NVVUZCVVN4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU4wUlN4UlFVRlJMRU5CUVVNc1UwRkJVeXhIUVVGSExGRkJRVkVzUlVGQlJTeExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRhRVFzUTBGQlF6dEJRVVZFTEZOQlFWTXNjVUpCUVhGQ0xFTkJRVU1zUjBGQldTeEZRVUZGTEV0QlFWY3NSVUZCUlN4UlFVRmxPMGxCUTNKRkxFMUJRVTBzWVVGQllTeEhRVUZITEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1NVRkROVVVzYVVKQlFXbENMRU5CUVVNc1IwRkJSeXhGUVVGRkxFdEJRVXNzUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXp0SlFVTjRReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU03U1VGRE1VTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMEZCUlRsRExFTkJRVU03UVVGRlJDeFRRVUZUTEdsQ1FVRnBRaXhEUVVGRExFZEJRVmtzUlVGQlJTeExRVUZYTzBsQlEyaEVMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTnFReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1NVRkRha01zU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYUVVc1NVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjJSQ3hKUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNSRUxFbEJRVWtzUjBGQlJ5eEhRVUZITEVkQlFVY3NSVUZCUlR0UlFVTllMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGRkxFVkJRVVVzUlVGQlJUdFpRVU0zUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU4wUWl4SlFVRkpMRU5CUVVNc1MwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNSMEZCUXl4SFFVRkhMRVZCUVVVN2IwSkJRVVVzWVVGQllTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVRkZPM0ZDUVVOeVJDeEpRVUZKTEVOQlFVTXNSMEZCUXl4RlFVRkZMRXRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVVU3Y1VKQlEyaENMRWxCUVVrc1EwRkJReXhIUVVGRExFVkJRVVVzUlVGQlJUdHZRa0ZCVXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2FVSkJRVVU3Y1VKQlEzSkVMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUzBGQlJ5eERRVUZETEVWQlFVVTdiMEpCUVUwc1lVRkJZU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVUZGTzJGQlF6ZEVPMU5CUTBvN1MwRkRTanRUUVVGTk8xRkJRMGdzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkRMRWRCUVVjc1EwRkJRenRSUVVOcVF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVNc1IwRkJSeXhEUVVGRE8xRkJRMmhETEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVNc1IwRkJSeXhEUVVGRExFZEJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVTnVRaXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlExbzdVVUZEUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJSU3hIUVVGSExFVkJRVVU3V1VGRE9VSXNZVUZCWVN4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEYWtNN1VVRkRSQ3hoUVVGaExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOb1F5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU51UXp0QlFVTk1MRU5CUVVNN1FVRkZSQ3hUUVVGVExHdENRVUZyUWl4RFFVRkRMRWRCUVZVc1JVRkJSU3hMUVVGWExFVkJRVVVzUjBGQlJ5eEhRVUZETEdGQlFXRTdTVUZEYkVVc1UwRkJVeXhoUVVGaExFTkJRVU1zUTBGQlVUdFJRVU16UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETlVJc1RVRkJUU3hKUVVGSkxFZEJRVWtzVjBGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNNVFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4WFFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6RkNMRWxCUVVrc1NVRkJTU3hIUVVGSExFZEJRVWNzUlVGQlZUdFpRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGQlJUdGhRVU53UXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhIUVVGSExFVkJRVXM3V1VGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRVVU3WVVGRGNFTXNTVUZCU1N4SlFVRkpMRWRCUVVjc1JVRkJSU3hGUVVGTk8xbEJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVGRk8yRkJRM0JETEVsQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1JVRkJUenRaUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkJSVHRoUVVOd1F5eEpRVUZKTEVsQlFVa3NSMEZCUnl4SFFVRkhMRVZCUVVzN1dVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUVVVN1lVRkRjRU1zU1VGQlNTeEpRVUZKTEVkQlFVY3NSVUZCUlN4RlFVRk5PMWxCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVRkZPMkZCUTNCRExFbEJRVWtzU1VGQlNTeEhRVUZITEVWQlFVVXNSVUZCVFR0WlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdVMEZCUlR0aFFVTnlReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eEZRVUZGTEVWQlFVMDdXVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlFVVTdZVUZEY0VNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZQTzFsQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVUZGTzJGQlEycENPMWxCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVRkZPMUZCUTNwRExFOUJRVThzUzBGQlN5eERRVUZETzBsQlEycENMRU5CUVVNN1NVRkZSQ3hUUVVGVExFdEJRVXNzUTBGQlF5eERRVUZOTEVWQlFVVXNTMEZCWXl4RlFVRkZMRWRCUVhOQ08xRkJRM3BFTEVsQlFVa3NUVUZCVnl4RFFVRkRPMUZCUTJoQ0xFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMWxCUTFZc1RVRkJUU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTJoRk8yRkJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN1dVRkRha0lzVFVGQlRTeEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTTVSVHRoUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMWxCUTJwQ0xFMUJRVTBzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRek5HTzJGQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3V1VGRGFrSXNUVUZCVFN4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVkQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM3BITzJGQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3V1VGRGFrSXNUVUZCVFN4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hIUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTjZTRHRoUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMWxCUTJwQ0xFMUJRVTBzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNwSk8xRkJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVWRUxFMUJRVTBzVDBGQlR5eEhRVUZWTzFGQlEyNUNMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKRkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1VVRkJVU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRM2hGTEVOQlFVTTdTVUZEUml4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dExRVUZGTzBsQlEzWkZMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03UzBGQlJUdEpRVU0zUkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhoUVVGaExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhEUVVGRE8wbEJRM2hGTEUxQlFVMHNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU5zUkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEYWtRc1NVRkJTU3hEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETzBsQlEyUXNUMEZCVHl4RFFVRkRMRWxCUVVVc1MwRkJTeXhGUVVGRk8xRkJRMklzVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEycERMRU5CUVVNc1IwRkJSeXhKUVVGSkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNWMEZCVnl4RlFVRkZMRWRCUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1IwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFZEJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhWUVVGVkxFVkJRVVVzUjBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExGVkJRVlVzUlVGQlJTeEhRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRekZLTzBsQlFVRXNRMEZCUXp0QlFVTk9MRU5CUVVNN1FVRkhSQ3hUUVVGVExHZENRVUZuUWl4RFFVRkRMRWxCUVZjc1JVRkJSU3hOUVVGaExFVkJRVVVzVVVGQlpTeEZRVUZGTEVkQlFWVTdTVUZETjBVc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZYTEVWQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1NVRkRkRVFzVTBGQlV5eFRRVUZUTzFGQlEyUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMnBGTEVOQlFVTTdTVUZCUVN4RFFVRkRPMGxCUTBZc1RVRkJUU3hIUVVGSExFZEJRVmtzUTBGQlV5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVZVc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZETlVRc1RVRkJUU3hMUVVGTExFZEJRVk03VVVGRGFFSXNTMEZCU3l4RlFVRkZMRVZCUVVNc1MwRkJTeXhGUVVGRExFVkJRVVVzUlVGQlJTeE5RVUZOTEVWQlFXVXNSVUZCUlN4RlFVRkRPMUZCUXpGRExFdEJRVXNzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUXl4RlFVRkZMRVZCUVVVc1RVRkJUU3hGUVVGbExFVkJRVVVzUlVGQlF6dExRVU0zUXl4RFFVRkRPMGxCUTBZc1VVRkJUeXhKUVVGSkxFVkJRVVU3VVVGRFZDeExRVUZMTEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSenRaUVVGTkxHbENRVUZwUWl4RFFVRkRMRWRCUVVjc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFpRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMWxCUVVNc1RVRkJUVHRSUVVNeFJTeExRVUZMTEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTVHRaUVVGTExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1JVRkJSU3hMUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRaUVVGRExFMUJRVTA3VVVGRGFFWXNTMEZCU3l4WFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVTg3V1VGQlJTeHhRa0ZCY1VJc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMWxCUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03V1VGQlF5eE5RVUZOTzFGQlEzaEdMRXRCUVVzc1YwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4TlFVRk5PMUZCUXpsQ0xFdEJRVXNzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTk8xRkJRemxDTEV0QlFVc3NWMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRGNrSXNTMEZCU3l4WFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU4wUWp0WlFVRjNRaXhwUWtGQmFVSXNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETzFsQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1MwRkRhRVk3U1VGRFJDeFBRVUZQTEV0QlFVc3NRMEZCUXp0QlFVTnFRaXhEUVVGRE8wRkJUVVFzVFVGQllTeExRVUZMTzBsQlUyUXNXVUZCYjBJc1IwRkJXVHRSUVVGYUxGRkJRVWNzUjBGQlNDeEhRVUZITEVOQlFWTTdVVUZRZUVJc1dVRkJUeXhIUVVGbExGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNaRExHRkJRVkVzUjBGQll5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNMVFpeFhRVUZOTEVkQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6VkNMR1ZCUVZVc1IwRkJXU3hEUVVGRExFTkJRVU03VVVGRGVFSXNaVUZCVlN4SFFVRlpMRU5CUVVNc1EwRkJRenRSUVVrMVFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGVFSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZETlVJc1EwRkJRenRKUVVWTkxHTkJRV01zUTBGQlF5eFJRVUZsTzFGQlEycERMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzVVVGQlVTeERRVUZETzBsQlF6ZENMRU5CUVVNN1NVRkZUU3hMUVVGTExFTkJRVU1zUTBGQlZ6dFJRVU53UWl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVOSUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUTNKQ08xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUTNwQ0xFTkJRVU03U1VGRFRTeE5RVUZOTEVOQlFVTXNSMEZCVnp0UlFVTnlRaXhKUVVGSkxFZEJRVWNzUlVGQlJUdFpRVU5NTEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hMUVVGTExGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZPMmRDUVVOeVF5eEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExGRkJRVkVzU1VGQlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhSUVVGUkxFVkJRVVU3YjBKQlEzcEVMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzVFVGQlRTeERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEY2tVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eE5RVUZOTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVTjRSVHRoUVVOS08ybENRVUZOTzJkQ1FVTkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzVFVGQlRTeERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVONlJDeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5vUlR0WlFVTkVMRkZCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTllMRXRCUVVzc1QwRkJUenR2UWtGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGQlF5eE5RVUZOTzJkQ1FVTXhReXhMUVVGTExFMUJRVTA3YjBKQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03YjBKQlFVTXNUVUZCVFR0blFrRkRNVU1zVDBGQlR5eERRVUZETEVOQlFVOHNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03WVVGRGRFTTdXVUZEUkN4UlFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdG5Ra0ZEV0N4TFFVRkxMRTlCUVU4N2IwSkJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRVU1zVFVGQlRUdG5Ra0ZETVVNc1MwRkJTeXhOUVVGTk8yOUNRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVUZETEUxQlFVMDdaMEpCUXpGRExFOUJRVThzUTBGQlF5eERRVUZQTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGRE8yRkJRM1JETzFOQlEwbzdVVUZEUkN4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFdEJRVXNzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVN1dVRkRhRU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdG5Ra0ZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0aFFVRkZPMWxCUTJwRUxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3WjBKQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQldTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJSU3hIUVVGRExFVkJRVVVzUTBGQlF6dGhRVUZGTzFOQlF6ZEZPMUZCUTBRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEzWkNMRU5CUVVNN1NVRkRUU3hUUVVGVExFTkJRVU1zUTBGQlZ6dFJRVU40UWl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVOSUxGRkJRVkVzUTBGQlF5eEZRVUZGTzJkQ1FVTlFMRXRCUVVzc1kwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTzI5Q1FVRkxMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN2IwSkJRVU1zVFVGQlRUdG5Ra0ZETjBRc1MwRkJTeXhqUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVazdiMEpCUVVzc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenR2UWtGQlF5eE5RVUZOTzJkQ1FVTm9SU3hMUVVGTExHTkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHp0dlFrRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRE8yOUNRVUZETEUxQlFVMDdaMEpCUTJoRkxFdEJRVXNzWTBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1owSkJRM1JDTEV0QlFVc3NZMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03WjBKQlEzaENMRTlCUVU4c1EwRkJReXhEUVVGblFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRmRCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzJGQlF6TkVPMU5CUTBvN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdTVUZEZUVJc1EwRkJRenRKUVZGTkxHRkJRV0VzUTBGQlF5eEhRVUZaTzFGQlF6ZENMRTFCUVUwc1MwRkJTeXhIUVVGVExHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFVkJRVVVzUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU01UlN4UlFVRlJMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVU3V1VGRmNrSXNTMEZCU3l4RFFVRkRPMmRDUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVUZETEUxQlFVMDdXVUZGTVVZc1MwRkJTeXhEUVVGRE8yZENRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVGRExFMUJRVTA3VTBGRE1VTTdVVUZEUkN4UlFVRlJMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVU3V1VGRGNrSXNTMEZCU3l4RFFVRkRPMmRDUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVUZETEUxQlFVMDdXVUZETVVnc1MwRkJTeXhEUVVGRE8yZENRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVGRExFMUJRVTA3VTBGRE1VTTdTVUZEVEN4RFFVRkRPMGxCUzAwc1MwRkJTeXhEUVVGRExGZEJRV2RDTEVOQlFVTTdVVUZETVVJc1UwRkJVeXhsUVVGbExFTkJRVU1zUzBGQlZ5eEZRVUZGTEVsQlFXRTdXVUZETDBNc1VVRkJUeXhKUVVGSkxFVkJRVVU3WjBKQlExUXNTMEZCU3l4WFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dG5Ra0ZEZGtJc1MwRkJTeXhYUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVczdiMEpCUTJoQ0xFMUJRVTBzVTBGQlV5eEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF6dHZRa0ZETlVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRMRk5CUVZNc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlN5eEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTXZSU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlFTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJRenR2UWtGRE5VWXNUVUZCVFR0blFrRkRWaXhMUVVGTExGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVOdVFpeExRVUZMTEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU53UWl4TFFVRkxMRmRCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETzJkQ1FVTjJRaXhMUVVGTExGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRPMmRDUVVOMlFpeExRVUZMTEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8yZENRVU4wUWp0dlFrRkRTU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlFTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJRenR2UWtGRE5VWXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVFc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVmNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdZVUZEYmtjN1VVRkRUQ3hEUVVGRE8xRkJRMFFzVFVGQlRTeEhRVUZITEVkQlFWa3NRMEZCVXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFWVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVVc1RVRkJUU3hQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZYTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJoRkxFMUJRVTBzUzBGQlN5eEhRVUZWTEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRSUVVOb1J5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGVFUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEzaEVMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVGRkxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzFsQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUlVGQlJTeERRVUZETzFOQlFVVTdVVUZETVVjc1pVRkJaU3hEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTEV0QlFVc3NRMEZCUXp0SlFVTnFRaXhEUVVGRE8wbEJSMFFzVDBGQlR5eERRVUZETEUxQlFXRTdVVUZEYWtJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUXpGQ0xFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRSUVVNelFpeE5RVUZOTEUxQlFVMHNSMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE9VSXNUVUZCVFN4TlFVRk5MRWRCUVZjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6bENMRWxCUVVrc1RVRkJUU3hEUVVGRE8xRkJRMWdzVVVGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVN1dVRkRja0lzUzBGQlN5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjN1owSkJRMlFzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZET1VZc1RVRkJUVHRaUVVOV0xFdEJRVXNzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTk8xbEJRemxDTEV0QlFVc3NWMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRGNFSXNTMEZCU3l4WFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dFpRVU4yUWl4TFFVRkxMRmRCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzFsQlEzSkNMRXRCUVVzc1YwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEZGtJc1MwRkJTeXhYUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0WlFVTjBRanRuUWtGRFNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVVc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNoR08xRkJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYkVJc1EwRkJRenREUVVOS08wRkJOVWxFTEhOQ1FUUkpReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm0gPSByZXF1aXJlKFwibWl0aHJpbFwiKTtcbmNvbnN0IFNWR0VsZW1fMSA9IHJlcXVpcmUoXCIuL1NWR0VsZW1cIik7XG5jb25zdCBBeGVzXzEgPSByZXF1aXJlKFwiLi9BeGVzXCIpO1xuY29uc3QgUGxvdExpbmVfMSA9IHJlcXVpcmUoXCIuL1Bsb3RMaW5lXCIpO1xuY29uc3QgUGxvdE1hcmtlcnNfMSA9IHJlcXVpcmUoXCIuL1Bsb3RNYXJrZXJzXCIpO1xuY29uc3QgUGxvdEJhcl8xID0gcmVxdWlyZShcIi4vUGxvdEJhclwiKTtcbmNvbnN0IFBsb3RBcmVhXzEgPSByZXF1aXJlKFwiLi9QbG90QXJlYVwiKTtcbmxldCBnQ2xpcElEID0gMDtcbmZ1bmN0aW9uIGNvcHlEZWZhdWx0KHRhcmdldCwgc291cmNlLCBkZWZhdWx0cykge1xuICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3B5RGVmYXVsdCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIGRlZmF1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YXJnZXRba2V5XSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5jbGFzcyBTZXJpZXMgZXh0ZW5kcyBTVkdFbGVtXzEuU1ZHRWxlbSB7XG4gICAgc3RhdGljIGRlZmF1bHRDb25maWcoY2ZnKSB7XG4gICAgICAgIGNmZy5zZXJpZXMgPSBuZXcgU2VyaWVzQ29uZmlnKCk7XG4gICAgfVxuICAgIHN0YXRpYyBhZGp1c3RDb25maWcoY2ZnKSB7XG4gICAgICAgIGNmZy5zZXJpZXMuc2VyaWVzLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgICAgIGlmIChzLnggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNmZy5heGVzLnByaW1hcnkueC50aXRsZS5oT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBjZmcuYXhlcy5wcmltYXJ5Lnguc2NhbGUudHlwZSA9IEF4ZXNfMS5BeGVzLnR5cGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgY2ZnLmdyaWQubWlub3IudmVyLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyYXdDbGlwUmVjdChjbGlwSUQsIHNjYWxlcykge1xuICAgICAgICByZXR1cm4gIWNsaXBJRCA/IGV4cG9ydHMubSgnJykgOiB0aGlzLmNsaXBSZWN0KHsgeDogc2NhbGVzLngucmFuZ2UoKVswXSwgeTogc2NhbGVzLnkucmFuZ2UoKVsxXSB9LCB7XG4gICAgICAgICAgICB3OiBzY2FsZXMueC5yYW5nZSgpWzFdIC0gc2NhbGVzLngucmFuZ2UoKVswXSxcbiAgICAgICAgICAgIGg6IHNjYWxlcy55LnJhbmdlKClbMF0gLSBzY2FsZXMueS5yYW5nZSgpWzFdXG4gICAgICAgIH0sIGNsaXBJRCk7XG4gICAgfVxuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCBjZmcgPSBub2RlLmF0dHJzLmNmZztcbiAgICAgICAgY29uc3Qgc2NhbGVzID0gbm9kZS5hdHRycy5zY2FsZXMucHJpbWFyeTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5vZGUuYXR0cnMuZGF0YTtcbiAgICAgICAgY29uc3QgY2xpcElEID0gY2ZnLmNsaXAgPyAnaHMnICsgZ0NsaXBJRCsrIDogdW5kZWZpbmVkO1xuICAgICAgICBjZmcuc2VyaWVzLm1hcCgocykgPT4ge1xuICAgICAgICAgICAgaWYgKHMubWFwID09PSBTZXJpZXMubWFwLnNoYXJlZCkge1xuICAgICAgICAgICAgICAgIHMueVN1bSA9ICckc3VtJztcbiAgICAgICAgICAgICAgICBkYXRhW3MuZGF0YUluZGV4XS5jb2xBZGQocy55U3VtKTtcbiAgICAgICAgICAgICAgICBkYXRhW3MuZGF0YUluZGV4XS5jb2xJbml0aWFsaXplKHMueVN1bSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjZmcuc2VyaWVzLm1hcCgocykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHQgPSBkYXRhW3MuZGF0YUluZGV4XTtcbiAgICAgICAgICAgIGlmIChzLm1hcCA9PT0gU2VyaWVzLm1hcC5zaGFyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxDb2wgPSBkdC5jb2xOdW1iZXIocy55KTtcbiAgICAgICAgICAgICAgICBkdC5jb2xJbml0aWFsaXplKHMueVN1bSwgKHYsIGksIHJvdykgPT4geyByZXR1cm4gdiArIHJvd1t2YWxDb2xdOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzLm1hcCkge1xuICAgICAgICAgICAgICAgIHMueUJhc2UgPSAnJCcgKyBzLm1hcDtcbiAgICAgICAgICAgICAgICBkdC5jb2xBZGQocy55QmFzZSk7XG4gICAgICAgICAgICAgICAgZHQuY29sSW5pdGlhbGl6ZShzLnlCYXNlLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1zZXJpZXMnIH0sIFtcbiAgICAgICAgICAgIHRoaXMuZHJhd0NsaXBSZWN0KGNsaXBJRCwgc2NhbGVzKSxcbiAgICAgICAgICAgIGV4cG9ydHMubSgnc3ZnJywgY2ZnLnNlcmllcy5tYXAoKHMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkdCA9IGRhdGFbcy5kYXRhSW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBTZXJpZXMucGxvdFtzLnR5cGVdIHx8IFNlcmllcy5wbG90LmxpbmU7XG4gICAgICAgICAgICAgICAgdHlwZS5zZXREZWZhdWx0cyhkdCwgcywgc2NhbGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gcy5jb25kID8gZHQuZmlsdGVyKHMuY29uZCkgOiBkdDtcbiAgICAgICAgICAgICAgICBjb25zdCBwbG90ID0gdHlwZS5wbG90KGQsIHMsIHNjYWxlcywgaSwgY2xpcElEKTtcbiAgICAgICAgICAgICAgICBpZiAocy5tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsQ29sID0gZC5jb2xOdW1iZXIocy55KTtcbiAgICAgICAgICAgICAgICAgICAgZC5jb2xJbml0aWFsaXplKHMueUJhc2UsICh2LCBpLCByb3cpID0+IHsgcmV0dXJuIHYgKyByb3dbdmFsQ29sXTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6IGBocy1ncmFwaC1zZXJpZXMtJHtpfWAgfSwgcGxvdCk7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgXSk7XG4gICAgfVxufVxuU2VyaWVzLm1hcmtlciA9IHtcbiAgICBjaXJjbGU6IFN5bWJvbCgnY2lyY2xlIG1hcmtlcicpLFxuICAgIHNxdWFyZTogU3ltYm9sKCdzcXVhcmUgbWFya2VyJyksXG4gICAgZGlhbW9uZDogU3ltYm9sKCdkaWFtb25kIG1hcmtlcicpLFxuICAgIHVwVHJpYW5nbGU6IFN5bWJvbCgndXB3YXJkIHRyaWFuZ2xlIG1hcmtlcicpLFxuICAgIGRvd25UcmlhbmdsZTogU3ltYm9sKCdkb3dud2FyZCB0cmlhbmdsZSBtYXJrZXInKVxufTtcblNlcmllcy5wbG90ID0ge1xuICAgIGxpbmU6IG5ldyBQbG90TGluZV8xLlBsb3RMaW5lKCksXG4gICAgbWFya2VyOiBuZXcgUGxvdE1hcmtlcnNfMS5QbG90TWFya2VycygpLFxuICAgIGJhcjogbmV3IFBsb3RCYXJfMS5QbG90QmFyKCksXG4gICAgYXJlYTogbmV3IFBsb3RBcmVhXzEuUGxvdEFyZWEoKVxufTtcblNlcmllcy5tYXAgPSB7XG4gICAgc3RhY2tlZDogJ3N0YWNrZWQnLFxuICAgIHNoYXJlZDogJ3NoYXJlZCdcbn07XG5TZXJpZXMuZGVmYXVsdFN0eWxlID0ge1xuICAgIGxpbmU6IHsgY29sb3I6ICdkZWZhdWx0JywgdmlzaWJsZTogdHJ1ZSwgd2lkdGg6IDIgfSxcbiAgICBtYXJrZXI6IHsgY29sb3I6ICdkZWZhdWx0JywgdmlzaWJsZTogZmFsc2UsIHNpemU6IDEwLCBzaGFwZTogU2VyaWVzLm1hcmtlci5jaXJjbGUgfSxcbiAgICBsYWJlbDogeyBjb2xvcjogJ2RlZmF1bHQnLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIGZpbGw6IHsgY29sb3I6ICdkZWZhdWx0JywgdmlzaWJsZTogZmFsc2UgfSxcbiAgICBiYXI6IHsgY29sb3I6ICdkZWZhdWx0JywgdmlzaWJsZTogZmFsc2UsIHdpZHRoOiA1MCwgb2Zmc2V0OiAzMCB9XG59O1xuU2VyaWVzLmRlZmF1bHRDb2xvcnMgPSBbJyNmMDAnLCAnIzBmMCcsICcjMDBmJywgJyNmZjAnLCAnIzBmZicsICcjZjBmJywgJyMwMDAnLCAnIzQ0NCcsICcjODg4JywgJyNjY2MnXTtcbmV4cG9ydHMuU2VyaWVzID0gU2VyaWVzO1xuY2xhc3MgU2VyaWVzQ29uZmlnIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zZXJpZXNEZWZzID0gW107XG4gICAgICAgIHRoaXMuY2xpcCA9IHRydWU7XG4gICAgfVxuICAgIHNldCBkYXRhKGQpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGQ7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgc2V0IHNlcmllcyhjZmcpIHtcbiAgICAgICAgY29uc3QgZGVmU3R5bGUgPSBTZXJpZXMuZGVmYXVsdFN0eWxlO1xuICAgICAgICBjb25zdCBkZWZDb2xvcnMgPSBTZXJpZXMuZGVmYXVsdENvbG9ycztcbiAgICAgICAgY2ZnLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgICAgIHMudHlwZSA9IHMudHlwZSB8fCAnbGluZSc7XG4gICAgICAgICAgICBzLnN0eWxlID0gcy5zdHlsZSB8fCB7fTtcbiAgICAgICAgICAgIHMuZGF0YUluZGV4ID0gcy5kYXRhSW5kZXggfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBkZWZDb2xvcnNbdGhpcy5zZXJpZXNEZWZzLmxlbmd0aF1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb3B5RGVmYXVsdChzLnN0eWxlLCBkZWZTdHlsZSwgZGVmYXVsdHMpO1xuICAgICAgICAgICAgdGhpcy5zZXJpZXNEZWZzLnB1c2gocyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHMudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgICAgICAgICBzLnN0eWxlLmxpbmUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ21hcmtlcic6XG4gICAgICAgICAgICAgICAgICAgIHMuc3R5bGUubWFya2VyLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdhcmVhJzpcbiAgICAgICAgICAgICAgICAgICAgcy5zdHlsZS5maWxsLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdiYXInOlxuICAgICAgICAgICAgICAgICAgICBzLnN0eWxlLmZpbGwudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IHNlcmllcygpIHsgcmV0dXJuIHRoaXMuc2VyaWVzRGVmczsgfVxufVxuZXhwb3J0cy5TZXJpZXNDb25maWcgPSBTZXJpZXNDb25maWc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMlZ5YVdWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dmMzSmpMMU5sY21sbGN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVc5Q1lTeFJRVUZCTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03UVVGUGNFTXNkVU5CUVhsRE8wRkJRM3BETEdsRFFVRnpRenRCUVVWMFF5eDVRMEZCTUVNN1FVRkRNVU1zSzBOQlFUWkRPMEZCUXpkRExIVkRRVUY1UXp0QlFVTjZReXg1UTBGQk1FTTdRVUZGTVVNc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlJXaENMRk5CUVZNc1YwRkJWeXhEUVVGRExFMUJRVlVzUlVGQlJTeE5RVUZWTEVWQlFVVXNVVUZCV1R0SlFVTnlSQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVlVzUlVGQlJTeEZRVUZGTzFGQlEzWkRMRWxCUVVrc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NVVUZCVVN4RlFVRkZPMWxCUTJwRExFbEJRVWtzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRuUWtGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8yRkJRVVU3V1VGRGNFUXNWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VTBGRGJrUTdZVUZCVFR0WlFVTklMRWxCUVVrc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEZOQlFWTXNSVUZCUlR0blFrRkJSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yRkJRVVU3V1VGRE4wUXNTVUZCU1N4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzVTBGQlV5eEZRVUZGTzJkQ1FVRkZMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1lVRkJSVHRUUVVOc1JUdEpRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTFBc1EwRkJRenRCUVV0RUxFMUJRV0VzVFVGQlR5eFRRVUZSTEdsQ1FVRlBPMGxCTmtZdlFpeE5RVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVZVN1VVRkRNMElzUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRmxCUVZrc1JVRkJSU3hEUVVGRE8wbEJRM0JETEVOQlFVTTdTVUZWUkN4TlFVRk5MRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVlU3VVVGRE1VSXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVN1dVRkRkRU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRuUWtGRGJrSXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU55UXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJSeXhYUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRhRVFzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUjBGQlJ5eExRVUZMTEVOQlFVTTdZVUZEZEVNN1VVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdTVUZGUkN4WlFVRlpMRU5CUVVNc1RVRkJZU3hGUVVGRkxFMUJRV003VVVGRGRFTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJRU3hEUVVGRExFTkJRVU1zVTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVU5xUXl4RlFVRkpMRU5CUVVNc1JVRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlEycEVPMWxCUTBrc1EwRkJReXhGUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRE0wTXNRMEZCUXl4RlFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRPVU1zUlVGRFJDeE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTm9RaXhEUVVGRE8wbEJSVVFzU1VGQlNTeERRVUZETEVsQlFWazdVVUZEWWl4TlFVRk5MRWRCUVVjc1IwRkJhVUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkRla01zVFVGQlRTeE5RVUZOTEVkQlFWY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETzFGQlEycEVMRTFCUVUwc1NVRkJTU3hIUVVGaExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUTNaRExFMUJRVTBzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVFc1EwRkJReXhEUVVGRExFbEJRVWtzUjBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJSWEJFTEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlZ5eEZRVUZGTEVWQlFVVTdXVUZETTBJc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRk8yZENRVU0zUWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF6dG5Ra0ZEYUVJc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnFReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUXpsRE8xRkJRMHdzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFWY3NSVUZCUlN4RlFVRkZPMWxCUXpOQ0xFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRE4wSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhMUVVGSExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkZPMmRDUVVNelFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRha01zUlVGQlJTeERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRXNSVUZCUlN4SFFVRlpMRVZCUVVNc1JVRkJSU3hIUVVGRkxFOUJRVThzUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlF6TkdPMWxCUTBRc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTlFMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eEhRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1owSkJRM0pDTEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzJkQ1FVTnVRaXhGUVVGRkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRGFFTTdVVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFOUJRVThzVTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJReXhwUWtGQmFVSXNSVUZCUXl4RlFVRkZPMWxCUTNoRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJRenRaUVVOcVF5eFRRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRk8yZENRVU01UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMmRDUVVNM1FpeE5RVUZOTEVsQlFVa3NSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEY2tRc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8yZENRVU5vUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8yZENRVU42UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0blFrRkRhRVFzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZPMjlDUVVOUUxFMUJRVTBzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTm9ReXhEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGUkxFVkJRVVVzUTBGQlVTeEZRVUZGTEVkQlFWa3NSVUZCUXl4RlFVRkZMRWRCUVVVc1QwRkJUeXhEUVVGRExFZEJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YVVKQlF6TkdPMmRDUVVORUxFOUJRVThzVTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJReXh0UWtGQmJVSXNRMEZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU14UkN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOT0xFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdPMEZCTlVwTkxHRkJRVTBzUjBGQlJ6dEpRVU5hTEUxQlFVMHNSVUZCVlN4TlFVRk5MRU5CUVVNc1pVRkJaU3hEUVVGRE8wbEJRM1pETEUxQlFVMHNSVUZCVlN4TlFVRk5MRU5CUVVNc1pVRkJaU3hEUVVGRE8wbEJRM1pETEU5QlFVOHNSVUZCVXl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTTdTVUZEZUVNc1ZVRkJWU3hGUVVGTkxFMUJRVTBzUTBGQlF5eDNRa0ZCZDBJc1EwRkJRenRKUVVOb1JDeFpRVUZaTEVWQlFVa3NUVUZCVFN4RFFVRkRMREJDUVVFd1FpeERRVUZETzBOQlEzSkVMRU5CUVVNN1FVRlBTeXhYUVVGSkxFZEJRVWM3U1VGRFZpeEpRVUZKTEVWQlFVc3NTVUZCU1N4dFFrRkJVU3hGUVVGRk8wbEJRM1pDTEUxQlFVMHNSVUZCUnl4SlFVRkpMSGxDUVVGWExFVkJRVVU3U1VGRE1VSXNSMEZCUnl4RlFVRk5MRWxCUVVrc2FVSkJRVThzUlVGQlJUdEpRVU4wUWl4SlFVRkpMRVZCUVVzc1NVRkJTU3h0UWtGQlVTeEZRVUZGTzBOQlF6RkNMRU5CUVVNN1FVRkZTeXhWUVVGSExFZEJRVWM3U1VGRFZDeFBRVUZQTEVWQlFVVXNVMEZCVXp0SlFVTnNRaXhOUVVGTkxFVkJRVWNzVVVGQlVUdERRVU53UWl4RFFVRkRPMEZCVFZrc2JVSkJRVmtzUjBGQlpUdEpRVU55UXl4SlFVRkpMRVZCUVVrc1JVRkJSU3hMUVVGTExFVkJRVU1zVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlF6dEpRVU51UkN4TlFVRk5MRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVU1zVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1NVRkJTU3hGUVVGRkxFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVU03U1VGRGFrWXNTMEZCU3l4RlFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRExGTkJRVk1zUlVGQlJTeFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkZPMGxCUXpORExFbEJRVWtzUlVGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUXl4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJUdEpRVU16UXl4SFFVRkhMRVZCUVVzc1JVRkJSU3hMUVVGTExFVkJRVU1zVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVVzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlN4RlFVRkZPME5CUTNKRkxFTkJRVU03UVVGSFdTeHZRa0ZCWVN4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03UVVFdlEyNUlMSGRDUVhOTFF6dEJRWFZIUkN4TlFVRmhMRmxCUVZrN1NVRkJla0k3VVVGRFdTeGxRVUZWTEVkQlFXVXNSVUZCUlN4RFFVRkRPMUZCYlVJM1FpeFRRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCYlVOMlFpeERRVUZETzBsQk4wTkhMRWxCUVZjc1NVRkJTU3hEUVVGRExFTkJRVmM3VVVGRGRrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRmJrSXNRMEZCUXp0SlFVVkVMRWxCUVZjc1NVRkJTVHRSUVVOWUxFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0SlFVTjBRaXhEUVVGRE8wbEJVMFFzU1VGQlZ5eE5RVUZOTEVOQlFVTXNSMEZCWjBJN1VVRkRPVUlzVFVGQlRTeFJRVUZSTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJRenRSUVVOeVF5eE5RVUZOTEZOQlFWTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRE8xRkJRM1pETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGWExFVkJRVVVzUlVGQlJUdFpRVU40UWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NUVUZCVFN4RFFVRkRPMWxCUXpGQ0xFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1NVRkJhVUlzUlVGQlJTeERRVUZETzFsQlEzSkRMRU5CUVVNc1EwRkJReXhUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRMMElzVFVGQlRTeFJRVUZSTEVkQlFVYzdaMEpCUTJJc1MwRkJTeXhGUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJRenRoUVVNeFF5eERRVUZETzFsQlEwWXNWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzVVVGQlVTeEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMWxCUTNwRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM2hDTEZGQlFWRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSVHRuUWtGRFdpeExRVUZMTEUxQlFVMDdiMEpCUTFBc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRenR2UWtGRE5VSXNUVUZCVFR0blFrRkRWaXhMUVVGTExGRkJRVkU3YjBKQlExUXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXp0dlFrRkRPVUlzVFVGQlRUdG5Ra0ZEVml4TFFVRkxMRTFCUVUwN2IwSkJRMUFzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dHZRa0ZETlVJc1RVRkJUVHRuUWtGRFZpeExRVUZMTEV0QlFVczdiMEpCUTA0c1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRenR2UWtGRE5VSXNUVUZCVFR0aFFVTmlPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFVDeERRVUZETzBsQlEwUXNTVUZCVnl4TlFVRk5MRXRCUVdsQ0xFOUJRVThzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1EwRkRPVVE3UVVGMlJFUXNiME5CZFVSREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBHcmFwaF8xID0gcmVxdWlyZShcIi4vR3JhcGhcIik7XG5leHBvcnRzLkdyYXBoID0gR3JhcGhfMS5HcmFwaDtcbnZhciBTZXJpZXNfMSA9IHJlcXVpcmUoXCIuL1Nlcmllc1wiKTtcbmV4cG9ydHMuU2VyaWVzID0gU2VyaWVzXzEuU2VyaWVzO1xudmFyIEF4ZXNfMSA9IHJlcXVpcmUoXCIuL0F4ZXNcIik7XG5leHBvcnRzLkF4ZXMgPSBBeGVzXzEuQXhlcztcbnZhciBTY2FsZV8xID0gcmVxdWlyZShcIi4vU2NhbGVcIik7XG5leHBvcnRzLlNjYWxlID0gU2NhbGVfMS5TY2FsZTtcbnZhciBHcmlkXzEgPSByZXF1aXJlKFwiLi9HcmlkXCIpO1xuZXhwb3J0cy5HcmlkID0gR3JpZF8xLkdyaWQ7XG52YXIgTGVnZW5kXzEgPSByZXF1aXJlKFwiLi9MZWdlbmRcIik7XG5leHBvcnRzLkxlZ2VuZCA9IExlZ2VuZF8xLkxlZ2VuZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3hwUTBGQmJVTTdRVUZCTVVJc2QwSkJRVUVzUzBGQlN5eERRVUZCTzBGQlEyUXNiVU5CUlc5RE8wRkJSak5DTERCQ1FVRkJMRTFCUVUwc1EwRkJRVHRCUVVkbUxDdENRVUZyUXp0QlFVRjZRaXh6UWtGQlFTeEpRVUZKTEVOQlFVRTdRVUZEWWl4cFEwRkJiVU03UVVGQk1VSXNkMEpCUVVFc1MwRkJTeXhEUVVGQk8wRkJRMlFzSzBKQlFXdERPMEZCUVhwQ0xITkNRVUZCTEVsQlFVa3NRMEZCUVR0QlFVTmlMRzFEUVVGdlF6dEJRVUV6UWl3d1FrRkJRU3hOUVVGTkxFTkJRVUVpZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbWl0aHJpbF8xID0gcmVxdWlyZShcIi4vbWl0aHJpbFwiKTtcbmNsYXNzIENvbmZpZyB7XG4gICAgb25pbml0KG5vZGUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG5vZGUuYXR0cnMuY29udGV4dDtcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlLmF0dHJzLnNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghbm9kZS5zdGF0ZS5jZmcpIHtcbiAgICAgICAgICAgICAgICBtaXRocmlsXzEubS5yZXF1ZXN0KHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IG5vZGUuYXR0cnMuc291cmNlIH0pLnRoZW4oKHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zdGF0ZS5jZmcgPSB0cmFuc2xhdGUocywgcy5yb290LCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUuY2ZnID0gdHJhbnNsYXRlKG5vZGUuYXR0cnMuc291cmNlLCBub2RlLmF0dHJzLnNvdXJjZS5yb290LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aWV3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2ZnID0gbm9kZS5zdGF0ZS5jZmc7XG4gICAgICAgIHJldHVybiAoY2ZnICYmIGNmZy5jb21wQ2xhc3MpID8gbWl0aHJpbF8xLm0oY2ZnLmNvbXBDbGFzcywgT2JqZWN0LmFzc2lnbihjZmcuYXR0cnMsIG5vZGUuYXR0cnMpKSA6IG1pdGhyaWxfMS5tKCdkaXYnLCAnd2FpdGluZycpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29uZmlnID0gQ29uZmlnO1xuZnVuY3Rpb24gdHJhbnNsYXRlKGNvbmZpZywgc3ViY2ZnLCBjb250ZXh0KSB7XG4gICAgaWYgKGlzU3lub255bShjb25maWcsIHN1YmNmZykpIHtcbiAgICAgICAgc3ViY2ZnID0gY29uZmlnW3N1YmNmZ107XG4gICAgfVxuICAgIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICdmdW5jdGlvbiddLmluZGV4T2YodHlwZW9mIHN1YmNmZykgPj0gMCkge1xuICAgICAgICByZXR1cm4gc3ViY2ZnO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gc3ViY2ZnLmxlbmd0aCA/IFtdIDoge307XG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5rZXlzKHN1YmNmZyk7XG4gICAgb3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICBjb25zdCBjbCA9IHJlc29sdmUob3B0LCBjb250ZXh0KTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRyYW5zbGF0ZShjb25maWcsIHN1YmNmZ1tvcHRdLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGNsKSB7XG4gICAgICAgICAgICBjb25zdCByID0ge1xuICAgICAgICAgICAgICAgIGNvbXBDbGFzczogY2wsXG4gICAgICAgICAgICAgICAgYXR0cnM6IGNvbnRlbnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAoIUFycmF5LmlzQXJyYXkoc3ViY2ZnKSAmJiBvcHRpb25zLmxlbmd0aCA9PT0gMSkgP1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHIgOlxuICAgICAgICAgICAgICAgIHJlc3VsdFtvcHRdID0gcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtvcHRdID0gY29udGVudDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiByZXNvbHZlKHN5bSwgY29udGV4dCkge1xuICAgIGxldCBjbDtcbiAgICBjb250ZXh0LnNvbWUoKGMpID0+IGNsID0gY1tzeW1dKTtcbiAgICByZXR1cm4gY2w7XG59XG5mdW5jdGlvbiBpc1N5bm9ueW0oY29uZmlnLCBrZXkpIHsgcmV0dXJuIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGNvbmZpZ1trZXldOyB9XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lRMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dmMzSmpMME52Ym1acFp5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVRKRVFTeDFRMEZCY1VNN1FVRkxja01zVFVGQllTeE5RVUZOTzBsQlEyWXNUVUZCVFN4RFFVRkRMRWxCUVZVN1VVRkRZaXhOUVVGTkxFOUJRVThzUjBGQlV5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJRenRSUVVONlF5eEpRVUZKTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFdEJRVXNzVVVGQlVTeEZRVUZGTzFsQlEzWkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NSVUZCUlR0blFrRkJSU3hYUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUXl4RlFVRkZPMjlDUVVWMFJpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1IwRkJSeXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03WjBKQlEyNUVMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRVVU3VTBGRFVqdGhRVUZOTzFsQlEwZ3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFZEJRVWNzVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFRRVU5zUmp0SlFVTk1MRU5CUVVNN1NVRkRSQ3hKUVVGSkxFTkJRVU1zU1VGQlZUdFJRVU5ZTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlJUTkNMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhYUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlN4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZkQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03U1VGRGFFZ3NRMEZCUXp0RFFVTktPMEZCYWtKRUxIZENRV2xDUXp0QlFXRkVMRk5CUVZNc1UwRkJVeXhEUVVGRExFMUJRVlVzUlVGQlJTeE5RVUZWTEVWQlFVVXNUMEZCWVR0SlFVVndSQ3hKUVVGSkxGTkJRVk1zUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRVZCUVVVN1VVRkJSU3hOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMHRCUVVVN1NVRkZNMFFzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4UlFVRlJMRVZCUVVVc1UwRkJVeXhGUVVGRkxGVkJRVlVzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4UFFVRlBMRTFCUVUwc1EwRkJReXhKUVVGRkxFTkJRVU1zUlVGQlJUdFJRVUZGTEU5QlFVOHNUVUZCVFN4RFFVRkRPMHRCUVVVN1NVRkROMFlzU1VGQlNTeE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkZjRU1zVFVGQlRTeFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVU53UXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlZTeEZRVUZSTEVWQlFVVTdVVUZETjBJc1RVRkJUU3hGUVVGRkxFZEJRVThzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVOeVF5eE5RVUZOTEU5QlFVOHNSMEZCUnl4VFFVRlRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVONFJDeEpRVUZKTEVWQlFVVXNSVUZCUlR0WlFVTktMRTFCUVUwc1EwRkJReXhIUVVGSE8yZENRVU5PTEZOQlFWTXNSVUZCUXl4RlFVRkZPMmRDUVVOYUxFdEJRVXNzUlVGQlF5eFBRVUZQTzJGQlEyaENMRU5CUVVNN1dVRkRSaXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hQUVVGUExFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkJMRU5CUVVNN1owSkJRemRETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRFdpeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM1pDTzJGQlEwazdXVUZCUlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETzFOQlFVVTdTVUZEYmtNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFNDeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTnNRaXhEUVVGRE8wRkJWVVFzVTBGQlV5eFBRVUZQTEVOQlFVTXNSMEZCVlN4RlFVRkZMRTlCUVdFN1NVRkRkRU1zU1VGQlNTeEZRVUZOTEVOQlFVTTdTVUZEV0N4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZEVNc1QwRkJUeXhGUVVGRkxFTkJRVU03UVVGRFpDeERRVUZETzBGQlJVUXNVMEZCVXl4VFFVRlRMRU5CUVVNc1RVRkJWU3hGUVVGRkxFZEJRVThzU1VGQlNTeFBRVUZQTEU5QlFVOHNSMEZCUnl4TFFVRkxMRkZCUVZFc1NVRkJTU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBwaWxsYXJzID0gcmVxdWlyZShcIi4vdmlldy9QaWxsYXJlZExheW91dGVyXCIpO1xuaWYgKHBpbGxhcnMpIHsgfVxuY29uc3QgdGlsZXMgPSByZXF1aXJlKFwiLi92aWV3L1RpbGVMYXlvdXRlclwiKTtcbmlmICh0aWxlcykgeyB9XG52YXIgTGF5b3V0XzEgPSByZXF1aXJlKFwiLi92aWV3L0xheW91dFwiKTtcbmV4cG9ydHMuTGF5b3V0ID0gTGF5b3V0XzEuTGF5b3V0O1xudmFyIFRva2Vuc18xID0gcmVxdWlyZShcIi4vdmlldy9Ub2tlbnNcIik7XG5leHBvcnRzLkZJTEwgPSBUb2tlbnNfMS5GSUxMO1xuZXhwb3J0cy5weCA9IFRva2Vuc18xLnB4O1xuZXhwb3J0cy5wYyA9IFRva2Vuc18xLnBjO1xuZXhwb3J0cy5MYXlvdXRUb2tlbiA9IFRva2Vuc18xLkxheW91dFRva2VuO1xudmFyIExheW91dGVyXzEgPSByZXF1aXJlKFwiLi92aWV3L0xheW91dGVyXCIpO1xuZXhwb3J0cy5MYXlvdXRlciA9IExheW91dGVyXzEuTGF5b3V0ZXI7XG52YXIgQ29uZmlnXzEgPSByZXF1aXJlKFwiLi9Db25maWdcIik7XG5leHBvcnRzLkNvbmZpZyA9IENvbmZpZ18xLkNvbmZpZztcbnZhciBtaXRocmlsXzEgPSByZXF1aXJlKFwiLi9taXRocmlsXCIpO1xuZXhwb3J0cy5tID0gbWl0aHJpbF8xLm07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZKUVN4dFJFRkJkVVE3UVVGQlRTeEpRVUZITEU5QlFVOHNSVUZCUlN4SFFVRkZPMEZCUXpORkxEWkRRVUZ0UkR0QlFVRlZMRWxCUVVjc1MwRkJTeXhGUVVGRkxFZEJRVVU3UVVGRmVrVXNkME5CUVRaRE8wRkJRWEJETERCQ1FVRkJMRTFCUVUwc1EwRkJRVHRCUVVObUxIZERRVU0yUXp0QlFVUndReXgzUWtGQlFTeEpRVUZKTEVOQlFVRTdRVUZCUlN4elFrRkJRU3hGUVVGRkxFTkJRVUU3UVVGQlJTeHpRa0ZCUVN4RlFVRkZMRU5CUVVFN1FVRkRXaXdyUWtGQlFTeFhRVUZYTEVOQlFVRTdRVUZEY0VJc05FTkJRU3RETzBGQlFYUkRMRGhDUVVGQkxGRkJRVkVzUTBGQlFUdEJRVU5xUWl4dFEwRkJkME03UVVGQkwwSXNNRUpCUVVFc1RVRkJUU3hEUVVGQk8wRkJRMllzY1VOQlFYZERPMEZCUVM5Q0xITkNRVUZCTEVOQlFVTXNRMEZCUVNKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liV2wwYUhKcGJDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTl0YVhSb2NtbHNMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlVXRXNVVUZCUVN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbWl0aHJpbF8xID0gcmVxdWlyZShcIi4uL21pdGhyaWxcIik7XG5jb25zdCBMYXlvdXRlcl8xID0gcmVxdWlyZShcIi4vTGF5b3V0ZXJcIik7XG5jbGFzcyBMYXlvdXQge1xuICAgIGdldENvbXBvbmVudHMobm9kZSkge1xuICAgICAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkobm9kZS5hdHRycy5jb250ZW50KSA/IG5vZGUuYXR0cnMuY29udGVudCA6XG4gICAgICAgICAgICBub2RlLmF0dHJzLmNvbnRlbnQubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGMuY29tcENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuYXR0cnMucm91dGUgPSBub2RlLmF0dHJzLnJvdXRlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWl0aHJpbF8xLm0oYy5jb21wQ2xhc3MsIGMuYXR0cnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldENTUyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmF0dHJzLmNzcyB8fCAnJztcbiAgICB9XG4gICAgbm9ybWFsaXplQ29udGVudChjb21wb25lbnRzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBbbWl0aHJpbF8xLm0oJy5ocy1sZWFmJywgbWl0aHJpbF8xLm0udHJ1c3QoY29tcG9uZW50cykpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cy5tYXAoKGNvbXApID0+IChjb21wIGluc3RhbmNlb2YgTGF5b3V0KSA/IGNvbXAgOiBtaXRocmlsXzEubShMYXlvdXQsIHsgY29udGVudDogY29tcCB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjb21wb25lbnRzXTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLm5vcm1hbGl6ZUNvbnRlbnQodGhpcy5nZXRDb21wb25lbnRzKG5vZGUpKTtcbiAgICAgICAgbGV0IGNzcyA9IExheW91dGVyXzEuTGF5b3V0ZXIuY3JlYXRlTGF5b3V0KG5vZGUuYXR0cnMsIGNvbnRlbnQpO1xuICAgICAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgICAgICAgIHN0eWxlOiBub2RlLnN0eWxlLFxuICAgICAgICAgICAgcm91dGU6IG5vZGUuYXR0cnMucm91dGUsXG4gICAgICAgICAgICBvbmNsaWNrOiBub2RlLmF0dHJzLm9uY2xpY2tcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZS5hdHRycy5yb3V0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG5vZGUuYXR0cnMuaHJlZikge1xuICAgICAgICAgICAgYXR0cnMuaHJlZiA9IG5vZGUuYXR0cnMuaHJlZjtcbiAgICAgICAgICAgIGF0dHJzLm9uY3JlYXRlID0gbWl0aHJpbF8xLm0ucm91dGUubGluaztcbiAgICAgICAgICAgIGF0dHJzLm9udXBkYXRlID0gbWl0aHJpbF8xLm0ucm91dGUubGluaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWl0aHJpbF8xLm0oYC5ocy1sYXlvdXQgJHtjc3N9ICR7dGhpcy5nZXRDU1Mobm9kZSl9YCwgYXR0cnMsIGNvbnRlbnQubWFwKChjKSA9PiBjKSk7XG4gICAgfVxufVxuZXhwb3J0cy5MYXlvdXQgPSBMYXlvdXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lUR0Y1YjNWMExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNacFpYY3ZUR0Y1YjNWMExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCYVVKQkxIZERRVUZ6UXp0QlFVTjBReXg1UTBGQmMwTTdRVUY1UW5SRExFMUJRV0VzVFVGQlRUdEpRVzlDVEN4aFFVRmhMRU5CUVVNc1NVRkJWVHRSUVVNNVFpeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUXpORUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVXNzUlVGQlJTeEZRVUZGTzJkQ1FVTTNRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVTdiMEpCUTJJc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU03YjBKQlEycERMRTlCUVU4c1YwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8ybENRVU5zUXp0eFFrRkJUVHR2UWtGRFNDeFBRVUZQTEVOQlFVTXNRMEZCUXp0cFFrRkRXanRaUVVOTUxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlExZ3NRMEZCUXp0SlFWRlRMRTFCUVUwc1EwRkJReXhKUVVGVk8xRkJRM1pDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJTeERRVUZETzBsQlEyaERMRU5CUVVNN1NVRkhUeXhuUWtGQlowSXNRMEZCUXl4VlFVRTJRenRSUVVOc1JTeEpRVUZKTEU5QlFVOHNWVUZCVlN4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVOb1F5eFBRVUZQTEVOQlFVTXNWMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hYUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNdlF6dFJRVU5FTEVsQlFVa3NWVUZCVlN4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFVkJRVVU3V1VGRGNrSXNUMEZCVHl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQmVVSXNSVUZCVVN4RlFVRkZMRU5CUTJ4RUxFTkJRVU1zU1VGQlNTeFpRVUZaTEUxQlFVMHNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZkQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJReXhQUVVGUExFVkJRVU1zU1VGQlNTeEZRVUZETEVOQlFVTXNRMEZEYWtVc1EwRkJRenRUUVVOTU8xRkJSVVFzVDBGQlR5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMGxCUTNoQ0xFTkJRVU03U1VGeFFrUXNTVUZCU1N4RFFVRkRMRWxCUVZVN1VVRkRXQ3hOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMmhGTEVsQlFVa3NSMEZCUnl4SFFVRkhMRzFDUVVGUkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGNrUXNUVUZCVFN4TFFVRkxMRWRCUVU4N1dVRkRaQ3hMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVczdXVUZEYWtJc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3p0WlFVTjJRaXhQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBPMU5CUXpsQ0xFTkJRVU03VVVGRFJpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhUUVVGVExFTkJRVU03VVVGRE4wSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU5xUWl4TFFVRkxMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUXpkQ0xFdEJRVXNzUTBGQlF5eFJRVUZSTEVkQlFVY3NWMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE9VSXNTMEZCU3l4RFFVRkRMRkZCUVZFc1IwRkJSeXhYUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXp0VFFVTnFRenRSUVVORUxFOUJRVThzVjBGQlF5eERRVUZETEdOQlFXTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU42Uml4RFFVRkRPME5CUTBvN1FVRXpSa1FzZDBKQk1rWkRJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBUb2tlbnNfMSA9IHJlcXVpcmUoXCIuL1Rva2Vuc1wiKTtcbmNsYXNzIExheW91dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihhcmVhRGVzYykge1xuICAgICAgICB0aGlzLmFyZWFEZXNjID0gYXJlYURlc2M7XG4gICAgICAgIHRoaXMuc3BhY2luZyA9IDA7XG4gICAgfVxuICAgIHN0YXRpYyB0cmFuc2xhdGUocGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBwYXJhbXMucHVzaCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5lbmRzV2l0aCgncHgnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW5zXzEucHgocGFyc2VJbnQocGFyYW0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmVuZHNXaXRoKCclJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2Vuc18xLnBjKHBhcnNlSW50KHBhcmFtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS50b0xvd2VyQ2FzZSgpID09PSAnZmlsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2Vuc18xLkZJTEw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIHJlZ2lzdGVyKGtleXdvcmQsIHN0eWxlKSB7XG4gICAgICAgIExheW91dGVyLmxheW91dFN0eWxlc1trZXl3b3JkXSA9IHN0eWxlO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlTGF5b3V0KGF0dHJzLCBjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBjc3MgPSAnJztcbiAgICAgICAgT2JqZWN0LmtleXMoTGF5b3V0ZXIubGF5b3V0U3R5bGVzKS5zb21lKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0cnNba2V5XSkge1xuICAgICAgICAgICAgICAgIGNzcyA9IG5ldyBMYXlvdXRlci5sYXlvdXRTdHlsZXNba2V5XShMYXlvdXRlci50cmFuc2xhdGUoYXR0cnNba2V5XSkpLmdldFN0eWxlcyhjb21wb25lbnRzKTtcbiAgICAgICAgICAgICAgICBhdHRyc1trZXldID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG4gICAgO1xufVxuTGF5b3V0ZXIubGF5b3V0U3R5bGVzID0ge307XG5leHBvcnRzLkxheW91dGVyID0gTGF5b3V0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lUR0Y1YjNWMFpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmRtbGxkeTlNWVhsdmRYUmxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFWbEJMSEZEUVVGM1F6dEJRWGxDZUVNc1RVRkJjMElzVVVGQlVUdEpRWGxGTVVJc1dVRkJiVUlzVVVGQmMwSTdVVUZCZEVJc1lVRkJVU3hIUVVGU0xGRkJRVkVzUTBGQll6dFJRVko2UXl4WlFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJVV2RETEVOQlFVTTdTVUY2UkhKRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCZDBJN1VVRkROME1zU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVGRkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1UwRkJSVHRSUVVNM1F5eFBRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhMUVVGblFpeEZRVUZGTEVWQlFVVTdXVUZEYmtNc1NVRkJTU3hQUVVGUExFdEJRVXNzUzBGQlN5eFJRVUZSTEVWQlFVVTdaMEpCUXpOQ0xFbEJRVWtzUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSVHR2UWtGQlJTeFBRVUZQTEZkQlFVVXNRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZCUlR0blFrRkRla1FzU1VGQlNTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRk8yOUNRVUZGTEU5QlFVOHNWMEZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVRkZPMmRDUVVONFJDeEpRVUZKTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1MwRkJSeXhOUVVGTkxFVkJRVVU3YjBKQlFVVXNUMEZCVHl4aFFVRkpMRU5CUVVNN2FVSkJRVU03WVVGRGNFUTdhVUpCUVUwN1owSkJRMGdzVDBGQlR5eExRVUZMTEVOQlFVTTdZVUZEYUVJN1VVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdTVUZYVFN4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFOUJRV01zUlVGQlJTeExRVUZ4UWp0UlFVVjRSQ3hSUVVGUkxFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJRenRKUVVNelF5eERRVUZETzBsQlZVMHNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhMUVVGVExFVkJRVVVzVlVGQmRVSTdVVUZEZWtRc1NVRkJTU3hIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEySXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRk8xbEJRekZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRk8yZENRVU5hTEVkQlFVY3NSMEZCUnl4SlFVRkpMRkZCUVZFc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZETTBZc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXp0blFrRkRka0lzVDBGQlR5eEpRVUZKTEVOQlFVTTdZVUZEWmp0WlFVTkVMRTlCUVU4c1MwRkJTeXhEUVVGRE8xRkJRMnBDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBnc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFppeERRVUZETzBsQlZ6UkRMRU5CUVVNN08wRkJjRVYyUXl4eFFrRkJXU3hIUVVGMVFpeEZRVUZGTEVOQlFVTTdRVUZNYWtRc05FSkJNRVpESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgTGF5b3V0ZXJfMSA9IHJlcXVpcmUoXCIuL0xheW91dGVyXCIpO1xuY29uc3QgVG9rZW5zXzEgPSByZXF1aXJlKFwiLi9Ub2tlbnNcIik7XG5leHBvcnRzLlBpbGxhckxheW91dHMgPSBbXG4gICAgJ2NvbHVtbnMnLCAncm93cydcbl07XG5jb25zdCBjUGFyYW1zID0ge1xuICAgIGNvbHVtbnM6IHtcbiAgICAgICAgY3NzQ2xhc3M6ICcuaHMtY29sdW1uLWxheW91dCcsXG4gICAgICAgIGZpZWxkczogWyd0b3AnLCAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLCAnaGVpZ2h0JywgJ3dpZHRoJ11cbiAgICB9LFxuICAgIHJvd3M6IHtcbiAgICAgICAgY3NzQ2xhc3M6ICcuaHMtcm93LWxheW91dCcsXG4gICAgICAgIGZpZWxkczogWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nLCAnd2lkdGgnLCAnaGVpZ2h0J11cbiAgICB9XG59O1xuY2xhc3MgUGlsbGFyTGF5b3V0ZXIgZXh0ZW5kcyBMYXlvdXRlcl8xLkxheW91dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMsIGFyZWFEZXNjKSB7XG4gICAgICAgIHN1cGVyKGFyZWFEZXNjKTtcbiAgICAgICAgdGhpcy5hcmVhRGVzYyA9IGFyZWFEZXNjO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IHBhcmFtcy5maWVsZHM7XG4gICAgICAgIHRoaXMuY3NzQ2xhc3MgPSBwYXJhbXMuY3NzQ2xhc3M7XG4gICAgICAgIGxldCBuID0gYXJlYURlc2MubGVuZ3RoIC0gMTtcbiAgICAgICAgbGV0IGZpcnN0ID0gMDtcbiAgICAgICAgbGV0IGxhc3QgPSAwO1xuICAgICAgICB0aGlzLnVuaXQgPSBhcmVhRGVzYy5zb21lKChhcmVhKSA9PiAoYXJlYSBpbnN0YW5jZW9mIFRva2Vuc18xLlBpeGVsVG9rZW4pKSA/XG4gICAgICAgICAgICB0aGlzLnVuaXRQaXhlbCA6IHRoaXMudW5pdFBlcmNlbnQ7XG4gICAgICAgIGFyZWFEZXNjLnNvbWUoKGFyZWEsIGkpID0+ICgoYXJlYURlc2NbaV0gaW5zdGFuY2VvZiBUb2tlbnNfMS5EZWZpbmVkVG9rZW4pID8gKytmaXJzdCA8IDAgOiB0cnVlKSk7XG4gICAgICAgIGFyZWFEZXNjLnNvbWUoKGFyZWEsIGkpID0+ICgoYXJlYURlc2NbbiAtIGldIGluc3RhbmNlb2YgVG9rZW5zXzEuRGVmaW5lZFRva2VuKSA/ICsrbGFzdCA8IDAgOiB0cnVlKSk7XG4gICAgICAgIHRoaXMuZmlyc3RGaXhlZCA9IGZpcnN0O1xuICAgICAgICB0aGlzLmxhc3RGaXhlZCA9IE1hdGgubWluKGxhc3QsIGFyZWFEZXNjLmxlbmd0aCAtIGZpcnN0KTtcbiAgICB9XG4gICAgO1xuICAgIGdldFNpemVzKG51bSkge1xuICAgICAgICBjb25zdCBmaXJzdCA9IHRoaXMuZmlyc3RGaXhlZDtcbiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMubGFzdEZpeGVkO1xuICAgICAgICBjb25zdCBkZXNjID0gdGhpcy5hcmVhRGVzYztcbiAgICAgICAgY29uc3QgbGVuID0gZGVzYy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBbLi4uQXJyYXkobnVtKS5rZXlzKCldLm1hcCgoaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHNpemUgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGkgPiBudW0gLSAxIC0gbGFzdCkge1xuICAgICAgICAgICAgICAgIHNpemUgPSBkZXNjW2xlbiAtIChudW0gLSBpKV0uZ2V0U2l6ZSgpO1xuICAgICAgICAgICAgICAgIHQgPSAnZW5kJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPCBmaXJzdCkge1xuICAgICAgICAgICAgICAgIHNpemUgPSBkZXNjW2ldLmdldFNpemUoKTtcbiAgICAgICAgICAgICAgICB0ID0gJ3N0YXJ0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGxlbiA+IDAgJiYgbGVuID09PSBmaXJzdCkge1xuICAgICAgICAgICAgICAgIHNpemUgPSBkZXNjW2xlbiAtIDFdLmdldFNpemUoKTtcbiAgICAgICAgICAgICAgICB0ID0gJ3N0YXJ0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHNpemU6IHNpemUsIGNvZGU6IHQsIGZpZWxkczoge30gfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVuaXRQZXJjZW50KG51bSkge1xuICAgICAgICBsZXQgZiA9IHRoaXMuZmllbGRzO1xuICAgICAgICBsZXQgbWF4ID0gMTAwLjA7XG4gICAgICAgIGxldCBzdHlsZXMgPSB0aGlzLmdldFNpemVzKG51bSk7XG4gICAgICAgIHN0eWxlcy5mb3JFYWNoKHN0eWxlID0+IHsgaWYgKHN0eWxlLnNpemUpIHtcbiAgICAgICAgICAgIG1heCA9IG1heCAtIHN0eWxlLnNpemU7XG4gICAgICAgICAgICBudW0tLTtcbiAgICAgICAgfSB9KTtcbiAgICAgICAgbGV0IGRlZkRpbSA9IG1heCAvIG51bTtcbiAgICAgICAgZnVuY3Rpb24gcGFzcyhzdHlsZXMsIGl4MCwgaXgxLCBicmVha0NvbmQpIHtcbiAgICAgICAgICAgIGxldCBzdW1EaW0gPSAwO1xuICAgICAgICAgICAgc3R5bGVzLnNvbWUoc3R5bGUgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzaXplID0gc3R5bGUuc2l6ZSB8fCBkZWZEaW07XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrQ29uZChzdHlsZS5jb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2l4MF0gPSBzdW1EaW0gKyAnJSc7XG4gICAgICAgICAgICAgICAgc3VtRGltICs9IHNpemU7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2l4MV0gPSAoMTAwIC0gc3VtRGltKSArICclJztcbiAgICAgICAgICAgICAgICBzdHlsZS5maWVsZHNbZls1XV0gPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFzcyhzdHlsZXMsIGZbMl0sIGZbM10sIChlKSA9PiBlID09PSAnZW5kJyk7XG4gICAgICAgIHBhc3Moc3R5bGVzLnJldmVyc2UoKSwgZlszXSwgZlsyXSwgKGUpID0+IGUgIT09ICdlbmQnKTtcbiAgICAgICAgcmV0dXJuIHN0eWxlcy5yZXZlcnNlKCk7XG4gICAgfVxuICAgIDtcbiAgICB1bml0UGl4ZWwobnVtKSB7XG4gICAgICAgIGxldCBzdHlsZXMgPSB0aGlzLmdldFNpemVzKG51bSk7XG4gICAgICAgIGxldCBmID0gdGhpcy5maWVsZHM7XG4gICAgICAgIGxldCBkZWZEaW0gPSAxMDAuMCAvIG51bTtcbiAgICAgICAgbGV0IHN1bURpbSA9IDA7XG4gICAgICAgIHN0eWxlcy5zb21lKChzdHlsZSwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0eWxlLmNvZGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWVsZHNbZlsyXV0gPSBzdW1EaW0gKyAncHgnO1xuICAgICAgICAgICAgICAgIHN1bURpbSArPSBzdHlsZS5zaXplICsgKHRoaXMuc3BhY2luZyB8fCAwKSArICh0aGlzLnNwYWNpbmcgfHwgMCk7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2ZbM11dID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tmWzVdXSA9IHN0eWxlLnNpemUgKyAncHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuY29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tmWzJdXSA9IChzdW1EaW0gPiAwKSA/IChzdW1EaW0gKyAncHgnKSA6IChpICogZGVmRGltICsgJyUnKTtcbiAgICAgICAgICAgICAgICBzdW1EaW0gPSAtMTtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWVsZHNbZlszXV0gPSAoMTAwIC0gKGkgKyAxKSAqIGRlZkRpbSkgKyAnJSc7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2ZbNV1dID0gJ2F1dG8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuY29kZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1bURpbSA9IDA7XG4gICAgICAgIHN0eWxlcy5zbGljZSgpLnJldmVyc2UoKS5zb21lKChzdHlsZSwgaSkgPT4ge1xuICAgICAgICAgICAgc3R5bGUuZmllbGRzW2ZbM11dID0gc3VtRGltICsgJ3B4JztcbiAgICAgICAgICAgIGlmIChzdHlsZS5jb2RlID09PSAnZW5kJykge1xuICAgICAgICAgICAgICAgIHN1bURpbSArPSBzdHlsZS5zaXplICsgKHRoaXMuc3BhY2luZyB8fCAwKSArICh0aGlzLnNwYWNpbmcgfHwgMCk7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2ZbMl1dID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tmWzVdXSA9IHN0eWxlLnNpemUgKyAncHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1bURpbSA+IDAgJiYgc3R5bGUuY29kZSAhPT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZS5maWVsZHNbZls1XV0gPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG4gICAgO1xuICAgIGdldFN0eWxlcyhjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBmID0gdGhpcy5maWVsZHM7XG4gICAgICAgIGxldCBzdHlsZXMgPSB0aGlzLnVuaXQoY29tcG9uZW50cy5sZW5ndGgpO1xuICAgICAgICBjb21wb25lbnRzLm1hcCgoYywgaSkgPT4ge1xuICAgICAgICAgICAgYy5zdHlsZSA9IGAke2ZbMF19OjAlOyAke2ZbMV19OjAlOyBgO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoc3R5bGVzW2ldLmZpZWxkcykuZm9yRWFjaCgoc3QpID0+IHsgYy5zdHlsZSArPSBgJHtzdH06ICR7c3R5bGVzW2ldLmZpZWxkc1tzdF19O2A7IH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3M7XG4gICAgfVxuICAgIDtcbn1cbjtcbmNsYXNzIENvbHVtbnMgZXh0ZW5kcyBQaWxsYXJMYXlvdXRlciB7XG4gICAgY29uc3RydWN0b3IoYXJlYURlc2MpIHtcbiAgICAgICAgc3VwZXIoY1BhcmFtc1tleHBvcnRzLlBpbGxhckxheW91dHNbMF1dLCBhcmVhRGVzYyk7XG4gICAgICAgIHRoaXMuYXJlYURlc2MgPSBhcmVhRGVzYztcbiAgICB9XG4gICAgO1xufVxuO1xuY2xhc3MgUm93cyBleHRlbmRzIFBpbGxhckxheW91dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihhcmVhRGVzYykge1xuICAgICAgICBzdXBlcihjUGFyYW1zW2V4cG9ydHMuUGlsbGFyTGF5b3V0c1sxXV0sIGFyZWFEZXNjKTtcbiAgICAgICAgdGhpcy5hcmVhRGVzYyA9IGFyZWFEZXNjO1xuICAgIH1cbiAgICA7XG59XG47XG5MYXlvdXRlcl8xLkxheW91dGVyLnJlZ2lzdGVyKGV4cG9ydHMuUGlsbGFyTGF5b3V0c1swXSwgQ29sdW1ucyk7XG5MYXlvdXRlcl8xLkxheW91dGVyLnJlZ2lzdGVyKGV4cG9ydHMuUGlsbGFyTGF5b3V0c1sxXSwgUm93cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVR2xzYkdGeVpXUk1ZWGx2ZFhSbGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MmFXVjNMMUJwYkd4aGNtVmtUR0Y1YjNWMFpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVFeVEwRXNlVU5CUVRCRE8wRkJRekZETEhGRFFVVjNRenRCUVdkQ00wSXNVVUZCUVN4aFFVRmhMRWRCUVVjN1NVRkRla0lzVTBGQlV5eEZRVUZGTEUxQlFVMDdRMEZEY0VJc1EwRkJRenRCUVV0R0xFMUJRVTBzVDBGQlR5eEhRVUZITzBsQlExb3NUMEZCVHl4RlFVRm5RanRSUVVOdVFpeFJRVUZSTEVWQlFVVXNiVUpCUVcxQ08xRkJRemRDTEUxQlFVMHNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hSUVVGUkxFVkJRVVVzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4UlFVRlJMRVZCUVVVc1QwRkJUeXhEUVVGRE8wdEJRMmhGTzBsQlEwUXNTVUZCU1N4RlFVRm5RanRSUVVOb1FpeFJRVUZSTEVWQlFVVXNaMEpCUVdkQ08xRkJRekZDTEUxQlFVMHNSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZGTEZGQlFWRXNSVUZCUlN4UFFVRlBMRVZCUVVVc1VVRkJVU3hEUVVGRE8wdEJRMmhGTzBOQlEwb3NRMEZCUXp0QlFVOUdMRTFCUVdVc1kwRkJaU3hUUVVGUkxHMUNRVUZSTzBsQllURkRMRmxCUVZrc1RVRkJiVUlzUlVGQlV5eFJRVUZ6UWp0UlFVTXhSQ3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZFYjBJc1lVRkJVU3hIUVVGU0xGRkJRVkVzUTBGQll6dFJRVVV4UkN4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZETlVJc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUldoRExFbEJRVWtzUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJReXhEUVVGRE8xRkJRekZDTEVsQlFVa3NTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOa0xFbEJRVWtzU1VGQlNTeEhRVUZKTEVOQlFVTXNRMEZCUXp0UlFVVmtMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVdkQ0xFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4WlFVRlpMRzFDUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTTdXVUZETVVVc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJRenRSUVVkMFF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJaMElzUlVGQlJTeERRVUZSTEVWQlFVVXNSVUZCUlN4RFFVTjZReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRmpMSEZDUVVGWkxFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUjJwRkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRm5RaXhGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlEzcERMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMSEZDUVVGWkxFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRWRCUVVNc1EwRkJReXhEUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUldwRkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVVzVVVGQlVTeERRVUZETEUxQlFVMHNSMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRKUVVNMVJDeERRVUZETzBsQlFVRXNRMEZCUXp0SlFWTk5MRkZCUVZFc1EwRkJReXhIUVVGVk8xRkJRM1pDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRE9VSXNUVUZCVFN4SlFVRkpMRWRCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU0zUWl4TlFVRk5MRWxCUVVrc1IwRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzFGQlF6VkNMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZGZUVJc1QwRkJUeXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVVN4RlFVRkZMRVZCUVVVN1dVRkRNME1zU1VGQlNTeEpRVUZKTEVkQlFWVXNTVUZCU1N4RFFVRkRPMWxCUTNaQ0xFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTmlMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RlFVRkhPMmRDUVVGRkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1owSkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXp0aFFVRkZPMmxDUVVOd1JTeEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRVZCUVVjN1owSkJRVVVzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dG5Ra0ZCUXl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRE8yRkJRVVU3YVVKQlF6RkVMRWxCUVVrc1IwRkJSeXhIUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEV0QlFVY3NTMEZCU3l4RlFVRkRPMmRDUVVGRkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzJkQ1FVRkRMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU03WVVGQlJUdFpRVU0xUlN4UFFVRlBMRVZCUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVTXNRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF6dFJRVU14UXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOUUxFTkJRVU03U1VGRlR5eFhRVUZYTEVOQlFVTXNSMEZCVlR0UlFVTXhRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNCQ0xFbEJRVWtzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTm9RaXhKUVVGSkxFMUJRVTBzUjBGQlowSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVUzUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVkQlFVY3NTVUZCU1N4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRk8xbEJRVVVzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdVMEZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMmhHTEVsQlFVa3NUVUZCVFN4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRmRrSXNVMEZCVXl4SlFVRkpMRU5CUVVNc1RVRkJiVUlzUlVGQlJTeEhRVUZWTEVWQlFVVXNSMEZCVlN4RlFVRkZMRk5CUVdkRE8xbEJRM1pHTEVsQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVObUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVN1owSkJRMmhDTEVsQlFVa3NTVUZCU1N4SFFVRkhMRXRCUVVzc1EwRkJReXhKUVVGSkxFbEJRVWtzVFVGQlRTeERRVUZETzJkQ1FVTm9ReXhKUVVGSkxGTkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVN2IwSkJRVVVzVDBGQlR5eEpRVUZKTEVOQlFVTTdhVUpCUVVVN1owSkJRek5ETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzVFVGQlRTeEhRVUZETEVkQlFVY3NRMEZCUXp0blFrRkRMMElzVFVGQlRTeEpRVUZKTEVsQlFVa3NRMEZCUXp0blFrRkRaaXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXp0blFrRkRja01zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTTdaMEpCUXpWQ0xFOUJRVThzUzBGQlN5eERRVUZETzFsQlEycENMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMUFzUTBGQlF6dFJRVVZFTEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRMnhFTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlF6VkVMRTlCUVU4c1RVRkJUU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzBsQlF6VkNMRU5CUVVNN1NVRkJRU3hEUVVGRE8wbEJSVTBzVTBGQlV5eERRVUZETEVkQlFWVTdVVUZEZUVJc1NVRkJTU3hOUVVGTkxFZEJRV2RDTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE4wTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dFJRVVZ3UWl4SlFVRkpMRTFCUVUwc1IwRkJSeXhMUVVGTExFZEJRVU1zUjBGQlJ5eERRVUZETzFGQlIzWkNMRWxCUVVrc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5tTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEY2tJc1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeExRVUZITEU5QlFVOHNSVUZCUlR0blFrRkRkRUlzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVkQlFVVXNTVUZCU1N4RFFVRkRPMmRDUVVOc1F5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOcVJTeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXp0blFrRkROVUlzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkZMRWxCUVVrc1EwRkJRenRoUVVONlF6dHBRa0ZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFdEJRVXNzU1VGQlNTeEZRVUZGTzJkQ1FVTTFRaXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOdVJTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRMW9zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhEUVVGRExFTkJRVU1zUjBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1owSkJRemxETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRPMkZCUXk5Q08ybENRVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJSeXhMUVVGTExFVkJRVVU3WjBKQlFVVXNUMEZCVHl4SlFVRkpMRU5CUVVNN1lVRkJSVHRaUVVNdlF5eFBRVUZQTEV0QlFVc3NRMEZCUXp0UlFVTnFRaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVWRJTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRXQ3hOUVVGTkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNaRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTnVReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEpRVUZKTEV0QlFVc3NTMEZCU3l4RlFVRkZPMmRDUVVOMFFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOcVJTeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXp0blFrRkROVUlzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkRMRWxCUVVrc1EwRkJRenRoUVVONFF6dHBRa0ZCVFR0blFrRkRTQ3hKUVVGSkxFMUJRVTBzUjBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTeXhQUVVGUExFVkJRVVU3YjBKQlEzQkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRE8ybENRVU12UWp0blFrRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dGhRVU5tTzFsQlEwUXNUMEZCVHl4TFFVRkxMRU5CUVVNN1VVRkRha0lzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlFVRXNRMEZCUXp0SlFWRlJMRk5CUVZNc1EwRkJReXhWUVVFNFFqdFJRVU01UXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEzQkNMRWxCUVVrc1RVRkJUU3hIUVVGblFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU4yUkN4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQll5eEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZPMWxCUTNoRExFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNN1dVRkRja01zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1JVRkJVeXhGUVVGRkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRWRCUVVjc1JVRkJSU3hMUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpWSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwZ3NUMEZCVHl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8wbEJRM3BDTEVOQlFVTTdTVUZCUVN4RFFVRkRPME5CUTB3N1FVRkJRU3hEUVVGRE8wRkJkVVJHTEUxQlFVMHNUMEZCVVN4VFFVRlJMR05CUVdNN1NVRkRhRU1zV1VGQmJVSXNVVUZCYzBJN1VVRkJTU3hMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEhGQ1FVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXp0UlFVRnlSU3hoUVVGUkxFZEJRVklzVVVGQlVTeERRVUZqTzBsQlFXbEVMRU5CUVVNN1NVRkJRU3hEUVVGRE8wTkJReTlHTzBGQlFVRXNRMEZCUXp0QlFYVkVSaXhOUVVGTkxFbEJRVXNzVTBGQlVTeGpRVUZqTzBsQlF6ZENMRmxCUVcxQ0xGRkJRWE5DTzFGQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXh4UWtGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGQmNrVXNZVUZCVVN4SFFVRlNMRkZCUVZFc1EwRkJZenRKUVVGcFJDeERRVUZETzBsQlFVRXNRMEZCUXp0RFFVTXZSanRCUVVGQkxFTkJRVU03UVVGRlJpeHRRa0ZCVVN4RFFVRkRMRkZCUVZFc1EwRkJReXh4UWtGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRemRETEcxQ1FVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRExIRkNRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVzc1NVRkJTU3hEUVVGRExFTkJRVU1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgTGF5b3V0ZXJfMSA9IHJlcXVpcmUoXCIuL0xheW91dGVyXCIpO1xuY29uc3QgVG9rZW5zXzEgPSByZXF1aXJlKFwiLi9Ub2tlbnNcIik7XG5jbGFzcyBUaWxlTGF5b3V0ZXIgZXh0ZW5kcyBMYXlvdXRlcl8xLkxheW91dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihhcmVhRGVzYykge1xuICAgICAgICBzdXBlcihhcmVhRGVzYyk7XG4gICAgICAgIHRoaXMuYXJlYURlc2MgPSBhcmVhRGVzYztcbiAgICAgICAgdGhpcy51bml0ID0gYXJlYURlc2Muc29tZSgoYXJlYSkgPT4gKGFyZWEgaW5zdGFuY2VvZiBUb2tlbnNfMS5QaXhlbFRva2VuKSkgP1xuICAgICAgICAgICAgdGhpcy51bml0UGl4ZWwgOiB0aGlzLnVuaXRQZXJjZW50O1xuICAgIH1cbiAgICA7XG4gICAgdW5pdFBlcmNlbnQobnVtKSB7XG4gICAgICAgIGNvbnN0IGRlc2MgPSB0aGlzLmFyZWFEZXNjO1xuICAgICAgICBjb25zdCBmaWxsID0gdGhpcy5hcmVhRGVzYy5zb21lKGEgPT4gKGEgaW5zdGFuY2VvZiBUb2tlbnNfMS5GaWxsVG9rZW4pKTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IE1hdGguc3FydChudW0pO1xuICAgICAgICBjb25zdCByb3dzID0gTWF0aC5yb3VuZChyb290KTtcbiAgICAgICAgbGV0IGNvbHMgPSBNYXRoLmZsb29yKHJvb3QpO1xuICAgICAgICBpZiAocm9vdCA+IGNvbHMpIHtcbiAgICAgICAgICAgIGNvbHMrKztcbiAgICAgICAgfVxuICAgICAgICBsZXQgd2lkdGggPSAoZGVzY1swXSBpbnN0YW5jZW9mIFRva2Vuc18xLkRlZmluZWRUb2tlbikgPyBkZXNjWzBdLmdldFNpemUoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGhlaWdodCA9IChkZXNjWzFdIGluc3RhbmNlb2YgVG9rZW5zXzEuRGVmaW5lZFRva2VuKSA/IGRlc2NbMV0uZ2V0U2l6ZSgpIDogd2lkdGg7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgMTAwIC8gY29scztcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDEwMCAvIHJvd3M7XG4gICAgICAgIGxldCBsZWZ0ID0gMDtcbiAgICAgICAgbGV0IHRvcCA9IDA7XG4gICAgICAgIGxldCBzdHlsZXMgPSBbLi4uQXJyYXkobnVtKS5rZXlzKCldLm1hcChpID0+IHtcbiAgICAgICAgICAgIGxldCByID0gJ2F1dG8nO1xuICAgICAgICAgICAgbGV0IHcgPSB3aWR0aCArICclJztcbiAgICAgICAgICAgIGxldCBiID0gJ2F1dG8nO1xuICAgICAgICAgICAgbGV0IGggPSBoZWlnaHQgKyAnJSc7XG4gICAgICAgICAgICBpZiAoKGxlZnQgKyAyICogd2lkdGgpID4gMTAwICYmIGZpbGwpIHtcbiAgICAgICAgICAgICAgICByID0gJzAlJztcbiAgICAgICAgICAgICAgICB3ID0gJ2F1dG8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0b3AgKyAyICogaGVpZ2h0KSA+IDEwMCAmJiBmaWxsKSB7XG4gICAgICAgICAgICAgICAgYiA9ICcwJSc7XG4gICAgICAgICAgICAgICAgaCA9ICdhdXRvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gYFxuICAgICAgICAgICAgICAgIHRvcDogJHtNYXRoLmZsb29yKHRvcCl9JTsgYm90dG9tOiR7Yn07XG4gICAgICAgICAgICAgICAgbGVmdDogJHtsZWZ0fSU7ICAgICAgICAgICByaWdodDoke3J9O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAke3d9OyAgICAgICAgICAgICAgaGVpZ2h0OiAke2h9O1xuICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKGxlZnQgKz0gd2lkdGgpID4gMTAwIC0gTWF0aC5mbG9vcih3aWR0aCkpIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB0b3AgKz0gaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG4gICAgO1xuICAgIHVuaXRQaXhlbChudW0pIHtcbiAgICAgICAgY29uc3QgZGVzYyA9IHRoaXMuYXJlYURlc2M7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBNYXRoLnNxcnQobnVtKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgucm91bmQocm9vdCk7XG4gICAgICAgIGxldCBjb2xzID0gTWF0aC5mbG9vcihyb290KTtcbiAgICAgICAgaWYgKHJvb3QgPiBjb2xzKSB7XG4gICAgICAgICAgICBjb2xzKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHdpZHRoID0gKGRlc2NbMF0gaW5zdGFuY2VvZiBUb2tlbnNfMS5EZWZpbmVkVG9rZW4pID8gZGVzY1swXS5nZXRTaXplKCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBoZWlnaHQgPSAoZGVzY1sxXSBpbnN0YW5jZW9mIFRva2Vuc18xLkRlZmluZWRUb2tlbikgPyBkZXNjWzFdLmdldFNpemUoKSA6IHdpZHRoO1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMCAvIGNvbHM7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDAgLyByb3dzO1xuICAgICAgICBsZXQgbGVmdCA9IDA7XG4gICAgICAgIGxldCB0b3AgPSAwO1xuICAgICAgICBsZXQgc3R5bGVzID0gWy4uLkFycmF5KG51bSkua2V5cygpXS5tYXAoaSA9PiB7XG4gICAgICAgICAgICBsZXQgciA9ICdhdXRvJztcbiAgICAgICAgICAgIGxldCB3ID0gd2lkdGggKyAncHgnO1xuICAgICAgICAgICAgbGV0IGIgPSAnYXV0byc7XG4gICAgICAgICAgICBsZXQgaCA9IGhlaWdodCArICdweCc7XG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IGBcbiAgICAgICAgICAgICAgICB0b3A6ICR7TWF0aC5mbG9vcih0b3ApfSU7IGJvdHRvbToke2J9O1xuICAgICAgICAgICAgICAgIGxlZnQ6ICR7bGVmdH0lOyAgICAgICAgICAgcmlnaHQ6JHtyfTtcbiAgICAgICAgICAgICAgICB3aWR0aDogJHt3fTsgICAgICAgICAgICAgIGhlaWdodDogJHtofTtcbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgICBpZiAoTWF0aC5yb3VuZChsZWZ0ICs9IHdpZHRoKSA+IDEwMCAtIE1hdGguZmxvb3Iod2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgbGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgdG9wICs9IGhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxuICAgIDtcbiAgICBnZXRTdHlsZXMoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgc3R5bGVzID0gdGhpcy51bml0KGNvbXBvbmVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tcG9uZW50cy5tYXAoKGMsIGkpID0+IHtcbiAgICAgICAgICAgIGMuc3R5bGUgPSBzdHlsZXNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gJy5ocy10aWxlLWxheW91dCc7XG4gICAgfVxuICAgIDtcbn1cbjtcbkxheW91dGVyXzEuTGF5b3V0ZXIucmVnaXN0ZXIoJ3RpbGVzJywgVGlsZUxheW91dGVyKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVZHbHNaVXhoZVc5MWRHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzWnBaWGN2Vkdsc1pVeGhlVzkxZEdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCT0VSQkxIbERRVUV3UXp0QlFVTXhReXh4UTBGSGQwTTdRVUZQZUVNc1RVRkJUU3haUVVGaExGTkJRVkVzYlVKQlFWRTdTVUZSTDBJc1dVRkJiVUlzVVVGQmMwSTdVVUZEY2tNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlJFUXNZVUZCVVN4SFFVRlNMRkZCUVZFc1EwRkJZenRSUVVseVF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZuUWl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzV1VGQldTeHRRa0ZCVlN4RFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRE8xbEJRekZGTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTTdTVUZETVVNc1EwRkJRenRKUVVGQkxFTkJRVU03U1VGRlRTeFhRVUZYTEVOQlFVTXNSMEZCVlR0UlFVTXhRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUXpOQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc2EwSkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETDBRc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVNMVFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF6bENMRWxCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRPVUlzU1VGQlNTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RlFVRkZPMWxCUVVVc1NVRkJTU3hGUVVGRkxFTkJRVU03VTBGQlJUdFJRVU0xUWl4SlFVRkpMRXRCUVVzc1IwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4eFFrRkJXU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUXpsRkxFbEJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxIRkNRVUZaTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRk1VVXNTMEZCU3l4SFFVRkpMRXRCUVVzc1NVRkJTeXhIUVVGSExFZEJRVU1zU1VGQlNTeERRVUZETzFGQlF6VkNMRTFCUVUwc1IwRkJSeXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEhRVUZETEVsQlFVa3NRMEZCUXp0UlFVTTFRaXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEWWl4SlFVRkpMRWRCUVVjc1IwRkJTU3hEUVVGRExFTkJRVU03VVVGRllpeEpRVUZKTEUxQlFVMHNSMEZCUnl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzFsQlEzaERMRWxCUVVrc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF6dFpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRXRCUVVzc1IwRkJReXhIUVVGSExFTkJRVU03V1VGRGNrTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRE8xbEJRVWtzU1VGQlNTeERRVUZETEVkQlFVY3NUVUZCVFN4SFFVRkRMRWRCUVVjc1EwRkJRenRaUVVOMFF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1IwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZPMmRDUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdaMEpCUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF6dGhRVUZGTzFsQlF6ZEVMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVU3WjBKQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenRuUWtGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRPMkZCUVVVN1dVRkROMFFzVFVGQlRTeExRVUZMTEVkQlFVYzdkVUpCUTBnc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNZVUZCWVN4RFFVRkRPM2RDUVVNMVFpeEpRVUZKTEhOQ1FVRnpRaXhEUVVGRE8zbENRVU14UWl4RFFVRkRMREJDUVVFd1FpeERRVUZETzJGQlEzaERMRU5CUVVNN1dVRkRSaXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SlFVRkpMRXRCUVVzc1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRk8yZENRVUZGTEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRVU1zUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXp0aFFVRkZPMWxCUTI1R0xFOUJRVThzUzBGQlN5eERRVUZETzFGQlEyaENMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMG9zVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVGQkxFTkJRVU03U1VGRlRTeFRRVUZUTEVOQlFVTXNSMEZCVlR0UlFVTjRRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUlROQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE5VSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTTVRaXhKUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRemxDTEVsQlFVa3NTVUZCU1N4SFFVRkhMRWxCUVVrc1JVRkJSVHRaUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZETzFOQlFVVTdVVUZETlVJc1NVRkJTU3hMUVVGTExFZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc2NVSkJRVmtzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJRenRSUVVNNVJTeEpRVUZKTEUxQlFVMHNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQldTeHhRa0ZCV1N4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETzFGQlJURkZMRXRCUVVzc1IwRkJTU3hMUVVGTExFbEJRVXNzUjBGQlJ5eEhRVUZETEVsQlFVa3NRMEZCUXp0UlFVTTFRaXhOUVVGTkxFZEJRVWNzVFVGQlRTeEpRVUZKTEVkQlFVY3NSMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkROVUlzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJJc1NVRkJTU3hIUVVGSExFZEJRVWtzUTBGQlF5eERRVUZETzFGQlJXSXNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0WlFVTjRReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTTdXVUZCU1N4SlFVRkpMRU5CUVVNc1IwRkJSeXhMUVVGTExFZEJRVU1zU1VGQlNTeERRVUZETzFsQlEzUkRMRWxCUVVrc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF6dFpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRTFCUVUwc1IwRkJReXhKUVVGSkxFTkJRVU03V1VGRGRrTXNUVUZCVFN4TFFVRkxMRWRCUVVjN2RVSkJRMGdzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1lVRkJZU3hEUVVGRE8zZENRVU0xUWl4SlFVRkpMSE5DUVVGelFpeERRVUZETzNsQ1FVTXhRaXhEUVVGRExEQkNRVUV3UWl4RFFVRkRPMkZCUTNoRExFTkJRVU03V1VGRFJpeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzJkQ1FVRkZMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlFVTXNSMEZCUnl4SlFVRkpMRTFCUVUwc1EwRkJRenRoUVVGRk8xbEJRMjVHTEU5QlFVOHNTMEZCU3l4RFFVRkRPMUZCUTJoQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwb3NUMEZCVHl4TlFVRk5MRU5CUVVNN1NVRkRiRUlzUTBGQlF6dEpRVUZCTEVOQlFVTTdTVUZSVVN4VFFVRlRMRU5CUVVNc1ZVRkJPRUk3VVVGRE9VTXNTVUZCU1N4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRNVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVdNc1JVRkJSU3hEUVVGUkxFVkJRVVVzUlVGQlJUdFpRVU40UXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjRRaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEU5QlFVOHNhVUpCUVdsQ0xFTkJRVU03U1VGRE4wSXNRMEZCUXp0SlFVRkJMRU5CUVVNN1EwRkRURHRCUVVGQkxFTkJRVU03UVVGSFJpeHRRa0ZCVVN4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFVkJRVVVzV1VGQldTeERRVUZETEVOQlFVTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jbGFzcyBMYXlvdXRUb2tlbiB7XG4gICAgY29uc3RydWN0b3Ioc2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIH1cbiAgICBnZXRTaXplKCkgeyByZXR1cm4gdGhpcy5zaXplOyB9XG59XG5leHBvcnRzLkxheW91dFRva2VuID0gTGF5b3V0VG9rZW47XG5jbGFzcyBEZWZpbmVkVG9rZW4gZXh0ZW5kcyBMYXlvdXRUb2tlbiB7XG4gICAgY29uc3RydWN0b3Ioc2l6ZSkgeyBzdXBlcihzaXplKTsgfVxufVxuZXhwb3J0cy5EZWZpbmVkVG9rZW4gPSBEZWZpbmVkVG9rZW47XG5jbGFzcyBGaWxsVG9rZW4gZXh0ZW5kcyBMYXlvdXRUb2tlbiB7XG4gICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKC0xKTsgfVxufVxuZXhwb3J0cy5GaWxsVG9rZW4gPSBGaWxsVG9rZW47XG5jbGFzcyBQaXhlbFRva2VuIGV4dGVuZHMgRGVmaW5lZFRva2VuIHtcbiAgICBjb25zdHJ1Y3RvcihzaXplKSB7IHN1cGVyKHNpemUpOyB9XG59XG5leHBvcnRzLlBpeGVsVG9rZW4gPSBQaXhlbFRva2VuO1xuY2xhc3MgUGVyY2VudFRva2VuIGV4dGVuZHMgRGVmaW5lZFRva2VuIHtcbiAgICBjb25zdHJ1Y3RvcihzaXplKSB7IHN1cGVyKHNpemUpOyB9XG59XG5leHBvcnRzLlBlcmNlbnRUb2tlbiA9IFBlcmNlbnRUb2tlbjtcbmZ1bmN0aW9uIHB4KHB4KSB7IHJldHVybiBuZXcgUGl4ZWxUb2tlbihweCk7IH1cbmV4cG9ydHMucHggPSBweDtcbmZ1bmN0aW9uIHBjKHBjKSB7IHJldHVybiBuZXcgUGVyY2VudFRva2VuKHBjKTsgfVxuZXhwb3J0cy5wYyA9IHBjO1xuZXhwb3J0cy5GSUxMID0gbmV3IEZpbGxUb2tlbigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVkc5clpXNXpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzWnBaWGN2Vkc5clpXNXpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlVVRXNUVUZCYzBJc1YwRkJWenRKUVVNM1FpeFpRVUZ2UWl4SlFVRlpPMUZCUVZvc1UwRkJTU3hIUVVGS0xFbEJRVWtzUTBGQlVUdEpRVUZITEVOQlFVTTdTVUZETjBJc1QwRkJUeXhMUVVGTExFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1EwRkRla003UVVGSVJDeHJRMEZIUXp0QlFVdEVMRTFCUVhOQ0xGbEJRV0VzVTBGQlVTeFhRVUZYTzBsQlEyeEVMRmxCUVZrc1NVRkJXU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1EwRkROME03UVVGR1JDeHZRMEZGUXp0QlFVdEVMRTFCUVdFc1UwRkJWU3hUUVVGUkxGZEJRVmM3U1VGRGRFTXNaMEpCUVdkQ0xFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenREUVVNdlFqdEJRVVpFTERoQ1FVVkRPMEZCUzBRc1RVRkJZU3hWUVVGWExGTkJRVkVzV1VGQldUdEpRVU40UXl4WlFVRlpMRWxCUVZjc1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPME5CUXpWRE8wRkJSa1FzWjBOQlJVTTdRVUZMUkN4TlFVRmhMRmxCUVdFc1UwRkJVU3haUVVGWk8wbEJRekZETEZsQlFWa3NTVUZCVnl4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRMEZETlVNN1FVRkdSQ3h2UTBGRlF6dEJRVTFFTEZOQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGVExFbEJRVTBzVDBGQlR5eEpRVUZKTEZWQlFWVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGQk9VUXNaMEpCUVRoRU8wRkJUVGxFTEZOQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGVExFbEJRVTBzVDBGQlR5eEpRVUZKTEZsQlFWa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGQmFFVXNaMEpCUVdkRk8wRkJTMjVFTEZGQlFVRXNTVUZCU1N4SFFVRkhMRWxCUVVrc1UwRkJVeXhGUVVGRkxFTkJRVU1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc2hvcnRDaGVja1N1bShzKSB7XG4gICAgdmFyIGNoayA9IDB4MTIzNDU2Nzg7XG4gICAgdmFyIGxlbiA9IHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY2hrICs9IChzLmNoYXJDb2RlQXQoaSkgKiAoaSArIDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIChjaGsgJiAweGZmZmZmZmZmKS50b1N0cmluZygxNik7XG59XG5leHBvcnRzLnNob3J0Q2hlY2tTdW0gPSBzaG9ydENoZWNrU3VtO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUTJobFkydHpkVzB1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlEyaGxZMnR6ZFcwdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZSUXl4VFFVRm5RaXhoUVVGaExFTkJRVU1zUTBGQlVUdEpRVU51UXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhWUVVGVkxFTkJRVU03U1VGRGNrSXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU51UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xRkJRekZDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dExRVU4wUXp0SlFVTkVMRTlCUVU4c1EwRkJReXhIUVVGSExFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRekZETEVOQlFVTTdRVUZRUkN4elEwRlBReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBtb250aFN0ciA9IFtcbiAgICBbJ0phbicsICdKYW51YXJ5J10sIFsnRmViJywgJ0ZlYnJ1YXJ5J10sIFsnTWFyJywgJ01hcmNoJ10sIFsnQXByJywgJ0FwcmlsJ10sIFsnTWF5JywgJ01heSddLCBbJ0p1bicsICdKdW5lJ10sXG4gICAgWydKdWwnLCAnSnVseSddLCBbJ0F1ZycsICdBdWd1c3QnXSwgWydTZXAnLCAnU2VwdGVtYmVyJ10sIFsnT2N0JywgJ09jdG9iZXInXSwgWydOb3YnLCAnTm92ZW1iZXInXSwgWydEZWMnLCAnRGVjZW1iZXInXVxuXTtcbmNvbnN0IGRheVN0ciA9IFtcbiAgICBbJ1N1bicsICdTdW5kYXknXSwgWydNb24nLCAnTW9uZGF5J10sIFsnVHVlJywgJ1R1ZXNkYXknXSwgWydXZWQnLCAnV2VkbmVzZGF5J10sIFsnVGh1JywgJ1RodXJzZGF5J10sIFsnRnJpJywgJ0ZyaWRheSddLCBbJ1NhdCcsICdTYXR1cmRheSddXG5dO1xuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bWJlciwgZGlnaXRzKSB7XG4gICAgdmFyIHIgPSAnJyArIG51bWJlcjtcbiAgICB3aGlsZSAoci5sZW5ndGggPCBkaWdpdHMpIHtcbiAgICAgICAgciA9IFwiMFwiICsgcjtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBkYXRlKGZvcm1hdFN0cmluZywgZGF0ZSA9IG5ldyBEYXRlKCkpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBmb3JtYXRTdHJpbmcgIT09ICdzdHJpbmcnIHx8IGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgP1xuICAgICAgICAnaW52YWxpZCcgOlxuICAgICAgICBmb3JtYXRTdHJpbmdcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lWVlZWS9nLCAnJyArIGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lWVkvZywgJycgKyAoZGF0ZS5nZXRGdWxsWWVhcigpICUgMTAwKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lTU1NTS9nLCBtb250aFN0cltkYXRlLmdldE1vbnRoKCldWzFdKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyVNTU0vZywgbW9udGhTdHJbZGF0ZS5nZXRNb250aCgpXVswXSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lTU0vZywgZm9ybWF0TnVtYmVyKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyVNL2csICcnICsgKGRhdGUuZ2V0TW9udGgoKSArIDEpKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyVEREREL2csIGRheVN0cltkYXRlLmdldERheSgpXVsxXSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lREREL2csIGRheVN0cltkYXRlLmdldERheSgpXVswXSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lREQvZywgZm9ybWF0TnVtYmVyKGRhdGUuZ2V0RGF0ZSgpLCAyKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lRC9nLCAnJyArIGRhdGUuZ2V0RGF0ZSgpKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyVoaC9nLCBmb3JtYXROdW1iZXIoZGF0ZS5nZXRIb3VycygpLCAyKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8laC9nLCAnJyArIGRhdGUuZ2V0SG91cnMoKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lbW0vZywgZm9ybWF0TnVtYmVyKGRhdGUuZ2V0TWludXRlcygpLCAyKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lbS9nLCAnJyArIGRhdGUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyVzcy9nLCBmb3JtYXROdW1iZXIoZGF0ZS5nZXRTZWNvbmRzKCksIDIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyVqamovZywgZm9ybWF0TnVtYmVyKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCksIDMpKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyVqai9nLCBmb3JtYXROdW1iZXIoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvIDEwLCAyKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lai9nLCBmb3JtYXROdW1iZXIoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvIDEwMCwgMSkpO1xufVxuZXhwb3J0cy5kYXRlID0gZGF0ZTtcbmV4cG9ydHMubXMgPSB7XG4gICAgZnJvbU1pbnV0ZXM6IChtaW4pID0+IDEwMDAgKiA2MCAqIG1pbixcbiAgICBmcm9tSG91cnM6IChoKSA9PiAxMDAwICogNjAgKiA2MCAqIGgsXG4gICAgZnJvbURheXM6IChkKSA9PiAxMDAwICogNjAgKiA2MCAqIDI0ICogZCxcbiAgICBmcm9tV2Vla3M6ICh3KSA9PiAxMDAwICogNjAgKiA2MCAqIDI0ICogNyAqIHcsXG4gICAgdG9NaW51dGVzOiAobXMpID0+IG1zIC8gKDEwMDAgKiA2MCksXG4gICAgdG9Ib3VyczogKG1zKSA9PiBtcyAvICgxMDAwICogNjAgKiA2MCksXG4gICAgdG9EYXlzOiAobXMpID0+IG1zIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpLFxuICAgIHRvV2Vla3M6IChtcykgPT4gbXMgLyAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDcpXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUkdGMFpTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlFWVhSbExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCWlVFc1RVRkJUU3hSUVVGUkxFZEJRVWM3U1VGRFlpeERRVUZETEV0QlFVc3NSVUZCUlN4VFFVRlRMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXNzUlVGQlJTeFZRVUZWTEVOQlFVTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hQUVVGUExFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hOUVVGTkxFTkJRVU03U1VGRE5VY3NRMEZCUXl4TFFVRkxMRVZCUVVVc1RVRkJUU3hEUVVGRExFVkJRVVVzUTBGQlF5eExRVUZMTEVWQlFVVXNVVUZCVVN4RFFVRkRMRVZCUVVVc1EwRkJReXhMUVVGTExFVkJRVVVzVjBGQlZ5eERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRVZCUVVVc1UwRkJVeXhEUVVGRExFVkJRVVVzUTBGQlF5eExRVUZMTEVWQlFVVXNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkJReXhMUVVGTExFVkJRVVVzVlVGQlZTeERRVUZETzBOQlFVTXNRMEZCUXp0QlFVYzFTQ3hOUVVGTkxFMUJRVTBzUjBGQlJ6dEpRVU5ZTEVOQlFVTXNTMEZCU3l4RlFVRkZMRkZCUVZFc1EwRkJReXhGUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RlFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxGTkJRVk1zUTBGQlF5eEZRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRmRCUVZjc1EwRkJReXhGUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEZWQlFWVXNRMEZCUXl4RlFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxGRkJRVkVzUTBGQlF5eEZRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRlZCUVZVc1EwRkJRenREUVVGRExFTkJRVU03UVVGSE0wa3NVMEZCVXl4WlFVRlpMRU5CUVVNc1RVRkJZU3hGUVVGRkxFMUJRV0U3U1VGRE9VTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGRExFMUJRVTBzUTBGQlF6dEpRVU5zUWl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeEZRVUZGTzFGQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGQlJUdEpRVU14UXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOaUxFTkJRVU03UVVGalJDeFRRVUZuUWl4SlFVRkpMRU5CUVVNc1dVRkJiVUlzUlVGQlJTeEpRVUZKTEVkQlFVTXNTVUZCU1N4SlFVRkpMRVZCUVVVN1NVRkRja1FzVDBGQlR5eERRVUZETEU5QlFVOHNXVUZCV1N4TFFVRkxMRkZCUVZFc1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMmhGTEZOQlFWTXNRMEZCUVN4RFFVRkRPMUZCUTFZc1dVRkJXVHRoUVVOUUxFOUJRVThzUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUlN4SFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dGhRVU40UXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGSkxFVkJRVVVzUjBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1IwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dGhRVU01UXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hGUVVGSExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5vUkN4UFFVRlBMRU5CUVVNc1QwRkJUeXhGUVVGSkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5vUkN4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGSkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWRCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEzQkVMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVWtzUlVGQlJTeEhRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEzaERMRTlCUVU4c1EwRkJReXhSUVVGUkxFVkJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlF6VkRMRTlCUVU4c1EwRkJReXhQUVVGUExFVkJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlF6VkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVWtzV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5xUkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGSkxFVkJRVVVzUjBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1lVRkRia01zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCU1N4WlFVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUTJ4RUxFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVY3NSVUZCUlN4SFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU51UXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGSkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRGNFUXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJTU3hGUVVGRkxFZEJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMkZCUTNSRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVa3NXVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTndSQ3hQUVVGUExFTkJRVU1zVDBGQlR5eEZRVUZKTEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZETVVRc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlNTeFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hIUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTTFSQ3hQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZITEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFZEJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRla1VzUTBGQlF6dEJRWFJDUkN4dlFrRnpRa003UVVGSFdTeFJRVUZCTEVWQlFVVXNSMEZCUnp0SlFVTmtMRmRCUVZjc1JVRkJTeXhEUVVGRExFZEJRVlVzUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4SFFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSE8wbEJRek5ETEZOQlFWTXNSVUZCVHl4RFFVRkRMRU5CUVZFc1JVRkJTU3hGUVVGRkxFTkJRVU1zU1VGQlNTeEhRVUZETEVWQlFVVXNSMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJRenRKUVVNMVF5eFJRVUZSTEVWQlFWRXNRMEZCUXl4RFFVRlJMRVZCUVVrc1JVRkJSU3hEUVVGRExFbEJRVWtzUjBGQlF5eEZRVUZGTEVkQlFVTXNSVUZCUlN4SFFVRkRMRVZCUVVVc1IwRkJReXhEUVVGRE8wbEJReTlETEZOQlFWTXNSVUZCVHl4RFFVRkRMRU5CUVZFc1JVRkJTU3hGUVVGRkxFTkJRVU1zU1VGQlNTeEhRVUZETEVWQlFVVXNSMEZCUXl4RlFVRkZMRWRCUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUjBGQlF5eERRVUZETzBsQlEycEVMRk5CUVZNc1JVRkJUeXhEUVVGRExFVkJRVk1zUlVGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGRExFVkJRVVVzUTBGQlF6dEpRVU0xUXl4UFFVRlBMRVZCUVZNc1EwRkJReXhGUVVGVExFVkJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJReXhGUVVGRkxFZEJRVU1zUlVGQlJTeERRVUZETzBsQlF5OURMRTFCUVUwc1JVRkJWU3hEUVVGRExFVkJRVk1zUlVGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGRExFVkJRVVVzUjBGQlF5eEZRVUZGTEVkQlFVTXNSVUZCUlN4RFFVRkRPMGxCUTJ4RUxFOUJRVThzUlVGQlV5eERRVUZETEVWQlFWTXNSVUZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZETEVWQlFVVXNSMEZCUXl4RlFVRkZMRWRCUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF6dERRVU4yUkN4RFFVRkRJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiByb3VuZChuLCBkID0gMCkge1xuICAgIGNvbnN0IGYgPSBNYXRoLnBvdygxMCwgZCk7XG4gICAgY29uc3QgciA9IE1hdGgucm91bmQobiAqIGYpIC8gZjtcbiAgICByZXR1cm4gJycgKyByO1xufVxuZXhwb3J0cy5yb3VuZCA9IHJvdW5kO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVG5WdFltVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDA1MWJXSmxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFWZERMRk5CUVdkQ0xFdEJRVXNzUTBGQlF5eERRVUZSTEVWQlFVVXNRMEZCUXl4SFFVRkRMRU5CUVVNN1NVRlBhRU1zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZWtJc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETzBsQlF6VkNMRTlCUVU4c1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZXUkN4elFrRlZReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcHJvbWlzZXNfMSA9IHJlcXVpcmUoXCIuL3Byb21pc2VzXCIpO1xuZXhwb3J0cy50aW1lb3V0ID0gcHJvbWlzZXNfMS50aW1lb3V0O1xuZXhwb3J0cy5kZWxheSA9IHByb21pc2VzXzEuZGVsYXk7XG52YXIgcHJvbWlzZXNfMiA9IHJlcXVpcmUoXCIuL3Byb21pc2VzXCIpO1xuZXhwb3J0cy5QYWNlID0gcHJvbWlzZXNfMi5QYWNlO1xudmFyIHByb21pc2VzXzMgPSByZXF1aXJlKFwiLi9wcm9taXNlc1wiKTtcbmV4cG9ydHMucHJvbWlzZUNoYWluID0gcHJvbWlzZXNfMy5wcm9taXNlQ2hhaW47XG52YXIgQ2hlY2tzdW1fMSA9IHJlcXVpcmUoXCIuL0NoZWNrc3VtXCIpO1xuZXhwb3J0cy5zaG9ydENoZWNrU3VtID0gQ2hlY2tzdW1fMS5zaG9ydENoZWNrU3VtO1xudmFyIERhdGVfMSA9IHJlcXVpcmUoXCIuL0RhdGVcIik7XG5leHBvcnRzLmRhdGUgPSBEYXRlXzEuZGF0ZTtcbmV4cG9ydHMubXMgPSBEYXRlXzEubXM7XG52YXIgTnVtYmVyXzEgPSByZXF1aXJlKFwiLi9OdW1iZXJcIik7XG5leHBvcnRzLnJvdW5kID0gTnVtYmVyXzEucm91bmQ7XG52YXIgbG9nXzEgPSByZXF1aXJlKFwiLi9sb2dcIik7XG5leHBvcnRzLmxvZyA9IGxvZ18xLmxvZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3gxUTBGQmEwUTdRVUZCZWtNc05rSkJRVUVzVDBGQlR5eERRVUZCTzBGQlFVVXNNa0pCUVVFc1MwRkJTeXhEUVVGQk8wRkJRM1pDTEhWRFFVRnJSRHRCUVVGNlF5d3dRa0ZCUVN4SlFVRkpMRU5CUVVFN1FVRkRZaXgxUTBGQmEwUTdRVUZCZWtNc2EwTkJRVUVzV1VGQldTeERRVUZCTzBGQlEzSkNMSFZEUVVGclJEdEJRVUY2UXl4dFEwRkJRU3hoUVVGaExFTkJRVUU3UVVGRGRFSXNLMEpCUVRoRE8wRkJRWEpETEhOQ1FVRkJMRWxCUVVrc1EwRkJRVHRCUVVGRkxHOUNRVUZCTEVWQlFVVXNRMEZCUVR0QlFVTnFRaXh0UTBGQlowUTdRVUZCZGtNc2VVSkJRVUVzUzBGQlN5eERRVUZCTzBGQlEyUXNOa0pCUVRaRE8wRkJRWEJETEc5Q1FVRkJMRWRCUVVjc1EwRkJRU0o5IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IERhdGVfMSA9IHJlcXVpcmUoXCIuL0RhdGVcIik7XG5jb25zdCBERUJVRyA9IFN5bWJvbCgnREVCVUcnKTtcbmNvbnN0IElORk8gPSBTeW1ib2woJ0lORk8nKTtcbmNvbnN0IFdBUk4gPSBTeW1ib2woJ1dBUk4nKTtcbmNvbnN0IEVSUk9SID0gU3ltYm9sKCdFUlJPUicpO1xubGV0IGdMb2dGaWxlO1xuO1xuY29uc3QgZ0xldmVscyA9IHtcbiAgICBbREVCVUddOiB7IGltcG9ydGFuY2U6IDAsIHN5bTogREVCVUcsIGRlc2M6ICdERUJVRycgfSxcbiAgICBbSU5GT106IHsgaW1wb3J0YW5jZTogMSwgc3ltOiBJTkZPLCBkZXNjOiAnSU5GTycgfSxcbiAgICBbV0FSTl06IHsgaW1wb3J0YW5jZTogMiwgc3ltOiBXQVJOLCBkZXNjOiAnV0FSTicgfSxcbiAgICBbRVJST1JdOiB7IGltcG9ydGFuY2U6IDMsIHN5bTogRVJST1IsIGRlc2M6ICdFUlJPUicgfVxufTtcbmxldCBnR2xvYmFsTGV2ZWwgPSBnTGV2ZWxzW0lORk9dO1xuY29uc3QgZGVmRGF0ZUZvcm1hdCA9ICclWVlZWSVNTSVERCAlaGg6JW1tOiVzcy4lampqJztcbmxldCBnRGF0ZUZvcm1hdCA9IGRlZkRhdGVGb3JtYXQ7XG5sZXQgZ0NvbG9ycyA9IGZhbHNlO1xuY29uc3QgY29sb3IgPSB7XG4gICAgcmVkOiAnXFx4MWJbMzFtJyxcbiAgICB5ZWxsb3c6ICdcXHgxYlszM20nLFxuICAgIGJsdWU6ICdcXHgxYlszNm0nLFxuICAgIGdyZWVuOiAnXFx4MWJbMzJtJyxcbiAgICBib2xkOiAnXFx4MWJbMW0nLFxuICAgIGNsZWFyOiAnXFx4MWJbMG0nXG59O1xuZXhwb3J0cy5sb2cgPSBjcmVhdGUoJycsIChmaWxlbmFtZSwgbXNnKSA9PiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKSwgKHBhdGgpID0+IFByb21pc2UucmVzb2x2ZShwYXRoLmluZGV4T2YoJy8nKSA+PSAwID8gZmFsc2UgOiB0cnVlKSk7XG5mdW5jdGlvbiBjcmVhdGUoX3ByZWZpeCwgbG9nVG9GaWxlLCBwYXRoRXhpc3RzKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgbGV2ZWw6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJlZml4OiBfcHJlZml4LFxuICAgICAgICBsb2dUb0ZpbGU6IGxvZ1RvRmlsZSxcbiAgICAgICAgcGF0aEV4aXN0czogcGF0aEV4aXN0c1xuICAgIH07XG4gICAgZnVuY3Rpb24gbGV2ZWwobmV3TGV2ZWxTeW0sIHNldEdsb2JhbExldmVsID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IG5ld0xldmVsID0gZ0xldmVsc1tuZXdMZXZlbFN5bV0gfHwgZ0dsb2JhbExldmVsO1xuICAgICAgICBsZXQgb2xkTGV2ZWwgPSBjb250ZXh0LmxldmVsIHx8IGdHbG9iYWxMZXZlbDtcbiAgICAgICAgaWYgKG5ld0xldmVsU3ltID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld0xldmVsID0gb2xkTGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmV3TGV2ZWxTeW0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRleHQubGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZ0xldmVsc1tuZXdMZXZlbFN5bV0pIHtcbiAgICAgICAgICAgIGlmIChzZXRHbG9iYWxMZXZlbCkge1xuICAgICAgICAgICAgICAgIGdHbG9iYWxMZXZlbCA9IG5ld0xldmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5sZXZlbCA9IG5ld0xldmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbXNnID0gYG5ldyAke3NldEdsb2JhbExldmVsID8gJ2dsb2JhbCcgOiBjb250ZXh0LnByZWZpeH0gbG9nIGxldmVsICR7bmV3TGV2ZWwuZGVzYy50b1VwcGVyQ2FzZSgpfSAod2FzICR7b2xkTGV2ZWwuZGVzYy50b1VwcGVyQ2FzZSgpfSlgO1xuICAgICAgICAgICAgb3V0KChuZXdMZXZlbC5zeW0gPT09IG9sZExldmVsLnN5bSkgPyBERUJVRyA6IElORk8sIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvdXQoRVJST1IsIGB1bmtvd24gbGV2ZWwgJHtuZXdMZXZlbFN5bS50b1N0cmluZygpfTsgbG9nIGxldmVsIHJlbWFpbnMgJHtvbGRMZXZlbC5zeW0udG9TdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3TGV2ZWwuc3ltO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWJ1Zyhtc2csIGxvZzJGaWxlID0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4geWllbGQgb3V0KERFQlVHLCBtc2csIGxvZzJGaWxlKTsgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluZm8obXNnLCBsb2cyRmlsZSA9IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgcmV0dXJuIHlpZWxkIG91dChJTkZPLCBtc2csIGxvZzJGaWxlKTsgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm4obXNnLCBsb2cyRmlsZSA9IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgcmV0dXJuIHlpZWxkIG91dChXQVJOLCBtc2csIGxvZzJGaWxlKTsgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVycm9yKG1zZywgbG9nMkZpbGUgPSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHJldHVybiB5aWVsZCBvdXQoRVJST1IsIG1zZywgbG9nMkZpbGUpOyB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9ybWF0KGZtdFN0cikge1xuICAgICAgICBpZiAoZm10U3RyID09PSBudWxsKSB7XG4gICAgICAgICAgICBnRGF0ZUZvcm1hdCA9IGRlZkRhdGVGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm10U3RyKSB7XG4gICAgICAgICAgICBnRGF0ZUZvcm1hdCA9IGZtdFN0cjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ0RhdGVGb3JtYXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWZpeChwcmYpIHtcbiAgICAgICAgaWYgKHByZikge1xuICAgICAgICAgICAgY29udGV4dC5wcmVmaXggPSBwcmY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQucHJlZml4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBvdXQobHZsLCBtc2csIGxvZzJGaWxlID0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JzID0geyBbRVJST1JdOiBjb2xvci5yZWQgKyBjb2xvci5ib2xkLCBbV0FSTl06IGNvbG9yLnllbGxvdyArIGNvbG9yLmJvbGQsIFtERUJVR106IGNvbG9yLmJsdWUsIFtJTkZPXTogY29sb3IuZ3JlZW4gfTtcbiAgICAgICAgICAgIGxldCBkZXNjID0gZ0xldmVsc1tsdmxdO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyTGV2ZWwgPSBjb250ZXh0LmxldmVsIHx8IGdHbG9iYWxMZXZlbDtcbiAgICAgICAgICAgIGlmIChkZXNjLmltcG9ydGFuY2UgPj0gZmlsdGVyTGV2ZWwuaW1wb3J0YW5jZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHIgPSBEYXRlXzEuZGF0ZShnRGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSAodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpID8gbXNnIDogaW5zcGVjdChtc2csIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0xpbmUgPSBgJHtkYXRlU3RyfSAke2NvbnRleHQucHJlZml4fSAke2Rlc2MuZGVzY30gJHtsaW5lfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3JMaW5lID0gYCR7Y29sb3JzW2x2bF0gfHwgJyd9ICR7ZGF0ZVN0cn0gJHtjb250ZXh0LnByZWZpeH0gJHtkZXNjLmRlc2N9ICR7Y29sb3IuY2xlYXJ9ICR7bGluZX1gO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdDb2xvcnMgPyBjb2xvckxpbmUgOiBsb2dMaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAobXNnICYmIG1zZy5zdGFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cuc3RhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ0xvZ0ZpbGUgJiYgbG9nMkZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIGNvbnRleHQubG9nVG9GaWxlKERhdGVfMS5kYXRlKGdMb2dGaWxlKSwgbG9nTGluZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvZ0ZpbGUoZmlsZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKGZpbGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBnTG9nRmlsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgaW5mbyhcImRpc2FibGluZyBsb2dmaWxlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZmlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGVfMS5kYXRlKGdMb2dGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbGUuaW5kZXhPZignLycpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgY29udGV4dC5wYXRoRXhpc3RzKGZpbGUpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChleGlzdHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdMb2dGaWxlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIHdhcm4oYHBhdGggJyR7ZmlsZX0nIGRvZXNuJ3QgZXhpc3RzOyBsb2dmaWxlIGRpc2FibGVkYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZ0xvZ0ZpbGUgPSBmaWxlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgaW5mbyhcIm5vdyBsb2dnaW5nIHRvIGZpbGUgXCIgKyBEYXRlXzEuZGF0ZShmaWxlKSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGdMb2dGaWxlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgZXJyb3IoYGNoZWNraW5nIHBhdGggJHtmaWxlfTsgbG9nZmlsZSBkaXNhYmxlZGApO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbGUgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9ICdsb2ctJVlZWVktJU1NLSVERC50eHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnTG9nRmlsZSA9IGZpbGU7XG4gICAgICAgICAgICByZXR1cm4geWllbGQgaW5mbyhnTG9nRmlsZSA/IGBub3cgbG9nZ2luZyB0byBmaWxlICR7RGF0ZV8xLmRhdGUoZ0xvZ0ZpbGUpfWAgOiAnbG9nZmlsZSBkaXNiYWxlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29uZmlnKGNmZykge1xuICAgICAgICBpZiAoY2ZnLmNvbG9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBnQ29sb3JzID0gY2ZnLmNvbG9ycztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ZnLmZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtYXQoY2ZnLmZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5sZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXZlbChjZmcubGV2ZWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc3BlY3QobXNnLCBkZXB0aCA9IDEsIGluZGVudCA9ICcnKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGVwdGggPSA5OTk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1zZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAobXNnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuICdmdW5jdGlvbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gYCcke21zZ30nYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1zZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChkZXB0aCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKG1zZy5sZW5ndGggPT09IHVuZGVmaW5lZCkgPyAney4uLn0nIDogJ1suLi5dJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtc2cubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFske21zZy5tYXAoKGUpID0+IChlID09PSB1bmRlZmluZWQpID8gJycgOiBpbnNwZWN0KGUsIGRlcHRoIC0gMSwgaW5kZW50KSkuam9pbignLCAnKX1dYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAne1xcbicgKyBPYmplY3Qua2V5cyhtc2cpLm1hcChrID0+IGAgICAke2luZGVudH0ke2t9OiAke2luc3BlY3QobXNnW2tdLCBkZXB0aCAtIDEsIGluZGVudCArICcgICAnKX1gKS5qb2luKCcsXFxuJykgKyBgXFxuJHtpbmRlbnR9fWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1zZy50b1N0cmluZygpO1xuICAgIH1cbiAgICBjb25zdCBuZXdMb2cgPSBmdW5jdGlvbiAocHJlZml4LCBsb2dUb0ZpbGUgPSBjb250ZXh0LmxvZ1RvRmlsZSwgcGF0aEV4aXN0cyA9IGNvbnRleHQucGF0aEV4aXN0cykge1xuICAgICAgICByZXR1cm4gY3JlYXRlKHByZWZpeCwgbG9nVG9GaWxlLCBwYXRoRXhpc3RzKTtcbiAgICB9O1xuICAgIG5ld0xvZy5ERUJVRyA9IERFQlVHO1xuICAgIG5ld0xvZy5JTkZPID0gSU5GTztcbiAgICBuZXdMb2cuV0FSTiA9IFdBUk47XG4gICAgbmV3TG9nLkVSUk9SID0gRVJST1I7XG4gICAgbmV3TG9nLmxldmVsID0gbGV2ZWw7XG4gICAgbmV3TG9nLmRlYnVnID0gZGVidWc7XG4gICAgbmV3TG9nLmluZm8gPSBpbmZvO1xuICAgIG5ld0xvZy53YXJuID0gd2FybjtcbiAgICBuZXdMb2cuZXJyb3IgPSBlcnJvcjtcbiAgICBuZXdMb2cuZm9ybWF0ID0gZm9ybWF0O1xuICAgIG5ld0xvZy5wcmVmaXggPSBwcmVmaXg7XG4gICAgbmV3TG9nLm91dCA9IG91dDtcbiAgICBuZXdMb2cubG9nRmlsZSA9IGxvZ0ZpbGU7XG4gICAgbmV3TG9nLmNvbmZpZyA9IGNvbmZpZztcbiAgICBuZXdMb2cuaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgcmV0dXJuIG5ld0xvZztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOW5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDJ4dlp5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdPMEZCSzBWQkxHbERRVUZyUXp0QlFVZHNReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkhPVUlzVFVGQlRTeEpRVUZKTEVkQlFVc3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJSemxDTEUxQlFVMHNTVUZCU1N4SFFVRkxMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVWM1UWl4TlFVRk5MRXRCUVVzc1IwRkJTU3hOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZITDBJc1NVRkJTU3hSUVVGblFpeERRVUZETzBGQlRUaERMRU5CUVVNN1FVRkhjRVVzVFVGQlRTeFBRVUZQTEVkQlFVYzdTVUZEV2l4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGTExFVkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVTTdTVUZEZEVRc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlRTeEZRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJ5eEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkRPMGxCUTNKRUxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVMHNSVUZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVY3NTVUZCU1N4RlFVRkZMRTFCUVUwc1JVRkJRenRKUVVOeVJDeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkxMRVZCUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVU03UTBGRGVrUXNRMEZCUXp0QlFVZEdMRWxCUVVrc1dVRkJXU3hIUVVGaExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVY3pReXhOUVVGTkxHRkJRV0VzUjBGQlJ5dzRRa0ZCT0VJc1EwRkJRenRCUVVOeVJDeEpRVUZKTEZkQlFWY3NSMEZCVHl4aFFVRmhMRU5CUVVNN1FVRkhjRU1zU1VGQlNTeFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUjNCQ0xFMUJRVTBzUzBGQlN5eEhRVUZITzBsQlExWXNSMEZCUnl4RlFVRkxMRlZCUVZVN1NVRkRiRUlzVFVGQlRTeEZRVUZGTEZWQlFWVTdTVUZEYkVJc1NVRkJTU3hGUVVGSkxGVkJRVlU3U1VGRGJFSXNTMEZCU3l4RlFVRkhMRlZCUVZVN1NVRkRiRUlzU1VGQlNTeEZRVUZKTEZOQlFWTTdTVUZEYWtJc1MwRkJTeXhGUVVGSExGTkJRVk03UTBGRGNFSXNRMEZCUXp0QlFYRkpWeXhSUVVGQkxFZEJRVWNzUjBGQlZ5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVTm9ReXhEUVVGRExGRkJRV1VzUlVGQlJTeEhRVUZWTEVWQlFXdENMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RlFVVXpSU3hEUVVGRExFbEJRVmNzUlVGQmJVSXNSVUZCUlN4RFFVRkJMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJSU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRM1pHTEVOQlFVTTdRVUZGUml4VFFVRlRMRTFCUVUwc1EwRkJReXhQUVVGakxFVkJRVVVzVTBGQmFVSXNSVUZCUlN4VlFVRnBRanRKUVVOb1JTeE5RVUZOTEU5QlFVOHNSMEZCUnp0UlFVTmFMRXRCUVVzc1JVRkJhMElzVTBGQlV6dFJRVU5vUXl4TlFVRk5MRVZCUVUwc1QwRkJUenRSUVVOdVFpeFRRVUZUTEVWQlFWa3NVMEZCVXp0UlFVTTVRaXhWUVVGVkxFVkJRVlVzVlVGQlZUdExRVU5xUXl4RFFVRkRPMGxCUlVZc1UwRkJVeXhMUVVGTExFTkJRVU1zVjBGQmJVSXNSVUZCUlN4alFVRmpMRWRCUVVNc1MwRkJTenRSUVVOd1JDeEpRVUZKTEZGQlFWRXNSMEZCUnl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzV1VGQldTeERRVUZETzFGQlEzQkVMRWxCUVVrc1VVRkJVU3hIUVVGSExFOUJRVThzUTBGQlF5eExRVUZMTEVsQlFVa3NXVUZCV1N4RFFVRkRPMUZCUXpkRExFbEJRVWtzVjBGQlZ5eExRVUZMTEZOQlFWTXNSVUZCUlR0WlFVTXpRaXhSUVVGUkxFZEJRVWNzVVVGQlVTeERRVUZETzFOQlEzWkNPMkZCUVUwc1NVRkJTU3hYUVVGWExFdEJRVXNzU1VGQlNTeEZRVUZGTzFsQlF6ZENMRTlCUVU4c1EwRkJReXhMUVVGTExFZEJRVWNzVTBGQlV5eERRVUZETzFOQlF6ZENPMkZCUVUwc1NVRkJTU3hQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVWQlFVVTdXVUZETjBJc1NVRkJTU3hqUVVGakxFVkJRVVU3WjBKQlFVVXNXVUZCV1N4SFFVRkhMRkZCUVZFc1EwRkJRenRoUVVGRk8ybENRVU0xUWp0blFrRkJSU3hQUVVGUExFTkJRVU1zUzBGQlN5eEhRVUZITEZGQlFWRXNRMEZCUXp0aFFVRkZPMWxCUTJwRUxFMUJRVTBzUjBGQlJ5eEhRVUZITEU5QlFVOHNZMEZCWXl4RFFVRkJMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MR05CUVdNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNVMEZCVXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJTeEhRVUZITEVOQlFVTTdXVUZETjBrc1IwRkJSeXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NTMEZCU3l4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZCTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFOQlF6RkVPMkZCUVUwN1dVRkRTQ3hIUVVGSExFTkJRVU1zUzBGQlN5eEZRVUZGTEdkQ1FVRm5RaXhYUVVGWExFTkJRVU1zVVVGQlVTeEZRVUZGTEhWQ1FVRjFRaXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRUUVVOMFJ6dFJRVU5FTEU5QlFVOHNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJRenRKUVVONFFpeERRVUZETzBsQlJVUXNVMEZCWlN4TFFVRkxMRU5CUVVNc1IwRkJUeXhGUVVGRkxGRkJRVkVzUjBGQlF5eEpRVUZKT3poRVFVRnZRaXhQUVVGUExFMUJRVTBzUjBGQlJ5eERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzB0QlFVRTdTVUZEZUVjc1UwRkJaU3hKUVVGSkxFTkJRVU1zUjBGQlR5eEZRVUZGTEZGQlFWRXNSMEZCUXl4SlFVRkpPemhFUVVGdlFpeFBRVUZQTEUxQlFVMHNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMHRCUVVFN1NVRkRkRWNzVTBGQlpTeEpRVUZKTEVOQlFVTXNSMEZCVHl4RlFVRkZMRkZCUVZFc1IwRkJReXhKUVVGSk96aEVRVUZ2UWl4UFFVRlBMRTFCUVUwc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeEhRVUZITEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRVUU3U1VGRGRFY3NVMEZCWlN4TFFVRkxMRU5CUVVNc1IwRkJUeXhGUVVGRkxGRkJRVkVzUjBGQlF5eEpRVUZKT3poRVFVRnZRaXhQUVVGUExFMUJRVTBzUjBGQlJ5eERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzB0QlFVRTdTVUZGZUVjc1UwRkJVeXhOUVVGTkxFTkJRVU1zVFVGQll6dFJRVU14UWl4SlFVRkpMRTFCUVUwc1MwRkJTeXhKUVVGSkxFVkJRVVU3V1VGQlJTeFhRVUZYTEVkQlFVY3NZVUZCWVN4RFFVRkRPMU5CUVVVN1lVRkRhRVFzU1VGQlNTeE5RVUZOTEVWQlFVMDdXVUZCUlN4WFFVRlhMRWRCUVVjc1RVRkJUU3hEUVVGRE8xTkJRVVU3VVVGRE9VTXNUMEZCVHl4WFFVRlhMRU5CUVVNN1NVRkRka0lzUTBGQlF6dEpRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRWRCUVZjN1VVRkRka0lzU1VGQlNTeEhRVUZITEVWQlFVVTdXVUZCUlN4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF6dFRRVUZGTzFGQlEyeERMRTlCUVU4c1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU14UWl4RFFVRkRPMGxCUlVRc1UwRkJaU3hIUVVGSExFTkJRVU1zUjBGQlZTeEZRVUZGTEVkQlFVOHNSVUZCUlN4UlFVRlJMRWRCUVVNc1NVRkJTVHM3V1VGRGFrUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SFFVRkhMRWRCUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZETlVnc1NVRkJTU3hKUVVGSkxFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFMUJRVTBzVjBGQlZ5eEhRVUZITEU5QlFVOHNRMEZCUXl4TFFVRkxMRWxCUVVrc1dVRkJXU3hEUVVGRE8xbEJRMnhFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1NVRkJTU3hYUVVGWExFTkJRVU1zVlVGQlZTeEZRVUZGTzJkQ1FVTXpReXhOUVVGTkxFOUJRVThzUjBGQlJ5eFhRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1owSkJRMnhETEVsQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1QwRkJUeXhIUVVGSExFdEJRVXNzVVVGQlVTeERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE5VUXNUVUZCVFN4UFFVRlBMRWRCUVhkQ0xFZEJRVWNzVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4TlFVRk5MRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXp0blFrRkRla1lzVFVGQlRTeFRRVUZUTEVkQlFVY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVVVzUlVGQlJTeEpRVUZKTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NTMEZCU3l4RFFVRkRMRXRCUVVzc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF6dG5Ra0ZEZUVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdaMEpCUXpGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCUXl4TFFVRkxMRVZCUVVVN2IwSkJRVVVzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03YVVKQlFVVTdaMEpCUTJwRUxFbEJRVWtzVVVGQlVTeEpRVUZKTEZGQlFWRXNSVUZCUlR0dlFrRkRkRUlzVDBGQlR5eE5RVUZOTEU5QlFVOHNRMEZCUXl4VFFVRlRMRU5CUVVNc1YwRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMmxDUVVNelJEdGhRVU5LTzFsQlEwUXNUMEZCVHl4VFFVRlRMRU5CUVVNN1VVRkRja0lzUTBGQlF6dExRVUZCTzBsQlJVUXNVMEZCWlN4UFFVRlBMRU5CUVVNc1NVRkJXVHM3V1VGREwwSXNTVUZCU1N4SlFVRkpMRXRCUVVzc1NVRkJTU3hGUVVGRk8yZENRVU5tTEZGQlFWRXNSMEZCUnl4VFFVRlRMRU5CUVVNN1owSkJRM0pDTEU5QlFVOHNUVUZCVFN4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXp0aFFVTXhRenRwUWtGQlRTeEpRVUZKTEVsQlFVa3NTMEZCU3l4VFFVRlRMRVZCUVVVN1owSkJRek5DTEU5QlFVOHNWMEZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8yRkJRM3BDTzJsQ1FVRk5MRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJRemRDTEU5QlFVOHNUVUZCVFN4UFFVRlBMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF6dHhRa0ZEYUVNc1NVRkJTU3hEUVVGRExFTkJRVThzVFVGQll5eEZRVUZGTEVWQlFVVTdiMEpCUXpOQ0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdkMEpCUTFRc1VVRkJVU3hIUVVGSExGTkJRVk1zUTBGQlF6dDNRa0ZEY2tJc1QwRkJUeXhOUVVGTkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVsQlFVa3NiME5CUVc5RExFTkJRVU1zUTBGQlF6dHhRa0ZEZUVVN2IwSkJRMFFzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0dlFrRkRhRUlzVDBGQlR5eE5RVUZOTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUjBGQlJ5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE0wUXNRMEZCUXl4RFFVRkJMRU5CUVVNN2NVSkJRMFFzUzBGQlN5eERRVUZETEVkQlFWTXNSVUZCUlR0dlFrRkRaQ3hSUVVGUkxFZEJRVWNzVTBGQlV5eERRVUZETzI5Q1FVTnlRaXhQUVVGUExFMUJRVTBzUzBGQlN5eERRVUZETEdsQ1FVRnBRaXhKUVVGSkxHOUNRVUZ2UWl4RFFVRkRMRU5CUVVNN1owSkJRMnhGTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNN1lVRkRWanRwUWtGQlRTeEpRVUZKTEVsQlFVa3NTMEZCU3l4RlFVRkZMRVZCUVVVN1owSkJRM0JDTEVsQlFVa3NSMEZCUnl4MVFrRkJkVUlzUTBGQlF6dGhRVU5zUXp0cFFrRkJUVHRoUVVOT08xbEJRMFFzVVVGQlVTeEhRVUZETEVsQlFVa3NRMEZCUXp0WlFVTmtMRTlCUVU4c1RVRkJUU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZCTEVOQlFVTXNRMEZCUXl4MVFrRkJkVUlzVjBGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRU5CUVVNN1VVRkRPVVlzUTBGQlF6dExRVUZCTzBsQlJVUXNVMEZCVXl4TlFVRk5MRU5CUVVNc1IwRkJjVVE3VVVGRGFrVXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hMUVVGSExGTkJRVk1zUlVGQlJUdFpRVUZGTEU5QlFVOHNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRE8xTkJRVVU3VVVGRGNrUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hMUVVGSExGTkJRVk1zUlVGQlJUdFpRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VTBGQlJUdFJRVU51UkN4SlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFdEJRVWNzVTBGQlV5eEZRVUZITzFsQlFVVXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFRRVUZGTzBsQlEzSkVMRU5CUVVNN1NVRkZSQ3hUUVVGVExFOUJRVThzUTBGQlF5eEhRVUZQTEVWQlFVVXNTMEZCU3l4SFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFZEJRVU1zUlVGQlJUdFJRVU40UXl4SlFVRkpMRXRCUVVzc1MwRkJSeXhKUVVGSkxFVkJRV2RDTzFsQlFVVXNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJRenRUUVVGRk8xRkJRMmhFTEVsQlFVa3NSMEZCUnl4TFFVRkxMRWxCUVVrc1JVRkJaMEk3V1VGQlJTeFBRVUZQTEUxQlFVMHNRMEZCUXp0VFFVRkZPMUZCUTJ4RUxFbEJRVWtzUjBGQlJ5eExRVUZMTEZOQlFWTXNSVUZCVnp0WlFVRkZMRTlCUVU4c1YwRkJWeXhEUVVGRE8xTkJRVVU3VVVGRGRrUXNTVUZCU1N4UFFVRlBMRWRCUVVjc1MwRkJTeXhWUVVGVkxFVkJRVWM3V1VGQlJTeFBRVUZQTEZWQlFWVXNRMEZCUXp0VFFVRkZPMUZCUTNSRUxFbEJRVWtzVDBGQlR5eEhRVUZITEV0QlFVc3NVVUZCVVN4RlFVRkxPMWxCUVVVc1QwRkJUeXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETzFOQlFVVTdVVUZEZEVRc1NVRkJTU3hQUVVGUExFZEJRVWNzUzBGQlN5eFJRVUZSTEVWQlFVczdXVUZETlVJc1NVRkJTU3hMUVVGTExFZEJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVRkZMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeExRVUZITEZOQlFWTXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXp0aFFVRkZPMWxCUTNCRkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNTMEZCU3l4VFFVRlRMRVZCUVVVN1owSkJRVVVzVDBGQlR5eEpRVUZKTEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGTExFVkJRVU1zUlVGQlJTeERRVUZCTEVOQlFVTXNRMEZCUXl4TFFVRkhMRk5CUVZNc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlFTeEZRVUZGTEVOQlFVRXNRMEZCUXl4RFFVRkJMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eEhRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMkZCUVVVN1dVRkROVWdzVDBGQlR5eExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEV0QlEzSkVMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4SFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFZEJRVU1zUzBGQlN5eERRVU42UXl4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NTMEZCU3l4TlFVRk5MRWRCUVVjc1EwRkJRenRUUVVOd1F6dFJRVU5FTEU5QlFVOHNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wbEJRekZDTEVOQlFVTTdTVUZGUkN4TlFVRk5MRTFCUVUwc1IwRkJUeXhWUVVGVExFMUJRV0VzUlVGQlJTeFpRVUZyUWl4UFFVRlBMRU5CUVVNc1UwRkJVeXhGUVVGRkxHRkJRV3RDTEU5QlFVOHNRMEZCUXl4VlFVRlZPMUZCUTJoSUxFOUJRVThzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1ZVRkJWU3hEUVVGRExFTkJRVU03U1VGRGFrUXNRMEZCUXl4RFFVRkRPMGxCUTBZc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlRTeExRVUZMTEVOQlFVTTdTVUZEZUVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUjBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEZGtJc1RVRkJUU3hEUVVGRExFbEJRVWtzUjBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEZGtJc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlRTeExRVUZMTEVOQlFVTTdTVUZEZUVJc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlRTeExRVUZMTEVOQlFVTTdTVUZEZUVJc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlRTeExRVUZMTEVOQlFVTTdTVUZEZUVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUjBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEZGtJc1RVRkJUU3hEUVVGRExFbEJRVWtzUjBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEZGtJc1RVRkJUU3hEUVVGRExFdEJRVXNzUjBGQlRTeExRVUZMTEVOQlFVTTdTVUZEZUVJc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlN5eE5RVUZOTEVOQlFVTTdTVUZEZWtJc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlN5eE5RVUZOTEVOQlFVTTdTVUZEZWtJc1RVRkJUU3hEUVVGRExFZEJRVWNzUjBGQlVTeEhRVUZITEVOQlFVTTdTVUZEZEVJc1RVRkJUU3hEUVVGRExFOUJRVThzUjBGQlNTeFBRVUZQTEVOQlFVTTdTVUZETVVJc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlN5eE5RVUZOTEVOQlFVTTdTVUZEZWtJc1RVRkJUU3hEUVVGRExFOUJRVThzUjBGQlNTeFBRVUZQTEVOQlFVTTdTVUZETVVJc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGJFSXNRMEZCUXlKOSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiB0aW1lb3V0KG1zKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsgc2V0VGltZW91dChyZWplY3QsIG1zKTsgfSk7XG59XG5leHBvcnRzLnRpbWVvdXQgPSB0aW1lb3V0O1xuZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICByZXR1cm4gKGFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgcmVzb2x2ZShhcmdzKTsgfSwgbXMpO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuZXhwb3J0cy5kZWxheSA9IGRlbGF5O1xuY2xhc3MgUGFjZSB7XG4gICAgY29uc3RydWN0b3IocGFjZSA9IDEwMCwgbWF4Q29uY3VycmVudCA9IC0xKSB7XG4gICAgICAgIHRoaXMubWF4Q29uY3VycmVudCA9IC0xO1xuICAgICAgICB0aGlzLndhaXRVbnRpbCA9IDA7XG4gICAgICAgIHRoaXMud2FpdENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5iZWluZ0NhbGxlZCA9IDA7XG4gICAgICAgIHRoaXMucGFjZSA9IHBhY2UgKyA1O1xuICAgICAgICB0aGlzLm1heENvbmN1cnJlbnQgPSBtYXhDb25jdXJyZW50O1xuICAgIH1cbiAgICBnZXRXYWl0Q291bnQoKSB7IHJldHVybiB0aGlzLndhaXRDb3VudDsgfVxuICAgIGdldENhbGxpbmdDb3VudCgpIHsgcmV0dXJuIHRoaXMuYmVpbmdDYWxsZWQ7IH1cbiAgICBhZGQoZm4pIHtcbiAgICAgICAgY29uc3QgYWRkVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGlmICh0aGlzLndhaXRVbnRpbCA8IGFkZFRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMud2FpdFVudGlsID0gYWRkVGltZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWZmID0gdGhpcy53YWl0VW50aWwgLSBhZGRUaW1lO1xuICAgICAgICB0aGlzLndhaXRVbnRpbCArPSB0aGlzLnBhY2UgKyA1O1xuICAgICAgICB0aGlzLndhaXRDb3VudCsrO1xuICAgICAgICByZXR1cm4gZGVsYXkoZGlmZikoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgeWllbGQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2FpdExvb3AgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heENvbmN1cnJlbnQgPCAwIHx8IHRoaXMuYmVpbmdDYWxsZWQgPCB0aGlzLm1heENvbmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQod2FpdExvb3AsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgd2FpdExvb3AoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy53YWl0Q291bnQtLTtcbiAgICAgICAgICAgIHRoaXMuYmVpbmdDYWxsZWQrKztcbiAgICAgICAgICAgIHJldHVybiBmbihEYXRlLm5vdygpIC0gYWRkVGltZSk7XG4gICAgICAgIH0pKVxuICAgICAgICAgICAgLnRoZW4oKHJldCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iZWluZ0NhbGxlZC0tO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5QYWNlID0gUGFjZTtcbmZ1bmN0aW9uIHByb21pc2VDaGFpbih0YXNrcywgaW5pdGlhbFJlc3VsdCA9IFtdKSB7XG4gICAgcmV0dXJuIHRhc2tzLnJlZHVjZSgoY2hhaW4sIHRhc2spID0+IGNoYWluLnRoZW4oKF9yZXN1bHRzKSA9PiBQcm9taXNlLnJlc29sdmUodGFzayhfcmVzdWx0cykpLnRoZW4oKHIpID0+IHtcbiAgICAgICAgX3Jlc3VsdHMucHVzaChyKTtcbiAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgIH0pKSwgUHJvbWlzZS5yZXNvbHZlKGluaXRpYWxSZXN1bHQpKTtcbn1cbmV4cG9ydHMucHJvbWlzZUNoYWluID0gcHJvbWlzZUNoYWluO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY0hKdmJXbHpaWE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmNISnZiV2x6WlhNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096dEJRVmRCTEZOQlFXZENMRTlCUVU4c1EwRkJReXhGUVVGVE8wbEJRemRDTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNSMEZCUnl4VlFVRlZMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRla1VzUTBGQlF6dEJRVVpFTERCQ1FVVkRPMEZCZFVKRUxGTkJRV2RDTEV0QlFVc3NRMEZCUXl4RlFVRlRPMGxCUXpOQ0xFOUJRVThzUTBGQlNTeEpRVUZQTEVWQlFXRXNSVUZCUlR0UlFVTTNRaXhQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNUMEZCYzBJc1JVRkJSU3hGUVVGRk8xbEJRekZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRE4wTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRVQ3hEUVVGRExFTkJRVU03UVVGRFRpeERRVUZETzBGQlRrUXNjMEpCVFVNN1FVRmhSQ3hOUVVGaExFbEJRVWs3U1VGWllpeFpRVUZaTEVsQlFVa3NSMEZCUXl4SFFVRkhMRVZCUVVVc1lVRkJZU3hIUVVGRExFTkJRVU1zUTBGQlF6dFJRVmc1UWl4clFrRkJZU3hIUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJYSkNMR05CUVZNc1IwRkJVeXhEUVVGRExFTkJRVU03VVVGRGNFSXNZMEZCVXl4SFFVRlRMRU5CUVVNc1EwRkJRenRSUVVOd1FpeG5Ra0ZCVnl4SFFVRlBMRU5CUVVNc1EwRkJRenRSUVZGNFFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1IwRkJReXhEUVVGRExFTkJRVU03VVVGRGJrSXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhoUVVGaExFTkJRVU03U1VGRGRrTXNRMEZCUXp0SlFVVkVMRmxCUVZrc1MwRkJVU3hQUVVGUExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpWRExHVkJRV1VzUzBGQlN5eFBRVUZQTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJVVGxETEVkQlFVY3NRMEZCUXl4RlFVRnBRenRSUVVWcVF5eE5RVUZOTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRE0wSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFOUJRVThzUlVGQlJUdFpRVUZGTEVsQlFVa3NRMEZCUXl4VFFVRlRMRWRCUVVjc1QwRkJUeXhEUVVGRE8xTkJRVVU3VVVGRE0wUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eFBRVUZQTEVOQlFVTTdVVUZEZEVNc1NVRkJTU3hEUVVGRExGTkJRVk1zU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOb1F5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1VVRkZha0lzVDBGQlR5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVN1lVRkRia0lzU1VGQlNTeERRVUZETEVkQlFWTXNSVUZCUlR0WlFVVmlMRTFCUVUwc1NVRkJTU3hQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdaMEpCUTNoQ0xFMUJRVTBzVVVGQlVTeEhRVUZITEVkQlFVY3NSVUZCUlR0dlFrRkRiRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNZVUZCWVN4SFFVRkhMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRVZCUVVVN2QwSkJRMnBGTEU5QlFVOHNSVUZCUlN4RFFVRkRPM0ZDUVVOaU8zbENRVUZOTzNkQ1FVTklMRlZCUVZVc1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdjVUpCUXpWQ08yZENRVU5NTEVOQlFVTXNRMEZCUXp0blFrRkRSaXhSUVVGUkxFVkJRVVVzUTBGQlF6dFpRVU5tTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUlVnc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzFsQlEycENMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFpRVU51UWl4UFFVRlBMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRPVUlzUTBGQlF5eERRVUZCTEVOQlFVTTdZVUZEVEN4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGUExFVkJRVVVzUlVGQlJUdFpRVU5rTEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOdVFpeFBRVUZQTEVkQlFVY3NRMEZCUXp0UlFVTm1MRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMUFzUTBGQlF6dERRVU5LTzBGQmVrUkVMRzlDUVhsRVF6dEJRVlZFTEZOQlFXZENMRmxCUVZrc1EwRkJTU3hMUVVGeFF5eEZRVUZGTEdkQ1FVRnJRaXhGUVVGRk8wbEJRM1pHTEU5QlFVOHNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFdEJRV3RDTEVWQlFVVXNTVUZCSzBJc1JVRkJaMElzUlVGQlJTeERRVVYwUml4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zVVVGQldTeEZRVUZGTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVWNzUlVGQlJTeEZRVUZGTzFGQlJYUkZMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYWtJc1QwRkJUeXhSUVVGUkxFTkJRVU03U1VGRGNFSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkRTQ3hQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVTnFReXhEUVVGRE8wRkJRMDRzUTBGQlF6dEJRVlpFTEc5RFFWVkRJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBUb2dnbGVCdXR0b25fMSA9IHJlcXVpcmUoXCIuL1RvZ2dsZUJ1dHRvblwiKTtcbmNsYXNzIEJ1dHRvbiBleHRlbmRzIFRvZ2dsZUJ1dHRvbl8xLlRvZ2dsZUJ1dHRvbiB7XG4gICAgb25pbml0KG5vZGUpIHtcbiAgICAgICAgbm9kZS5hdHRycy5kZXNjLml0ZW1zID0gW25vZGUuYXR0cnMuZGVzYy5uYW1lIHx8ICdidXR0b24nXTtcbiAgICAgICAgc3VwZXIub25pbml0KG5vZGUpO1xuICAgICAgICBUb2dnbGVCdXR0b25fMS5Ub2dnbGVCdXR0b24uZW5zdXJlU2VsZWN0ZWQobm9kZSk7XG4gICAgfVxufVxuZXhwb3J0cy5CdXR0b24gPSBCdXR0b247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lRblYwZEc5dUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dmMzSmpMMEoxZEhSdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVdkRFFTeHBSRUZCT0VNN1FVRmxPVU1zVFVGQllTeE5RVUZQTEZOQlFWRXNNa0pCUVZrN1NVRkRjRU1zVFVGQlRTeERRVUZETEVsQlFWYzdVVUZEWkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRNMFFzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOdVFpd3lRa0ZCV1N4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU4wUXl4RFFVRkRPME5CUTBvN1FVRk9SQ3gzUWtGTlF5SjkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGhzbGF5b3V0XzEgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5jbGFzcyBDb2xsYXBzaWJsZSB7XG4gICAgb25pbml0KG5vZGUpIHtcbiAgICAgICAgbm9kZS5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGluaXRpYWw6IHRydWUsXG4gICAgICAgICAgICBleHBhbmRlZDogZmFsc2UsXG4gICAgICAgICAgICB0b2dnbGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLnN0YXRlLmV4cGFuZGVkID0gIW5vZGUuc3RhdGUuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgbm9kZS5zdGF0ZS5pbml0aWFsID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCBjc3MgPSBub2RlLmF0dHJzLmNzcztcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IG5vZGUuYXR0cnMuY29tcG9uZW50cztcbiAgICAgICAgY29uc3QgcHJlQXJyb3cgPSBub2RlLmF0dHJzLnByZUFycm93O1xuICAgICAgICBjb25zdCBwb3N0QXJyb3cgPSBub2RlLmF0dHJzLnBvc3RBcnJvdztcbiAgICAgICAgaWYgKG5vZGUuc3RhdGUuaW5pdGlhbCAmJiBub2RlLmF0dHJzLmlzRXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5leHBhbmRlZCA9IG5vZGUuYXR0cnMuaXNFeHBhbmRlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBDU1MgPSBub2RlLnN0YXRlLmV4cGFuZGVkID8gJ2hzLWNvbGxhcHNpYmxlLWV4cGFuZGVkJyA6ICcnO1xuICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKGAuaHMtY29sbGFwc2libGUgJHtjc3N9YCwgW1xuICAgICAgICAgICAgaHNsYXlvdXRfMS5tKCcuaHMtY29sbGFwc2libGUtdGl0bGUnLCB7IG9uY2xpY2s6IG5vZGUuc3RhdGUudG9nZ2xlIH0sIFtcbiAgICAgICAgICAgICAgICAhcHJlQXJyb3cgPyBoc2xheW91dF8xLm0oJycpIDogaHNsYXlvdXRfMS5tKGAuaHMtY29sbGFwc2libGUtcHJlIC5ocy1jb2xsYXBzaWJsZS1hcnJvdy0ke25vZGUuc3RhdGUuZXhwYW5kZWQgPyAnZG93bicgOiAncmlnaHQnfWApLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMF0sXG4gICAgICAgICAgICAgICAgIXBvc3RBcnJvdyA/IGhzbGF5b3V0XzEubSgnJykgOiBoc2xheW91dF8xLm0oYC5ocy1jb2xsYXBzaWJsZS1wb3N0IC5ocy1jb2xsYXBzaWJsZS1hcnJvdy0ke25vZGUuc3RhdGUuZXhwYW5kZWQgPyAnZG93bicgOiAnbGVmdCd9YCksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNvbXBvbmVudHNbMV0gPyBoc2xheW91dF8xLm0oYC5ocy1jb2xsYXBzaWJsZS1jb250ZW50ICR7ZXhwQ1NTfWAsIGNvbXBvbmVudHNbMV0ubWFwKChjKSA9PiBoc2xheW91dF8xLm0oJycsIGMpKSkgOiB1bmRlZmluZWRcbiAgICAgICAgXSk7XG4gICAgfVxufVxuZXhwb3J0cy5Db2xsYXBzaWJsZSA9IENvbGxhcHNpYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUTI5c2JHRndjMmxpYkdVdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZRMjlzYkdGd2MybGliR1V1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRnBSRUVzZFVOQlFXOURPMEZCUlhCRExFMUJRV0VzVjBGQlZ6dEpRVU53UWl4TlFVRk5MRU5CUVVNc1NVRkJWVHRSUVVOaUxFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVYzdXVUZEVkN4UFFVRlBMRVZCUVVVc1NVRkJTVHRaUVVOaUxGRkJRVkVzUlVGQlJTeExRVUZMTzFsQlEyWXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSVHRuUWtGRFZDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRPMmRDUVVNelF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU03V1VGREwwSXNRMEZCUXp0VFFVTktMRU5CUVVNN1NVRkRUaXhEUVVGRE8wbEJRMFFzU1VGQlNTeERRVUZETEVsQlFWVTdVVUZEV0N4TlFVRk5MRWRCUVVjc1IwRkJWU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXp0UlFVTnNReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVONlF5eE5RVUZOTEZGQlFWRXNSMEZCU3l4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU4yUXl4TlFVRk5MRk5CUVZNc1IwRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTjRReXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlZTeExRVUZITEZOQlFWTXNSVUZCUlR0WlFVTjZSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF6dFRRVU12UXp0UlFVTkVMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkJMRU5CUVVNc1EwRkJRU3g1UWtGQmVVSXNRMEZCUVN4RFFVRkRMRU5CUVVFc1JVRkJSU3hEUVVGRE8xRkJRMmhGTEU5QlFVOHNXVUZCUXl4RFFVRkRMRzFDUVVGdFFpeEhRVUZITEVWQlFVVXNSVUZCUlR0WlFVTXZRaXhaUVVGRExFTkJRVU1zZFVKQlFYVkNMRVZCUVVVc1JVRkJSU3hQUVVGUExFVkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVNc1JVRkJSVHRuUWtGRGNrUXNRMEZCUXl4UlFVRlJMRU5CUVVFc1EwRkJReXhEUVVGRExGbEJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJReXhEUVVGRExEWkRRVUUyUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlFTeERRVUZETEVOQlFVRXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dG5Ra0ZEZWtjc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEWWl4RFFVRkRMRk5CUVZNc1EwRkJRU3hEUVVGRExFTkJRVU1zV1VGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGRExFTkJRVU1zT0VOQlFUaERMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZCTEVOQlFVTXNRMEZCUVN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzJGQlF6ZEhMRU5CUVVNN1dVRkRSaXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRmxCUVVNc1EwRkJReXd5UWtGQk1rSXNUVUZCVFN4RlFVRkZMRVZCUVVVc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVzc1JVRkJSU3hGUVVGRkxFTkJRVUVzV1VGQlF5eERRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTTdVMEZETVVjc1EwRkJReXhEUVVGRE8wbEJRMUFzUTBGQlF6dERRVU5LTzBGQk4wSkVMR3REUVRaQ1F5SjkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGhzbGF5b3V0XzEgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5jbGFzcyBMYWJlbCB7XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNzcyA9IG5vZGUuYXR0cnMuY3NzIHx8ICcnO1xuICAgICAgICBjb25zdCBzdHlsZSA9IG5vZGUuYXR0cnMuc3R5bGUgfHwgJyc7XG4gICAgICAgIGNvbnN0IHRleHQgPSBub2RlLmF0dHJzLnRleHQgfHwgJ3Vuc3BlY2lmaWVkJztcbiAgICAgICAgcmV0dXJuIGhzbGF5b3V0XzEubShgLmhzLWxhYmVsICR7Y3NzfWAsIHsgc3R5bGU6IHN0eWxlIH0sIGhzbGF5b3V0XzEubS50cnVzdCh0ZXh0KSk7XG4gICAgfVxufVxuZXhwb3J0cy5MYWJlbCA9IExhYmVsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVEdGaVpXd3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12VEdGaVpXd3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGblEwRXNkVU5CUVhkRE8wRkJXWGhETEUxQlFXRXNTMEZCU3p0SlFVTmtMRWxCUVVrc1EwRkJReXhKUVVGWE8xRkJRMW9zVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJTeERRVUZETzFGQlEycERMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVOeVF5eE5RVUZOTEVsQlFVa3NSMEZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzU1VGQlNTeGhRVUZoTEVOQlFVTTdVVUZETDBNc1QwRkJUeXhaUVVGRExFTkJRVU1zWVVGQllTeEhRVUZITEVWQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJReXhMUVVGTExFVkJRVVVzUlVGQlJTeFpRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGFrVXNRMEZCUXp0RFFVTktPMEZCVUVRc2MwSkJUME1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgUmFkaW9CdXR0b25fMSA9IHJlcXVpcmUoXCIuL1JhZGlvQnV0dG9uXCIpO1xuY2xhc3MgTWVudSBleHRlbmRzIFJhZGlvQnV0dG9uXzEuUmFkaW9CdXR0b24ge1xuICAgIHZpZXcobm9kZSkgeyByZXR1cm4gUmFkaW9CdXR0b25fMS5SYWRpb0J1dHRvbi52aWV3R3JvdXAoJy5ocy1tZW51Jywgbm9kZSk7IH1cbn1cbmV4cG9ydHMuTWVudSA9IE1lbnU7XG47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lUV1Z1ZFM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OU5aVzUxTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJkMFJCTEN0RFFVRTJRenRCUVUwM1F5eE5RVUZoTEVsQlFVc3NVMEZCVVN4NVFrRkJWenRKUVVOcVF5eEpRVUZKTEVOQlFVTXNTVUZCVnl4SlFVRlhMRTlCUVU4c2VVSkJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dERRVU12UlR0QlFVWkVMRzlDUVVWRE8wRkJRVUVzUTBGQlF5SjkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGhzbGF5b3V0XzEgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5jb25zdCBUb29sYmFyQnV0dG9uXzEgPSByZXF1aXJlKFwiLi9Ub29sYmFyQnV0dG9uXCIpO1xuY2xhc3MgTW9kYWwge1xuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIG5vZGUuc3RhdGUuaWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKTtcbiAgICAgICAgbm9kZS5zdGF0ZS5zaG93TW9kYWwgPSBmYWxzZTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBub2RlLnN0YXRlLnNob3dNb2RhbCA9IHRydWU7XG4gICAgICAgICAgICBoc2xheW91dF8xLm0ucmVkcmF3KCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRpc21pc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBub2RlLnN0YXRlLnNob3dNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKG5vZGUuYXR0cnMuZGlzbWlzcykge1xuICAgICAgICAgICAgICAgIG5vZGUuYXR0cnMuZGlzbWlzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB3ID0gbm9kZS5hdHRycy53aWR0aCB8fCAnYXV0byc7XG4gICAgICAgIGNvbnN0IGggPSBub2RlLmF0dHJzLmhlaWdodCB8fCAnYXV0byc7XG4gICAgICAgIGNvbnN0IGF0dHJzID0geyBzdHlsZTogYHdpZHRoOiR7d307IGhlaWdodDoke2h9O2AgfTtcbiAgICAgICAgaWYgKG5vZGUuYXR0cnMuc2V0VHJpZ2dlcikge1xuICAgICAgICAgICAgbm9kZS5hdHRycy5zZXRUcmlnZ2VyKHRyaWdnZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHJlcXVpcmVkIGF0dHJpYnV0ZSBmdW5jdGlvbiAnc2V0VHJpZ2dlcicgaXMgbm90IGRlZmluZWRgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIW5vZGUuc3RhdGUuc2hvd01vZGFsID8gaHNsYXlvdXRfMS5tKCdzcGFuJykgOiBoc2xheW91dF8xLm0oJy5ocy1tb2RhbC1mcmFtZScsIFtcbiAgICAgICAgICAgIGhzbGF5b3V0XzEubSgnLmhzLW1vZGFsLWJhY2tncm91bmQnLCB7IG9uY2xpY2s6IGRpc21pc3MgfSwgJycpLFxuICAgICAgICAgICAgaHNsYXlvdXRfMS5tKCcuaHMtbW9kYWwtZm9yZWdyb3VuZCcsIGF0dHJzLCAhbm9kZS5hdHRycy5jb250ZW50ID8gJ21vZGFsIHBhbmUnIDogW1xuICAgICAgICAgICAgICAgIG5vZGUuYXR0cnMuY29udGVudCxcbiAgICAgICAgICAgICAgICBoc2xheW91dF8xLm0oVG9vbGJhckJ1dHRvbl8xLlRvb2xiYXJCdXR0b24sIHsgb25jbGljazogZGlzbWlzcywgc3ltYm9sczogVG9vbGJhckJ1dHRvbl8xLlRvb2xiYXJCdXR0b24uZ2V0U3ltYm9sKCdjcm9zcycpIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKTtcbiAgICB9XG59XG5leHBvcnRzLk1vZGFsID0gTW9kYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lUVzlrWVd3dWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZUVzlrWVd3dWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZ2UTBFc2RVTkJRVzlETzBGQlEzQkRMRzFFUVVGblJEdEJRVVZvUkN4TlFVRmhMRXRCUVVzN1NVRkRaQ3hOUVVGTkxFTkJRVU1zU1VGQlZUdFJRVU5pTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF5OURMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEhRVUZITEV0QlFVc3NRMEZCUXp0SlFVTnFReXhEUVVGRE8wbEJRMFFzU1VGQlNTeERRVUZETEVsQlFWVTdVVUZEV0N4TlFVRk5MRTlCUVU4c1IwRkJSeXhIUVVGSExFVkJRVVU3V1VGRGFrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETzFsQlF6VkNMRmxCUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5tTEVOQlFVTXNRMEZCUXp0UlFVTkdMRTFCUVUwc1QwRkJUeXhIUVVGSExFZEJRVWNzUlVGQlJUdFpRVU5xUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZETjBJc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlR0blFrRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMkZCUVVVN1VVRkRja1FzUTBGQlF5eERRVUZETzFGQlEwWXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVsQlFVc3NUVUZCVFN4RFFVRkRPMUZCUTNSRExFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hKUVVGSkxFMUJRVTBzUTBGQlF6dFJRVU4wUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhGUVVGRkxFdEJRVXNzUlVGQlJTeFRRVUZUTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRE8xRkJRMjVFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGVkxFVkJRVVU3V1VGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFRRVUZGTzJGQlEzcEVPMWxCUVVVc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eDVSRUZCZVVRc1EwRkJReXhEUVVGRE8xTkJRVVU3VVVGRGFFWXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZCTEVOQlFVTXNRMEZCUXl4WlFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFVTXNRMEZCUXl4cFFrRkJhVUlzUlVGQlJUdFpRVU16UkN4WlFVRkRMRU5CUVVNc2MwSkJRWE5DTEVWQlFVVXNSVUZCUlN4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETzFsQlEyeEVMRmxCUVVNc1EwRkJReXh6UWtGQmMwSXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUVN4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEYWtVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTzJkQ1FVTnNRaXhaUVVGRExFTkJRVU1zTmtKQlFXRXNSVUZCUlN4RlFVRkZMRTlCUVU4c1JVRkJSU3hQUVVGUExFVkJRVVVzVDBGQlR5eEZRVUZETERaQ1FVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTTdZVUZEYmtZc1EwRkJRenRUUVVOTUxFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdRMEZEU2p0QlFUTkNSQ3h6UWtFeVFrTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuY29uc3QgaHNsYXlvdXRfMiA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmNvbnN0IFNlbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9TZWxlY3RvclwiKTtcbmNvbnN0IFNlbGVjdG9yXzIgPSByZXF1aXJlKFwiLi9TZWxlY3RvclwiKTtcbmNsYXNzIE9wdGlvbnNCdXR0b24gZXh0ZW5kcyBTZWxlY3Rvcl8xLlNlbGVjdG9yIHtcbiAgICBvbmluaXQobm9kZSkge1xuICAgICAgICBTZWxlY3Rvcl8xLlNlbGVjdG9yLmluaXQobm9kZSwgU2VsZWN0b3JfMi5hbnlJdGVtcyk7XG4gICAgfVxuICAgIHN0YXRpYyB2aWV3R3JvdXAoY3NzLCBub2RlKSB7XG4gICAgICAgIGNzcyA9IGAke2Nzc30gJHtub2RlLmF0dHJzLmNzcyB8fCAnJ31gO1xuICAgICAgICBjb25zdCBzdHlsZSA9IG5vZGUuYXR0cnMuc3R5bGUgfHwgJyc7XG4gICAgICAgIHJldHVybiBoc2xheW91dF8xLm0oY3NzLCB7IHN0eWxlOiBzdHlsZSB9LCBoc2xheW91dF8xLm0oaHNsYXlvdXRfMi5MYXlvdXQsIHtcbiAgICAgICAgICAgIGNvbHVtbnM6IFtdLFxuICAgICAgICAgICAgY29udGVudDogbm9kZS5zdGF0ZS5pdGVtcy5tYXAoKGwsIGkpID0+IFNlbGVjdG9yXzEuU2VsZWN0b3IucmVuZGVySXRlbShub2RlLCBpKSlcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICB2aWV3KG5vZGUpIHsgcmV0dXJuIE9wdGlvbnNCdXR0b24udmlld0dyb3VwKCcuaHMtb3B0aW9ucy1idXR0b25zJywgbm9kZSk7IH1cbn1cbmV4cG9ydHMuT3B0aW9uc0J1dHRvbiA9IE9wdGlvbnNCdXR0b247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lUM0IwYVc5dWMwSjFkSFJ2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OVBjSFJwYjI1elFuVjBkRzl1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJLMEpCTEhWRFFVRjVRenRCUVVONlF5eDFRMEZCZVVNN1FVRkRla01zZVVOQlFUSkRPMEZCUXpORExIbERRVUV5UXp0QlFXdENNME1zVFVGQllTeGhRVUZqTEZOQlFWRXNiVUpCUVZFN1NVRkRka01zVFVGQlRTeERRVUZETEVsQlFWVTdVVUZEWWl4dFFrRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNiVUpCUVZFc1EwRkJReXhEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZEUkN4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVlVzUlVGQlJTeEpRVUZYTzFGQlEzQkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFVkJRVVVzUTBGQlF6dFJRVU4yUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN1VVRkZja01zVDBGQlR5eFpRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVNc1MwRkJTeXhGUVVGRExFdEJRVXNzUlVGQlF5eEZRVUZGTEZsQlFVTXNRMEZCUXl4cFFrRkJUU3hGUVVGRk8xbEJRMjVETEU5QlFVOHNSVUZCUlN4RlFVRkZPMWxCUTFnc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVkVzUlVGQlJTeERRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRzFDUVVGUkxFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOMFJpeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTlNMRU5CUVVNN1NVRkRSQ3hKUVVGSkxFTkJRVU1zU1VGQlZ5eEpRVUZYTEU5QlFVOHNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXh4UWtGQmNVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UTBGRE5VWTdRVUZrUkN4elEwRmpReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuY29uc3QgaHNsYXlvdXRfMiA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmNvbnN0IFNlbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9TZWxlY3RvclwiKTtcbmNsYXNzIFJhZGlvQnV0dG9uIGV4dGVuZHMgU2VsZWN0b3JfMS5TZWxlY3RvciB7XG4gICAgc3RhdGljIHZpZXdHcm91cChjc3MsIG5vZGUpIHtcbiAgICAgICAgY3NzID0gYCR7Y3NzfSAke25vZGUuYXR0cnMuY3NzIHx8ICcnfWA7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gbm9kZS5hdHRycy5zdHlsZSB8fCAnJztcbiAgICAgICAgcmV0dXJuIGhzbGF5b3V0XzEubShjc3MsIHsgc3R5bGU6IHN0eWxlIH0sIGhzbGF5b3V0XzEubShoc2xheW91dF8yLkxheW91dCwge1xuICAgICAgICAgICAgY29sdW1uczogW10sXG4gICAgICAgICAgICBjb250ZW50OiBub2RlLnN0YXRlLml0ZW1zLm1hcCgobCwgaSkgPT4gU2VsZWN0b3JfMS5TZWxlY3Rvci5yZW5kZXJJdGVtKG5vZGUsIGkpKVxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIHN1cGVyLm9uaW5pdChub2RlKTtcbiAgICAgICAgU2VsZWN0b3JfMS5TZWxlY3Rvci5lbnN1cmVTZWxlY3RlZChub2RlKTtcbiAgICB9XG4gICAgb251cGRhdGUobm9kZSkge1xuICAgICAgICBzdXBlci5vbnVwZGF0ZShub2RlKTtcbiAgICAgICAgU2VsZWN0b3JfMS5TZWxlY3Rvci5lbnN1cmVTZWxlY3RlZChub2RlKTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7IHJldHVybiBSYWRpb0J1dHRvbi52aWV3R3JvdXAoJy5ocy1yYWRpby1idXR0b25zJywgbm9kZSk7IH1cbn1cbmV4cG9ydHMuUmFkaW9CdXR0b24gPSBSYWRpb0J1dHRvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVVtRmthVzlDZFhSMGIyNHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12VW1Ga2FXOUNkWFIwYjI0dWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZwUTBFc2RVTkJRVFJETzBGQlF6VkRMSFZEUVVFMFF6dEJRVU0xUXl4NVEwRkJPRU03UVVGclFqbERMRTFCUVdFc1YwRkJXU3hUUVVGUkxHMUNRVUZSTzBsQlEzSkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlZTeEZRVUZGTEVsQlFWYzdVVUZEY0VNc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlEzWkRMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVWeVF5eFBRVUZQTEZsQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJReXhMUVVGTExFVkJRVU1zUzBGQlN5eEZRVUZETEVWQlFVVXNXVUZCUXl4RFFVRkRMR2xDUVVGTkxFVkJRVVU3V1VGRGJrTXNUMEZCVHl4RlFVRkZMRVZCUVVVN1dVRkRXQ3hQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc2JVSkJRVkVzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1JHTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTFJc1EwRkJRenRKUVVORUxFMUJRVTBzUTBGQlF5eEpRVUZYTzFGQlEyUXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU51UWl4dFFrRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTnNReXhEUVVGRE8wbEJRMFFzVVVGQlVTeERRVUZETEVsQlFWYzdVVUZEYUVJc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTnlRaXh0UWtGQlVTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOc1F5eERRVUZETzBsQlEwUXNTVUZCU1N4RFFVRkRMRWxCUVZjc1NVRkJWeXhQUVVGUExGZEJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPME5CUTNoR08wRkJia0pFTEd0RFFXMUNReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuZnVuY3Rpb24gb25lT2ZJdGVtcyhpdGVtcywgdGl0bGUpIHtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IChpdGVtLnRpdGxlID09PSB0aXRsZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpKSB7XG4gICAgICAgIGl0ZW1zWzBdLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpWzBdO1xufVxuZXhwb3J0cy5vbmVPZkl0ZW1zID0gb25lT2ZJdGVtcztcbmZ1bmN0aW9uIGFueUl0ZW1zKGl0ZW1zLCB0aXRsZSkge1xuICAgIGl0ZW1zW3RpdGxlXS5pc1NlbGVjdGVkID0gIWl0ZW1zW3RpdGxlXS5pc1NlbGVjdGVkO1xuICAgIHJldHVybiBpdGVtc1t0aXRsZV07XG59XG5leHBvcnRzLmFueUl0ZW1zID0gYW55SXRlbXM7XG5jbGFzcyBTZWxlY3RvciB7XG4gICAgc3RhdGljIHVwZGF0ZUl0ZW1zKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBub2RlLmF0dHJzLmRlc2MuaXRlbXMgfHwgW107XG4gICAgICAgIGl0ZW1zLm1hcCgoaXRtLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gbm9kZS5zdGF0ZS5pdGVtc1tpdG1dIHx8IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRtLFxuICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5pdGVtc1tpXSA9IGl0ZW07XG4gICAgICAgICAgICBub2RlLnN0YXRlLml0ZW1zW2l0bV0gPSBpdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIGluaXQobm9kZSwgbW9kZWwgPSBvbmVPZkl0ZW1zKSB7XG4gICAgICAgIG5vZGUuc3RhdGUgPSB7XG4gICAgICAgICAgICB1cGRhdGVNb2RlbDogbW9kZWwsXG4gICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICBldmVudHM6IHt9LFxuICAgICAgICAgICAgaXRlbUNsaWNrZWQ6IChpdGVtKSA9PiBpdGVtLFxuICAgICAgICAgICAgZGVmYXVsdEl0ZW06IG5vZGUuYXR0cnMuZGVzYy5kZWZhdWx0SXRlbVxuICAgICAgICB9O1xuICAgICAgICBub2RlLnN0YXRlLmV2ZW50cy5tb3VzZURvd24gPSBub2RlLmF0dHJzLmRlc2MubW91c2VEb3duO1xuICAgICAgICBub2RlLnN0YXRlLmV2ZW50cy5tb3VzZVVwID0gbm9kZS5hdHRycy5kZXNjLm1vdXNlVXA7XG4gICAgICAgIG5vZGUuYXR0cnMuZGVzYy5jbGlja2VkID0gbm9kZS5hdHRycy5kZXNjLmNsaWNrZWQgfHwgKChpdGVtKSA9PiBjb25zb2xlLmxvZyhgbWlzc2luZyBjbGlja2VkKCkgZnVuY3Rpb24gZm9yIHNlbGVjdG9yIGl0ZW0gJHtpdGVtfWApKTtcbiAgICAgICAgbm9kZS5zdGF0ZS5ldmVudHMuY2xpY2tlZCA9IG5vZGUuYXR0cnMuZGVzYy5jbGlja2VkO1xuICAgICAgICBTZWxlY3Rvci51cGRhdGVJdGVtcyhub2RlKTtcbiAgICB9XG4gICAgb25pbml0KG5vZGUpIHtcbiAgICAgICAgU2VsZWN0b3IuaW5pdChub2RlKTtcbiAgICB9XG4gICAgb251cGRhdGUobm9kZSkge1xuICAgICAgICBTZWxlY3Rvci51cGRhdGVJdGVtcyhub2RlKTtcbiAgICB9XG4gICAgc3RhdGljIGVuc3VyZVNlbGVjdGVkKG5vZGUpIHtcbiAgICAgICAgaWYgKCFub2RlLnN0YXRlLml0ZW1zLnNvbWUoKGkpID0+IGkuaXNTZWxlY3RlZCkgJiYgbm9kZS5zdGF0ZS5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGF0ZS5kZWZhdWx0SXRlbSkge1xuICAgICAgICAgICAgICAgIG5vZGUuc3RhdGUuaXRlbXNbbm9kZS5zdGF0ZS5kZWZhdWx0SXRlbV0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLnN0YXRlLml0ZW1zWzBdLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyByZW5kZXJJdGVtKG5vZGUsIGkpIHtcbiAgICAgICAgY29uc3QgcmVhY3RvciA9IChjYWxsYmFjaykgPT4gKHRpdGxlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnN0YXRlLnVwZGF0ZU1vZGVsKG5vZGUuc3RhdGUuaXRlbXMsIHRpdGxlKTtcbiAgICAgICAgICAgIHRpdGxlID0gbm9kZS5zdGF0ZS5pdGVtQ2xpY2tlZCh0aXRsZSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodGl0bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBpbGxlZ2FsIHJlbmRlciBpbmRleCAke2l9ICR7bm9kZS5zdGF0ZS5pdGVtcy5tYXAoKGkpID0+IGkudGl0bGUpLmpvaW4oJ3wnKX1gKTtcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBub2RlLnN0YXRlLml0ZW1zW2ldO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGl0ZW0udGl0bGUgfHwgJyc7XG4gICAgICAgIGNvbnN0IGl0ZW1Dc3MgPSBpdGVtLmNzcyB8fCAnJztcbiAgICAgICAgcmV0dXJuIHJlbmRlclNlbGVjdGFibGUoe1xuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgY3NzOiBpdGVtQ3NzLFxuICAgICAgICAgICAgaXNTZWxlY3RlZDogbm9kZS5zdGF0ZS5pdGVtc1t0aXRsZV0gPyBub2RlLnN0YXRlLml0ZW1zW3RpdGxlXS5pc1NlbGVjdGVkIDogZmFsc2UsXG4gICAgICAgICAgICBtb3VzZURvd246IG5vZGUuc3RhdGUuZXZlbnRzLm1vdXNlRG93bixcbiAgICAgICAgICAgIG1vdXNlVXA6IG5vZGUuc3RhdGUuZXZlbnRzLm1vdXNlVXAsXG4gICAgICAgICAgICBjbGlja2VkOiByZWFjdG9yKG5vZGUuc3RhdGUuZXZlbnRzLmNsaWNrZWQpXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2VsZWN0b3IgPSBTZWxlY3RvcjtcbjtcbmZ1bmN0aW9uIHJlbmRlclNlbGVjdGFibGUoZCkge1xuICAgIGNvbnN0IG9uY2xpY2sgPSBkLmNsaWNrZWQgPyAoKSA9PiB7IGQuY2xpY2tlZChkLnRpdGxlKTsgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvbm1vdXNlZG93biA9IGQubW91c2VEb3duID8gKCkgPT4geyBkLm1vdXNlRG93bihkLnRpdGxlKTsgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvbm1vdXNldXAgPSBkLm1vdXNlVXAgPyAoKSA9PiB7IGQubW91c2VVcChkLnRpdGxlKTsgfSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaHNsYXlvdXRfMS5tKGAuaHMtc2VsZWN0YWJsZSAke2QuY3NzIHx8ICcnfSAke2QuaXNTZWxlY3RlZCA/ICdocy1zZWxlY3RlZCcgOiAnJ31gLCB7IHN0eWxlOiBkLnN0eWxlLCBvbmNsaWNrOiBvbmNsaWNrLCBvbm1vdXNlZG93bjogb25tb3VzZWRvd24sIG9ubW91c2V1cDogb25tb3VzZXVwIH0sIGQudGl0bGUpO1xufVxuZXhwb3J0cy5yZW5kZXJTZWxlY3RhYmxlID0gcmVuZGVyU2VsZWN0YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVUyVnNaV04wYjNJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZVMlZzWldOMGIzSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGeFFrRXNkVU5CUVc5RE8wRkJLME53UXl4VFFVRm5RaXhWUVVGVkxFTkJRVU1zUzBGQmMwSXNSVUZCUlN4TFFVRlpPMGxCUXpORUxFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4SlFVRnRRaXhGUVVGRkxFVkJRVVU3VVVGRGJFTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEV0QlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNN1NVRkRNME1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEU0N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFXMUNMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNSVUZCUlR0UlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRPMHRCUVVVN1NVRkRNVVlzVDBGQlR5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJiVUlzUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzSkZMRU5CUVVNN1FVRk9SQ3huUTBGTlF6dEJRVTFFTEZOQlFXZENMRkZCUVZFc1EwRkJReXhMUVVGelFpeEZRVUZGTEV0QlFWazdTVUZEZWtRc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEZWQlFWVXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTTdTVUZEYmtRc1QwRkJUeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEZUVJc1EwRkJRenRCUVVoRUxEUkNRVWRETzBGQmNVSkVMRTFCUVhOQ0xGRkJRVkU3U1VGTE1VSXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGVk8xRkJRM3BDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN1VVRkRNVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVZVc1JVRkJSU3hEUVVGUkxFVkJRVVVzUlVGQlJUdFpRVU12UWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTVHRuUWtGRGJFTXNTMEZCU3l4RlFVRkZMRWRCUVVjN1owSkJRMVlzVlVGQlZTeEZRVUZGTEV0QlFVczdZVUZEY0VJc1EwRkJRenRaUVVOR0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dFpRVU16UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRha01zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVUN4RFFVRkRPMGxCVjBRc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZYTEVWQlFVVXNTMEZCU3l4SFFVRkRMRlZCUVZVN1VVRkRja01zU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCYTBJN1dVRkRlRUlzVjBGQlZ5eEZRVUZGTEV0QlFVczdXVUZEYkVJc1MwRkJTeXhGUVVGdlFpeEZRVUZGTzFsQlF6TkNMRTFCUVUwc1JVRkJSU3hGUVVGRk8xbEJRMVlzVjBGQlZ5eEZRVUZGTEVOQlFVTXNTVUZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSk8xbEJRMnhETEZkQlFWY3NSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTzFOQlF6TkRMRU5CUVVNN1VVRkRSaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTNoRUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1IwRkJTeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRkRVFzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlZ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExHZEVRVUZuUkN4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGFFb3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZMTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVU4wUkN4UlFVRlJMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlF5OUNMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFTkJRVU1zU1VGQlZ6dFJRVU5rTEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGVFSXNRMEZCUXp0SlFVTkVMRkZCUVZFc1EwRkJReXhKUVVGWE8xRkJRMmhDTEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGREwwSXNRMEZCUXp0SlFVOVRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlZ6dFJRVU4yUXl4SlFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJaMElzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFVkJRVVU3V1VGRGVFWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUlVGQlJUdG5Ra0ZEZUVJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRPMkZCUXpsRU8ybENRVUZOTzJkQ1FVTklMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU03WVVGRGVrTTdVMEZEU2p0SlFVTk1MRU5CUVVNN1NVRlJVeXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFWY3NSVUZCUlN4RFFVRlJPMUZCUXpkRExFMUJRVTBzVDBGQlR5eEhRVUZITEVOQlFVTXNVVUZCTWtJc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZaTEVWQlFVVXNSVUZCUlR0WlFVTTVSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTm9SQ3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRGRFTXNTVUZCU1N4UFFVRlBMRkZCUVZFc1MwRkJTeXhWUVVGVkxFVkJRVVU3WjBKQlEyaERMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dGhRVU51UWp0UlFVTk1MRU5CUVVNc1EwRkJRenRSUVVOR0xFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNSVUZCUlR0WlFVRkZMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zZDBKQlFYZENMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGTExFVkJRVU1zUlVGQlJTeERRVUZCTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVUZGTzFGQlEycElMRTFCUVUwc1NVRkJTU3hIUVVGclFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5vUkN4TlFVRk5MRXRCUVVzc1IwRkJWU3hKUVVGSkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVTjBReXhOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVjdlFpeFBRVUZQTEdkQ1FVRm5RaXhEUVVGRE8xbEJRM0JDTEV0QlFVc3NSVUZCUlN4TFFVRkxPMWxCUTFvc1IwRkJSeXhGUVVGRkxFOUJRVTg3V1VGRldpeFZRVUZWTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN6dFpRVU12UlN4VFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNVMEZCVXp0WlFVTjBReXhQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUenRaUVVOc1F5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXp0VFFVTTVReXhEUVVGRExFTkJRVU03U1VGRFVDeERRVUZETzBOQlJVbzdRVUU1UmtRc05FSkJPRVpETzBGQlFVRXNRMEZCUXp0QlFWRkdMRk5CUVdkQ0xHZENRVUZuUWl4RFFVRkRMRU5CUVdkQ08wbEJRemRETEUxQlFVMHNUMEZCVHl4SFFVRlRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVUVzUTBGQlF5eERRVUZITEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTTdTVUZETDBVc1RVRkJUU3hYUVVGWExFZEJRVXNzUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJRenRKUVVNdlJTeE5RVUZOTEZOQlFWTXNSMEZCVHl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGQkxFTkJRVU1zUTBGQlJ5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETzBsQlF5OUZMRTlCUVU4c1dVRkJReXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkJMRU5CUVVNc1EwRkJRU3hoUVVGaExFTkJRVUVzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVTjBSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1JVRkJReXhQUVVGUExFVkJRVVVzVjBGQlZ5eEZRVUZETEZkQlFWY3NSVUZCUlN4VFFVRlRMRVZCUVVNc1UwRkJVeXhGUVVGRkxFVkJRMnBHTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUTFZc1EwRkJRenRCUVVOT0xFTkJRVU03UVVGU1JDdzBRMEZSUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNsYXlvdXRfMSA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmNsYXNzIFNsaWRlciB7XG4gICAgb25pbml0KG5vZGUpIHtcbiAgICAgICAgbm9kZS5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJhbmdlOiBbXSxcbiAgICAgICAgICAgIHZhbHVlOiAwLjUsXG4gICAgICAgICAgICBtb3VzZTogLTEsXG4gICAgICAgICAgICBzbGlkZXI6IDAsXG4gICAgICAgICAgICBub3RpZmllZDogJycsXG4gICAgICAgICAgICBvbmNoYW5nZTogKCkgPT4geyB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCBpZCA9IG5vZGUuYXR0cnMuaWQ7XG4gICAgICAgIGNvbnN0IGNzcyA9IG5vZGUuYXR0cnMuY3NzIHx8ICcnO1xuICAgICAgICBub2RlLnN0YXRlLnJhbmdlID0gbm9kZS5hdHRycy5yYW5nZSB8fCBbXTtcbiAgICAgICAgbm9kZS5zdGF0ZS5vbmNoYW5nZSA9IG5vZGUuYXR0cnMub25jaGFuZ2U7XG4gICAgICAgIHJldHVybiBoc2xheW91dF8xLm0oYC5ocy1zbGlkZXIgJHtjc3N9YCwge1xuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgb25tb3VzZWRvd246IChlKSA9PiBtb3VzZWRvd24oZSwgbm9kZSksXG4gICAgICAgICAgICBvbm1vdXNlbW92ZTogKGUpID0+IG1vdXNlbW92ZShlLCBub2RlKSxcbiAgICAgICAgICAgIG9ubW91c2V1cDogKGUpID0+IG1vdXNldXAoZSwgbm9kZSksXG4gICAgICAgICAgICBvbm1vdXNlb3V0OiAoZSkgPT4gbW91c2VvdXQoZSwgbm9kZSlcbiAgICAgICAgfSwgW3JlbmRlclNsaWRlcihub2RlKV0pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2xpZGVyID0gU2xpZGVyO1xuZnVuY3Rpb24gcmVuZGVyU2xpZGVyKG5vZGUpIHtcbiAgICByZXR1cm4gaHNsYXlvdXRfMS5tKCcuaHMtc2xpZGVyLXNsb3QnLCBbXG4gICAgICAgIGhzbGF5b3V0XzEubSgnLmhzLXNsaWRlci1tYXJrZXJzJywgbm9kZS5zdGF0ZS5yYW5nZS5tYXAocmVuZGVyTWFya2VyKSksXG4gICAgICAgIGhzbGF5b3V0XzEubSgnLmhzLXNsaWRlci1oYW5kbGUnLCB7IHN0eWxlOiBgbGVmdDokezEwMCAqIG5vZGUuc3RhdGUudmFsdWV9JWAgfSlcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIHJlbmRlck1hcmtlcih2YWx1ZSwgaSwgbWFya2Vycykge1xuICAgIGNvbnN0IHNoYXJlID0gaSAvIChtYXJrZXJzLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGxlZnQgPSBtYXJrZXJzLmxlbmd0aCA8IDIgPyAwIDogMTAwICogc2hhcmU7XG4gICAgcmV0dXJuIGhzbGF5b3V0XzEubSgnLmhzLXNsaWRlci1tYXJrZXInLCB7IHN0eWxlOiBgbGVmdDogJHtsZWZ0fSVgIH0sIHJlbmRlckxhYmVsKHZhbHVlKSk7XG59XG5mdW5jdGlvbiByZW5kZXJMYWJlbCh2YWx1ZSkge1xuICAgIHJldHVybiBoc2xheW91dF8xLm0oJy5ocy1zbGlkZXItbGFiZWwnLCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRUYXJnZXRPZmZzZXQoZSkge1xuICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICBsZXQgbGVmdE9mZnNldCA9IDA7XG4gICAgd2hpbGUgKHRhcmdldC5jbGFzc05hbWUudHJpbSgpICE9PSBlLmN1cnJlbnRUYXJnZXQuY2xhc3NOYW1lLnRyaW0oKSkge1xuICAgICAgICBsZWZ0T2Zmc2V0ICs9IHRhcmdldC5vZmZzZXRMZWZ0O1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnRPZmZzZXQgLSB0YXJnZXQubGFzdENoaWxkLm9mZnNldExlZnQ7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZShlLCBub2RlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3Qgc2xvdFdpZHRoID0gZS5jdXJyZW50VGFyZ2V0Lmxhc3RDaGlsZC5jbGllbnRXaWR0aDtcbiAgICBub2RlLnN0YXRlLnZhbHVlID0gKGUuY2xpZW50WCAtIG5vZGUuc3RhdGUubW91c2UpIC8gc2xvdFdpZHRoICsgbm9kZS5zdGF0ZS5zbGlkZXI7XG4gICAgcmV0dXJuIG5vdGlmeShub2RlKTtcbn1cbmZ1bmN0aW9uIG1vdXNlZG93bihlLCBub2RlKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gZ2V0VGFyZ2V0T2Zmc2V0KGUpO1xuICAgIG5vZGUuc3RhdGUubW91c2UgPSBlLmNsaWVudFg7XG4gICAgaWYgKFsnaHMtc2xpZGVyJywgJ2hzLXNsaWRlci1zbG90J10uaW5kZXhPZihlLnRhcmdldC5jbGFzc05hbWUudHJpbSgpKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHNsb3RXaWR0aCA9IGUuY3VycmVudFRhcmdldC5sYXN0Q2hpbGQuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IGhhbmRsZVdpZHRoID0gZS5jdXJyZW50VGFyZ2V0Lmxhc3RDaGlsZC5sYXN0Q2hpbGQuY2xpZW50V2lkdGg7XG4gICAgICAgIG5vZGUuc3RhdGUubW91c2UgLT0gaGFuZGxlV2lkdGggLyAyO1xuICAgICAgICBub2RlLnN0YXRlLnZhbHVlID0gKGUub2Zmc2V0WCAtIGhhbmRsZVdpZHRoIC8gMiArIG9mZnNldCkgLyBzbG90V2lkdGg7XG4gICAgfVxuICAgIG5vZGUuc3RhdGUuc2xpZGVyID0gbm9kZS5zdGF0ZS52YWx1ZTtcbiAgICBnZXRWYWx1ZShlLCBub2RlKTtcbn1cbmZ1bmN0aW9uIG1vdXNlbW92ZShlLCBub2RlKSB7XG4gICAgaWYgKG5vZGUuc3RhdGUubW91c2UgPiAwKSB7XG4gICAgICAgIGdldFZhbHVlKGUsIG5vZGUpO1xuICAgICAgICBpZiAobm9kZS5zdGF0ZS52YWx1ZSA+IDEgfHwgbm9kZS5zdGF0ZS52YWx1ZSA8IDApIHtcbiAgICAgICAgICAgIG1vdXNldXAoZSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBtb3VzZXVwKGUsIG5vZGUpIHtcbiAgICBpZiAobm9kZS5zdGF0ZS5tb3VzZSA+IDApIHtcbiAgICAgICAgbm9kZS5zdGF0ZS52YWx1ZSA9IGdldFZhbHVlKGUsIG5vZGUpO1xuICAgICAgICBub2RlLnN0YXRlLm1vdXNlID0gLTE7XG4gICAgfVxufVxuZnVuY3Rpb24gbW91c2VvdXQoZSwgbm9kZSkge1xuICAgIGlmIChub2RlLnN0YXRlLm1vdXNlID4gMCAmJiBlLnRhcmdldC5jbGFzc05hbWUudHJpbSgpID09PSAnaHMtc2xpZGVyJykge1xuICAgICAgICBtb3VzZXVwKGUsIG5vZGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG5vdGlmeShub2RlKSB7XG4gICAgaWYgKChub2RlLnN0YXRlLnJhbmdlLmxlbmd0aCA+IDEpICYmICh0eXBlb2Ygbm9kZS5zdGF0ZS5yYW5nZVswXSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIGNvbnN0IHYgPSBNYXRoLmZsb29yKG5vZGUuc3RhdGUudmFsdWUgKiAobm9kZS5zdGF0ZS5yYW5nZS5sZW5ndGggLSAxKSArIDAuNSk7XG4gICAgICAgIGlmIChub2RlLnN0YXRlLm5vdGlmaWVkICE9PSBub2RlLnN0YXRlLnJhbmdlW3ZdKSB7XG4gICAgICAgICAgICBub2RlLnN0YXRlLm9uY2hhbmdlKG5vZGUuc3RhdGUucmFuZ2Vbdl0pO1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5ub3RpZmllZCA9IG5vZGUuc3RhdGUucmFuZ2Vbdl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHYgLyAobm9kZS5zdGF0ZS5yYW5nZS5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG51bVJhbmdlID0gbm9kZS5zdGF0ZS5yYW5nZTtcbiAgICAgICAgY29uc3QgdiA9IE1hdGguZmxvb3IoKG51bVJhbmdlWzBdICogKDEgLSBub2RlLnN0YXRlLnZhbHVlKSArIG51bVJhbmdlWzFdICogbm9kZS5zdGF0ZS52YWx1ZSkgKiAxMDApIC8gMTAwO1xuICAgICAgICBub2RlLnN0YXRlLm9uY2hhbmdlKE1hdGgubWluKG5vZGUuc3RhdGUucmFuZ2VbMV0sIE1hdGgubWF4KG5vZGUuc3RhdGUucmFuZ2VbMF0sIHYpKSk7XG4gICAgICAgIHJldHVybiBub2RlLnN0YXRlLnZhbHVlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVUyeHBaR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwxTnNhV1JsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVEJEUVN4MVEwRkJiME03UVVGdlFuQkRMRTFCUVdFc1RVRkJUVHRKUVVObUxFMUJRVTBzUTBGQlF5eEpRVUZWTzFGQlEySXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSenRaUVVOVUxFdEJRVXNzUlVGQlpTeEZRVUZGTzFsQlEzUkNMRXRCUVVzc1JVRkJSU3hIUVVGSE8xbEJRMVlzUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTlVMRTFCUVUwc1JVRkJReXhEUVVGRE8xbEJRMUlzVVVGQlVTeEZRVUZETEVWQlFVVTdXVUZEV0N4UlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVVVzUTBGQlF6dFRRVU55UWl4RFFVRkRPMGxCUTA0c1EwRkJRenRKUVVORUxFbEJRVWtzUTBGQlF5eEpRVUZYTzFGQlExb3NUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTTdVVUZEZWtJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRMnBETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVNeFF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTXhReXhQUVVGUExGbEJRVU1zUTBGQlF5eGpRVUZqTEVkQlFVY3NSVUZCUlN4RlFVRkZPMWxCUXpGQ0xFVkJRVVVzUlVGQlF5eEZRVUZGTzFsQlEwd3NWMEZCVnl4RlFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJRenRaUVVONlF5eFhRVUZYTEVWQlFVTXNRMEZCUXl4RFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRPMWxCUTNwRExGTkJRVk1zUlVGQlF5eERRVUZETEVOQlFVc3NSVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTTdXVUZEZGtNc1ZVRkJWU3hGUVVGRExFTkJRVU1zUTBGQlN5eEZRVUZITEVWQlFVVXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF6dFRRVU16UXl4RlFVTkVMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTXhRaXhEUVVGRE8wTkJSMG83UVVFelFrUXNkMEpCTWtKRE8wRkJSVVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNTVUZCVlR0SlFVTTFRaXhQUVVGUExGbEJRVU1zUTBGQlF5eHBRa0ZCYVVJc1JVRkJSVHRSUVVONFFpeFpRVUZETEVOQlFVTXNiMEpCUVc5Q0xFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzFGQlF6TkVMRmxCUVVNc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hSUVVGUkxFZEJRVWNzUjBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03UzBGRGNrVXNRMEZCUXl4RFFVRkRPMEZCUTFBc1EwRkJRenRCUVVWRUxGTkJRVk1zV1VGQldTeERRVUZETEV0QlFXOUNMRVZCUVVVc1EwRkJVU3hGUVVGRkxFOUJRVzFDTzBsQlEzSkZMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGNrTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZETEV0QlFVc3NRMEZCUXp0SlFVTTNReXhQUVVGUExGbEJRVU1zUTBGQlF5eHRRa0ZCYlVJc1JVRkJSU3hGUVVGRExFdEJRVXNzUlVGQlJTeFRRVUZUTEVsQlFVa3NSMEZCUnl4RlFVRkRMRVZCUVVVc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYWtZc1EwRkJRenRCUVVWRUxGTkJRVk1zVjBGQlZ5eERRVUZETEV0QlFXOUNPMGxCUTNKRExFOUJRVThzV1VGQlF5eERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzaERMRU5CUVVNN1FVRkpSQ3hUUVVGVExHVkJRV1VzUTBGQlF5eERRVUZMTzBsQlF6RkNMRWxCUVVrc1RVRkJUU3hIUVVGUExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZETVVJc1NVRkJTU3hWUVVGVkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyNUNMRTlCUVU4c1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1lVRkJZU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0UlFVTnFSU3hWUVVGVkxFbEJRVWtzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTm9ReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXp0TFFVTTVRanRKUVVORUxFOUJRVThzVlVGQlZTeEhRVUZITEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1ZVRkJWU3hEUVVGRE8wRkJRM0JFTEVOQlFVTTdRVUZGUkN4VFFVRlRMRkZCUVZFc1EwRkJReXhEUVVGTExFVkJRVVVzU1VGQlZUdEpRVU12UWl4RFFVRkRMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03U1VGRGNFSXNRMEZCUXl4RFFVRkRMR05CUVdNc1JVRkJSU3hEUVVGRE8wbEJRMjVDTEUxQlFVMHNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhoUVVGaExFTkJRVU1zVTBGQlV5eERRVUZETEZkQlFWY3NRMEZCUXp0SlFVTjRSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRiRVlzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRlRUlzUTBGQlF6dEJRVVZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRU5CUVVzc1JVRkJSU3hKUVVGVk8wbEJRMmhETEUxQlFVMHNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5zUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRPMGxCUXpkQ0xFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNTVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRka1VzVFVGQlRTeFRRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRMR0ZCUVdFc1EwRkJReXhUUVVGVExFTkJRVU1zVjBGQlZ5eERRVUZETzFGQlEzaEVMRTFCUVUwc1YwRkJWeXhIUVVGSExFTkJRVU1zUTBGQlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRk5CUVZNc1EwRkJReXhYUVVGWExFTkJRVU03VVVGRGNFVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVWtzVjBGQlZ5eEhRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnNReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFZEJRVWNzVjBGQlZ5eEhRVUZETEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1IwRkJSeXhUUVVGVExFTkJRVU03UzBGRGRrVTdTVUZEUkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJRenRKUVVOeVF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRM1JDTEVOQlFVTTdRVUZGUkN4VFFVRlRMRk5CUVZNc1EwRkJReXhEUVVGTExFVkJRVVVzU1VGQlZUdEpRVU5vUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZETEVOQlFVTXNSVUZCUlR0UlFVTndRaXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTJ4Q0xFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1JVRkJSVHRaUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1UwRkJSVHRMUVVNeFJUdEJRVU5NTEVOQlFVTTdRVUZGUkN4VFFVRlRMRTlCUVU4c1EwRkJReXhEUVVGTExFVkJRVVVzU1VGQlZUdEpRVU01UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZETEVOQlFVTXNSVUZCUlR0UlFVTndRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEzSkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMHRCUTNwQ08wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNVVUZCVVN4RFFVRkRMRU5CUVVzc1JVRkJSU3hKUVVGVk8wbEJReTlDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEZkQlFWY3NSVUZCUlR0UlFVTnFSU3hQUVVGUExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUTNCQ08wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRWxCUVZVN1NVRkRkRUlzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVrc1VVRkJVU3hEUVVGRExFVkJRVVU3VVVGRE0wVXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTXpSU3hKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4TFFVRkxMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMWxCUXpkRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRla01zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRWRCUVZjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRja1E3VVVGRlJDeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVNeFF6dFRRVUZOTzFGQlEwZ3NUVUZCVFN4UlFVRlJMRWRCUVhGQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUTNCRUxFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJReXhIUVVGSExFTkJRVU1zUjBGQlF5eEhRVUZITEVOQlFVTTdVVUZEYUVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJVeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZUTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOeVJ5eFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRE8wdEJRek5DTzBGQlEwd3NRMEZCUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNsYXlvdXRfMSA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmNvbnN0IFNlbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9TZWxlY3RvclwiKTtcbmNsYXNzIFRvZ2dsZUJ1dHRvbiBleHRlbmRzIFNlbGVjdG9yXzEuU2VsZWN0b3Ige1xuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIHN1cGVyLm9uaW5pdChub2RlKTtcbiAgICAgICAgbm9kZS5zdGF0ZS5tb3VzZURvd25DU1MgPSAnJztcbiAgICAgICAgbm9kZS5zdGF0ZS5ldmVudHMubW91c2VEb3duID0gKCkgPT4gbm9kZS5zdGF0ZS5tb3VzZURvd25DU1MgPSAnLmhzLWJ1dHRvbi1wcmVzc2VkJztcbiAgICAgICAgbm9kZS5zdGF0ZS5ldmVudHMubW91c2VVcCA9ICgpID0+IG5vZGUuc3RhdGUubW91c2VEb3duQ1NTID0gJyc7XG4gICAgICAgIG5vZGUuc3RhdGUuaXRlbUNsaWNrZWQgPSAodGl0bGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBub2RlLnN0YXRlLml0ZW1zLm1hcCgoaSkgPT4gaS50aXRsZSkuaW5kZXhPZih0aXRsZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdUaXRsZSA9IG5vZGUuc3RhdGUuaXRlbXNbKGkgKyAxKSAlIG5vZGUuc3RhdGUuaXRlbXMubGVuZ3RoXS50aXRsZTtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUuaXRlbXNbdGl0bGVdLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUuaXRlbXNbbmV3VGl0bGVdLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RpdGxlO1xuICAgICAgICB9O1xuICAgICAgICBTZWxlY3Rvcl8xLlNlbGVjdG9yLmVuc3VyZVNlbGVjdGVkKG5vZGUpO1xuICAgIH1cbiAgICBvbnVwZGF0ZShub2RlKSB7XG4gICAgICAgIHN1cGVyLm9udXBkYXRlKG5vZGUpO1xuICAgICAgICBTZWxlY3Rvcl8xLlNlbGVjdG9yLmVuc3VyZVNlbGVjdGVkKG5vZGUpO1xuICAgIH1cbiAgICB2aWV3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgY3NzID0gbm9kZS5hdHRycy5jc3MgfHwgJyc7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gbm9kZS5hdHRycy5zdHlsZSB8fCAnJztcbiAgICAgICAgY29uc3QgaSA9IG5vZGUuc3RhdGUuaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmlzU2VsZWN0ZWQpO1xuICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKGAuaHMtdG9nZ2xlLWJ1dHRvbiAke2Nzc30gJHtub2RlLnN0YXRlLm1vdXNlRG93bkNTU31gLCB7IHN0eWxlOiBzdHlsZSB9LCBoc2xheW91dF8xLm0oJ3NwYW4nLCBTZWxlY3Rvcl8xLlNlbGVjdG9yLnJlbmRlckl0ZW0obm9kZSwgaSkpKTtcbiAgICB9XG59XG5leHBvcnRzLlRvZ2dsZUJ1dHRvbiA9IFRvZ2dsZUJ1dHRvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVZHOW5aMnhsUW5WMGRHOXVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDFSdloyZHNaVUoxZEhSdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVdsRFFTeDFRMEZCYjBRN1FVRkRjRVFzZVVOQlFYTkVPMEZCYlVKMFJDeE5RVUZoTEZsQlFXRXNVMEZCVVN4dFFrRkJVVHRKUVVOMFF5eE5RVUZOTEVOQlFVTXNTVUZCVlR0UlFVTmlMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUXpkQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmxCUVZrc1IwRkJSeXh2UWtGQmIwSXNRMEZCUXp0UlFVTnVSaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJSV3BGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhIUVVGRkxFTkJRVU1zUzBGQldTeEZRVUZQTEVWQlFVVTdXVUZETVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlowSXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVNMVJTeE5RVUZOTEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRGVrVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNWVUZCVlN4SFFVRkhMRXRCUVVzc1EwRkJRenRaUVVNelF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUXpkRExFOUJRVThzVVVGQlVTeERRVUZETzFGQlEzQkNMRU5CUVVNc1EwRkJRenRSUVVOR0xHMUNRVUZSTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZEUkN4UlFVRlJMRU5CUVVNc1NVRkJWenRSUVVOb1FpeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM0pDTEcxQ1FVRlJMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEyeERMRU5CUVVNN1NVRkRSQ3hKUVVGSkxFTkJRVU1zU1VGQlZ6dFJRVU5hTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVTnFReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGNrTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJaMElzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJSWHBGTEU5QlFVOHNXVUZCUXl4RFFVRkRMSEZDUVVGeFFpeEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFVkJRVVVzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUXl4TFFVRkxMRVZCUVVNc1JVRkJSU3haUVVGRExFTkJRVU1zVFVGQlRTeEZRVU53Uml4dFFrRkJVU3hEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUXk5Q0xFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdRMEZEU2p0QlFUZENSQ3h2UTBFMlFrTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuZXhwb3J0cy5CdXR0b25TeW1ib2xzID0ge1xuICAgIGNyb3NzOiB7IHN5bTogJyZ0aW1lczsnIH0sXG4gICAgbWludXM6IHsgc3ltOiAnJm1pbnVzOycgfSxcbiAgICBwbHVzOiB7IHN5bTogJysnIH0sXG4gICAgZExlZnQ6IHsgc3ltOiAnJmxhcXVvOycgfSxcbiAgICBkUmlnaHQ6IHsgc3ltOiAnJnJhcXVvOycgfSxcbiAgICBsZWZ0OiB7IHN5bTogJyZsc2FxdW87JyB9LFxuICAgIHJpZ2h0OiB7IHN5bTogJyZyc2FxdW87JyB9LFxuICAgIGxlZnRUcmk6IHsgc3ltOiAnJmx0cmlmOycgfSxcbiAgICByaWdodFRyaTogeyBzeW06ICcmcnRyaWY7JyB9LFxuICAgIHVwVHJpOiB7IHN5bTogJyZ1dHJpZjsnIH0sXG4gICAgZG93blRyaTogeyBzeW06ICcmZHRyaWY7JyB9LFxuICAgIHVwOiB7IHN5bTogJyZhbmQ7JyB9LFxuICAgIGRvd246IHsgc3ltOiAnJm9yOycgfSxcbiAgICBsQXJyb3c6IHsgc3ltOiAnJmxhcnI7JyB9LFxuICAgIHJBcnJvdzogeyBzeW06ICcmcmFycjsnIH0sXG4gICAgdUFycm93OiB7IHN5bTogJyZ1YXJyOycgfSxcbiAgICBkQXJyb3c6IHsgc3ltOiAnJmRhcnI7JyB9LFxuICAgIGVtcHR5OiB7IHN5bTogJyYjOTY3NTsnIH0sXG4gICAgZW1wdHlTbGFzaDogeyBzeW06ICcmZW1wdHk7JyB9LFxuICAgIG9TbGFzaDogeyBzeW06ICcmb3NsYXNoOycgfSxcbiAgICBvOiB7IHN5bTogJyZvbWljcm9uOycgfSxcbiAgICBsaW5lczM6IHsgc3ltOiAnJmVxdWl2OycgfSxcbiAgICBzdW06IHsgc3ltOiAnJlNpZ21hOycgfSxcbiAgICBlbGxpcHNpczogeyBzeW06ICcmaGVsbGlwOycgfSxcbiAgICB2ZXJ0RWxsaXBzOiB7IHN5bTogJyYjODI4NTsnIH0sXG4gICAgYnVsbGV0OiB7IHN5bTogJyZidWxsOycgfSxcbiAgICBlbnRlcjogeyBzeW06ICcmY3JhcnI7JyB9LFxuICAgIGFnYWluOiB7IHN5bTogJyYjODYzNTsnIH0sXG4gICAgc3RhcnQ6IHsgc3ltOiAnJiM4Njg5OycgfSxcbiAgICBlbmQ6IHsgc3ltOiAnJiM4NjkwOycgfVxufTtcbmNsYXNzIFRvb2xiYXJCdXR0b24ge1xuICAgIHN0YXRpYyBnZXRTeW1ib2wobmFtZSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5CdXR0b25TeW1ib2xzW25hbWVdID8gZXhwb3J0cy5CdXR0b25TeW1ib2xzW25hbWVdLnN5bSA6ICcnO1xuICAgIH1cbiAgICB2aWV3KG5vZGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlLmF0dHJzLnN5bWJvbHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKCcuaHMtY29ybmVyLWJ1dHRvbicsIHsgb25jbGljazogbm9kZS5hdHRycy5vbmNsaWNrIH0sIGhzbGF5b3V0XzEubS50cnVzdChub2RlLmF0dHJzLnN5bWJvbHMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoc2xheW91dF8xLm0oJy5ocy1jb3JuZXItYnV0dG9uJywgeyBvbmNsaWNrOiBub2RlLmF0dHJzLm9uY2xpY2sgfSwgbm9kZS5hdHRycy5zeW1ib2xzLm1hcCgoc3ltKSA9PiBoc2xheW91dF8xLm0udHJ1c3Qoc3ltKSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Ub29sYmFyQnV0dG9uID0gVG9vbGJhckJ1dHRvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVZHOXZiR0poY2tKMWRIUnZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5VWIyOXNZbUZ5UW5WMGRHOXVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQk1rVkJMSFZEUVVGdlF6dEJRVVYyUWl4UlFVRkJMR0ZCUVdFc1IwRkJSenRKUVVONlFpeExRVUZMTEVWQlFVOHNSVUZCUlN4SFFVRkhMRVZCUVVVc1UwRkJVeXhGUVVGRk8wbEJRemxDTEV0QlFVc3NSVUZCVHl4RlFVRkZMRWRCUVVjc1JVRkJSU3hUUVVGVExFVkJRVU03U1VGRE4wSXNTVUZCU1N4RlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlF6dEpRVU4yUWl4TFFVRkxMRVZCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzVTBGQlV5eEZRVUZETzBsQlF6ZENMRTFCUVUwc1JVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeFRRVUZUTEVWQlFVTTdTVUZETjBJc1NVRkJTU3hGUVVGUkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEZWQlFWVXNSVUZCUXp0SlFVTTVRaXhMUVVGTExFVkJRVThzUlVGQlJTeEhRVUZITEVWQlFVVXNWVUZCVlN4RlFVRkRPMGxCUXpsQ0xFOUJRVThzUlVGQlN5eEZRVUZGTEVkQlFVY3NSVUZCUlN4VFFVRlRMRVZCUVVNN1NVRkROMElzVVVGQlVTeEZRVUZKTEVWQlFVVXNSMEZCUnl4RlFVRkZMRk5CUVZNc1JVRkJRenRKUVVNM1FpeExRVUZMTEVWQlFVOHNSVUZCUlN4SFFVRkhMRVZCUVVVc1UwRkJVeXhGUVVGRE8wbEJRemRDTEU5QlFVOHNSVUZCU3l4RlFVRkZMRWRCUVVjc1JVRkJSU3hUUVVGVExFVkJRVU03U1VGRE4wSXNSVUZCUlN4RlFVRlZMRVZCUVVVc1IwRkJSeXhGUVVGRkxFOUJRVThzUlVGQlF6dEpRVU16UWl4SlFVRkpMRVZCUVZFc1JVRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeEZRVUZETzBsQlF6RkNMRTFCUVUwc1JVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeFJRVUZSTEVWQlFVTTdTVUZETlVJc1RVRkJUU3hGUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEZGQlFWRXNSVUZCUXp0SlFVTTFRaXhOUVVGTkxFVkJRVTBzUlVGQlJTeEhRVUZITEVWQlFVVXNVVUZCVVN4RlFVRkRPMGxCUXpWQ0xFMUJRVTBzUlVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4UlFVRlJMRVZCUVVNN1NVRkROVUlzUzBGQlN5eEZRVUZQTEVWQlFVVXNSMEZCUnl4RlFVRkZMRk5CUVZNc1JVRkJRenRKUVVNM1FpeFZRVUZWTEVWQlFVVXNSVUZCUlN4SFFVRkhMRVZCUVVVc1UwRkJVeXhGUVVGRE8wbEJRemRDTEUxQlFVMHNSVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hWUVVGVkxFVkJRVU03U1VGRE9VSXNRMEZCUXl4RlFVRlhMRVZCUVVVc1IwRkJSeXhGUVVGRkxGZEJRVmNzUlVGQlF6dEpRVU12UWl4TlFVRk5MRVZCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzVTBGQlV5eEZRVUZETzBsQlF6ZENMRWRCUVVjc1JVRkJVeXhGUVVGRkxFZEJRVWNzUlVGQlJTeFRRVUZUTEVWQlFVTTdTVUZETjBJc1VVRkJVU3hGUVVGSkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEZWQlFWVXNSVUZCUXp0SlFVTTVRaXhWUVVGVkxFVkJRVVVzUlVGQlJTeEhRVUZITEVWQlFVVXNVMEZCVXl4RlFVRkRPMGxCUXpkQ0xFMUJRVTBzUlVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4UlFVRlJMRVZCUVVNN1NVRkROVUlzUzBGQlN5eEZRVUZQTEVWQlFVVXNSMEZCUnl4RlFVRkZMRk5CUVZNc1JVRkJRenRKUVVNM1FpeExRVUZMTEVWQlFVOHNSVUZCUlN4SFFVRkhMRVZCUVVVc1UwRkJVeXhGUVVGRE8wbEJRemRDTEV0QlFVc3NSVUZCVHl4RlFVRkZMRWRCUVVjc1JVRkJSU3hUUVVGVExFVkJRVU03U1VGRE4wSXNSMEZCUnl4RlFVRlRMRVZCUVVVc1IwRkJSeXhGUVVGRkxGTkJRVk1zUlVGQlF6dERRVU5vUXl4RFFVRkRPMEZCUlVZc1RVRkJZU3hoUVVGaE8wbEJSWFJDTEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJWenRSUVVONFFpeFBRVUZQTEhGQ1FVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEhGQ1FVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkROMFFzUTBGQlF6dEpRVU5FTEVsQlFVa3NRMEZCUXl4SlFVRlZPMUZCUTFnc1NVRkJTU3hQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVONFF5eFBRVUZQTEZsQlFVTXNRMEZCUXl4dFFrRkJiVUlzUlVGRGVFSXNSVUZCUlN4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVWQlFVVXNSVUZETDBJc1dVRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVNNVFpeERRVUZETzFOQlEwdzdZVUZCVFR0WlFVTklMRTlCUVU4c1dVRkJReXhEUVVGRExHMUNRVUZ0UWl4RlFVTndRaXhGUVVGRkxFOUJRVThzUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVNdlFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZWTEVWQlFVVXNSVUZCUlN4RFFVRkJMRmxCUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZETVVRc1EwRkJRenRUUVVOTU8wbEJRMHdzUTBGQlF6dERRVU5LTzBGQmJFSkVMSE5EUVd0Q1F5SjkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGhzbGF5b3V0XzEgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5mdW5jdGlvbiBlbXBoYXNpemUoaXRlbSwgbWF0Y2gpIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAobWF0Y2gsICdnaScpO1xuICAgIGNvbnN0IGRlY29yYXRpb25zID0gaXRlbVxuICAgICAgICAucmVwbGFjZShyZSwgKG0pID0+IGA8Yj4ke219PC9iPmApXG4gICAgICAgIC5zcGxpdCgnPCcpXG4gICAgICAgIC5tYXAoKHMpID0+IHtcbiAgICAgICAgaWYgKHMuc3RhcnRzV2l0aCgnL2I+JykpIHtcbiAgICAgICAgICAgIHJldHVybiBoc2xheW91dF8xLm0oJ3NwYW4nLCB7IG5hbWU6IGl0ZW0gfSwgcy5zbGljZSgzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocy5zdGFydHNXaXRoKCdiPicpKSB7XG4gICAgICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKCdiJywgeyBuYW1lOiBpdGVtIH0sIHMuc2xpY2UoMikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhzbGF5b3V0XzEubSgnc3BhbicsIHsgbmFtZTogaXRlbSB9LCBzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoc2xheW91dF8xLm0oJ3NwYW4nLCBkZWNvcmF0aW9ucyk7XG59XG5jbGFzcyBHZXRMaXN0IHtcbiAgICBjb25zdHJ1Y3RvcihsaXN0LCBtYXApIHtcbiAgICAgICAgdGhpcy5saXN0ID0gW107XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGhzbGF5b3V0XzEubS5yZXF1ZXN0KHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IGxpc3QgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4gdGhpcy5jYXB0dXJlTGlzdChkYXRhLCBtYXApKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZUxpc3QobGlzdCwgbWFwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXB0dXJlTGlzdChsaXN0LCBtYXApIHtcbiAgICAgICAgdGhpcy5saXN0ID0gbWFwID8gbWFwKGxpc3QpIDogbGlzdDtcbiAgICB9XG59XG5jbGFzcyBUeXBlQWhlYWQge1xuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIG5vZGUuc3RhdGUuaW5wdXROb2RlID0gJyc7XG4gICAgICAgIG5vZGUuc3RhdGUuaGlkZVBvcGRvd24gPSB0cnVlO1xuICAgICAgICBub2RlLnN0YXRlLnZhbHVlID0gJyc7XG4gICAgICAgIG5vZGUuc3RhdGUudHlwZUFoZWFkTGlzdCA9IFtdO1xuICAgICAgICBub2RlLnN0YXRlLm9uc3VibWl0ID0gbm9kZS5hdHRycy5vbnN1Ym1pdDtcbiAgICAgICAgbm9kZS5zdGF0ZS5saXN0ID0gbm9kZS5hdHRycy5saXN0O1xuICAgIH1cbiAgICB2aWV3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgZ2wgPSBuZXcgR2V0TGlzdChub2RlLnN0YXRlLmxpc3QpO1xuICAgICAgICBjb25zdCBub3N1Ym1pdCA9ICgpID0+IGNvbnNvbGUubG9nKCdubyBzdWJtaXQgZnVuY3Rpb24gZGVmaW5lZCcpO1xuICAgICAgICBjb25zdCBzdWJtaXQgPSAodikgPT4ge1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5pbnB1dE5vZGUuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgbm9kZS5zdGF0ZS5pbnB1dE5vZGUudmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUuaGlkZVBvcGRvd24gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGUub25zdWJtaXQgPyBub2RlLnN0YXRlLm9uc3VibWl0KHYpIDogbm9zdWJtaXQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5zdGF0ZS5pbnB1dE5vZGUudmFsdWUgPSBlLnRhcmdldC5hdHRyaWJ1dGVzLm5hbWUudmFsdWU7XG4gICAgICAgICAgICAgICAgc3VibWl0KGUudGFyZ2V0LmF0dHJpYnV0ZXMubmFtZS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGlucHV0ID0gKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2RlLnN0YXRlLmlucHV0Tm9kZSA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBub2RlLnN0YXRlLnZhbHVlID0gbi52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHdpdGhpbklucHV0ID0gbmV3IFJlZ0V4cChgJHtpbnB1dH1gLCAnZ2knKTtcbiAgICAgICAgICAgIGNvbnN0IGJlZ2lubmluZ09mSW5wdXQgPSBuZXcgUmVnRXhwKGBeJHtpbnB1dH1gLCAnZ2knKTtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUudHlwZUFoZWFkTGlzdCA9IGdsLmxpc3QuZmlsdGVyKChsKSA9PiBsLm1hdGNoKHdpdGhpbklucHV0KSk7XG4gICAgICAgICAgICBuLnZhbHVlID0gbm9kZS5zdGF0ZS50eXBlQWhlYWRMaXN0LmZpbHRlcigobCkgPT4gbC5tYXRjaChiZWdpbm5pbmdPZklucHV0KSlbMF0gfHwgaW5wdXQ7XG4gICAgICAgICAgICBub2RlLnN0YXRlLmhpZGVQb3Bkb3duID0gbi52YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICBsZXQgcG9zID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgbi5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIG4udmFsdWUubGVuZ3RoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qga2V5UHJlc3NlZCA9IChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZS5zdGF0ZS5pbnB1dE5vZGUgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXQobi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlLmNvZGUgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBuLmZpcnN0Q2hpbGQuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBuLnZhbHVlID0gaW5wdXQuc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbnB1dE5vZGUgPSB7XG4gICAgICAgICAgICBjb250ZW50ZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbm9kZS5hdHRycy5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgIGF1dG9mb2N1czogbm9kZS5hdHRycy5hdXRvZm9jdXMgfHwgdHJ1ZSxcbiAgICAgICAgICAgIG9ua2V5ZG93bjoga2V5UHJlc3NlZCxcbiAgICAgICAgICAgIG9uaW5wdXQ6IGlucHV0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBoc2xheW91dF8xLm0oJy5ocy1mb3JtJywgW1xuICAgICAgICAgICAgaHNsYXlvdXRfMS5tKGBpbnB1dC5ocy10eXBlYWhlYWQtaW5wdXQke25vZGUuc3RhdGUudmFsdWUgPyAnLmhzLXR5cGVhaGVhZC12YWx1ZScgOiAnLmhzLXR5cGVhaGVhZC1wbGFjZWhvbGRlcid9YCwgaW5wdXROb2RlLCBoc2xheW91dF8xLm0udHJ1c3Qobm9kZS5zdGF0ZS52YWx1ZSA/IG5vZGUuc3RhdGUudmFsdWUgOiBub2RlLmF0dHJzLnBsYWNlaG9sZGVyKSksXG4gICAgICAgICAgICBub2RlLnN0YXRlLmhpZGVQb3Bkb3duID8gdW5kZWZpbmVkIDpcbiAgICAgICAgICAgICAgICBoc2xheW91dF8xLm0oJy5ocy10eXBlYWhlYWQtbGlzdCcsIG5vZGUuc3RhdGUudHlwZUFoZWFkTGlzdC5tYXAoKGwpID0+IGhzbGF5b3V0XzEubSgnJywgeyBvbmNsaWNrOiBzZWxlY3QgfSwgZW1waGFzaXplKGwsIG5vZGUuc3RhdGUudmFsdWUpKSkpXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVHlwZUFoZWFkID0gVHlwZUFoZWFkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVkhsd1pVRm9aV0ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwxUjVjR1ZCYUdWaFpDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVRCRFFTeDFRMEZCYjBNN1FVRkhjRU1zVTBGQlV5eFRRVUZUTEVOQlFVTXNTVUZCVnl4RlFVRkZMRXRCUVZrN1NVRkRlRU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEyNURMRTFCUVUwc1YwRkJWeXhIUVVGSExFbEJRVWs3VTBGRGJrSXNUMEZCVHl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRUUVVONFF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRPMU5CUTFZc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlVTeEZRVUZGTEVWQlFVVTdVVUZEWkN4SlFVRkpMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdXVUZEY2tJc1QwRkJUeXhaUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVWQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1JVRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNM1F6dGhRVUZOTEVsQlFVa3NRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdFpRVU16UWl4UFFVRlBMRmxCUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlF5eEpRVUZKTEVWQlFVTXNTVUZCU1N4RlFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUXpGRE8yRkJRVTA3V1VGRFNDeFBRVUZQTEZsQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeEZRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRjRU03U1VGRFRDeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTlFMRTlCUVU4c1dVRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0QlFVTnNReXhEUVVGRE8wRkJSVVFzVFVGQlRTeFBRVUZQTzBsQlMxUXNXVUZCV1N4SlFVRnZRaXhGUVVGRkxFZEJRVEpDTzFGQlNuUkVMRk5CUVVrc1IwRkJXU3hGUVVGRkxFTkJRVU03VVVGTGRFSXNTVUZCU1N4UFFVRlBMRWxCUVVrc1MwRkJTeXhSUVVGUkxFVkJRVVU3V1VGRE1VSXNXVUZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGRE8ybENRVU4wUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEZEVRN1lVRkJUVHRaUVVOSUxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJReTlDTzBsQlEwd3NRMEZCUXp0SlFWWlBMRmRCUVZjc1EwRkJReXhKUVVGVkxFVkJRVVVzUjBGQmRVSTdVVUZEYmtRc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMGxCUTNSRExFTkJRVU03UTBGVFNqdEJRVVZFTEUxQlFXRXNVMEZCVXp0SlFVTnNRaXhOUVVGTkxFTkJRVU1zU1VGQlZUdFJRVU5pTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU14UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZET1VJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTNSQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNZVUZCWVN4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNNVFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTXhReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF6dEpRVU4wUXl4RFFVRkRPMGxCUTBRc1NVRkJTU3hEUVVGRExFbEJRVlU3VVVGRFdDeE5RVUZOTEVWQlFVVXNSMEZCUnl4SlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTNoRExFMUJRVTBzVVVGQlVTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zTkVKQlFUUkNMRU5CUVVNc1EwRkJRenRSUVVOcVJTeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRk8xbEJRM2hDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRE4wVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETzFsQlF6bENMRTlCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dFJRVU53UlN4RFFVRkRMRU5CUVVNN1VVRkRSaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZPMWxCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVU3WjBKQlF5OUNMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVNMVJDeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMkZCUXpGRE8xRkJRVUVzUTBGQlF5eERRVUZETzFGQlEwZ3NUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGTExFVkJRVVVzUlVGQlJUdFpRVU53UWl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xbEJRekZETEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRla01zVFVGQlRTeFhRVUZYTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1IwRkJSeXhMUVVGTExFVkJRVVVzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTnFSQ3hOUVVGTkxHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eEZRVUZGTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRka1FzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4aFFVRmhMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNNVJTeERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWVVGQllTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRE8xbEJReTlHTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4TFFVRkhMRU5CUVVNc1EwRkJRenRaUVVNMVF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRE8xbEJRM1pDTEVOQlFVTXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU0zUXl4RFFVRkRMRU5CUVVNN1VVRkRSaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZPMWxCUTNwQ0xFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZETVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeExRVUZMTEU5QlFVOHNSVUZCUlR0blFrRkRjRUlzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVOdVFqdHBRa0ZCVFN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFdEJRVXNzVjBGQlZ5eEZRVUZGTzJkQ1FVTXZRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRGFFTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdHZRa0ZEYkVJc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU0xUWp0aFFVTktPMUZCUTB3c1EwRkJReXhEUVVGRE8xRkJRMFlzVFVGQlRTeFRRVUZUTEVkQlFVYzdXVUZEWkN4bFFVRmxMRVZCUVVNc1NVRkJTVHRaUVVOd1FpeFhRVUZYTEVWQlFVc3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWE8xbEJRM1JETEZOQlFWTXNSVUZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zU1VGQlNTeEpRVUZKTzFsQlF6VkRMRk5CUVZNc1JVRkJUeXhWUVVGVk8xbEJRekZDTEU5QlFVOHNSVUZCVXl4TFFVRkxPMU5CUTNoQ0xFTkJRVU03VVVGRlJpeFBRVUZQTEZsQlFVTXNRMEZCUXl4VlFVRlZMRVZCUVVVN1dVRkRha0lzV1VGQlF5eERRVUZETERKQ1FVRXlRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUVN4RFFVRkRMRU5CUVVFc2NVSkJRWEZDTEVOQlFVTXNRMEZCUXl4RFFVRkRMREpDUVVFeVFpeEZRVUZGTEVWQlF5OUdMRk5CUVZNc1JVRkRWQ3haUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGQkxFTkJRVU1zUTBGQlFTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkRkRVU3V1VGRFJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJRU3hEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdaMEpCUXk5Q0xGbEJRVU1zUTBGQlF5eHZRa0ZCYjBJc1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGUkxFVkJRVVVzUlVGQlJTeERRVU01UkN4WlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzVDBGQlR5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGRrVXNRMEZCUXl4RFFVRkRPMGxCUTFBc1EwRkJRenREUVVOS08wRkJOMFJFTERoQ1FUWkVReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgTWVudV8xID0gcmVxdWlyZShcIi4vTWVudVwiKTtcbmV4cG9ydHMuTWVudSA9IE1lbnVfMS5NZW51O1xudmFyIEJ1dHRvbl8xID0gcmVxdWlyZShcIi4vQnV0dG9uXCIpO1xuZXhwb3J0cy5CdXR0b24gPSBCdXR0b25fMS5CdXR0b247XG52YXIgTGFiZWxfMSA9IHJlcXVpcmUoXCIuL0xhYmVsXCIpO1xuZXhwb3J0cy5MYWJlbCA9IExhYmVsXzEuTGFiZWw7XG52YXIgU2xpZGVyXzEgPSByZXF1aXJlKFwiLi9TbGlkZXJcIik7XG5leHBvcnRzLlNsaWRlciA9IFNsaWRlcl8xLlNsaWRlcjtcbnZhciBSYWRpb0J1dHRvbl8xID0gcmVxdWlyZShcIi4vUmFkaW9CdXR0b25cIik7XG5leHBvcnRzLlJhZGlvQnV0dG9uID0gUmFkaW9CdXR0b25fMS5SYWRpb0J1dHRvbjtcbnZhciBPcHRpb25zQnV0dG9uXzEgPSByZXF1aXJlKFwiLi9PcHRpb25zQnV0dG9uXCIpO1xuZXhwb3J0cy5PcHRpb25zQnV0dG9uID0gT3B0aW9uc0J1dHRvbl8xLk9wdGlvbnNCdXR0b247XG52YXIgVG9nZ2xlQnV0dG9uXzEgPSByZXF1aXJlKFwiLi9Ub2dnbGVCdXR0b25cIik7XG5leHBvcnRzLlRvZ2dsZUJ1dHRvbiA9IFRvZ2dsZUJ1dHRvbl8xLlRvZ2dsZUJ1dHRvbjtcbnZhciBUb29sYmFyQnV0dG9uXzEgPSByZXF1aXJlKFwiLi9Ub29sYmFyQnV0dG9uXCIpO1xuZXhwb3J0cy5Ub29sYmFyQnV0dG9uID0gVG9vbGJhckJ1dHRvbl8xLlRvb2xiYXJCdXR0b247XG52YXIgVG9vbGJhckJ1dHRvbl8yID0gcmVxdWlyZShcIi4vVG9vbGJhckJ1dHRvblwiKTtcbmV4cG9ydHMuQnV0dG9uU3ltYm9scyA9IFRvb2xiYXJCdXR0b25fMi5CdXR0b25TeW1ib2xzO1xudmFyIENvbGxhcHNpYmxlXzEgPSByZXF1aXJlKFwiLi9Db2xsYXBzaWJsZVwiKTtcbmV4cG9ydHMuQ29sbGFwc2libGUgPSBDb2xsYXBzaWJsZV8xLkNvbGxhcHNpYmxlO1xudmFyIE1vZGFsXzEgPSByZXF1aXJlKFwiLi9Nb2RhbFwiKTtcbmV4cG9ydHMuTW9kYWwgPSBNb2RhbF8xLk1vZGFsO1xudmFyIFR5cGVBaGVhZF8xID0gcmVxdWlyZShcIi4vVHlwZUFoZWFkXCIpO1xuZXhwb3J0cy5UeXBlQWhlYWQgPSBUeXBlQWhlYWRfMS5UeXBlQWhlYWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZQUVN3clFrRkJjME03UVVGQk4wSXNjMEpCUVVFc1NVRkJTU3hEUVVGQk8wRkJSV0lzYlVOQlFYZERPMEZCUVM5Q0xEQkNRVUZCTEUxQlFVMHNRMEZCUVR0QlFVTm1MR2xEUVVGMVF6dEJRVUU1UWl4M1FrRkJRU3hMUVVGTExFTkJRVUU3UVVGRFpDeHRRMEZCZDBNN1FVRkJMMElzTUVKQlFVRXNUVUZCVFN4RFFVRkJPMEZCUTJZc05rTkJRVFpETzBGQlFYQkRMRzlEUVVGQkxGZEJRVmNzUTBGQlFUdEJRVU53UWl4cFJFRkJLME03UVVGQmRFTXNkME5CUVVFc1lVRkJZU3hEUVVGQk8wRkJRM1JDTEN0RFFVRTRRenRCUVVGeVF5eHpRMEZCUVN4WlFVRlpMRU5CUVVFN1FVRkRja0lzYVVSQlFTdERPMEZCUVhSRExIZERRVUZCTEdGQlFXRXNRMEZCUVR0QlFVTjBRaXhwUkVGQkswTTdRVUZCZEVNc2QwTkJRVUVzWVVGQllTeERRVUZCTzBGQlEzUkNMRFpEUVVFMlF6dEJRVUZ3UXl4dlEwRkJRU3hYUVVGWExFTkJRVUU3UVVGRGNFSXNhVU5CUVhWRE8wRkJRVGxDTEhkQ1FVRkJMRXRCUVVzc1EwRkJRVHRCUVVOa0xIbERRVUV5UXp0QlFVRnNReXhuUTBGQlFTeFRRVUZUTEVOQlFVRWlmUT09IiwiOyhmdW5jdGlvbigpIHtcblwidXNlIHN0cmljdFwiXG5mdW5jdGlvbiBWbm9kZSh0YWcsIGtleSwgYXR0cnMwLCBjaGlsZHJlbiwgdGV4dCwgZG9tKSB7XG5cdHJldHVybiB7dGFnOiB0YWcsIGtleToga2V5LCBhdHRyczogYXR0cnMwLCBjaGlsZHJlbjogY2hpbGRyZW4sIHRleHQ6IHRleHQsIGRvbTogZG9tLCBkb21TaXplOiB1bmRlZmluZWQsIHN0YXRlOiB1bmRlZmluZWQsIF9zdGF0ZTogdW5kZWZpbmVkLCBldmVudHM6IHVuZGVmaW5lZCwgaW5zdGFuY2U6IHVuZGVmaW5lZCwgc2tpcDogZmFsc2V9XG59XG5Wbm9kZS5ub3JtYWxpemUgPSBmdW5jdGlvbihub2RlKSB7XG5cdGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gVm5vZGUoXCJbXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBWbm9kZS5ub3JtYWxpemVDaGlsZHJlbihub2RlKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG5cdGlmIChub2RlICE9IG51bGwgJiYgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIpIHJldHVybiBWbm9kZShcIiNcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG5vZGUgPT09IGZhbHNlID8gXCJcIiA6IG5vZGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuXHRyZXR1cm4gbm9kZVxufVxuVm5vZGUubm9ybWFsaXplQ2hpbGRyZW4gPSBmdW5jdGlvbiBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbikge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y2hpbGRyZW5baV0gPSBWbm9kZS5ub3JtYWxpemUoY2hpbGRyZW5baV0pXG5cdH1cblx0cmV0dXJuIGNoaWxkcmVuXG59XG52YXIgc2VsZWN0b3JQYXJzZXIgPSAvKD86KF58I3xcXC4pKFteI1xcLlxcW1xcXV0rKSl8KFxcWyguKz8pKD86XFxzKj1cXHMqKFwifCd8KSgoPzpcXFxcW1wiJ1xcXV18LikqPylcXDUpP1xcXSkvZ1xudmFyIHNlbGVjdG9yQ2FjaGUgPSB7fVxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5XG5mdW5jdGlvbiBpc0VtcHR5KG9iamVjdCkge1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBpZiAoaGFzT3duLmNhbGwob2JqZWN0LCBrZXkpKSByZXR1cm4gZmFsc2Vcblx0cmV0dXJuIHRydWVcbn1cbmZ1bmN0aW9uIGNvbXBpbGVTZWxlY3RvcihzZWxlY3Rvcikge1xuXHR2YXIgbWF0Y2gsIHRhZyA9IFwiZGl2XCIsIGNsYXNzZXMgPSBbXSwgYXR0cnMgPSB7fVxuXHR3aGlsZSAobWF0Y2ggPSBzZWxlY3RvclBhcnNlci5leGVjKHNlbGVjdG9yKSkge1xuXHRcdHZhciB0eXBlID0gbWF0Y2hbMV0sIHZhbHVlID0gbWF0Y2hbMl1cblx0XHRpZiAodHlwZSA9PT0gXCJcIiAmJiB2YWx1ZSAhPT0gXCJcIikgdGFnID0gdmFsdWVcblx0XHRlbHNlIGlmICh0eXBlID09PSBcIiNcIikgYXR0cnMuaWQgPSB2YWx1ZVxuXHRcdGVsc2UgaWYgKHR5cGUgPT09IFwiLlwiKSBjbGFzc2VzLnB1c2godmFsdWUpXG5cdFx0ZWxzZSBpZiAobWF0Y2hbM11bMF0gPT09IFwiW1wiKSB7XG5cdFx0XHR2YXIgYXR0clZhbHVlID0gbWF0Y2hbNl1cblx0XHRcdGlmIChhdHRyVmFsdWUpIGF0dHJWYWx1ZSA9IGF0dHJWYWx1ZS5yZXBsYWNlKC9cXFxcKFtcIiddKS9nLCBcIiQxXCIpLnJlcGxhY2UoL1xcXFxcXFxcL2csIFwiXFxcXFwiKVxuXHRcdFx0aWYgKG1hdGNoWzRdID09PSBcImNsYXNzXCIpIGNsYXNzZXMucHVzaChhdHRyVmFsdWUpXG5cdFx0XHRlbHNlIGF0dHJzW21hdGNoWzRdXSA9IGF0dHJWYWx1ZSA9PT0gXCJcIiA/IGF0dHJWYWx1ZSA6IGF0dHJWYWx1ZSB8fCB0cnVlXG5cdFx0fVxuXHR9XG5cdGlmIChjbGFzc2VzLmxlbmd0aCA+IDApIGF0dHJzLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIilcblx0cmV0dXJuIHNlbGVjdG9yQ2FjaGVbc2VsZWN0b3JdID0ge3RhZzogdGFnLCBhdHRyczogYXR0cnN9XG59XG5mdW5jdGlvbiBleGVjU2VsZWN0b3Ioc3RhdGUsIGF0dHJzLCBjaGlsZHJlbikge1xuXHR2YXIgaGFzQXR0cnMgPSBmYWxzZSwgY2hpbGRMaXN0LCB0ZXh0XG5cdHZhciBjbGFzc05hbWUgPSBhdHRycy5jbGFzc05hbWUgfHwgYXR0cnMuY2xhc3Ncblx0aWYgKCFpc0VtcHR5KHN0YXRlLmF0dHJzKSAmJiAhaXNFbXB0eShhdHRycykpIHtcblx0XHR2YXIgbmV3QXR0cnMgPSB7fVxuXHRcdGZvcih2YXIga2V5IGluIGF0dHJzKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXR0cnMsIGtleSkpIHtcblx0XHRcdFx0bmV3QXR0cnNba2V5XSA9IGF0dHJzW2tleV1cblx0XHRcdH1cblx0XHR9XG5cdFx0YXR0cnMgPSBuZXdBdHRyc1xuXHR9XG5cdGZvciAodmFyIGtleSBpbiBzdGF0ZS5hdHRycykge1xuXHRcdGlmIChoYXNPd24uY2FsbChzdGF0ZS5hdHRycywga2V5KSkge1xuXHRcdFx0YXR0cnNba2V5XSA9IHN0YXRlLmF0dHJzW2tleV1cblx0XHR9XG5cdH1cblx0aWYgKGNsYXNzTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKGF0dHJzLmNsYXNzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGF0dHJzLmNsYXNzID0gdW5kZWZpbmVkXG5cdFx0XHRhdHRycy5jbGFzc05hbWUgPSBjbGFzc05hbWVcblx0XHR9XG5cdFx0aWYgKHN0YXRlLmF0dHJzLmNsYXNzTmFtZSAhPSBudWxsKSB7XG5cdFx0XHRhdHRycy5jbGFzc05hbWUgPSBzdGF0ZS5hdHRycy5jbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZVxuXHRcdH1cblx0fVxuXHRmb3IgKHZhciBrZXkgaW4gYXR0cnMpIHtcblx0XHRpZiAoaGFzT3duLmNhbGwoYXR0cnMsIGtleSkgJiYga2V5ICE9PSBcImtleVwiKSB7XG5cdFx0XHRoYXNBdHRycyA9IHRydWVcblx0XHRcdGJyZWFrXG5cdFx0fVxuXHR9XG5cdGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGRyZW5bMF0gIT0gbnVsbCAmJiBjaGlsZHJlblswXS50YWcgPT09IFwiI1wiKSB7XG5cdFx0dGV4dCA9IGNoaWxkcmVuWzBdLmNoaWxkcmVuXG5cdH0gZWxzZSB7XG5cdFx0Y2hpbGRMaXN0ID0gY2hpbGRyZW5cblx0fVxuXHRyZXR1cm4gVm5vZGUoc3RhdGUudGFnLCBhdHRycy5rZXksIGhhc0F0dHJzID8gYXR0cnMgOiB1bmRlZmluZWQsIGNoaWxkTGlzdCwgdGV4dClcbn1cbmZ1bmN0aW9uIGh5cGVyc2NyaXB0KHNlbGVjdG9yKSB7XG5cdC8vIEJlY2F1c2Ugc2xvcHB5IG1vZGUgc3Vja3Ncblx0dmFyIGF0dHJzID0gYXJndW1lbnRzWzFdLCBzdGFydCA9IDIsIGNoaWxkcmVuXG5cdGlmIChzZWxlY3RvciA9PSBudWxsIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2Ygc2VsZWN0b3IgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygc2VsZWN0b3IudmlldyAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJUaGUgc2VsZWN0b3IgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYSBjb21wb25lbnQuXCIpO1xuXHR9XG5cdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YXIgY2FjaGVkID0gc2VsZWN0b3JDYWNoZVtzZWxlY3Rvcl0gfHwgY29tcGlsZVNlbGVjdG9yKHNlbGVjdG9yKVxuXHR9XG5cdGlmIChhdHRycyA9PSBudWxsKSB7XG5cdFx0YXR0cnMgPSB7fVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBhdHRycyAhPT0gXCJvYmplY3RcIiB8fCBhdHRycy50YWcgIT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGF0dHJzKSkge1xuXHRcdGF0dHJzID0ge31cblx0XHRzdGFydCA9IDFcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gc3RhcnQgKyAxKSB7XG5cdFx0Y2hpbGRyZW4gPSBhcmd1bWVudHNbc3RhcnRdXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dXG5cdH0gZWxzZSB7XG5cdFx0Y2hpbGRyZW4gPSBbXVxuXHRcdHdoaWxlIChzdGFydCA8IGFyZ3VtZW50cy5sZW5ndGgpIGNoaWxkcmVuLnB1c2goYXJndW1lbnRzW3N0YXJ0KytdKVxuXHR9XG5cdHZhciBub3JtYWxpemVkID0gVm5vZGUubm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pXG5cdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gZXhlY1NlbGVjdG9yKGNhY2hlZCwgYXR0cnMsIG5vcm1hbGl6ZWQpXG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFZub2RlKHNlbGVjdG9yLCBhdHRycy5rZXksIGF0dHJzLCBub3JtYWxpemVkKVxuXHR9XG59XG5oeXBlcnNjcmlwdC50cnVzdCA9IGZ1bmN0aW9uKGh0bWwpIHtcblx0aWYgKGh0bWwgPT0gbnVsbCkgaHRtbCA9IFwiXCJcblx0cmV0dXJuIFZub2RlKFwiPFwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaHRtbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG59XG5oeXBlcnNjcmlwdC5mcmFnbWVudCA9IGZ1bmN0aW9uKGF0dHJzMSwgY2hpbGRyZW4pIHtcblx0cmV0dXJuIFZub2RlKFwiW1wiLCBhdHRyczEua2V5LCBhdHRyczEsIFZub2RlLm5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG59XG52YXIgbSA9IGh5cGVyc2NyaXB0XG4vKiogQGNvbnN0cnVjdG9yICovXG52YXIgUHJvbWlzZVBvbHlmaWxsID0gZnVuY3Rpb24oZXhlY3V0b3IpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2VQb2x5ZmlsbCkpIHRocm93IG5ldyBFcnJvcihcIlByb21pc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCBgbmV3YFwiKVxuXHRpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb25cIilcblx0dmFyIHNlbGYgPSB0aGlzLCByZXNvbHZlcnMgPSBbXSwgcmVqZWN0b3JzID0gW10sIHJlc29sdmVDdXJyZW50ID0gaGFuZGxlcihyZXNvbHZlcnMsIHRydWUpLCByZWplY3RDdXJyZW50ID0gaGFuZGxlcihyZWplY3RvcnMsIGZhbHNlKVxuXHR2YXIgaW5zdGFuY2UgPSBzZWxmLl9pbnN0YW5jZSA9IHtyZXNvbHZlcnM6IHJlc29sdmVycywgcmVqZWN0b3JzOiByZWplY3RvcnN9XG5cdHZhciBjYWxsQXN5bmMgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSBcImZ1bmN0aW9uXCIgPyBzZXRJbW1lZGlhdGUgOiBzZXRUaW1lb3V0XG5cdGZ1bmN0aW9uIGhhbmRsZXIobGlzdCwgc2hvdWxkQWJzb3JiKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGV4ZWN1dGUodmFsdWUpIHtcblx0XHRcdHZhciB0aGVuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoc2hvdWxkQWJzb3JiICYmIHZhbHVlICE9IG51bGwgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikgJiYgdHlwZW9mICh0aGVuID0gdmFsdWUudGhlbikgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gc2VsZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgdy8gaXRzZWxmXCIpXG5cdFx0XHRcdFx0ZXhlY3V0ZU9uY2UodGhlbi5iaW5kKHZhbHVlKSlcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRjYWxsQXN5bmMoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIXNob3VsZEFic29yYiAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkgY29uc29sZS5lcnJvcihcIlBvc3NpYmxlIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbjpcIiwgdmFsdWUpXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIGxpc3RbaV0odmFsdWUpXG5cdFx0XHRcdFx0XHRyZXNvbHZlcnMubGVuZ3RoID0gMCwgcmVqZWN0b3JzLmxlbmd0aCA9IDBcblx0XHRcdFx0XHRcdGluc3RhbmNlLnN0YXRlID0gc2hvdWxkQWJzb3JiXG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5yZXRyeSA9IGZ1bmN0aW9uKCkge2V4ZWN1dGUodmFsdWUpfVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdEN1cnJlbnQoZSlcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gZXhlY3V0ZU9uY2UodGhlbikge1xuXHRcdHZhciBydW5zID0gMFxuXHRcdGZ1bmN0aW9uIHJ1bihmbikge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRcdGlmIChydW5zKysgPiAwKSByZXR1cm5cblx0XHRcdFx0Zm4odmFsdWUpXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBvbmVycm9yID0gcnVuKHJlamVjdEN1cnJlbnQpXG5cdFx0dHJ5IHt0aGVuKHJ1bihyZXNvbHZlQ3VycmVudCksIG9uZXJyb3IpfSBjYXRjaCAoZSkge29uZXJyb3IoZSl9XG5cdH1cblx0ZXhlY3V0ZU9uY2UoZXhlY3V0b3IpXG59XG5Qcm9taXNlUG9seWZpbGwucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3Rpb24pIHtcblx0dmFyIHNlbGYgPSB0aGlzLCBpbnN0YW5jZSA9IHNlbGYuX2luc3RhbmNlXG5cdGZ1bmN0aW9uIGhhbmRsZShjYWxsYmFjaywgbGlzdCwgbmV4dCwgc3RhdGUpIHtcblx0XHRsaXN0LnB1c2goZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgbmV4dCh2YWx1ZSlcblx0XHRcdGVsc2UgdHJ5IHtyZXNvbHZlTmV4dChjYWxsYmFjayh2YWx1ZSkpfSBjYXRjaCAoZSkge2lmIChyZWplY3ROZXh0KSByZWplY3ROZXh0KGUpfVxuXHRcdH0pXG5cdFx0aWYgKHR5cGVvZiBpbnN0YW5jZS5yZXRyeSA9PT0gXCJmdW5jdGlvblwiICYmIHN0YXRlID09PSBpbnN0YW5jZS5zdGF0ZSkgaW5zdGFuY2UucmV0cnkoKVxuXHR9XG5cdHZhciByZXNvbHZlTmV4dCwgcmVqZWN0TmV4dFxuXHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlUG9seWZpbGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7cmVzb2x2ZU5leHQgPSByZXNvbHZlLCByZWplY3ROZXh0ID0gcmVqZWN0fSlcblx0aGFuZGxlKG9uRnVsZmlsbGVkLCBpbnN0YW5jZS5yZXNvbHZlcnMsIHJlc29sdmVOZXh0LCB0cnVlKSwgaGFuZGxlKG9uUmVqZWN0aW9uLCBpbnN0YW5jZS5yZWplY3RvcnMsIHJlamVjdE5leHQsIGZhbHNlKVxuXHRyZXR1cm4gcHJvbWlzZVxufVxuUHJvbWlzZVBvbHlmaWxsLnByb3RvdHlwZS5jYXRjaCA9IGZ1bmN0aW9uKG9uUmVqZWN0aW9uKSB7XG5cdHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pXG59XG5Qcm9taXNlUG9seWZpbGwucmVzb2x2ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2VQb2x5ZmlsbCkgcmV0dXJuIHZhbHVlXG5cdHJldHVybiBuZXcgUHJvbWlzZVBvbHlmaWxsKGZ1bmN0aW9uKHJlc29sdmUpIHtyZXNvbHZlKHZhbHVlKX0pXG59XG5Qcm9taXNlUG9seWZpbGwucmVqZWN0ID0gZnVuY3Rpb24odmFsdWUpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlUG9seWZpbGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7cmVqZWN0KHZhbHVlKX0pXG59XG5Qcm9taXNlUG9seWZpbGwuYWxsID0gZnVuY3Rpb24obGlzdCkge1xuXHRyZXR1cm4gbmV3IFByb21pc2VQb2x5ZmlsbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHR2YXIgdG90YWwgPSBsaXN0Lmxlbmd0aCwgY291bnQgPSAwLCB2YWx1ZXMgPSBbXVxuXHRcdGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkgcmVzb2x2ZShbXSlcblx0XHRlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0KGZ1bmN0aW9uKGkpIHtcblx0XHRcdFx0ZnVuY3Rpb24gY29uc3VtZSh2YWx1ZSkge1xuXHRcdFx0XHRcdGNvdW50Kytcblx0XHRcdFx0XHR2YWx1ZXNbaV0gPSB2YWx1ZVxuXHRcdFx0XHRcdGlmIChjb3VudCA9PT0gdG90YWwpIHJlc29sdmUodmFsdWVzKVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChsaXN0W2ldICE9IG51bGwgJiYgKHR5cGVvZiBsaXN0W2ldID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBsaXN0W2ldID09PSBcImZ1bmN0aW9uXCIpICYmIHR5cGVvZiBsaXN0W2ldLnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdGxpc3RbaV0udGhlbihjb25zdW1lLCByZWplY3QpXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBjb25zdW1lKGxpc3RbaV0pXG5cdFx0XHR9KShpKVxuXHRcdH1cblx0fSlcbn1cblByb21pc2VQb2x5ZmlsbC5yYWNlID0gZnVuY3Rpb24obGlzdCkge1xuXHRyZXR1cm4gbmV3IFByb21pc2VQb2x5ZmlsbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxpc3RbaV0udGhlbihyZXNvbHZlLCByZWplY3QpXG5cdFx0fVxuXHR9KVxufVxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0aWYgKHR5cGVvZiB3aW5kb3cuUHJvbWlzZSA9PT0gXCJ1bmRlZmluZWRcIikgd2luZG93LlByb21pc2UgPSBQcm9taXNlUG9seWZpbGxcblx0dmFyIFByb21pc2VQb2x5ZmlsbCA9IHdpbmRvdy5Qcm9taXNlXG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWwuUHJvbWlzZSA9PT0gXCJ1bmRlZmluZWRcIikgZ2xvYmFsLlByb21pc2UgPSBQcm9taXNlUG9seWZpbGxcblx0dmFyIFByb21pc2VQb2x5ZmlsbCA9IGdsb2JhbC5Qcm9taXNlXG59IGVsc2Uge1xufVxudmFyIGJ1aWxkUXVlcnlTdHJpbmcgPSBmdW5jdGlvbihvYmplY3QpIHtcblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gXCJcIlxuXHR2YXIgYXJncyA9IFtdXG5cdGZvciAodmFyIGtleTAgaW4gb2JqZWN0KSB7XG5cdFx0ZGVzdHJ1Y3R1cmUoa2V5MCwgb2JqZWN0W2tleTBdKVxuXHR9XG5cdHJldHVybiBhcmdzLmpvaW4oXCImXCIpXG5cdGZ1bmN0aW9uIGRlc3RydWN0dXJlKGtleTAsIHZhbHVlKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGRlc3RydWN0dXJlKGtleTAgKyBcIltcIiArIGkgKyBcIl1cIiwgdmFsdWVbaV0pXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcblx0XHRcdGZvciAodmFyIGkgaW4gdmFsdWUpIHtcblx0XHRcdFx0ZGVzdHJ1Y3R1cmUoa2V5MCArIFwiW1wiICsgaSArIFwiXVwiLCB2YWx1ZVtpXSlcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSBhcmdzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGtleTApICsgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IFwiXCIgPyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgOiBcIlwiKSlcblx0fVxufVxudmFyIEZJTEVfUFJPVE9DT0xfUkVHRVggPSBuZXcgUmVnRXhwKFwiXmZpbGU6Ly9cIiwgXCJpXCIpXG52YXIgXzggPSBmdW5jdGlvbigkd2luZG93LCBQcm9taXNlKSB7XG5cdHZhciBjYWxsYmFja0NvdW50ID0gMFxuXHR2YXIgb25jb21wbGV0aW9uXG5cdGZ1bmN0aW9uIHNldENvbXBsZXRpb25DYWxsYmFjayhjYWxsYmFjaykge29uY29tcGxldGlvbiA9IGNhbGxiYWNrfVxuXHRmdW5jdGlvbiBmaW5hbGl6ZXIoKSB7XG5cdFx0dmFyIGNvdW50ID0gMFxuXHRcdGZ1bmN0aW9uIGNvbXBsZXRlKCkge2lmICgtLWNvdW50ID09PSAwICYmIHR5cGVvZiBvbmNvbXBsZXRpb24gPT09IFwiZnVuY3Rpb25cIikgb25jb21wbGV0aW9uKCl9XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGZpbmFsaXplKHByb21pc2UwKSB7XG5cdFx0XHR2YXIgdGhlbjAgPSBwcm9taXNlMC50aGVuXG5cdFx0XHRwcm9taXNlMC50aGVuID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNvdW50Kytcblx0XHRcdFx0dmFyIG5leHQgPSB0aGVuMC5hcHBseShwcm9taXNlMCwgYXJndW1lbnRzKVxuXHRcdFx0XHRuZXh0LnRoZW4oY29tcGxldGUsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRjb21wbGV0ZSgpXG5cdFx0XHRcdFx0aWYgKGNvdW50ID09PSAwKSB0aHJvdyBlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdHJldHVybiBmaW5hbGl6ZShuZXh0KVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByb21pc2UwXG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZShhcmdzLCBleHRyYSkge1xuXHRcdGlmICh0eXBlb2YgYXJncyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dmFyIHVybCA9IGFyZ3Ncblx0XHRcdGFyZ3MgPSBleHRyYSB8fCB7fVxuXHRcdFx0aWYgKGFyZ3MudXJsID09IG51bGwpIGFyZ3MudXJsID0gdXJsXG5cdFx0fVxuXHRcdHJldHVybiBhcmdzXG5cdH1cblx0ZnVuY3Rpb24gcmVxdWVzdChhcmdzLCBleHRyYSkge1xuXHRcdHZhciBmaW5hbGl6ZSA9IGZpbmFsaXplcigpXG5cdFx0YXJncyA9IG5vcm1hbGl6ZShhcmdzLCBleHRyYSlcblx0XHR2YXIgcHJvbWlzZTAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGlmIChhcmdzLm1ldGhvZCA9PSBudWxsKSBhcmdzLm1ldGhvZCA9IFwiR0VUXCJcblx0XHRcdGFyZ3MubWV0aG9kID0gYXJncy5tZXRob2QudG9VcHBlckNhc2UoKVxuXHRcdFx0dmFyIHVzZUJvZHkgPSAoYXJncy5tZXRob2QgPT09IFwiR0VUXCIgfHwgYXJncy5tZXRob2QgPT09IFwiVFJBQ0VcIikgPyBmYWxzZSA6ICh0eXBlb2YgYXJncy51c2VCb2R5ID09PSBcImJvb2xlYW5cIiA/IGFyZ3MudXNlQm9keSA6IHRydWUpXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3Muc2VyaWFsaXplICE9PSBcImZ1bmN0aW9uXCIpIGFyZ3Muc2VyaWFsaXplID0gdHlwZW9mIEZvcm1EYXRhICE9PSBcInVuZGVmaW5lZFwiICYmIGFyZ3MuZGF0YSBpbnN0YW5jZW9mIEZvcm1EYXRhID8gZnVuY3Rpb24odmFsdWUpIHtyZXR1cm4gdmFsdWV9IDogSlNPTi5zdHJpbmdpZnlcblx0XHRcdGlmICh0eXBlb2YgYXJncy5kZXNlcmlhbGl6ZSAhPT0gXCJmdW5jdGlvblwiKSBhcmdzLmRlc2VyaWFsaXplID0gZGVzZXJpYWxpemVcblx0XHRcdGlmICh0eXBlb2YgYXJncy5leHRyYWN0ICE9PSBcImZ1bmN0aW9uXCIpIGFyZ3MuZXh0cmFjdCA9IGV4dHJhY3Rcblx0XHRcdGFyZ3MudXJsID0gaW50ZXJwb2xhdGUoYXJncy51cmwsIGFyZ3MuZGF0YSlcblx0XHRcdGlmICh1c2VCb2R5KSBhcmdzLmRhdGEgPSBhcmdzLnNlcmlhbGl6ZShhcmdzLmRhdGEpXG5cdFx0XHRlbHNlIGFyZ3MudXJsID0gYXNzZW1ibGUoYXJncy51cmwsIGFyZ3MuZGF0YSlcblx0XHRcdHZhciB4aHIgPSBuZXcgJHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpLFxuXHRcdFx0XHRhYm9ydGVkID0gZmFsc2UsXG5cdFx0XHRcdF9hYm9ydCA9IHhoci5hYm9ydFxuXHRcdFx0eGhyLmFib3J0ID0gZnVuY3Rpb24gYWJvcnQoKSB7XG5cdFx0XHRcdGFib3J0ZWQgPSB0cnVlXG5cdFx0XHRcdF9hYm9ydC5jYWxsKHhocilcblx0XHRcdH1cblx0XHRcdHhoci5vcGVuKGFyZ3MubWV0aG9kLCBhcmdzLnVybCwgdHlwZW9mIGFyZ3MuYXN5bmMgPT09IFwiYm9vbGVhblwiID8gYXJncy5hc3luYyA6IHRydWUsIHR5cGVvZiBhcmdzLnVzZXIgPT09IFwic3RyaW5nXCIgPyBhcmdzLnVzZXIgOiB1bmRlZmluZWQsIHR5cGVvZiBhcmdzLnBhc3N3b3JkID09PSBcInN0cmluZ1wiID8gYXJncy5wYXNzd29yZCA6IHVuZGVmaW5lZClcblx0XHRcdGlmIChhcmdzLnNlcmlhbGl6ZSA9PT0gSlNPTi5zdHJpbmdpZnkgJiYgdXNlQm9keSAmJiAhKGFyZ3MuaGVhZGVycyAmJiBhcmdzLmhlYWRlcnMuaGFzT3duUHJvcGVydHkoXCJDb250ZW50LVR5cGVcIikpKSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiKVxuXHRcdFx0fVxuXHRcdFx0aWYgKGFyZ3MuZGVzZXJpYWxpemUgPT09IGRlc2VyaWFsaXplICYmICEoYXJncy5oZWFkZXJzICYmIGFyZ3MuaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShcIkFjY2VwdFwiKSkpIHtcblx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoXCJBY2NlcHRcIiwgXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0LypcIilcblx0XHRcdH1cblx0XHRcdGlmIChhcmdzLndpdGhDcmVkZW50aWFscykgeGhyLndpdGhDcmVkZW50aWFscyA9IGFyZ3Mud2l0aENyZWRlbnRpYWxzXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJncy5oZWFkZXJzKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChhcmdzLmhlYWRlcnMsIGtleSkpIHtcblx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBhcmdzLmhlYWRlcnNba2V5XSlcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgYXJncy5jb25maWcgPT09IFwiZnVuY3Rpb25cIikgeGhyID0gYXJncy5jb25maWcoeGhyLCBhcmdzKSB8fCB4aHJcblx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gRG9uJ3QgdGhyb3cgZXJyb3JzIG9uIHhoci5hYm9ydCgpLlxuXHRcdFx0XHRpZihhYm9ydGVkKSByZXR1cm5cblx0XHRcdFx0aWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHZhciByZXNwb25zZSA9IChhcmdzLmV4dHJhY3QgIT09IGV4dHJhY3QpID8gYXJncy5leHRyYWN0KHhociwgYXJncykgOiBhcmdzLmRlc2VyaWFsaXplKGFyZ3MuZXh0cmFjdCh4aHIsIGFyZ3MpKVxuXHRcdFx0XHRcdFx0aWYgKCh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwKSB8fCB4aHIuc3RhdHVzID09PSAzMDQgfHwgRklMRV9QUk9UT0NPTF9SRUdFWC50ZXN0KGFyZ3MudXJsKSkge1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKGNhc3QoYXJncy50eXBlLCByZXNwb25zZSkpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGVycm9yID0gbmV3IEVycm9yKHhoci5yZXNwb25zZVRleHQpXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiByZXNwb25zZSkgZXJyb3Jba2V5XSA9IHJlc3BvbnNlW2tleV1cblx0XHRcdFx0XHRcdFx0cmVqZWN0KGVycm9yKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KGUpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodXNlQm9keSAmJiAoYXJncy5kYXRhICE9IG51bGwpKSB4aHIuc2VuZChhcmdzLmRhdGEpXG5cdFx0XHRlbHNlIHhoci5zZW5kKClcblx0XHR9KVxuXHRcdHJldHVybiBhcmdzLmJhY2tncm91bmQgPT09IHRydWUgPyBwcm9taXNlMCA6IGZpbmFsaXplKHByb21pc2UwKVxuXHR9XG5cdGZ1bmN0aW9uIGpzb25wKGFyZ3MsIGV4dHJhKSB7XG5cdFx0dmFyIGZpbmFsaXplID0gZmluYWxpemVyKClcblx0XHRhcmdzID0gbm9ybWFsaXplKGFyZ3MsIGV4dHJhKVxuXHRcdHZhciBwcm9taXNlMCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0dmFyIGNhbGxiYWNrTmFtZSA9IGFyZ3MuY2FsbGJhY2tOYW1lIHx8IFwiX21pdGhyaWxfXCIgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxZTE2KSArIFwiX1wiICsgY2FsbGJhY2tDb3VudCsrXG5cdFx0XHR2YXIgc2NyaXB0ID0gJHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpXG5cdFx0XHQkd2luZG93W2NhbGxiYWNrTmFtZV0gPSBmdW5jdGlvbihkYXRhKSB7XG5cdFx0XHRcdHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdClcblx0XHRcdFx0cmVzb2x2ZShjYXN0KGFyZ3MudHlwZSwgZGF0YSkpXG5cdFx0XHRcdGRlbGV0ZSAkd2luZG93W2NhbGxiYWNrTmFtZV1cblx0XHRcdH1cblx0XHRcdHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdClcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIkpTT05QIHJlcXVlc3QgZmFpbGVkXCIpKVxuXHRcdFx0XHRkZWxldGUgJHdpbmRvd1tjYWxsYmFja05hbWVdXG5cdFx0XHR9XG5cdFx0XHRpZiAoYXJncy5kYXRhID09IG51bGwpIGFyZ3MuZGF0YSA9IHt9XG5cdFx0XHRhcmdzLnVybCA9IGludGVycG9sYXRlKGFyZ3MudXJsLCBhcmdzLmRhdGEpXG5cdFx0XHRhcmdzLmRhdGFbYXJncy5jYWxsYmFja0tleSB8fCBcImNhbGxiYWNrXCJdID0gY2FsbGJhY2tOYW1lXG5cdFx0XHRzY3JpcHQuc3JjID0gYXNzZW1ibGUoYXJncy51cmwsIGFyZ3MuZGF0YSlcblx0XHRcdCR3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdClcblx0XHR9KVxuXHRcdHJldHVybiBhcmdzLmJhY2tncm91bmQgPT09IHRydWU/IHByb21pc2UwIDogZmluYWxpemUocHJvbWlzZTApXG5cdH1cblx0ZnVuY3Rpb24gaW50ZXJwb2xhdGUodXJsLCBkYXRhKSB7XG5cdFx0aWYgKGRhdGEgPT0gbnVsbCkgcmV0dXJuIHVybFxuXHRcdHZhciB0b2tlbnMgPSB1cmwubWF0Y2goLzpbXlxcL10rL2dpKSB8fCBbXVxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIga2V5ID0gdG9rZW5zW2ldLnNsaWNlKDEpXG5cdFx0XHRpZiAoZGF0YVtrZXldICE9IG51bGwpIHtcblx0XHRcdFx0dXJsID0gdXJsLnJlcGxhY2UodG9rZW5zW2ldLCBkYXRhW2tleV0pXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1cmxcblx0fVxuXHRmdW5jdGlvbiBhc3NlbWJsZSh1cmwsIGRhdGEpIHtcblx0XHR2YXIgcXVlcnlzdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nKGRhdGEpXG5cdFx0aWYgKHF1ZXJ5c3RyaW5nICE9PSBcIlwiKSB7XG5cdFx0XHR2YXIgcHJlZml4ID0gdXJsLmluZGV4T2YoXCI/XCIpIDwgMCA/IFwiP1wiIDogXCImXCJcblx0XHRcdHVybCArPSBwcmVmaXggKyBxdWVyeXN0cmluZ1xuXHRcdH1cblx0XHRyZXR1cm4gdXJsXG5cdH1cblx0ZnVuY3Rpb24gZGVzZXJpYWxpemUoZGF0YSkge1xuXHRcdHRyeSB7cmV0dXJuIGRhdGEgIT09IFwiXCIgPyBKU09OLnBhcnNlKGRhdGEpIDogbnVsbH1cblx0XHRjYXRjaCAoZSkge3Rocm93IG5ldyBFcnJvcihkYXRhKX1cblx0fVxuXHRmdW5jdGlvbiBleHRyYWN0KHhocikge3JldHVybiB4aHIucmVzcG9uc2VUZXh0fVxuXHRmdW5jdGlvbiBjYXN0KHR5cGUwLCBkYXRhKSB7XG5cdFx0aWYgKHR5cGVvZiB0eXBlMCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRkYXRhW2ldID0gbmV3IHR5cGUwKGRhdGFbaV0pXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2UgcmV0dXJuIG5ldyB0eXBlMChkYXRhKVxuXHRcdH1cblx0XHRyZXR1cm4gZGF0YVxuXHR9XG5cdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdCwganNvbnA6IGpzb25wLCBzZXRDb21wbGV0aW9uQ2FsbGJhY2s6IHNldENvbXBsZXRpb25DYWxsYmFja31cbn1cbnZhciByZXF1ZXN0U2VydmljZSA9IF84KHdpbmRvdywgUHJvbWlzZVBvbHlmaWxsKVxudmFyIGNvcmVSZW5kZXJlciA9IGZ1bmN0aW9uKCR3aW5kb3cpIHtcblx0dmFyICRkb2MgPSAkd2luZG93LmRvY3VtZW50XG5cdHZhciAkZW1wdHlGcmFnbWVudCA9ICRkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpXG5cdHZhciBuYW1lU3BhY2UgPSB7XG5cdFx0c3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG5cdFx0bWF0aDogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCJcblx0fVxuXHR2YXIgb25ldmVudFxuXHRmdW5jdGlvbiBzZXRFdmVudENhbGxiYWNrKGNhbGxiYWNrKSB7cmV0dXJuIG9uZXZlbnQgPSBjYWxsYmFja31cblx0ZnVuY3Rpb24gZ2V0TmFtZVNwYWNlKHZub2RlKSB7XG5cdFx0cmV0dXJuIHZub2RlLmF0dHJzICYmIHZub2RlLmF0dHJzLnhtbG5zIHx8IG5hbWVTcGFjZVt2bm9kZS50YWddXG5cdH1cblx0Ly9jcmVhdGVcblx0ZnVuY3Rpb24gY3JlYXRlTm9kZXMocGFyZW50LCB2bm9kZXMsIHN0YXJ0LCBlbmQsIGhvb2tzLCBuZXh0U2libGluZywgbnMpIHtcblx0XHRmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuXHRcdFx0dmFyIHZub2RlID0gdm5vZGVzW2ldXG5cdFx0XHRpZiAodm5vZGUgIT0gbnVsbCkge1xuXHRcdFx0XHRjcmVhdGVOb2RlKHBhcmVudCwgdm5vZGUsIGhvb2tzLCBucywgbmV4dFNpYmxpbmcpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIGNyZWF0ZU5vZGUocGFyZW50LCB2bm9kZSwgaG9va3MsIG5zLCBuZXh0U2libGluZykge1xuXHRcdHZhciB0YWcgPSB2bm9kZS50YWdcblx0XHRpZiAodHlwZW9mIHRhZyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dm5vZGUuc3RhdGUgPSB7fVxuXHRcdFx0aWYgKHZub2RlLmF0dHJzICE9IG51bGwpIGluaXRMaWZlY3ljbGUodm5vZGUuYXR0cnMsIHZub2RlLCBob29rcylcblx0XHRcdHN3aXRjaCAodGFnKSB7XG5cdFx0XHRcdGNhc2UgXCIjXCI6IHJldHVybiBjcmVhdGVUZXh0KHBhcmVudCwgdm5vZGUsIG5leHRTaWJsaW5nKVxuXHRcdFx0XHRjYXNlIFwiPFwiOiByZXR1cm4gY3JlYXRlSFRNTChwYXJlbnQsIHZub2RlLCBuZXh0U2libGluZylcblx0XHRcdFx0Y2FzZSBcIltcIjogcmV0dXJuIGNyZWF0ZUZyYWdtZW50KHBhcmVudCwgdm5vZGUsIGhvb2tzLCBucywgbmV4dFNpYmxpbmcpXG5cdFx0XHRcdGRlZmF1bHQ6IHJldHVybiBjcmVhdGVFbGVtZW50KHBhcmVudCwgdm5vZGUsIGhvb2tzLCBucywgbmV4dFNpYmxpbmcpXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2UgcmV0dXJuIGNyZWF0ZUNvbXBvbmVudChwYXJlbnQsIHZub2RlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKVxuXHR9XG5cdGZ1bmN0aW9uIGNyZWF0ZVRleHQocGFyZW50LCB2bm9kZSwgbmV4dFNpYmxpbmcpIHtcblx0XHR2bm9kZS5kb20gPSAkZG9jLmNyZWF0ZVRleHROb2RlKHZub2RlLmNoaWxkcmVuKVxuXHRcdGluc2VydE5vZGUocGFyZW50LCB2bm9kZS5kb20sIG5leHRTaWJsaW5nKVxuXHRcdHJldHVybiB2bm9kZS5kb21cblx0fVxuXHRmdW5jdGlvbiBjcmVhdGVIVE1MKHBhcmVudCwgdm5vZGUsIG5leHRTaWJsaW5nKSB7XG5cdFx0dmFyIG1hdGNoMSA9IHZub2RlLmNoaWxkcmVuLm1hdGNoKC9eXFxzKj88KFxcdyspL2ltKSB8fCBbXVxuXHRcdHZhciBwYXJlbnQxID0ge2NhcHRpb246IFwidGFibGVcIiwgdGhlYWQ6IFwidGFibGVcIiwgdGJvZHk6IFwidGFibGVcIiwgdGZvb3Q6IFwidGFibGVcIiwgdHI6IFwidGJvZHlcIiwgdGg6IFwidHJcIiwgdGQ6IFwidHJcIiwgY29sZ3JvdXA6IFwidGFibGVcIiwgY29sOiBcImNvbGdyb3VwXCJ9W21hdGNoMVsxXV0gfHwgXCJkaXZcIlxuXHRcdHZhciB0ZW1wID0gJGRvYy5jcmVhdGVFbGVtZW50KHBhcmVudDEpXG5cdFx0dGVtcC5pbm5lckhUTUwgPSB2bm9kZS5jaGlsZHJlblxuXHRcdHZub2RlLmRvbSA9IHRlbXAuZmlyc3RDaGlsZFxuXHRcdHZub2RlLmRvbVNpemUgPSB0ZW1wLmNoaWxkTm9kZXMubGVuZ3RoXG5cdFx0dmFyIGZyYWdtZW50ID0gJGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KClcblx0XHR2YXIgY2hpbGRcblx0XHR3aGlsZSAoY2hpbGQgPSB0ZW1wLmZpcnN0Q2hpbGQpIHtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkKVxuXHRcdH1cblx0XHRpbnNlcnROb2RlKHBhcmVudCwgZnJhZ21lbnQsIG5leHRTaWJsaW5nKVxuXHRcdHJldHVybiBmcmFnbWVudFxuXHR9XG5cdGZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50KHBhcmVudCwgdm5vZGUsIGhvb2tzLCBucywgbmV4dFNpYmxpbmcpIHtcblx0XHR2YXIgZnJhZ21lbnQgPSAkZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxuXHRcdGlmICh2bm9kZS5jaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHR2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlblxuXHRcdFx0Y3JlYXRlTm9kZXMoZnJhZ21lbnQsIGNoaWxkcmVuLCAwLCBjaGlsZHJlbi5sZW5ndGgsIGhvb2tzLCBudWxsLCBucylcblx0XHR9XG5cdFx0dm5vZGUuZG9tID0gZnJhZ21lbnQuZmlyc3RDaGlsZFxuXHRcdHZub2RlLmRvbVNpemUgPSBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuXHRcdGluc2VydE5vZGUocGFyZW50LCBmcmFnbWVudCwgbmV4dFNpYmxpbmcpXG5cdFx0cmV0dXJuIGZyYWdtZW50XG5cdH1cblx0ZnVuY3Rpb24gY3JlYXRlRWxlbWVudChwYXJlbnQsIHZub2RlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKSB7XG5cdFx0dmFyIHRhZyA9IHZub2RlLnRhZ1xuXHRcdHZhciBhdHRyczIgPSB2bm9kZS5hdHRyc1xuXHRcdHZhciBpcyA9IGF0dHJzMiAmJiBhdHRyczIuaXNcblx0XHRucyA9IGdldE5hbWVTcGFjZSh2bm9kZSkgfHwgbnNcblx0XHR2YXIgZWxlbWVudCA9IG5zID9cblx0XHRcdGlzID8gJGRvYy5jcmVhdGVFbGVtZW50TlMobnMsIHRhZywge2lzOiBpc30pIDogJGRvYy5jcmVhdGVFbGVtZW50TlMobnMsIHRhZykgOlxuXHRcdFx0aXMgPyAkZG9jLmNyZWF0ZUVsZW1lbnQodGFnLCB7aXM6IGlzfSkgOiAkZG9jLmNyZWF0ZUVsZW1lbnQodGFnKVxuXHRcdHZub2RlLmRvbSA9IGVsZW1lbnRcblx0XHRpZiAoYXR0cnMyICE9IG51bGwpIHtcblx0XHRcdHNldEF0dHJzKHZub2RlLCBhdHRyczIsIG5zKVxuXHRcdH1cblx0XHRpbnNlcnROb2RlKHBhcmVudCwgZWxlbWVudCwgbmV4dFNpYmxpbmcpXG5cdFx0aWYgKHZub2RlLmF0dHJzICE9IG51bGwgJiYgdm5vZGUuYXR0cnMuY29udGVudGVkaXRhYmxlICE9IG51bGwpIHtcblx0XHRcdHNldENvbnRlbnRFZGl0YWJsZSh2bm9kZSlcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRpZiAodm5vZGUudGV4dCAhPSBudWxsKSB7XG5cdFx0XHRcdGlmICh2bm9kZS50ZXh0ICE9PSBcIlwiKSBlbGVtZW50LnRleHRDb250ZW50ID0gdm5vZGUudGV4dFxuXHRcdFx0XHRlbHNlIHZub2RlLmNoaWxkcmVuID0gW1Zub2RlKFwiI1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdm5vZGUudGV4dCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXVxuXHRcdFx0fVxuXHRcdFx0aWYgKHZub2RlLmNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdFx0dmFyIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW5cblx0XHRcdFx0Y3JlYXRlTm9kZXMoZWxlbWVudCwgY2hpbGRyZW4sIDAsIGNoaWxkcmVuLmxlbmd0aCwgaG9va3MsIG51bGwsIG5zKVxuXHRcdFx0XHRzZXRMYXRlQXR0cnModm5vZGUpXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtZW50XG5cdH1cblx0ZnVuY3Rpb24gaW5pdENvbXBvbmVudCh2bm9kZSwgaG9va3MpIHtcblx0XHR2YXIgc2VudGluZWxcblx0XHRpZiAodHlwZW9mIHZub2RlLnRhZy52aWV3ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHZub2RlLnN0YXRlID0gT2JqZWN0LmNyZWF0ZSh2bm9kZS50YWcpXG5cdFx0XHRzZW50aW5lbCA9IHZub2RlLnN0YXRlLnZpZXdcblx0XHRcdGlmIChzZW50aW5lbC4kJHJlZW50cmFudExvY2skJCAhPSBudWxsKSByZXR1cm4gJGVtcHR5RnJhZ21lbnRcblx0XHRcdHNlbnRpbmVsLiQkcmVlbnRyYW50TG9jayQkID0gdHJ1ZVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2bm9kZS5zdGF0ZSA9IHZvaWQgMFxuXHRcdFx0c2VudGluZWwgPSB2bm9kZS50YWdcblx0XHRcdGlmIChzZW50aW5lbC4kJHJlZW50cmFudExvY2skJCAhPSBudWxsKSByZXR1cm4gJGVtcHR5RnJhZ21lbnRcblx0XHRcdHNlbnRpbmVsLiQkcmVlbnRyYW50TG9jayQkID0gdHJ1ZVxuXHRcdFx0dm5vZGUuc3RhdGUgPSAodm5vZGUudGFnLnByb3RvdHlwZSAhPSBudWxsICYmIHR5cGVvZiB2bm9kZS50YWcucHJvdG90eXBlLnZpZXcgPT09IFwiZnVuY3Rpb25cIikgPyBuZXcgdm5vZGUudGFnKHZub2RlKSA6IHZub2RlLnRhZyh2bm9kZSlcblx0XHR9XG5cdFx0dm5vZGUuX3N0YXRlID0gdm5vZGUuc3RhdGVcblx0XHRpZiAodm5vZGUuYXR0cnMgIT0gbnVsbCkgaW5pdExpZmVjeWNsZSh2bm9kZS5hdHRycywgdm5vZGUsIGhvb2tzKVxuXHRcdGluaXRMaWZlY3ljbGUodm5vZGUuX3N0YXRlLCB2bm9kZSwgaG9va3MpXG5cdFx0dm5vZGUuaW5zdGFuY2UgPSBWbm9kZS5ub3JtYWxpemUodm5vZGUuX3N0YXRlLnZpZXcuY2FsbCh2bm9kZS5zdGF0ZSwgdm5vZGUpKVxuXHRcdGlmICh2bm9kZS5pbnN0YW5jZSA9PT0gdm5vZGUpIHRocm93IEVycm9yKFwiQSB2aWV3IGNhbm5vdCByZXR1cm4gdGhlIHZub2RlIGl0IHJlY2VpdmVkIGFzIGFyZ3VtZW50XCIpXG5cdFx0c2VudGluZWwuJCRyZWVudHJhbnRMb2NrJCQgPSBudWxsXG5cdH1cblx0ZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50KHBhcmVudCwgdm5vZGUsIGhvb2tzLCBucywgbmV4dFNpYmxpbmcpIHtcblx0XHRpbml0Q29tcG9uZW50KHZub2RlLCBob29rcylcblx0XHRpZiAodm5vZGUuaW5zdGFuY2UgIT0gbnVsbCkge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBjcmVhdGVOb2RlKHBhcmVudCwgdm5vZGUuaW5zdGFuY2UsIGhvb2tzLCBucywgbmV4dFNpYmxpbmcpXG5cdFx0XHR2bm9kZS5kb20gPSB2bm9kZS5pbnN0YW5jZS5kb21cblx0XHRcdHZub2RlLmRvbVNpemUgPSB2bm9kZS5kb20gIT0gbnVsbCA/IHZub2RlLmluc3RhbmNlLmRvbVNpemUgOiAwXG5cdFx0XHRpbnNlcnROb2RlKHBhcmVudCwgZWxlbWVudCwgbmV4dFNpYmxpbmcpXG5cdFx0XHRyZXR1cm4gZWxlbWVudFxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHZub2RlLmRvbVNpemUgPSAwXG5cdFx0XHRyZXR1cm4gJGVtcHR5RnJhZ21lbnRcblx0XHR9XG5cdH1cblx0Ly91cGRhdGVcblx0ZnVuY3Rpb24gdXBkYXRlTm9kZXMocGFyZW50LCBvbGQsIHZub2RlcywgcmVjeWNsaW5nLCBob29rcywgbmV4dFNpYmxpbmcsIG5zKSB7XG5cdFx0aWYgKG9sZCA9PT0gdm5vZGVzIHx8IG9sZCA9PSBudWxsICYmIHZub2RlcyA9PSBudWxsKSByZXR1cm5cblx0XHRlbHNlIGlmIChvbGQgPT0gbnVsbCkgY3JlYXRlTm9kZXMocGFyZW50LCB2bm9kZXMsIDAsIHZub2Rlcy5sZW5ndGgsIGhvb2tzLCBuZXh0U2libGluZywgbnMpXG5cdFx0ZWxzZSBpZiAodm5vZGVzID09IG51bGwpIHJlbW92ZU5vZGVzKG9sZCwgMCwgb2xkLmxlbmd0aCwgdm5vZGVzKVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKG9sZC5sZW5ndGggPT09IHZub2Rlcy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGlzVW5rZXllZCA9IGZhbHNlXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKHZub2Rlc1tpXSAhPSBudWxsICYmIG9sZFtpXSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0XHRpc1Vua2V5ZWQgPSB2bm9kZXNbaV0ua2V5ID09IG51bGwgJiYgb2xkW2ldLmtleSA9PSBudWxsXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaXNVbmtleWVkKSB7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGlmIChvbGRbaV0gPT09IHZub2Rlc1tpXSkgY29udGludWVcblx0XHRcdFx0XHRcdGVsc2UgaWYgKG9sZFtpXSA9PSBudWxsICYmIHZub2Rlc1tpXSAhPSBudWxsKSBjcmVhdGVOb2RlKHBhcmVudCwgdm5vZGVzW2ldLCBob29rcywgbnMsIGdldE5leHRTaWJsaW5nKG9sZCwgaSArIDEsIG5leHRTaWJsaW5nKSlcblx0XHRcdFx0XHRcdGVsc2UgaWYgKHZub2Rlc1tpXSA9PSBudWxsKSByZW1vdmVOb2RlcyhvbGQsIGksIGkgKyAxLCB2bm9kZXMpXG5cdFx0XHRcdFx0XHRlbHNlIHVwZGF0ZU5vZGUocGFyZW50LCBvbGRbaV0sIHZub2Rlc1tpXSwgaG9va3MsIGdldE5leHRTaWJsaW5nKG9sZCwgaSArIDEsIG5leHRTaWJsaW5nKSwgcmVjeWNsaW5nLCBucylcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlY3ljbGluZyA9IHJlY3ljbGluZyB8fCBpc1JlY3ljbGFibGUob2xkLCB2bm9kZXMpXG5cdFx0XHRpZiAocmVjeWNsaW5nKSB7XG5cdFx0XHRcdHZhciBwb29sID0gb2xkLnBvb2xcblx0XHRcdFx0b2xkID0gb2xkLmNvbmNhdChvbGQucG9vbClcblx0XHRcdH1cblx0XHRcdHZhciBvbGRTdGFydCA9IDAsIHN0YXJ0ID0gMCwgb2xkRW5kID0gb2xkLmxlbmd0aCAtIDEsIGVuZCA9IHZub2Rlcy5sZW5ndGggLSAxLCBtYXBcblx0XHRcdHdoaWxlIChvbGRFbmQgPj0gb2xkU3RhcnQgJiYgZW5kID49IHN0YXJ0KSB7XG5cdFx0XHRcdHZhciBvID0gb2xkW29sZFN0YXJ0XSwgdiA9IHZub2Rlc1tzdGFydF1cblx0XHRcdFx0aWYgKG8gPT09IHYgJiYgIXJlY3ljbGluZykgb2xkU3RhcnQrKywgc3RhcnQrK1xuXHRcdFx0XHRlbHNlIGlmIChvID09IG51bGwpIG9sZFN0YXJ0Kytcblx0XHRcdFx0ZWxzZSBpZiAodiA9PSBudWxsKSBzdGFydCsrXG5cdFx0XHRcdGVsc2UgaWYgKG8ua2V5ID09PSB2LmtleSkge1xuXHRcdFx0XHRcdHZhciBzaG91bGRSZWN5Y2xlID0gKHBvb2wgIT0gbnVsbCAmJiBvbGRTdGFydCA+PSBvbGQubGVuZ3RoIC0gcG9vbC5sZW5ndGgpIHx8ICgocG9vbCA9PSBudWxsKSAmJiByZWN5Y2xpbmcpXG5cdFx0XHRcdFx0b2xkU3RhcnQrKywgc3RhcnQrK1xuXHRcdFx0XHRcdHVwZGF0ZU5vZGUocGFyZW50LCBvLCB2LCBob29rcywgZ2V0TmV4dFNpYmxpbmcob2xkLCBvbGRTdGFydCwgbmV4dFNpYmxpbmcpLCBzaG91bGRSZWN5Y2xlLCBucylcblx0XHRcdFx0XHRpZiAocmVjeWNsaW5nICYmIG8udGFnID09PSB2LnRhZykgaW5zZXJ0Tm9kZShwYXJlbnQsIHRvRnJhZ21lbnQobyksIG5leHRTaWJsaW5nKVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHZhciBvID0gb2xkW29sZEVuZF1cblx0XHRcdFx0XHRpZiAobyA9PT0gdiAmJiAhcmVjeWNsaW5nKSBvbGRFbmQtLSwgc3RhcnQrK1xuXHRcdFx0XHRcdGVsc2UgaWYgKG8gPT0gbnVsbCkgb2xkRW5kLS1cblx0XHRcdFx0XHRlbHNlIGlmICh2ID09IG51bGwpIHN0YXJ0Kytcblx0XHRcdFx0XHRlbHNlIGlmIChvLmtleSA9PT0gdi5rZXkpIHtcblx0XHRcdFx0XHRcdHZhciBzaG91bGRSZWN5Y2xlID0gKHBvb2wgIT0gbnVsbCAmJiBvbGRFbmQgPj0gb2xkLmxlbmd0aCAtIHBvb2wubGVuZ3RoKSB8fCAoKHBvb2wgPT0gbnVsbCkgJiYgcmVjeWNsaW5nKVxuXHRcdFx0XHRcdFx0dXBkYXRlTm9kZShwYXJlbnQsIG8sIHYsIGhvb2tzLCBnZXROZXh0U2libGluZyhvbGQsIG9sZEVuZCArIDEsIG5leHRTaWJsaW5nKSwgc2hvdWxkUmVjeWNsZSwgbnMpXG5cdFx0XHRcdFx0XHRpZiAocmVjeWNsaW5nIHx8IHN0YXJ0IDwgZW5kKSBpbnNlcnROb2RlKHBhcmVudCwgdG9GcmFnbWVudChvKSwgZ2V0TmV4dFNpYmxpbmcob2xkLCBvbGRTdGFydCwgbmV4dFNpYmxpbmcpKVxuXHRcdFx0XHRcdFx0b2xkRW5kLS0sIHN0YXJ0Kytcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR3aGlsZSAob2xkRW5kID49IG9sZFN0YXJ0ICYmIGVuZCA+PSBzdGFydCkge1xuXHRcdFx0XHR2YXIgbyA9IG9sZFtvbGRFbmRdLCB2ID0gdm5vZGVzW2VuZF1cblx0XHRcdFx0aWYgKG8gPT09IHYgJiYgIXJlY3ljbGluZykgb2xkRW5kLS0sIGVuZC0tXG5cdFx0XHRcdGVsc2UgaWYgKG8gPT0gbnVsbCkgb2xkRW5kLS1cblx0XHRcdFx0ZWxzZSBpZiAodiA9PSBudWxsKSBlbmQtLVxuXHRcdFx0XHRlbHNlIGlmIChvLmtleSA9PT0gdi5rZXkpIHtcblx0XHRcdFx0XHR2YXIgc2hvdWxkUmVjeWNsZSA9IChwb29sICE9IG51bGwgJiYgb2xkRW5kID49IG9sZC5sZW5ndGggLSBwb29sLmxlbmd0aCkgfHwgKChwb29sID09IG51bGwpICYmIHJlY3ljbGluZylcblx0XHRcdFx0XHR1cGRhdGVOb2RlKHBhcmVudCwgbywgdiwgaG9va3MsIGdldE5leHRTaWJsaW5nKG9sZCwgb2xkRW5kICsgMSwgbmV4dFNpYmxpbmcpLCBzaG91bGRSZWN5Y2xlLCBucylcblx0XHRcdFx0XHRpZiAocmVjeWNsaW5nICYmIG8udGFnID09PSB2LnRhZykgaW5zZXJ0Tm9kZShwYXJlbnQsIHRvRnJhZ21lbnQobyksIG5leHRTaWJsaW5nKVxuXHRcdFx0XHRcdGlmIChvLmRvbSAhPSBudWxsKSBuZXh0U2libGluZyA9IG8uZG9tXG5cdFx0XHRcdFx0b2xkRW5kLS0sIGVuZC0tXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCFtYXApIG1hcCA9IGdldEtleU1hcChvbGQsIG9sZEVuZClcblx0XHRcdFx0XHRpZiAodiAhPSBudWxsKSB7XG5cdFx0XHRcdFx0XHR2YXIgb2xkSW5kZXggPSBtYXBbdi5rZXldXG5cdFx0XHRcdFx0XHRpZiAob2xkSW5kZXggIT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbW92YWJsZSA9IG9sZFtvbGRJbmRleF1cblx0XHRcdFx0XHRcdFx0dmFyIHNob3VsZFJlY3ljbGUgPSAocG9vbCAhPSBudWxsICYmIG9sZEluZGV4ID49IG9sZC5sZW5ndGggLSBwb29sLmxlbmd0aCkgfHwgKChwb29sID09IG51bGwpICYmIHJlY3ljbGluZylcblx0XHRcdFx0XHRcdFx0dXBkYXRlTm9kZShwYXJlbnQsIG1vdmFibGUsIHYsIGhvb2tzLCBnZXROZXh0U2libGluZyhvbGQsIG9sZEVuZCArIDEsIG5leHRTaWJsaW5nKSwgcmVjeWNsaW5nLCBucylcblx0XHRcdFx0XHRcdFx0aW5zZXJ0Tm9kZShwYXJlbnQsIHRvRnJhZ21lbnQobW92YWJsZSksIG5leHRTaWJsaW5nKVxuXHRcdFx0XHRcdFx0XHRvbGRbb2xkSW5kZXhdLnNraXAgPSB0cnVlXG5cdFx0XHRcdFx0XHRcdGlmIChtb3ZhYmxlLmRvbSAhPSBudWxsKSBuZXh0U2libGluZyA9IG1vdmFibGUuZG9tXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGRvbSA9IGNyZWF0ZU5vZGUocGFyZW50LCB2LCBob29rcywgbnMsIG5leHRTaWJsaW5nKVxuXHRcdFx0XHRcdFx0XHRuZXh0U2libGluZyA9IGRvbVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbmQtLVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChlbmQgPCBzdGFydCkgYnJlYWtcblx0XHRcdH1cblx0XHRcdGNyZWF0ZU5vZGVzKHBhcmVudCwgdm5vZGVzLCBzdGFydCwgZW5kICsgMSwgaG9va3MsIG5leHRTaWJsaW5nLCBucylcblx0XHRcdHJlbW92ZU5vZGVzKG9sZCwgb2xkU3RhcnQsIG9sZEVuZCArIDEsIHZub2Rlcylcblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gdXBkYXRlTm9kZShwYXJlbnQsIG9sZCwgdm5vZGUsIGhvb2tzLCBuZXh0U2libGluZywgcmVjeWNsaW5nLCBucykge1xuXHRcdHZhciBvbGRUYWcgPSBvbGQudGFnLCB0YWcgPSB2bm9kZS50YWdcblx0XHRpZiAob2xkVGFnID09PSB0YWcpIHtcblx0XHRcdHZub2RlLnN0YXRlID0gb2xkLnN0YXRlXG5cdFx0XHR2bm9kZS5fc3RhdGUgPSBvbGQuX3N0YXRlXG5cdFx0XHR2bm9kZS5ldmVudHMgPSBvbGQuZXZlbnRzXG5cdFx0XHRpZiAoIXJlY3ljbGluZyAmJiBzaG91bGROb3RVcGRhdGUodm5vZGUsIG9sZCkpIHJldHVyblxuXHRcdFx0aWYgKHR5cGVvZiBvbGRUYWcgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0aWYgKHZub2RlLmF0dHJzICE9IG51bGwpIHtcblx0XHRcdFx0XHRpZiAocmVjeWNsaW5nKSB7XG5cdFx0XHRcdFx0XHR2bm9kZS5zdGF0ZSA9IHt9XG5cdFx0XHRcdFx0XHRpbml0TGlmZWN5Y2xlKHZub2RlLmF0dHJzLCB2bm9kZSwgaG9va3MpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgdXBkYXRlTGlmZWN5Y2xlKHZub2RlLmF0dHJzLCB2bm9kZSwgaG9va3MpXG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChvbGRUYWcpIHtcblx0XHRcdFx0XHRjYXNlIFwiI1wiOiB1cGRhdGVUZXh0KG9sZCwgdm5vZGUpOyBicmVha1xuXHRcdFx0XHRcdGNhc2UgXCI8XCI6IHVwZGF0ZUhUTUwocGFyZW50LCBvbGQsIHZub2RlLCBuZXh0U2libGluZyk7IGJyZWFrXG5cdFx0XHRcdFx0Y2FzZSBcIltcIjogdXBkYXRlRnJhZ21lbnQocGFyZW50LCBvbGQsIHZub2RlLCByZWN5Y2xpbmcsIGhvb2tzLCBuZXh0U2libGluZywgbnMpOyBicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6IHVwZGF0ZUVsZW1lbnQob2xkLCB2bm9kZSwgcmVjeWNsaW5nLCBob29rcywgbnMpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2UgdXBkYXRlQ29tcG9uZW50KHBhcmVudCwgb2xkLCB2bm9kZSwgaG9va3MsIG5leHRTaWJsaW5nLCByZWN5Y2xpbmcsIG5zKVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHJlbW92ZU5vZGUob2xkLCBudWxsKVxuXHRcdFx0Y3JlYXRlTm9kZShwYXJlbnQsIHZub2RlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiB1cGRhdGVUZXh0KG9sZCwgdm5vZGUpIHtcblx0XHRpZiAob2xkLmNoaWxkcmVuLnRvU3RyaW5nKCkgIT09IHZub2RlLmNoaWxkcmVuLnRvU3RyaW5nKCkpIHtcblx0XHRcdG9sZC5kb20ubm9kZVZhbHVlID0gdm5vZGUuY2hpbGRyZW5cblx0XHR9XG5cdFx0dm5vZGUuZG9tID0gb2xkLmRvbVxuXHR9XG5cdGZ1bmN0aW9uIHVwZGF0ZUhUTUwocGFyZW50LCBvbGQsIHZub2RlLCBuZXh0U2libGluZykge1xuXHRcdGlmIChvbGQuY2hpbGRyZW4gIT09IHZub2RlLmNoaWxkcmVuKSB7XG5cdFx0XHR0b0ZyYWdtZW50KG9sZClcblx0XHRcdGNyZWF0ZUhUTUwocGFyZW50LCB2bm9kZSwgbmV4dFNpYmxpbmcpXG5cdFx0fVxuXHRcdGVsc2Ugdm5vZGUuZG9tID0gb2xkLmRvbSwgdm5vZGUuZG9tU2l6ZSA9IG9sZC5kb21TaXplXG5cdH1cblx0ZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocGFyZW50LCBvbGQsIHZub2RlLCByZWN5Y2xpbmcsIGhvb2tzLCBuZXh0U2libGluZywgbnMpIHtcblx0XHR1cGRhdGVOb2RlcyhwYXJlbnQsIG9sZC5jaGlsZHJlbiwgdm5vZGUuY2hpbGRyZW4sIHJlY3ljbGluZywgaG9va3MsIG5leHRTaWJsaW5nLCBucylcblx0XHR2YXIgZG9tU2l6ZSA9IDAsIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW5cblx0XHR2bm9kZS5kb20gPSBudWxsXG5cdFx0aWYgKGNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGNoaWxkID0gY2hpbGRyZW5baV1cblx0XHRcdFx0aWYgKGNoaWxkICE9IG51bGwgJiYgY2hpbGQuZG9tICE9IG51bGwpIHtcblx0XHRcdFx0XHRpZiAodm5vZGUuZG9tID09IG51bGwpIHZub2RlLmRvbSA9IGNoaWxkLmRvbVxuXHRcdFx0XHRcdGRvbVNpemUgKz0gY2hpbGQuZG9tU2l6ZSB8fCAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChkb21TaXplICE9PSAxKSB2bm9kZS5kb21TaXplID0gZG9tU2l6ZVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiB1cGRhdGVFbGVtZW50KG9sZCwgdm5vZGUsIHJlY3ljbGluZywgaG9va3MsIG5zKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSB2bm9kZS5kb20gPSBvbGQuZG9tXG5cdFx0bnMgPSBnZXROYW1lU3BhY2Uodm5vZGUpIHx8IG5zXG5cdFx0aWYgKHZub2RlLnRhZyA9PT0gXCJ0ZXh0YXJlYVwiKSB7XG5cdFx0XHRpZiAodm5vZGUuYXR0cnMgPT0gbnVsbCkgdm5vZGUuYXR0cnMgPSB7fVxuXHRcdFx0aWYgKHZub2RlLnRleHQgIT0gbnVsbCkge1xuXHRcdFx0XHR2bm9kZS5hdHRycy52YWx1ZSA9IHZub2RlLnRleHQgLy9GSVhNRSBoYW5kbGUwIG11bHRpcGxlIGNoaWxkcmVuXG5cdFx0XHRcdHZub2RlLnRleHQgPSB1bmRlZmluZWRcblx0XHRcdH1cblx0XHR9XG5cdFx0dXBkYXRlQXR0cnModm5vZGUsIG9sZC5hdHRycywgdm5vZGUuYXR0cnMsIG5zKVxuXHRcdGlmICh2bm9kZS5hdHRycyAhPSBudWxsICYmIHZub2RlLmF0dHJzLmNvbnRlbnRlZGl0YWJsZSAhPSBudWxsKSB7XG5cdFx0XHRzZXRDb250ZW50RWRpdGFibGUodm5vZGUpXG5cdFx0fVxuXHRcdGVsc2UgaWYgKG9sZC50ZXh0ICE9IG51bGwgJiYgdm5vZGUudGV4dCAhPSBudWxsICYmIHZub2RlLnRleHQgIT09IFwiXCIpIHtcblx0XHRcdGlmIChvbGQudGV4dC50b1N0cmluZygpICE9PSB2bm9kZS50ZXh0LnRvU3RyaW5nKCkpIG9sZC5kb20uZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB2bm9kZS50ZXh0XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKG9sZC50ZXh0ICE9IG51bGwpIG9sZC5jaGlsZHJlbiA9IFtWbm9kZShcIiNcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9sZC50ZXh0LCB1bmRlZmluZWQsIG9sZC5kb20uZmlyc3RDaGlsZCldXG5cdFx0XHRpZiAodm5vZGUudGV4dCAhPSBudWxsKSB2bm9kZS5jaGlsZHJlbiA9IFtWbm9kZShcIiNcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHZub2RlLnRleHQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKV1cblx0XHRcdHVwZGF0ZU5vZGVzKGVsZW1lbnQsIG9sZC5jaGlsZHJlbiwgdm5vZGUuY2hpbGRyZW4sIHJlY3ljbGluZywgaG9va3MsIG51bGwsIG5zKVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiB1cGRhdGVDb21wb25lbnQocGFyZW50LCBvbGQsIHZub2RlLCBob29rcywgbmV4dFNpYmxpbmcsIHJlY3ljbGluZywgbnMpIHtcblx0XHRpZiAocmVjeWNsaW5nKSB7XG5cdFx0XHRpbml0Q29tcG9uZW50KHZub2RlLCBob29rcylcblx0XHR9IGVsc2Uge1xuXHRcdFx0dm5vZGUuaW5zdGFuY2UgPSBWbm9kZS5ub3JtYWxpemUodm5vZGUuX3N0YXRlLnZpZXcuY2FsbCh2bm9kZS5zdGF0ZSwgdm5vZGUpKVxuXHRcdFx0aWYgKHZub2RlLmluc3RhbmNlID09PSB2bm9kZSkgdGhyb3cgRXJyb3IoXCJBIHZpZXcgY2Fubm90IHJldHVybiB0aGUgdm5vZGUgaXQgcmVjZWl2ZWQgYXMgYXJndW1lbnRcIilcblx0XHRcdGlmICh2bm9kZS5hdHRycyAhPSBudWxsKSB1cGRhdGVMaWZlY3ljbGUodm5vZGUuYXR0cnMsIHZub2RlLCBob29rcylcblx0XHRcdHVwZGF0ZUxpZmVjeWNsZSh2bm9kZS5fc3RhdGUsIHZub2RlLCBob29rcylcblx0XHR9XG5cdFx0aWYgKHZub2RlLmluc3RhbmNlICE9IG51bGwpIHtcblx0XHRcdGlmIChvbGQuaW5zdGFuY2UgPT0gbnVsbCkgY3JlYXRlTm9kZShwYXJlbnQsIHZub2RlLmluc3RhbmNlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKVxuXHRcdFx0ZWxzZSB1cGRhdGVOb2RlKHBhcmVudCwgb2xkLmluc3RhbmNlLCB2bm9kZS5pbnN0YW5jZSwgaG9va3MsIG5leHRTaWJsaW5nLCByZWN5Y2xpbmcsIG5zKVxuXHRcdFx0dm5vZGUuZG9tID0gdm5vZGUuaW5zdGFuY2UuZG9tXG5cdFx0XHR2bm9kZS5kb21TaXplID0gdm5vZGUuaW5zdGFuY2UuZG9tU2l6ZVxuXHRcdH1cblx0XHRlbHNlIGlmIChvbGQuaW5zdGFuY2UgIT0gbnVsbCkge1xuXHRcdFx0cmVtb3ZlTm9kZShvbGQuaW5zdGFuY2UsIG51bGwpXG5cdFx0XHR2bm9kZS5kb20gPSB1bmRlZmluZWRcblx0XHRcdHZub2RlLmRvbVNpemUgPSAwXG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dm5vZGUuZG9tID0gb2xkLmRvbVxuXHRcdFx0dm5vZGUuZG9tU2l6ZSA9IG9sZC5kb21TaXplXG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIGlzUmVjeWNsYWJsZShvbGQsIHZub2Rlcykge1xuXHRcdGlmIChvbGQucG9vbCAhPSBudWxsICYmIE1hdGguYWJzKG9sZC5wb29sLmxlbmd0aCAtIHZub2Rlcy5sZW5ndGgpIDw9IE1hdGguYWJzKG9sZC5sZW5ndGggLSB2bm9kZXMubGVuZ3RoKSkge1xuXHRcdFx0dmFyIG9sZENoaWxkcmVuTGVuZ3RoID0gb2xkWzBdICYmIG9sZFswXS5jaGlsZHJlbiAmJiBvbGRbMF0uY2hpbGRyZW4ubGVuZ3RoIHx8IDBcblx0XHRcdHZhciBwb29sQ2hpbGRyZW5MZW5ndGggPSBvbGQucG9vbFswXSAmJiBvbGQucG9vbFswXS5jaGlsZHJlbiAmJiBvbGQucG9vbFswXS5jaGlsZHJlbi5sZW5ndGggfHwgMFxuXHRcdFx0dmFyIHZub2Rlc0NoaWxkcmVuTGVuZ3RoID0gdm5vZGVzWzBdICYmIHZub2Rlc1swXS5jaGlsZHJlbiAmJiB2bm9kZXNbMF0uY2hpbGRyZW4ubGVuZ3RoIHx8IDBcblx0XHRcdGlmIChNYXRoLmFicyhwb29sQ2hpbGRyZW5MZW5ndGggLSB2bm9kZXNDaGlsZHJlbkxlbmd0aCkgPD0gTWF0aC5hYnMob2xkQ2hpbGRyZW5MZW5ndGggLSB2bm9kZXNDaGlsZHJlbkxlbmd0aCkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblx0ZnVuY3Rpb24gZ2V0S2V5TWFwKHZub2RlcywgZW5kKSB7XG5cdFx0dmFyIG1hcCA9IHt9LCBpID0gMFxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZW5kOyBpKyspIHtcblx0XHRcdHZhciB2bm9kZSA9IHZub2Rlc1tpXVxuXHRcdFx0aWYgKHZub2RlICE9IG51bGwpIHtcblx0XHRcdFx0dmFyIGtleTIgPSB2bm9kZS5rZXlcblx0XHRcdFx0aWYgKGtleTIgIT0gbnVsbCkgbWFwW2tleTJdID0gaVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbWFwXG5cdH1cblx0ZnVuY3Rpb24gdG9GcmFnbWVudCh2bm9kZSkge1xuXHRcdHZhciBjb3VudDAgPSB2bm9kZS5kb21TaXplXG5cdFx0aWYgKGNvdW50MCAhPSBudWxsIHx8IHZub2RlLmRvbSA9PSBudWxsKSB7XG5cdFx0XHR2YXIgZnJhZ21lbnQgPSAkZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxuXHRcdFx0aWYgKGNvdW50MCA+IDApIHtcblx0XHRcdFx0dmFyIGRvbSA9IHZub2RlLmRvbVxuXHRcdFx0XHR3aGlsZSAoLS1jb3VudDApIGZyYWdtZW50LmFwcGVuZENoaWxkKGRvbS5uZXh0U2libGluZylcblx0XHRcdFx0ZnJhZ21lbnQuaW5zZXJ0QmVmb3JlKGRvbSwgZnJhZ21lbnQuZmlyc3RDaGlsZClcblx0XHRcdH1cblx0XHRcdHJldHVybiBmcmFnbWVudFxuXHRcdH1cblx0XHRlbHNlIHJldHVybiB2bm9kZS5kb21cblx0fVxuXHRmdW5jdGlvbiBnZXROZXh0U2libGluZyh2bm9kZXMsIGksIG5leHRTaWJsaW5nKSB7XG5cdFx0Zm9yICg7IGkgPCB2bm9kZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh2bm9kZXNbaV0gIT0gbnVsbCAmJiB2bm9kZXNbaV0uZG9tICE9IG51bGwpIHJldHVybiB2bm9kZXNbaV0uZG9tXG5cdFx0fVxuXHRcdHJldHVybiBuZXh0U2libGluZ1xuXHR9XG5cdGZ1bmN0aW9uIGluc2VydE5vZGUocGFyZW50LCBkb20sIG5leHRTaWJsaW5nKSB7XG5cdFx0aWYgKG5leHRTaWJsaW5nICYmIG5leHRTaWJsaW5nLnBhcmVudE5vZGUpIHBhcmVudC5pbnNlcnRCZWZvcmUoZG9tLCBuZXh0U2libGluZylcblx0XHRlbHNlIHBhcmVudC5hcHBlbmRDaGlsZChkb20pXG5cdH1cblx0ZnVuY3Rpb24gc2V0Q29udGVudEVkaXRhYmxlKHZub2RlKSB7XG5cdFx0dmFyIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW5cblx0XHRpZiAoY2hpbGRyZW4gIT0gbnVsbCAmJiBjaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGRyZW5bMF0udGFnID09PSBcIjxcIikge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjaGlsZHJlblswXS5jaGlsZHJlblxuXHRcdFx0aWYgKHZub2RlLmRvbS5pbm5lckhUTUwgIT09IGNvbnRlbnQpIHZub2RlLmRvbS5pbm5lckhUTUwgPSBjb250ZW50XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHZub2RlLnRleHQgIT0gbnVsbCB8fCBjaGlsZHJlbiAhPSBudWxsICYmIGNoaWxkcmVuLmxlbmd0aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiQ2hpbGQgbm9kZSBvZiBhIGNvbnRlbnRlZGl0YWJsZSBtdXN0IGJlIHRydXN0ZWRcIilcblx0fVxuXHQvL3JlbW92ZVxuXHRmdW5jdGlvbiByZW1vdmVOb2Rlcyh2bm9kZXMsIHN0YXJ0LCBlbmQsIGNvbnRleHQpIHtcblx0XHRmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuXHRcdFx0dmFyIHZub2RlID0gdm5vZGVzW2ldXG5cdFx0XHRpZiAodm5vZGUgIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAodm5vZGUuc2tpcCkgdm5vZGUuc2tpcCA9IGZhbHNlXG5cdFx0XHRcdGVsc2UgcmVtb3ZlTm9kZSh2bm9kZSwgY29udGV4dClcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gcmVtb3ZlTm9kZSh2bm9kZSwgY29udGV4dCkge1xuXHRcdHZhciBleHBlY3RlZCA9IDEsIGNhbGxlZCA9IDBcblx0XHRpZiAodm5vZGUuYXR0cnMgJiYgdHlwZW9mIHZub2RlLmF0dHJzLm9uYmVmb3JlcmVtb3ZlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHZhciByZXN1bHQgPSB2bm9kZS5hdHRycy5vbmJlZm9yZXJlbW92ZS5jYWxsKHZub2RlLnN0YXRlLCB2bm9kZSlcblx0XHRcdGlmIChyZXN1bHQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRleHBlY3RlZCsrXG5cdFx0XHRcdHJlc3VsdC50aGVuKGNvbnRpbnVhdGlvbiwgY29udGludWF0aW9uKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodHlwZW9mIHZub2RlLnRhZyAhPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2Ygdm5vZGUuX3N0YXRlLm9uYmVmb3JlcmVtb3ZlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHZhciByZXN1bHQgPSB2bm9kZS5fc3RhdGUub25iZWZvcmVyZW1vdmUuY2FsbCh2bm9kZS5zdGF0ZSwgdm5vZGUpXG5cdFx0XHRpZiAocmVzdWx0ICE9IG51bGwgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0ZXhwZWN0ZWQrK1xuXHRcdFx0XHRyZXN1bHQudGhlbihjb250aW51YXRpb24sIGNvbnRpbnVhdGlvbilcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29udGludWF0aW9uKClcblx0XHRmdW5jdGlvbiBjb250aW51YXRpb24oKSB7XG5cdFx0XHRpZiAoKytjYWxsZWQgPT09IGV4cGVjdGVkKSB7XG5cdFx0XHRcdG9ucmVtb3ZlKHZub2RlKVxuXHRcdFx0XHRpZiAodm5vZGUuZG9tKSB7XG5cdFx0XHRcdFx0dmFyIGNvdW50MCA9IHZub2RlLmRvbVNpemUgfHwgMVxuXHRcdFx0XHRcdGlmIChjb3VudDAgPiAxKSB7XG5cdFx0XHRcdFx0XHR2YXIgZG9tID0gdm5vZGUuZG9tXG5cdFx0XHRcdFx0XHR3aGlsZSAoLS1jb3VudDApIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlTm9kZUZyb21ET00oZG9tLm5leHRTaWJsaW5nKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZW1vdmVOb2RlRnJvbURPTSh2bm9kZS5kb20pXG5cdFx0XHRcdFx0aWYgKGNvbnRleHQgIT0gbnVsbCAmJiB2bm9kZS5kb21TaXplID09IG51bGwgJiYgIWhhc0ludGVncmF0aW9uTWV0aG9kcyh2bm9kZS5hdHRycykgJiYgdHlwZW9mIHZub2RlLnRhZyA9PT0gXCJzdHJpbmdcIikgeyAvL1RPRE8gdGVzdCBjdXN0b20gZWxlbWVudHNcblx0XHRcdFx0XHRcdGlmICghY29udGV4dC5wb29sKSBjb250ZXh0LnBvb2wgPSBbdm5vZGVdXG5cdFx0XHRcdFx0XHRlbHNlIGNvbnRleHQucG9vbC5wdXNoKHZub2RlKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiByZW1vdmVOb2RlRnJvbURPTShub2RlKSB7XG5cdFx0dmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZVxuXHRcdGlmIChwYXJlbnQgIT0gbnVsbCkgcGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpXG5cdH1cblx0ZnVuY3Rpb24gb25yZW1vdmUodm5vZGUpIHtcblx0XHRpZiAodm5vZGUuYXR0cnMgJiYgdHlwZW9mIHZub2RlLmF0dHJzLm9ucmVtb3ZlID09PSBcImZ1bmN0aW9uXCIpIHZub2RlLmF0dHJzLm9ucmVtb3ZlLmNhbGwodm5vZGUuc3RhdGUsIHZub2RlKVxuXHRcdGlmICh0eXBlb2Ygdm5vZGUudGFnICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAodHlwZW9mIHZub2RlLl9zdGF0ZS5vbnJlbW92ZSA9PT0gXCJmdW5jdGlvblwiKSB2bm9kZS5fc3RhdGUub25yZW1vdmUuY2FsbCh2bm9kZS5zdGF0ZSwgdm5vZGUpXG5cdFx0XHRpZiAodm5vZGUuaW5zdGFuY2UgIT0gbnVsbCkgb25yZW1vdmUodm5vZGUuaW5zdGFuY2UpXG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldXG5cdFx0XHRcdFx0aWYgKGNoaWxkICE9IG51bGwpIG9ucmVtb3ZlKGNoaWxkKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vYXR0cnMyXG5cdGZ1bmN0aW9uIHNldEF0dHJzKHZub2RlLCBhdHRyczIsIG5zKSB7XG5cdFx0Zm9yICh2YXIga2V5MiBpbiBhdHRyczIpIHtcblx0XHRcdHNldEF0dHIodm5vZGUsIGtleTIsIG51bGwsIGF0dHJzMltrZXkyXSwgbnMpXG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIHNldEF0dHIodm5vZGUsIGtleTIsIG9sZCwgdmFsdWUsIG5zKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSB2bm9kZS5kb21cblx0XHRpZiAoa2V5MiA9PT0gXCJrZXlcIiB8fCBrZXkyID09PSBcImlzXCIgfHwgKG9sZCA9PT0gdmFsdWUgJiYgIWlzRm9ybUF0dHJpYnV0ZSh2bm9kZSwga2V5MikpICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIgfHwgaXNMaWZlY3ljbGVNZXRob2Qoa2V5MikpIHJldHVyblxuXHRcdHZhciBuc0xhc3RJbmRleCA9IGtleTIuaW5kZXhPZihcIjpcIilcblx0XHRpZiAobnNMYXN0SW5kZXggPiAtMSAmJiBrZXkyLnN1YnN0cigwLCBuc0xhc3RJbmRleCkgPT09IFwieGxpbmtcIikge1xuXHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwga2V5Mi5zbGljZShuc0xhc3RJbmRleCArIDEpLCB2YWx1ZSlcblx0XHR9XG5cdFx0ZWxzZSBpZiAoa2V5MlswXSA9PT0gXCJvXCIgJiYga2V5MlsxXSA9PT0gXCJuXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHVwZGF0ZUV2ZW50KHZub2RlLCBrZXkyLCB2YWx1ZSlcblx0XHRlbHNlIGlmIChrZXkyID09PSBcInN0eWxlXCIpIHVwZGF0ZVN0eWxlKGVsZW1lbnQsIG9sZCwgdmFsdWUpXG5cdFx0ZWxzZSBpZiAoa2V5MiBpbiBlbGVtZW50ICYmICFpc0F0dHJpYnV0ZShrZXkyKSAmJiBucyA9PT0gdW5kZWZpbmVkICYmICFpc0N1c3RvbUVsZW1lbnQodm5vZGUpKSB7XG5cdFx0XHRpZiAoa2V5MiA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRcdHZhciBub3JtYWxpemVkMCA9IFwiXCIgKyB2YWx1ZSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdFx0XHRcdC8vc2V0dGluZyBpbnB1dFt2YWx1ZV0gdG8gc2FtZSB2YWx1ZSBieSB0eXBpbmcgb24gZm9jdXNlZCBlbGVtZW50IG1vdmVzIGN1cnNvciB0byBlbmQgaW4gQ2hyb21lXG5cdFx0XHRcdGlmICgodm5vZGUudGFnID09PSBcImlucHV0XCIgfHwgdm5vZGUudGFnID09PSBcInRleHRhcmVhXCIpICYmIHZub2RlLmRvbS52YWx1ZSA9PT0gbm9ybWFsaXplZDAgJiYgdm5vZGUuZG9tID09PSAkZG9jLmFjdGl2ZUVsZW1lbnQpIHJldHVyblxuXHRcdFx0XHQvL3NldHRpbmcgc2VsZWN0W3ZhbHVlXSB0byBzYW1lIHZhbHVlIHdoaWxlIGhhdmluZyBzZWxlY3Qgb3BlbiBibGlua3Mgc2VsZWN0IGRyb3Bkb3duIGluIENocm9tZVxuXHRcdFx0XHRpZiAodm5vZGUudGFnID09PSBcInNlbGVjdFwiKSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRpZiAodm5vZGUuZG9tLnNlbGVjdGVkSW5kZXggPT09IC0xICYmIHZub2RlLmRvbSA9PT0gJGRvYy5hY3RpdmVFbGVtZW50KSByZXR1cm5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKG9sZCAhPT0gbnVsbCAmJiB2bm9kZS5kb20udmFsdWUgPT09IG5vcm1hbGl6ZWQwICYmIHZub2RlLmRvbSA9PT0gJGRvYy5hY3RpdmVFbGVtZW50KSByZXR1cm5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9zZXR0aW5nIG9wdGlvblt2YWx1ZV0gdG8gc2FtZSB2YWx1ZSB3aGlsZSBoYXZpbmcgc2VsZWN0IG9wZW4gYmxpbmtzIHNlbGVjdCBkcm9wZG93biBpbiBDaHJvbWVcblx0XHRcdFx0aWYgKHZub2RlLnRhZyA9PT0gXCJvcHRpb25cIiAmJiBvbGQgIT0gbnVsbCAmJiB2bm9kZS5kb20udmFsdWUgPT09IG5vcm1hbGl6ZWQwKSByZXR1cm5cblx0XHRcdH1cblx0XHRcdC8vIElmIHlvdSBhc3NpZ24gYW4gaW5wdXQgdHlwZTEgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFIDExIHdpdGggYW4gYXNzaWdubWVudCBleHByZXNzaW9uLCBhbiBlcnJvcjAgd2lsbCBvY2N1ci5cblx0XHRcdGlmICh2bm9kZS50YWcgPT09IFwiaW5wdXRcIiAmJiBrZXkyID09PSBcInR5cGVcIikge1xuXHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXkyLCB2YWx1ZSlcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRlbGVtZW50W2tleTJdID0gdmFsdWVcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRpZiAodmFsdWUpIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleTIsIFwiXCIpXG5cdFx0XHRcdGVsc2UgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5Milcblx0XHRcdH1cblx0XHRcdGVsc2UgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5MiA9PT0gXCJjbGFzc05hbWVcIiA/IFwiY2xhc3NcIiA6IGtleTIsIHZhbHVlKVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiBzZXRMYXRlQXR0cnModm5vZGUpIHtcblx0XHR2YXIgYXR0cnMyID0gdm5vZGUuYXR0cnNcblx0XHRpZiAodm5vZGUudGFnID09PSBcInNlbGVjdFwiICYmIGF0dHJzMiAhPSBudWxsKSB7XG5cdFx0XHRpZiAoXCJ2YWx1ZVwiIGluIGF0dHJzMikgc2V0QXR0cih2bm9kZSwgXCJ2YWx1ZVwiLCBudWxsLCBhdHRyczIudmFsdWUsIHVuZGVmaW5lZClcblx0XHRcdGlmIChcInNlbGVjdGVkSW5kZXhcIiBpbiBhdHRyczIpIHNldEF0dHIodm5vZGUsIFwic2VsZWN0ZWRJbmRleFwiLCBudWxsLCBhdHRyczIuc2VsZWN0ZWRJbmRleCwgdW5kZWZpbmVkKVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiB1cGRhdGVBdHRycyh2bm9kZSwgb2xkLCBhdHRyczIsIG5zKSB7XG5cdFx0aWYgKGF0dHJzMiAhPSBudWxsKSB7XG5cdFx0XHRmb3IgKHZhciBrZXkyIGluIGF0dHJzMikge1xuXHRcdFx0XHRzZXRBdHRyKHZub2RlLCBrZXkyLCBvbGQgJiYgb2xkW2tleTJdLCBhdHRyczJba2V5Ml0sIG5zKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAob2xkICE9IG51bGwpIHtcblx0XHRcdGZvciAodmFyIGtleTIgaW4gb2xkKSB7XG5cdFx0XHRcdGlmIChhdHRyczIgPT0gbnVsbCB8fCAhKGtleTIgaW4gYXR0cnMyKSkge1xuXHRcdFx0XHRcdGlmIChrZXkyID09PSBcImNsYXNzTmFtZVwiKSBrZXkyID0gXCJjbGFzc1wiXG5cdFx0XHRcdFx0aWYgKGtleTJbMF0gPT09IFwib1wiICYmIGtleTJbMV0gPT09IFwiblwiICYmICFpc0xpZmVjeWNsZU1ldGhvZChrZXkyKSkgdXBkYXRlRXZlbnQodm5vZGUsIGtleTIsIHVuZGVmaW5lZClcblx0XHRcdFx0XHRlbHNlIGlmIChrZXkyICE9PSBcImtleVwiKSB2bm9kZS5kb20ucmVtb3ZlQXR0cmlidXRlKGtleTIpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gaXNGb3JtQXR0cmlidXRlKHZub2RlLCBhdHRyKSB7XG5cdFx0cmV0dXJuIGF0dHIgPT09IFwidmFsdWVcIiB8fCBhdHRyID09PSBcImNoZWNrZWRcIiB8fCBhdHRyID09PSBcInNlbGVjdGVkSW5kZXhcIiB8fCBhdHRyID09PSBcInNlbGVjdGVkXCIgJiYgdm5vZGUuZG9tID09PSAkZG9jLmFjdGl2ZUVsZW1lbnRcblx0fVxuXHRmdW5jdGlvbiBpc0xpZmVjeWNsZU1ldGhvZChhdHRyKSB7XG5cdFx0cmV0dXJuIGF0dHIgPT09IFwib25pbml0XCIgfHwgYXR0ciA9PT0gXCJvbmNyZWF0ZVwiIHx8IGF0dHIgPT09IFwib251cGRhdGVcIiB8fCBhdHRyID09PSBcIm9ucmVtb3ZlXCIgfHwgYXR0ciA9PT0gXCJvbmJlZm9yZXJlbW92ZVwiIHx8IGF0dHIgPT09IFwib25iZWZvcmV1cGRhdGVcIlxuXHR9XG5cdGZ1bmN0aW9uIGlzQXR0cmlidXRlKGF0dHIpIHtcblx0XHRyZXR1cm4gYXR0ciA9PT0gXCJocmVmXCIgfHwgYXR0ciA9PT0gXCJsaXN0XCIgfHwgYXR0ciA9PT0gXCJmb3JtXCIgfHwgYXR0ciA9PT0gXCJ3aWR0aFwiIHx8IGF0dHIgPT09IFwiaGVpZ2h0XCIvLyB8fCBhdHRyID09PSBcInR5cGVcIlxuXHR9XG5cdGZ1bmN0aW9uIGlzQ3VzdG9tRWxlbWVudCh2bm9kZSl7XG5cdFx0cmV0dXJuIHZub2RlLmF0dHJzLmlzIHx8IHZub2RlLnRhZy5pbmRleE9mKFwiLVwiKSA+IC0xXG5cdH1cblx0ZnVuY3Rpb24gaGFzSW50ZWdyYXRpb25NZXRob2RzKHNvdXJjZSkge1xuXHRcdHJldHVybiBzb3VyY2UgIT0gbnVsbCAmJiAoc291cmNlLm9uY3JlYXRlIHx8IHNvdXJjZS5vbnVwZGF0ZSB8fCBzb3VyY2Uub25iZWZvcmVyZW1vdmUgfHwgc291cmNlLm9ucmVtb3ZlKVxuXHR9XG5cdC8vc3R5bGVcblx0ZnVuY3Rpb24gdXBkYXRlU3R5bGUoZWxlbWVudCwgb2xkLCBzdHlsZSkge1xuXHRcdGlmIChvbGQgPT09IHN0eWxlKSBlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiLCBvbGQgPSBudWxsXG5cdFx0aWYgKHN0eWxlID09IG51bGwpIGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwiXCJcblx0XHRlbHNlIGlmICh0eXBlb2Ygc3R5bGUgPT09IFwic3RyaW5nXCIpIGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IHN0eWxlXG5cdFx0ZWxzZSB7XG5cdFx0XHRpZiAodHlwZW9mIG9sZCA9PT0gXCJzdHJpbmdcIikgZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJcIlxuXHRcdFx0Zm9yICh2YXIga2V5MiBpbiBzdHlsZSkge1xuXHRcdFx0XHRlbGVtZW50LnN0eWxlW2tleTJdID0gc3R5bGVba2V5Ml1cblx0XHRcdH1cblx0XHRcdGlmIChvbGQgIT0gbnVsbCAmJiB0eXBlb2Ygb2xkICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGZvciAodmFyIGtleTIgaW4gb2xkKSB7XG5cdFx0XHRcdFx0aWYgKCEoa2V5MiBpbiBzdHlsZSkpIGVsZW1lbnQuc3R5bGVba2V5Ml0gPSBcIlwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly9ldmVudFxuXHRmdW5jdGlvbiB1cGRhdGVFdmVudCh2bm9kZSwga2V5MiwgdmFsdWUpIHtcblx0XHR2YXIgZWxlbWVudCA9IHZub2RlLmRvbVxuXHRcdHZhciBjYWxsYmFjayA9IHR5cGVvZiBvbmV2ZW50ICE9PSBcImZ1bmN0aW9uXCIgPyB2YWx1ZSA6IGZ1bmN0aW9uKGUpIHtcblx0XHRcdHZhciByZXN1bHQgPSB2YWx1ZS5jYWxsKGVsZW1lbnQsIGUpXG5cdFx0XHRvbmV2ZW50LmNhbGwoZWxlbWVudCwgZSlcblx0XHRcdHJldHVybiByZXN1bHRcblx0XHR9XG5cdFx0aWYgKGtleTIgaW4gZWxlbWVudCkgZWxlbWVudFtrZXkyXSA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gY2FsbGJhY2sgOiBudWxsXG5cdFx0ZWxzZSB7XG5cdFx0XHR2YXIgZXZlbnROYW1lID0ga2V5Mi5zbGljZSgyKVxuXHRcdFx0aWYgKHZub2RlLmV2ZW50cyA9PT0gdW5kZWZpbmVkKSB2bm9kZS5ldmVudHMgPSB7fVxuXHRcdFx0aWYgKHZub2RlLmV2ZW50c1trZXkyXSA9PT0gY2FsbGJhY2spIHJldHVyblxuXHRcdFx0aWYgKHZub2RlLmV2ZW50c1trZXkyXSAhPSBudWxsKSBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB2bm9kZS5ldmVudHNba2V5Ml0sIGZhbHNlKVxuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHZub2RlLmV2ZW50c1trZXkyXSA9IGNhbGxiYWNrXG5cdFx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHZub2RlLmV2ZW50c1trZXkyXSwgZmFsc2UpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vbGlmZWN5Y2xlXG5cdGZ1bmN0aW9uIGluaXRMaWZlY3ljbGUoc291cmNlLCB2bm9kZSwgaG9va3MpIHtcblx0XHRpZiAodHlwZW9mIHNvdXJjZS5vbmluaXQgPT09IFwiZnVuY3Rpb25cIikgc291cmNlLm9uaW5pdC5jYWxsKHZub2RlLnN0YXRlLCB2bm9kZSlcblx0XHRpZiAodHlwZW9mIHNvdXJjZS5vbmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiKSBob29rcy5wdXNoKHNvdXJjZS5vbmNyZWF0ZS5iaW5kKHZub2RlLnN0YXRlLCB2bm9kZSkpXG5cdH1cblx0ZnVuY3Rpb24gdXBkYXRlTGlmZWN5Y2xlKHNvdXJjZSwgdm5vZGUsIGhvb2tzKSB7XG5cdFx0aWYgKHR5cGVvZiBzb3VyY2Uub251cGRhdGUgPT09IFwiZnVuY3Rpb25cIikgaG9va3MucHVzaChzb3VyY2Uub251cGRhdGUuYmluZCh2bm9kZS5zdGF0ZSwgdm5vZGUpKVxuXHR9XG5cdGZ1bmN0aW9uIHNob3VsZE5vdFVwZGF0ZSh2bm9kZSwgb2xkKSB7XG5cdFx0dmFyIGZvcmNlVm5vZGVVcGRhdGUsIGZvcmNlQ29tcG9uZW50VXBkYXRlXG5cdFx0aWYgKHZub2RlLmF0dHJzICE9IG51bGwgJiYgdHlwZW9mIHZub2RlLmF0dHJzLm9uYmVmb3JldXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIGZvcmNlVm5vZGVVcGRhdGUgPSB2bm9kZS5hdHRycy5vbmJlZm9yZXVwZGF0ZS5jYWxsKHZub2RlLnN0YXRlLCB2bm9kZSwgb2xkKVxuXHRcdGlmICh0eXBlb2Ygdm5vZGUudGFnICE9PSBcInN0cmluZ1wiICYmIHR5cGVvZiB2bm9kZS5fc3RhdGUub25iZWZvcmV1cGRhdGUgPT09IFwiZnVuY3Rpb25cIikgZm9yY2VDb21wb25lbnRVcGRhdGUgPSB2bm9kZS5fc3RhdGUub25iZWZvcmV1cGRhdGUuY2FsbCh2bm9kZS5zdGF0ZSwgdm5vZGUsIG9sZClcblx0XHRpZiAoIShmb3JjZVZub2RlVXBkYXRlID09PSB1bmRlZmluZWQgJiYgZm9yY2VDb21wb25lbnRVcGRhdGUgPT09IHVuZGVmaW5lZCkgJiYgIWZvcmNlVm5vZGVVcGRhdGUgJiYgIWZvcmNlQ29tcG9uZW50VXBkYXRlKSB7XG5cdFx0XHR2bm9kZS5kb20gPSBvbGQuZG9tXG5cdFx0XHR2bm9kZS5kb21TaXplID0gb2xkLmRvbVNpemVcblx0XHRcdHZub2RlLmluc3RhbmNlID0gb2xkLmluc3RhbmNlXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXHRmdW5jdGlvbiByZW5kZXIoZG9tLCB2bm9kZXMpIHtcblx0XHRpZiAoIWRvbSkgdGhyb3cgbmV3IEVycm9yKFwiRW5zdXJlIHRoZSBET00gZWxlbWVudCBiZWluZyBwYXNzZWQgdG8gbS5yb3V0ZS9tLm1vdW50L20ucmVuZGVyIGlzIG5vdCB1bmRlZmluZWQuXCIpXG5cdFx0dmFyIGhvb2tzID0gW11cblx0XHR2YXIgYWN0aXZlID0gJGRvYy5hY3RpdmVFbGVtZW50XG5cdFx0dmFyIG5hbWVzcGFjZSA9IGRvbS5uYW1lc3BhY2VVUklcblx0XHQvLyBGaXJzdCB0aW1lMCByZW5kZXJpbmcgaW50byBhIG5vZGUgY2xlYXJzIGl0IG91dFxuXHRcdGlmIChkb20udm5vZGVzID09IG51bGwpIGRvbS50ZXh0Q29udGVudCA9IFwiXCJcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodm5vZGVzKSkgdm5vZGVzID0gW3Zub2Rlc11cblx0XHR1cGRhdGVOb2Rlcyhkb20sIGRvbS52bm9kZXMsIFZub2RlLm5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlcyksIGZhbHNlLCBob29rcywgbnVsbCwgbmFtZXNwYWNlID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiA/IHVuZGVmaW5lZCA6IG5hbWVzcGFjZSlcblx0XHRkb20udm5vZGVzID0gdm5vZGVzXG5cdFx0Ly8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gcmV0dXJuIG51bGwgaW4gSUUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2FjdGl2ZUVsZW1lbnRcblx0XHRpZiAoYWN0aXZlICE9IG51bGwgJiYgJGRvYy5hY3RpdmVFbGVtZW50ICE9PSBhY3RpdmUpIGFjdGl2ZS5mb2N1cygpXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykgaG9va3NbaV0oKVxuXHR9XG5cdHJldHVybiB7cmVuZGVyOiByZW5kZXIsIHNldEV2ZW50Q2FsbGJhY2s6IHNldEV2ZW50Q2FsbGJhY2t9XG59XG5mdW5jdGlvbiB0aHJvdHRsZShjYWxsYmFjaykge1xuXHQvLzYwZnBzIHRyYW5zbGF0ZXMgdG8gMTYuNm1zLCByb3VuZCBpdCBkb3duIHNpbmNlIHNldFRpbWVvdXQgcmVxdWlyZXMgaW50XG5cdHZhciB0aW1lID0gMTZcblx0dmFyIGxhc3QgPSAwLCBwZW5kaW5nID0gbnVsbFxuXHR2YXIgdGltZW91dCA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09IFwiZnVuY3Rpb25cIiA/IHJlcXVlc3RBbmltYXRpb25GcmFtZSA6IHNldFRpbWVvdXRcblx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBub3cgPSBEYXRlLm5vdygpXG5cdFx0aWYgKGxhc3QgPT09IDAgfHwgbm93IC0gbGFzdCA+PSB0aW1lKSB7XG5cdFx0XHRsYXN0ID0gbm93XG5cdFx0XHRjYWxsYmFjaygpXG5cdFx0fVxuXHRcdGVsc2UgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcblx0XHRcdHBlbmRpbmcgPSB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRwZW5kaW5nID0gbnVsbFxuXHRcdFx0XHRjYWxsYmFjaygpXG5cdFx0XHRcdGxhc3QgPSBEYXRlLm5vdygpXG5cdFx0XHR9LCB0aW1lIC0gKG5vdyAtIGxhc3QpKVxuXHRcdH1cblx0fVxufVxudmFyIF8xMSA9IGZ1bmN0aW9uKCR3aW5kb3cpIHtcblx0dmFyIHJlbmRlclNlcnZpY2UgPSBjb3JlUmVuZGVyZXIoJHdpbmRvdylcblx0cmVuZGVyU2VydmljZS5zZXRFdmVudENhbGxiYWNrKGZ1bmN0aW9uKGUpIHtcblx0XHRpZiAoZS5yZWRyYXcgPT09IGZhbHNlKSBlLnJlZHJhdyA9IHVuZGVmaW5lZFxuXHRcdGVsc2UgcmVkcmF3KClcblx0fSlcblx0dmFyIGNhbGxiYWNrcyA9IFtdXG5cdGZ1bmN0aW9uIHN1YnNjcmliZShrZXkxLCBjYWxsYmFjaykge1xuXHRcdHVuc3Vic2NyaWJlKGtleTEpXG5cdFx0Y2FsbGJhY2tzLnB1c2goa2V5MSwgdGhyb3R0bGUoY2FsbGJhY2spKVxuXHR9XG5cdGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGtleTEpIHtcblx0XHR2YXIgaW5kZXggPSBjYWxsYmFja3MuaW5kZXhPZihrZXkxKVxuXHRcdGlmIChpbmRleCA+IC0xKSBjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAyKVxuXHR9XG5cdGZ1bmN0aW9uIHJlZHJhdygpIHtcblx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkgKz0gMikge1xuXHRcdFx0Y2FsbGJhY2tzW2ldKClcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtzdWJzY3JpYmU6IHN1YnNjcmliZSwgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlLCByZWRyYXc6IHJlZHJhdywgcmVuZGVyOiByZW5kZXJTZXJ2aWNlLnJlbmRlcn1cbn1cbnZhciByZWRyYXdTZXJ2aWNlID0gXzExKHdpbmRvdylcbnJlcXVlc3RTZXJ2aWNlLnNldENvbXBsZXRpb25DYWxsYmFjayhyZWRyYXdTZXJ2aWNlLnJlZHJhdylcbnZhciBfMTYgPSBmdW5jdGlvbihyZWRyYXdTZXJ2aWNlMCkge1xuXHRyZXR1cm4gZnVuY3Rpb24ocm9vdCwgY29tcG9uZW50KSB7XG5cdFx0aWYgKGNvbXBvbmVudCA9PT0gbnVsbCkge1xuXHRcdFx0cmVkcmF3U2VydmljZTAucmVuZGVyKHJvb3QsIFtdKVxuXHRcdFx0cmVkcmF3U2VydmljZTAudW5zdWJzY3JpYmUocm9vdClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRcblx0XHRpZiAoY29tcG9uZW50LnZpZXcgPT0gbnVsbCAmJiB0eXBlb2YgY29tcG9uZW50ICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcIm0ubW91bnQoZWxlbWVudCwgY29tcG9uZW50KSBleHBlY3RzIGEgY29tcG9uZW50LCBub3QgYSB2bm9kZVwiKVxuXHRcdFxuXHRcdHZhciBydW4wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZWRyYXdTZXJ2aWNlMC5yZW5kZXIocm9vdCwgVm5vZGUoY29tcG9uZW50KSlcblx0XHR9XG5cdFx0cmVkcmF3U2VydmljZTAuc3Vic2NyaWJlKHJvb3QsIHJ1bjApXG5cdFx0cmVkcmF3U2VydmljZTAucmVkcmF3KClcblx0fVxufVxubS5tb3VudCA9IF8xNihyZWRyYXdTZXJ2aWNlKVxudmFyIFByb21pc2UgPSBQcm9taXNlUG9seWZpbGxcbnZhciBwYXJzZVF1ZXJ5U3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdGlmIChzdHJpbmcgPT09IFwiXCIgfHwgc3RyaW5nID09IG51bGwpIHJldHVybiB7fVxuXHRpZiAoc3RyaW5nLmNoYXJBdCgwKSA9PT0gXCI/XCIpIHN0cmluZyA9IHN0cmluZy5zbGljZSgxKVxuXHR2YXIgZW50cmllcyA9IHN0cmluZy5zcGxpdChcIiZcIiksIGRhdGEwID0ge30sIGNvdW50ZXJzID0ge31cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGVudHJ5ID0gZW50cmllc1tpXS5zcGxpdChcIj1cIilcblx0XHR2YXIga2V5NSA9IGRlY29kZVVSSUNvbXBvbmVudChlbnRyeVswXSlcblx0XHR2YXIgdmFsdWUgPSBlbnRyeS5sZW5ndGggPT09IDIgPyBkZWNvZGVVUklDb21wb25lbnQoZW50cnlbMV0pIDogXCJcIlxuXHRcdGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHZhbHVlID0gdHJ1ZVxuXHRcdGVsc2UgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHZhbHVlID0gZmFsc2Vcblx0XHR2YXIgbGV2ZWxzID0ga2V5NS5zcGxpdCgvXFxdXFxbP3xcXFsvKVxuXHRcdHZhciBjdXJzb3IgPSBkYXRhMFxuXHRcdGlmIChrZXk1LmluZGV4T2YoXCJbXCIpID4gLTEpIGxldmVscy5wb3AoKVxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgbGV2ZWxzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgbGV2ZWwgPSBsZXZlbHNbal0sIG5leHRMZXZlbCA9IGxldmVsc1tqICsgMV1cblx0XHRcdHZhciBpc051bWJlciA9IG5leHRMZXZlbCA9PSBcIlwiIHx8ICFpc05hTihwYXJzZUludChuZXh0TGV2ZWwsIDEwKSlcblx0XHRcdHZhciBpc1ZhbHVlID0gaiA9PT0gbGV2ZWxzLmxlbmd0aCAtIDFcblx0XHRcdGlmIChsZXZlbCA9PT0gXCJcIikge1xuXHRcdFx0XHR2YXIga2V5NSA9IGxldmVscy5zbGljZSgwLCBqKS5qb2luKClcblx0XHRcdFx0aWYgKGNvdW50ZXJzW2tleTVdID09IG51bGwpIGNvdW50ZXJzW2tleTVdID0gMFxuXHRcdFx0XHRsZXZlbCA9IGNvdW50ZXJzW2tleTVdKytcblx0XHRcdH1cblx0XHRcdGlmIChjdXJzb3JbbGV2ZWxdID09IG51bGwpIHtcblx0XHRcdFx0Y3Vyc29yW2xldmVsXSA9IGlzVmFsdWUgPyB2YWx1ZSA6IGlzTnVtYmVyID8gW10gOiB7fVxuXHRcdFx0fVxuXHRcdFx0Y3Vyc29yID0gY3Vyc29yW2xldmVsXVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTBcbn1cbnZhciBjb3JlUm91dGVyID0gZnVuY3Rpb24oJHdpbmRvdykge1xuXHR2YXIgc3VwcG9ydHNQdXNoU3RhdGUgPSB0eXBlb2YgJHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSA9PT0gXCJmdW5jdGlvblwiXG5cdHZhciBjYWxsQXN5bmMwID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiID8gc2V0SW1tZWRpYXRlIDogc2V0VGltZW91dFxuXHRmdW5jdGlvbiBub3JtYWxpemUxKGZyYWdtZW50MCkge1xuXHRcdHZhciBkYXRhID0gJHdpbmRvdy5sb2NhdGlvbltmcmFnbWVudDBdLnJlcGxhY2UoLyg/OiVbYS1mODldW2EtZjAtOV0pKy9naW0sIGRlY29kZVVSSUNvbXBvbmVudClcblx0XHRpZiAoZnJhZ21lbnQwID09PSBcInBhdGhuYW1lXCIgJiYgZGF0YVswXSAhPT0gXCIvXCIpIGRhdGEgPSBcIi9cIiArIGRhdGFcblx0XHRyZXR1cm4gZGF0YVxuXHR9XG5cdHZhciBhc3luY0lkXG5cdGZ1bmN0aW9uIGRlYm91bmNlQXN5bmMoY2FsbGJhY2swKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKGFzeW5jSWQgIT0gbnVsbCkgcmV0dXJuXG5cdFx0XHRhc3luY0lkID0gY2FsbEFzeW5jMChmdW5jdGlvbigpIHtcblx0XHRcdFx0YXN5bmNJZCA9IG51bGxcblx0XHRcdFx0Y2FsbGJhY2swKClcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoLCBxdWVyeURhdGEsIGhhc2hEYXRhKSB7XG5cdFx0dmFyIHF1ZXJ5SW5kZXggPSBwYXRoLmluZGV4T2YoXCI/XCIpXG5cdFx0dmFyIGhhc2hJbmRleCA9IHBhdGguaW5kZXhPZihcIiNcIilcblx0XHR2YXIgcGF0aEVuZCA9IHF1ZXJ5SW5kZXggPiAtMSA/IHF1ZXJ5SW5kZXggOiBoYXNoSW5kZXggPiAtMSA/IGhhc2hJbmRleCA6IHBhdGgubGVuZ3RoXG5cdFx0aWYgKHF1ZXJ5SW5kZXggPiAtMSkge1xuXHRcdFx0dmFyIHF1ZXJ5RW5kID0gaGFzaEluZGV4ID4gLTEgPyBoYXNoSW5kZXggOiBwYXRoLmxlbmd0aFxuXHRcdFx0dmFyIHF1ZXJ5UGFyYW1zID0gcGFyc2VRdWVyeVN0cmluZyhwYXRoLnNsaWNlKHF1ZXJ5SW5kZXggKyAxLCBxdWVyeUVuZCkpXG5cdFx0XHRmb3IgKHZhciBrZXk0IGluIHF1ZXJ5UGFyYW1zKSBxdWVyeURhdGFba2V5NF0gPSBxdWVyeVBhcmFtc1trZXk0XVxuXHRcdH1cblx0XHRpZiAoaGFzaEluZGV4ID4gLTEpIHtcblx0XHRcdHZhciBoYXNoUGFyYW1zID0gcGFyc2VRdWVyeVN0cmluZyhwYXRoLnNsaWNlKGhhc2hJbmRleCArIDEpKVxuXHRcdFx0Zm9yICh2YXIga2V5NCBpbiBoYXNoUGFyYW1zKSBoYXNoRGF0YVtrZXk0XSA9IGhhc2hQYXJhbXNba2V5NF1cblx0XHR9XG5cdFx0cmV0dXJuIHBhdGguc2xpY2UoMCwgcGF0aEVuZClcblx0fVxuXHR2YXIgcm91dGVyID0ge3ByZWZpeDogXCIjIVwifVxuXHRyb3V0ZXIuZ2V0UGF0aCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0eXBlMiA9IHJvdXRlci5wcmVmaXguY2hhckF0KDApXG5cdFx0c3dpdGNoICh0eXBlMikge1xuXHRcdFx0Y2FzZSBcIiNcIjogcmV0dXJuIG5vcm1hbGl6ZTEoXCJoYXNoXCIpLnNsaWNlKHJvdXRlci5wcmVmaXgubGVuZ3RoKVxuXHRcdFx0Y2FzZSBcIj9cIjogcmV0dXJuIG5vcm1hbGl6ZTEoXCJzZWFyY2hcIikuc2xpY2Uocm91dGVyLnByZWZpeC5sZW5ndGgpICsgbm9ybWFsaXplMShcImhhc2hcIilcblx0XHRcdGRlZmF1bHQ6IHJldHVybiBub3JtYWxpemUxKFwicGF0aG5hbWVcIikuc2xpY2Uocm91dGVyLnByZWZpeC5sZW5ndGgpICsgbm9ybWFsaXplMShcInNlYXJjaFwiKSArIG5vcm1hbGl6ZTEoXCJoYXNoXCIpXG5cdFx0fVxuXHR9XG5cdHJvdXRlci5zZXRQYXRoID0gZnVuY3Rpb24ocGF0aCwgZGF0YSwgb3B0aW9ucykge1xuXHRcdHZhciBxdWVyeURhdGEgPSB7fSwgaGFzaERhdGEgPSB7fVxuXHRcdHBhdGggPSBwYXJzZVBhdGgocGF0aCwgcXVlcnlEYXRhLCBoYXNoRGF0YSlcblx0XHRpZiAoZGF0YSAhPSBudWxsKSB7XG5cdFx0XHRmb3IgKHZhciBrZXk0IGluIGRhdGEpIHF1ZXJ5RGF0YVtrZXk0XSA9IGRhdGFba2V5NF1cblx0XHRcdHBhdGggPSBwYXRoLnJlcGxhY2UoLzooW15cXC9dKykvZywgZnVuY3Rpb24obWF0Y2gyLCB0b2tlbikge1xuXHRcdFx0XHRkZWxldGUgcXVlcnlEYXRhW3Rva2VuXVxuXHRcdFx0XHRyZXR1cm4gZGF0YVt0b2tlbl1cblx0XHRcdH0pXG5cdFx0fVxuXHRcdHZhciBxdWVyeSA9IGJ1aWxkUXVlcnlTdHJpbmcocXVlcnlEYXRhKVxuXHRcdGlmIChxdWVyeSkgcGF0aCArPSBcIj9cIiArIHF1ZXJ5XG5cdFx0dmFyIGhhc2ggPSBidWlsZFF1ZXJ5U3RyaW5nKGhhc2hEYXRhKVxuXHRcdGlmIChoYXNoKSBwYXRoICs9IFwiI1wiICsgaGFzaFxuXHRcdGlmIChzdXBwb3J0c1B1c2hTdGF0ZSkge1xuXHRcdFx0dmFyIHN0YXRlID0gb3B0aW9ucyA/IG9wdGlvbnMuc3RhdGUgOiBudWxsXG5cdFx0XHR2YXIgdGl0bGUgPSBvcHRpb25zID8gb3B0aW9ucy50aXRsZSA6IG51bGxcblx0XHRcdCR3aW5kb3cub25wb3BzdGF0ZSgpXG5cdFx0XHRpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlcGxhY2UpICR3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUsIHRpdGxlLCByb3V0ZXIucHJlZml4ICsgcGF0aClcblx0XHRcdGVsc2UgJHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgdGl0bGUsIHJvdXRlci5wcmVmaXggKyBwYXRoKVxuXHRcdH1cblx0XHRlbHNlICR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJvdXRlci5wcmVmaXggKyBwYXRoXG5cdH1cblx0cm91dGVyLmRlZmluZVJvdXRlcyA9IGZ1bmN0aW9uKHJvdXRlcywgcmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0ZnVuY3Rpb24gcmVzb2x2ZVJvdXRlKCkge1xuXHRcdFx0dmFyIHBhdGggPSByb3V0ZXIuZ2V0UGF0aCgpXG5cdFx0XHR2YXIgcGFyYW1zID0ge31cblx0XHRcdHZhciBwYXRobmFtZSA9IHBhcnNlUGF0aChwYXRoLCBwYXJhbXMsIHBhcmFtcylcblx0XHRcdHZhciBzdGF0ZSA9ICR3aW5kb3cuaGlzdG9yeS5zdGF0ZVxuXHRcdFx0aWYgKHN0YXRlICE9IG51bGwpIHtcblx0XHRcdFx0Zm9yICh2YXIgayBpbiBzdGF0ZSkgcGFyYW1zW2tdID0gc3RhdGVba11cblx0XHRcdH1cblx0XHRcdGZvciAodmFyIHJvdXRlMCBpbiByb3V0ZXMpIHtcblx0XHRcdFx0dmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFwiXlwiICsgcm91dGUwLnJlcGxhY2UoLzpbXlxcL10rP1xcLnszfS9nLCBcIiguKj8pXCIpLnJlcGxhY2UoLzpbXlxcL10rL2csIFwiKFteXFxcXC9dKylcIikgKyBcIlxcLz8kXCIpXG5cdFx0XHRcdGlmIChtYXRjaGVyLnRlc3QocGF0aG5hbWUpKSB7XG5cdFx0XHRcdFx0cGF0aG5hbWUucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBrZXlzID0gcm91dGUwLm1hdGNoKC86W15cXC9dKy9nKSB8fCBbXVxuXHRcdFx0XHRcdFx0dmFyIHZhbHVlcyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxLCAtMilcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRwYXJhbXNba2V5c1tpXS5yZXBsYWNlKC86fFxcLi9nLCBcIlwiKV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWVzW2ldKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVzb2x2ZShyb3V0ZXNbcm91dGUwXSwgcGFyYW1zLCBwYXRoLCByb3V0ZTApXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmVqZWN0KHBhdGgsIHBhcmFtcylcblx0XHR9XG5cdFx0aWYgKHN1cHBvcnRzUHVzaFN0YXRlKSAkd2luZG93Lm9ucG9wc3RhdGUgPSBkZWJvdW5jZUFzeW5jKHJlc29sdmVSb3V0ZSlcblx0XHRlbHNlIGlmIChyb3V0ZXIucHJlZml4LmNoYXJBdCgwKSA9PT0gXCIjXCIpICR3aW5kb3cub25oYXNoY2hhbmdlID0gcmVzb2x2ZVJvdXRlXG5cdFx0cmVzb2x2ZVJvdXRlKClcblx0fVxuXHRyZXR1cm4gcm91dGVyXG59XG52YXIgXzIwID0gZnVuY3Rpb24oJHdpbmRvdywgcmVkcmF3U2VydmljZTApIHtcblx0dmFyIHJvdXRlU2VydmljZSA9IGNvcmVSb3V0ZXIoJHdpbmRvdylcblx0dmFyIGlkZW50aXR5ID0gZnVuY3Rpb24odikge3JldHVybiB2fVxuXHR2YXIgcmVuZGVyMSwgY29tcG9uZW50LCBhdHRyczMsIGN1cnJlbnRQYXRoLCBsYXN0VXBkYXRlXG5cdHZhciByb3V0ZSA9IGZ1bmN0aW9uKHJvb3QsIGRlZmF1bHRSb3V0ZSwgcm91dGVzKSB7XG5cdFx0aWYgKHJvb3QgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiRW5zdXJlIHRoZSBET00gZWxlbWVudCB0aGF0IHdhcyBwYXNzZWQgdG8gYG0ucm91dGVgIGlzIG5vdCB1bmRlZmluZWRcIilcblx0XHR2YXIgcnVuMSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKHJlbmRlcjEgIT0gbnVsbCkgcmVkcmF3U2VydmljZTAucmVuZGVyKHJvb3QsIHJlbmRlcjEoVm5vZGUoY29tcG9uZW50LCBhdHRyczMua2V5LCBhdHRyczMpKSlcblx0XHR9XG5cdFx0dmFyIGJhaWwgPSBmdW5jdGlvbihwYXRoKSB7XG5cdFx0XHRpZiAocGF0aCAhPT0gZGVmYXVsdFJvdXRlKSByb3V0ZVNlcnZpY2Uuc2V0UGF0aChkZWZhdWx0Um91dGUsIG51bGwsIHtyZXBsYWNlOiB0cnVlfSlcblx0XHRcdGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IHJlc29sdmUgZGVmYXVsdCByb3V0ZSBcIiArIGRlZmF1bHRSb3V0ZSlcblx0XHR9XG5cdFx0cm91dGVTZXJ2aWNlLmRlZmluZVJvdXRlcyhyb3V0ZXMsIGZ1bmN0aW9uKHBheWxvYWQsIHBhcmFtcywgcGF0aCkge1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGxhc3RVcGRhdGUgPSBmdW5jdGlvbihyb3V0ZVJlc29sdmVyLCBjb21wKSB7XG5cdFx0XHRcdGlmICh1cGRhdGUgIT09IGxhc3RVcGRhdGUpIHJldHVyblxuXHRcdFx0XHRjb21wb25lbnQgPSBjb21wICE9IG51bGwgJiYgKHR5cGVvZiBjb21wLnZpZXcgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgY29tcCA9PT0gXCJmdW5jdGlvblwiKT8gY29tcCA6IFwiZGl2XCJcblx0XHRcdFx0YXR0cnMzID0gcGFyYW1zLCBjdXJyZW50UGF0aCA9IHBhdGgsIGxhc3RVcGRhdGUgPSBudWxsXG5cdFx0XHRcdHJlbmRlcjEgPSAocm91dGVSZXNvbHZlci5yZW5kZXIgfHwgaWRlbnRpdHkpLmJpbmQocm91dGVSZXNvbHZlcilcblx0XHRcdFx0cnVuMSgpXG5cdFx0XHR9XG5cdFx0XHRpZiAocGF5bG9hZC52aWV3IHx8IHR5cGVvZiBwYXlsb2FkID09PSBcImZ1bmN0aW9uXCIpIHVwZGF0ZSh7fSwgcGF5bG9hZClcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRpZiAocGF5bG9hZC5vbm1hdGNoKSB7XG5cdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHBheWxvYWQub25tYXRjaChwYXJhbXMsIHBhdGgpKS50aGVuKGZ1bmN0aW9uKHJlc29sdmVkKSB7XG5cdFx0XHRcdFx0XHR1cGRhdGUocGF5bG9hZCwgcmVzb2x2ZWQpXG5cdFx0XHRcdFx0fSwgYmFpbClcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHVwZGF0ZShwYXlsb2FkLCBcImRpdlwiKVxuXHRcdFx0fVxuXHRcdH0sIGJhaWwpXG5cdFx0cmVkcmF3U2VydmljZTAuc3Vic2NyaWJlKHJvb3QsIHJ1bjEpXG5cdH1cblx0cm91dGUuc2V0ID0gZnVuY3Rpb24ocGF0aCwgZGF0YSwgb3B0aW9ucykge1xuXHRcdGlmIChsYXN0VXBkYXRlICE9IG51bGwpIHtcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cdFx0XHRvcHRpb25zLnJlcGxhY2UgPSB0cnVlXG5cdFx0fVxuXHRcdGxhc3RVcGRhdGUgPSBudWxsXG5cdFx0cm91dGVTZXJ2aWNlLnNldFBhdGgocGF0aCwgZGF0YSwgb3B0aW9ucylcblx0fVxuXHRyb3V0ZS5nZXQgPSBmdW5jdGlvbigpIHtyZXR1cm4gY3VycmVudFBhdGh9XG5cdHJvdXRlLnByZWZpeCA9IGZ1bmN0aW9uKHByZWZpeDApIHtyb3V0ZVNlcnZpY2UucHJlZml4ID0gcHJlZml4MH1cblx0cm91dGUubGluayA9IGZ1bmN0aW9uKHZub2RlMSkge1xuXHRcdHZub2RlMS5kb20uc2V0QXR0cmlidXRlKFwiaHJlZlwiLCByb3V0ZVNlcnZpY2UucHJlZml4ICsgdm5vZGUxLmF0dHJzLmhyZWYpXG5cdFx0dm5vZGUxLmRvbS5vbmNsaWNrID0gZnVuY3Rpb24oZSkge1xuXHRcdFx0aWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkgfHwgZS5zaGlmdEtleSB8fCBlLndoaWNoID09PSAyKSByZXR1cm5cblx0XHRcdGUucHJldmVudERlZmF1bHQoKVxuXHRcdFx0ZS5yZWRyYXcgPSBmYWxzZVxuXHRcdFx0dmFyIGhyZWYgPSB0aGlzLmdldEF0dHJpYnV0ZShcImhyZWZcIilcblx0XHRcdGlmIChocmVmLmluZGV4T2Yocm91dGVTZXJ2aWNlLnByZWZpeCkgPT09IDApIGhyZWYgPSBocmVmLnNsaWNlKHJvdXRlU2VydmljZS5wcmVmaXgubGVuZ3RoKVxuXHRcdFx0cm91dGUuc2V0KGhyZWYsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuXHRcdH1cblx0fVxuXHRyb3V0ZS5wYXJhbSA9IGZ1bmN0aW9uKGtleTMpIHtcblx0XHRpZih0eXBlb2YgYXR0cnMzICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBrZXkzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gYXR0cnMzW2tleTNdXG5cdFx0cmV0dXJuIGF0dHJzM1xuXHR9XG5cdHJldHVybiByb3V0ZVxufVxubS5yb3V0ZSA9IF8yMCh3aW5kb3csIHJlZHJhd1NlcnZpY2UpXG5tLndpdGhBdHRyID0gZnVuY3Rpb24oYXR0ck5hbWUsIGNhbGxiYWNrMSwgY29udGV4dCkge1xuXHRyZXR1cm4gZnVuY3Rpb24oZSkge1xuXHRcdGNhbGxiYWNrMS5jYWxsKGNvbnRleHQgfHwgdGhpcywgYXR0ck5hbWUgaW4gZS5jdXJyZW50VGFyZ2V0ID8gZS5jdXJyZW50VGFyZ2V0W2F0dHJOYW1lXSA6IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpKVxuXHR9XG59XG52YXIgXzI4ID0gY29yZVJlbmRlcmVyKHdpbmRvdylcbm0ucmVuZGVyID0gXzI4LnJlbmRlclxubS5yZWRyYXcgPSByZWRyYXdTZXJ2aWNlLnJlZHJhd1xubS5yZXF1ZXN0ID0gcmVxdWVzdFNlcnZpY2UucmVxdWVzdFxubS5qc29ucCA9IHJlcXVlc3RTZXJ2aWNlLmpzb25wXG5tLnBhcnNlUXVlcnlTdHJpbmcgPSBwYXJzZVF1ZXJ5U3RyaW5nXG5tLmJ1aWxkUXVlcnlTdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nXG5tLnZlcnNpb24gPSBcIjEuMS42XCJcbm0udm5vZGUgPSBWbm9kZVxuaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIG1vZHVsZVtcImV4cG9ydHNcIl0gPSBtXG5lbHNlIHdpbmRvdy5tID0gbVxufSgpKTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIiwiOy8qISBzaG93ZG93biB2IDEuOS4wIC0gMTAtMTEtMjAxOCAqL1xyXG4oZnVuY3Rpb24oKXtcclxuLyoqXG4gKiBDcmVhdGVkIGJ5IFRpdmllIG9uIDEzLTA3LTIwMTUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdHMgKHNpbXBsZSkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG9taXRFeHRyYVdMSW5Db2RlQmxvY2tzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdPbWl0IHRoZSBkZWZhdWx0IGV4dHJhIHdoaXRlbGluZSBhZGRlZCB0byBjb2RlIGJsb2NrcycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIG5vSGVhZGVySWQ6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ1R1cm4gb24vb2ZmIGdlbmVyYXRlZCBoZWFkZXIgaWQnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBwcmVmaXhIZWFkZXJJZDoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnQWRkIGEgcHJlZml4IHRvIHRoZSBnZW5lcmF0ZWQgaGVhZGVyIGlkcy4gUGFzc2luZyBhIHN0cmluZyB3aWxsIHByZWZpeCB0aGF0IHN0cmluZyB0byB0aGUgaGVhZGVyIGlkLiBTZXR0aW5nIHRvIHRydWUgd2lsbCBhZGQgYSBnZW5lcmljIFxcJ3NlY3Rpb24tXFwnIHByZWZpeCcsXG4gICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgIH0sXG4gICAgcmF3UHJlZml4SGVhZGVySWQ6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ1NldHRpbmcgdGhpcyBvcHRpb24gdG8gdHJ1ZSB3aWxsIHByZXZlbnQgc2hvd2Rvd24gZnJvbSBtb2RpZnlpbmcgdGhlIHByZWZpeC4gVGhpcyBtaWdodCByZXN1bHQgaW4gbWFsZm9ybWVkIElEcyAoaWYsIGZvciBpbnN0YW5jZSwgdGhlIFwiIGNoYXIgaXMgdXNlZCBpbiB0aGUgcHJlZml4KScsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGdoQ29tcGF0aWJsZUhlYWRlcklkOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdHZW5lcmF0ZSBoZWFkZXIgaWRzIGNvbXBhdGlibGUgd2l0aCBnaXRodWIgc3R5bGUgKHNwYWNlcyBhcmUgcmVwbGFjZWQgd2l0aCBkYXNoZXMsIGEgYnVuY2ggb2Ygbm9uIGFscGhhbnVtZXJpYyBjaGFycyBhcmUgcmVtb3ZlZCknLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICByYXdIZWFkZXJJZDoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnUmVtb3ZlIG9ubHkgc3BhY2VzLCBcXCcgYW5kIFwiIGZyb20gZ2VuZXJhdGVkIGhlYWRlciBpZHMgKGluY2x1ZGluZyBwcmVmaXhlcyksIHJlcGxhY2luZyB0aGVtIHdpdGggZGFzaGVzICgtKS4gV0FSTklORzogVGhpcyBtaWdodCByZXN1bHQgaW4gbWFsZm9ybWVkIGlkcycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGhlYWRlckxldmVsU3RhcnQ6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ1RoZSBoZWFkZXIgYmxvY2tzIGxldmVsIHN0YXJ0JyxcbiAgICAgIHR5cGU6ICdpbnRlZ2VyJ1xuICAgIH0sXG4gICAgcGFyc2VJbWdEaW1lbnNpb25zOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdUdXJuIG9uL29mZiBpbWFnZSBkaW1lbnNpb24gcGFyc2luZycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIHNpbXBsaWZpZWRBdXRvTGluazoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnVHVybiBvbi9vZmYgR0ZNIGF1dG9saW5rIHN0eWxlJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgZXhjbHVkZVRyYWlsaW5nUHVuY3R1YXRpb25Gcm9tVVJMczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnRXhjbHVkZXMgdHJhaWxpbmcgcHVuY3R1YXRpb24gZnJvbSBsaW5rcyBnZW5lcmF0ZWQgd2l0aCBhdXRvTGlua2luZycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGxpdGVyYWxNaWRXb3JkVW5kZXJzY29yZXM6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ1BhcnNlIG1pZHdvcmQgdW5kZXJzY29yZXMgYXMgbGl0ZXJhbCB1bmRlcnNjb3JlcycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGxpdGVyYWxNaWRXb3JkQXN0ZXJpc2tzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdQYXJzZSBtaWR3b3JkIGFzdGVyaXNrcyBhcyBsaXRlcmFsIGFzdGVyaXNrcycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIHN0cmlrZXRocm91Z2g6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ1R1cm4gb24vb2ZmIHN0cmlrZXRocm91Z2ggc3VwcG9ydCcsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIHRhYmxlczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnVHVybiBvbi9vZmYgdGFibGVzIHN1cHBvcnQnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICB0YWJsZXNIZWFkZXJJZDoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnQWRkIGFuIGlkIHRvIHRhYmxlIGhlYWRlcnMnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBnaENvZGVCbG9ja3M6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICAgIGRlc2NyaWJlOiAnVHVybiBvbi9vZmYgR0ZNIGZlbmNlZCBjb2RlIGJsb2NrcyBzdXBwb3J0JyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgdGFza2xpc3RzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdUdXJuIG9uL29mZiBHRk0gdGFza2xpc3Qgc3VwcG9ydCcsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIHNtb290aExpdmVQcmV2aWV3OiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdQcmV2ZW50cyB3ZWlyZCBlZmZlY3RzIGluIGxpdmUgcHJldmlld3MgZHVlIHRvIGluY29tcGxldGUgaW5wdXQnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBzbWFydEluZGVudGF0aW9uRml4OiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdUcmllcyB0byBzbWFydGx5IGZpeCBpbmRlbnRhdGlvbiBpbiBlczYgc3RyaW5ncycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGRpc2FibGVGb3JjZWQ0U3BhY2VzSW5kZW50ZWRTdWJsaXN0czoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlzYWJsZXMgdGhlIHJlcXVpcmVtZW50IG9mIGluZGVudGluZyBuZXN0ZWQgc3VibGlzdHMgYnkgNCBzcGFjZXMnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBzaW1wbGVMaW5lQnJlYWtzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdQYXJzZXMgc2ltcGxlIGxpbmUgYnJlYWtzIGFzIDxicj4gKEdGTSBTdHlsZSknLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICByZXF1aXJlU3BhY2VCZWZvcmVIZWFkaW5nVGV4dDoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTWFrZXMgYWRkaW5nIGEgc3BhY2UgYmV0d2VlbiBgI2AgYW5kIHRoZSBoZWFkZXIgdGV4dCBtYW5kYXRvcnkgKEdGTSBTdHlsZSknLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBnaE1lbnRpb25zOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmFibGVzIGdpdGh1YiBAbWVudGlvbnMnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBnaE1lbnRpb25zTGluazoge1xuICAgICAgZGVmYXVsdFZhbHVlOiAnaHR0cHM6Ly9naXRodWIuY29tL3t1fScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NoYW5nZXMgdGhlIGxpbmsgZ2VuZXJhdGVkIGJ5IEBtZW50aW9ucy4gT25seSBhcHBsaWVzIGlmIGdoTWVudGlvbnMgb3B0aW9uIGlzIGVuYWJsZWQuJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgfSxcbiAgICBlbmNvZGVFbWFpbHM6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5jb2RlIGUtbWFpbCBhZGRyZXNzZXMgdGhyb3VnaCB0aGUgdXNlIG9mIENoYXJhY3RlciBFbnRpdGllcywgdHJhbnNmb3JtaW5nIEFTQ0lJIGUtbWFpbCBhZGRyZXNzZXMgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIGVudGl0aWVzJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgb3BlbkxpbmtzSW5OZXdXaW5kb3c6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjogJ09wZW4gYWxsIGxpbmtzIGluIG5ldyB3aW5kb3dzJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgYmFja3NsYXNoRXNjYXBlc0hUTUxUYWdzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdTdXBwb3J0IGZvciBIVE1MIFRhZyBlc2NhcGluZy4gZXg6IFxcPGRpdj5mb29cXDwvZGl2PicsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGVtb2ppOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmFibGUgZW1vamkgc3VwcG9ydC4gRXg6IGB0aGlzIGlzIGEgOnNtaWxlOiBlbW9qaWAnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICB1bmRlcmxpbmU6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuYWJsZSBzdXBwb3J0IGZvciB1bmRlcmxpbmUuIFN5bnRheCBpcyBkb3VibGUgb3IgdHJpcGxlIHVuZGVyc2NvcmVzOiBgX191bmRlcmxpbmUgd29yZF9fYC4gV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB1bmRlcnNjb3JlcyBubyBsb25nZXIgcGFyc2VzIGludG8gYDxlbT5gIGFuZCBgPHN0cm9uZz5gJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgY29tcGxldGVIVE1MRG9jdW1lbnQ6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjogJ091dHB1dHMgYSBjb21wbGV0ZSBodG1sIGRvY3VtZW50LCBpbmNsdWRpbmcgYDxodG1sPmAsIGA8aGVhZD5gIGFuZCBgPGJvZHk+YCB0YWdzJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuYWJsZSBzdXBwb3J0IGZvciBkb2N1bWVudCBtZXRhZGF0YSAoZGVmaW5lZCBhdCB0aGUgdG9wIG9mIHRoZSBkb2N1bWVudCBiZXR3ZWVuIGDCq8KrwqtgIGFuZCBgwrvCu8K7YCBvciBiZXR3ZWVuIGAtLS1gIGFuZCBgLS0tYCkuJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgc3BsaXRBZGphY2VudEJsb2NrcXVvdGVzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdTcGxpdCBhZGphY2VudCBibG9ja3F1b3RlIGJsb2NrcycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9XG4gIH07XG4gIGlmIChzaW1wbGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmYXVsdE9wdGlvbnMpKTtcbiAgfVxuICB2YXIgcmV0ID0ge307XG4gIGZvciAodmFyIG9wdCBpbiBkZWZhdWx0T3B0aW9ucykge1xuICAgIGlmIChkZWZhdWx0T3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKSB7XG4gICAgICByZXRbb3B0XSA9IGRlZmF1bHRPcHRpb25zW29wdF0uZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBhbGxPcHRpb25zT24gKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBvcHRpb25zID0gZ2V0RGVmYXVsdE9wdHModHJ1ZSksXG4gICAgICByZXQgPSB7fTtcbiAgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKSB7XG4gICAgICByZXRbb3B0XSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cclxuLyoqXG4gKiBDcmVhdGVkIGJ5IFRpdmllIG9uIDA2LTAxLTIwMTUuXG4gKi9cblxuLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzXG52YXIgc2hvd2Rvd24gPSB7fSxcbiAgICBwYXJzZXJzID0ge30sXG4gICAgZXh0ZW5zaW9ucyA9IHt9LFxuICAgIGdsb2JhbE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0cyh0cnVlKSxcbiAgICBzZXRGbGF2b3IgPSAndmFuaWxsYScsXG4gICAgZmxhdm9yID0ge1xuICAgICAgZ2l0aHViOiB7XG4gICAgICAgIG9taXRFeHRyYVdMSW5Db2RlQmxvY2tzOiAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgc2ltcGxpZmllZEF1dG9MaW5rOiAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBleGNsdWRlVHJhaWxpbmdQdW5jdHVhdGlvbkZyb21VUkxzOiAgIHRydWUsXG4gICAgICAgIGxpdGVyYWxNaWRXb3JkVW5kZXJzY29yZXM6ICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgc3RyaWtldGhyb3VnaDogICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICB0YWJsZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHRhYmxlc0hlYWRlcklkOiAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgZ2hDb2RlQmxvY2tzOiAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICB0YXNrbGlzdHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIGRpc2FibGVGb3JjZWQ0U3BhY2VzSW5kZW50ZWRTdWJsaXN0czogdHJ1ZSxcbiAgICAgICAgc2ltcGxlTGluZUJyZWFrczogICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICByZXF1aXJlU3BhY2VCZWZvcmVIZWFkaW5nVGV4dDogICAgICAgIHRydWUsXG4gICAgICAgIGdoQ29tcGF0aWJsZUhlYWRlcklkOiAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgZ2hNZW50aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBiYWNrc2xhc2hFc2NhcGVzSFRNTFRhZ3M6ICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIGVtb2ppOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgc3BsaXRBZGphY2VudEJsb2NrcXVvdGVzOiAgICAgICAgICAgICB0cnVlXG4gICAgICB9LFxuICAgICAgb3JpZ2luYWw6IHtcbiAgICAgICAgbm9IZWFkZXJJZDogICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBnaENvZGVCbG9ja3M6ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICB9LFxuICAgICAgZ2hvc3Q6IHtcbiAgICAgICAgb21pdEV4dHJhV0xJbkNvZGVCbG9ja3M6ICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBwYXJzZUltZ0RpbWVuc2lvbnM6ICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHNpbXBsaWZpZWRBdXRvTGluazogICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgZXhjbHVkZVRyYWlsaW5nUHVuY3R1YXRpb25Gcm9tVVJMczogICB0cnVlLFxuICAgICAgICBsaXRlcmFsTWlkV29yZFVuZGVyc2NvcmVzOiAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHN0cmlrZXRocm91Z2g6ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGFibGVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICB0YWJsZXNIZWFkZXJJZDogICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIGdoQ29kZUJsb2NrczogICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGFza2xpc3RzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBzbW9vdGhMaXZlUHJldmlldzogICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHNpbXBsZUxpbmVCcmVha3M6ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgcmVxdWlyZVNwYWNlQmVmb3JlSGVhZGluZ1RleHQ6ICAgICAgICB0cnVlLFxuICAgICAgICBnaE1lbnRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICBlbmNvZGVFbWFpbHM6ICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgIH0sXG4gICAgICB2YW5pbGxhOiBnZXREZWZhdWx0T3B0cyh0cnVlKSxcbiAgICAgIGFsbE9uOiBhbGxPcHRpb25zT24oKVxuICAgIH07XG5cbi8qKlxuICogaGVscGVyIG5hbWVzcGFjZVxuICogQHR5cGUge3t9fVxuICovXG5zaG93ZG93bi5oZWxwZXIgPSB7fTtcblxuLyoqXG4gKiBUT0RPIExFR0FDWSBTVVBQT1JUIENPREVcbiAqIEB0eXBlIHt7fX1cbiAqL1xuc2hvd2Rvd24uZXh0ZW5zaW9ucyA9IHt9O1xuXG4vKipcbiAqIFNldCBhIGdsb2JhbCBvcHRpb25cbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzaG93ZG93bn1cbiAqL1xuc2hvd2Rvd24uc2V0T3B0aW9uID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBnbG9iYWxPcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEdldCBhIGdsb2JhbCBvcHRpb25cbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEByZXR1cm5zIHsqfVxuICovXG5zaG93ZG93bi5nZXRPcHRpb24gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgcmV0dXJuIGdsb2JhbE9wdGlvbnNba2V5XTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBnbG9iYWwgb3B0aW9uc1xuICogQHN0YXRpY1xuICogQHJldHVybnMge3t9fVxuICovXG5zaG93ZG93bi5nZXRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHJldHVybiBnbG9iYWxPcHRpb25zO1xufTtcblxuLyoqXG4gKiBSZXNldCBnbG9iYWwgb3B0aW9ucyB0byB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAqIEBzdGF0aWNcbiAqL1xuc2hvd2Rvd24ucmVzZXRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG4gIGdsb2JhbE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0cyh0cnVlKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGF2b3Igc2hvd2Rvd24gc2hvdWxkIHVzZSBhcyBkZWZhdWx0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5zaG93ZG93bi5zZXRGbGF2b3IgPSBmdW5jdGlvbiAobmFtZSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICghZmxhdm9yLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgdGhyb3cgRXJyb3IobmFtZSArICcgZmxhdm9yIHdhcyBub3QgZm91bmQnKTtcbiAgfVxuICBzaG93ZG93bi5yZXNldE9wdGlvbnMoKTtcbiAgdmFyIHByZXNldCA9IGZsYXZvcltuYW1lXTtcbiAgc2V0Rmxhdm9yID0gbmFtZTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIHByZXNldCkge1xuICAgIGlmIChwcmVzZXQuaGFzT3duUHJvcGVydHkob3B0aW9uKSkge1xuICAgICAgZ2xvYmFsT3B0aW9uc1tvcHRpb25dID0gcHJlc2V0W29wdGlvbl07XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudGx5IHNldCBmbGF2b3JcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbnNob3dkb3duLmdldEZsYXZvciA9IGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICByZXR1cm4gc2V0Rmxhdm9yO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIG9wdGlvbnMgb2YgYSBzcGVjaWZpZWQgZmxhdm9yLiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgZmxhdm9yIHdhcyBub3QgZm91bmRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGZsYXZvclxuICogQHJldHVybnMge3t9fHVuZGVmaW5lZH1cbiAqL1xuc2hvd2Rvd24uZ2V0Rmxhdm9yT3B0aW9ucyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKGZsYXZvci5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIHJldHVybiBmbGF2b3JbbmFtZV07XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IG9wdGlvbnNcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NpbXBsZT10cnVlXVxuICogQHJldHVybnMge3t9fVxuICovXG5zaG93ZG93bi5nZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIChzaW1wbGUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICByZXR1cm4gZ2V0RGVmYXVsdE9wdHMoc2ltcGxlKTtcbn07XG5cbi8qKlxuICogR2V0IG9yIHNldCBhIHN1YlBhcnNlclxuICpcbiAqIHN1YlBhcnNlcihuYW1lKSAgICAgICAtIEdldCBhIHJlZ2lzdGVyZWQgc3ViUGFyc2VyXG4gKiBzdWJQYXJzZXIobmFtZSwgZnVuYykgLSBSZWdpc3RlciBhIHN1YlBhcnNlclxuICogQHN0YXRpY1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtmdW5jXVxuICogQHJldHVybnMgeyp9XG4gKi9cbnNob3dkb3duLnN1YlBhcnNlciA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHNob3dkb3duLmhlbHBlci5pc1N0cmluZyhuYW1lKSkge1xuICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcnNlcnNbbmFtZV0gPSBmdW5jO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGFyc2Vycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gcGFyc2Vyc1tuYW1lXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKCdTdWJQYXJzZXIgbmFtZWQgJyArIG5hbWUgKyAnIG5vdCByZWdpc3RlcmVkIScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBHZXRzIG9yIHJlZ2lzdGVycyBhbiBleHRlbnNpb25cbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbj19IGV4dFxuICogQHJldHVybnMgeyp9XG4gKi9cbnNob3dkb3duLmV4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBleHQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmICghc2hvd2Rvd24uaGVscGVyLmlzU3RyaW5nKG5hbWUpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0V4dGVuc2lvbiBcXCduYW1lXFwnIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIG5hbWUgPSBzaG93ZG93bi5oZWxwZXIuc3RkRXh0TmFtZShuYW1lKTtcblxuICAvLyBHZXR0ZXJcbiAgaWYgKHNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChleHQpKSB7XG4gICAgaWYgKCFleHRlbnNpb25zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignRXh0ZW5zaW9uIG5hbWVkICcgKyBuYW1lICsgJyBpcyBub3QgcmVnaXN0ZXJlZCEnKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvbnNbbmFtZV07XG5cbiAgICAvLyBTZXR0ZXJcbiAgfSBlbHNlIHtcbiAgICAvLyBFeHBhbmQgZXh0ZW5zaW9uIGlmIGl0J3Mgd3JhcHBlZCBpbiBhIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGV4dCA9IGV4dCgpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBleHRlbnNpb24gaXMgYW4gYXJyYXlcbiAgICBpZiAoIXNob3dkb3duLmhlbHBlci5pc0FycmF5KGV4dCkpIHtcbiAgICAgIGV4dCA9IFtleHRdO1xuICAgIH1cblxuICAgIHZhciB2YWxpZEV4dGVuc2lvbiA9IHZhbGlkYXRlKGV4dCwgbmFtZSk7XG5cbiAgICBpZiAodmFsaWRFeHRlbnNpb24udmFsaWQpIHtcbiAgICAgIGV4dGVuc2lvbnNbbmFtZV0gPSBleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKHZhbGlkRXh0ZW5zaW9uLmVycm9yKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogR2V0cyBhbGwgZXh0ZW5zaW9ucyByZWdpc3RlcmVkXG4gKiBAcmV0dXJucyB7e319XG4gKi9cbnNob3dkb3duLmdldEFsbEV4dGVuc2lvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgcmV0dXJuIGV4dGVuc2lvbnM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBleHRlbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbnNob3dkb3duLnJlbW92ZUV4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgZGVsZXRlIGV4dGVuc2lvbnNbbmFtZV07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGV4dGVuc2lvbnNcbiAqL1xuc2hvd2Rvd24ucmVzZXRFeHRlbnNpb25zID0gZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG4gIGV4dGVuc2lvbnMgPSB7fTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgZXh0ZW5zaW9uXG4gKiBAcGFyYW0ge2FycmF5fSBleHRlbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7e3ZhbGlkOiBib29sZWFuLCBlcnJvcjogc3RyaW5nfX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGUgKGV4dGVuc2lvbiwgbmFtZSkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGVyck1zZyA9IChuYW1lKSA/ICdFcnJvciBpbiAnICsgbmFtZSArICcgZXh0ZW5zaW9uLT4nIDogJ0Vycm9yIGluIHVubmFtZWQgZXh0ZW5zaW9uJyxcbiAgICAgIHJldCA9IHtcbiAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIGVycm9yOiAnJ1xuICAgICAgfTtcblxuICBpZiAoIXNob3dkb3duLmhlbHBlci5pc0FycmF5KGV4dGVuc2lvbikpIHtcbiAgICBleHRlbnNpb24gPSBbZXh0ZW5zaW9uXTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0ZW5zaW9uLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJhc2VNc2cgPSBlcnJNc2cgKyAnIHN1Yi1leHRlbnNpb24gJyArIGkgKyAnOiAnLFxuICAgICAgICBleHQgPSBleHRlbnNpb25baV07XG4gICAgaWYgKHR5cGVvZiBleHQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXQudmFsaWQgPSBmYWxzZTtcbiAgICAgIHJldC5lcnJvciA9IGJhc2VNc2cgKyAnbXVzdCBiZSBhbiBvYmplY3QsIGJ1dCAnICsgdHlwZW9mIGV4dCArICcgZ2l2ZW4nO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBpZiAoIXNob3dkb3duLmhlbHBlci5pc1N0cmluZyhleHQudHlwZSkpIHtcbiAgICAgIHJldC52YWxpZCA9IGZhbHNlO1xuICAgICAgcmV0LmVycm9yID0gYmFzZU1zZyArICdwcm9wZXJ0eSBcInR5cGVcIiBtdXN0IGJlIGEgc3RyaW5nLCBidXQgJyArIHR5cGVvZiBleHQudHlwZSArICcgZ2l2ZW4nO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9IGV4dC50eXBlID0gZXh0LnR5cGUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIG5vcm1hbGl6ZSBleHRlbnNpb24gdHlwZVxuICAgIGlmICh0eXBlID09PSAnbGFuZ3VhZ2UnKSB7XG4gICAgICB0eXBlID0gZXh0LnR5cGUgPSAnbGFuZyc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdodG1sJykge1xuICAgICAgdHlwZSA9IGV4dC50eXBlID0gJ291dHB1dCc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT09ICdsYW5nJyAmJiB0eXBlICE9PSAnb3V0cHV0JyAmJiB0eXBlICE9PSAnbGlzdGVuZXInKSB7XG4gICAgICByZXQudmFsaWQgPSBmYWxzZTtcbiAgICAgIHJldC5lcnJvciA9IGJhc2VNc2cgKyAndHlwZSAnICsgdHlwZSArICcgaXMgbm90IHJlY29nbml6ZWQuIFZhbGlkIHZhbHVlczogXCJsYW5nL2xhbmd1YWdlXCIsIFwib3V0cHV0L2h0bWxcIiBvciBcImxpc3RlbmVyXCInO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2xpc3RlbmVyJykge1xuICAgICAgaWYgKHNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChleHQubGlzdGVuZXJzKSkge1xuICAgICAgICByZXQudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgcmV0LmVycm9yID0gYmFzZU1zZyArICcuIEV4dGVuc2lvbnMgb2YgdHlwZSBcImxpc3RlbmVyXCIgbXVzdCBoYXZlIGEgcHJvcGVydHkgY2FsbGVkIFwibGlzdGVuZXJzXCInO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKGV4dC5maWx0ZXIpICYmIHNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChleHQucmVnZXgpKSB7XG4gICAgICAgIHJldC52YWxpZCA9IGZhbHNlO1xuICAgICAgICByZXQuZXJyb3IgPSBiYXNlTXNnICsgdHlwZSArICcgZXh0ZW5zaW9ucyBtdXN0IGRlZmluZSBlaXRoZXIgYSBcInJlZ2V4XCIgcHJvcGVydHkgb3IgYSBcImZpbHRlclwiIG1ldGhvZCc7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dC5saXN0ZW5lcnMpIHtcbiAgICAgIGlmICh0eXBlb2YgZXh0Lmxpc3RlbmVycyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0LnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHJldC5lcnJvciA9IGJhc2VNc2cgKyAnXCJsaXN0ZW5lcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIG9iamVjdCBidXQgJyArIHR5cGVvZiBleHQubGlzdGVuZXJzICsgJyBnaXZlbic7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBsbiBpbiBleHQubGlzdGVuZXJzKSB7XG4gICAgICAgIGlmIChleHQubGlzdGVuZXJzLmhhc093blByb3BlcnR5KGxuKSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZXh0Lmxpc3RlbmVyc1tsbl0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldC52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0LmVycm9yID0gYmFzZU1zZyArICdcImxpc3RlbmVyc1wiIHByb3BlcnR5IG11c3QgYmUgYW4gaGFzaCBvZiBbZXZlbnQgbmFtZV06IFtjYWxsYmFja10uIGxpc3RlbmVycy4nICsgbG4gK1xuICAgICAgICAgICAgICAnIG11c3QgYmUgYSBmdW5jdGlvbiBidXQgJyArIHR5cGVvZiBleHQubGlzdGVuZXJzW2xuXSArICcgZ2l2ZW4nO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXh0LmZpbHRlcikge1xuICAgICAgaWYgKHR5cGVvZiBleHQuZmlsdGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldC52YWxpZCA9IGZhbHNlO1xuICAgICAgICByZXQuZXJyb3IgPSBiYXNlTXNnICsgJ1wiZmlsdGVyXCIgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgJyArIHR5cGVvZiBleHQuZmlsdGVyICsgJyBnaXZlbic7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHQucmVnZXgpIHtcbiAgICAgIGlmIChzaG93ZG93bi5oZWxwZXIuaXNTdHJpbmcoZXh0LnJlZ2V4KSkge1xuICAgICAgICBleHQucmVnZXggPSBuZXcgUmVnRXhwKGV4dC5yZWdleCwgJ2cnKTtcbiAgICAgIH1cbiAgICAgIGlmICghKGV4dC5yZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgcmV0LnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHJldC5lcnJvciA9IGJhc2VNc2cgKyAnXCJyZWdleFwiIHByb3BlcnR5IG11c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGEgUmVnRXhwIG9iamVjdCwgYnV0ICcgKyB0eXBlb2YgZXh0LnJlZ2V4ICsgJyBnaXZlbic7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKGV4dC5yZXBsYWNlKSkge1xuICAgICAgICByZXQudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgcmV0LmVycm9yID0gYmFzZU1zZyArICdcInJlZ2V4XCIgZXh0ZW5zaW9ucyBtdXN0IGltcGxlbWVudCBhIHJlcGxhY2Ugc3RyaW5nIG9yIGZ1bmN0aW9uJztcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBleHRlbnNpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBleHRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5zaG93ZG93bi52YWxpZGF0ZUV4dGVuc2lvbiA9IGZ1bmN0aW9uIChleHQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB2YWxpZGF0ZUV4dGVuc2lvbiA9IHZhbGlkYXRlKGV4dCwgbnVsbCk7XG4gIGlmICghdmFsaWRhdGVFeHRlbnNpb24udmFsaWQpIHtcbiAgICBjb25zb2xlLndhcm4odmFsaWRhdGVFeHRlbnNpb24uZXJyb3IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cclxuLyoqXG4gKiBzaG93ZG93bmpzIGhlbHBlciBmdW5jdGlvbnNcbiAqL1xuXG5pZiAoIXNob3dkb3duLmhhc093blByb3BlcnR5KCdoZWxwZXInKSkge1xuICBzaG93ZG93bi5oZWxwZXIgPSB7fTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YXIgaXMgc3RyaW5nXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3N0cmluZ30gYVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbnNob3dkb3duLmhlbHBlci5pc1N0cmluZyA9IGZ1bmN0aW9uIChhKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgcmV0dXJuICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgfHwgYSBpbnN0YW5jZW9mIFN0cmluZyk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHZhciBpcyBhIGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0geyp9IGFcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5zaG93ZG93bi5oZWxwZXIuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIChhKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdmFyIGdldFR5cGUgPSB7fTtcbiAgcmV0dXJuIGEgJiYgZ2V0VHlwZS50b1N0cmluZy5jYWxsKGEpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcblxuLyoqXG4gKiBpc0FycmF5IGhlbHBlciBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQHBhcmFtIHsqfSBhXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuc2hvd2Rvd24uaGVscGVyLmlzQXJyYXkgPSBmdW5jdGlvbiAoYSkge1xuICAndXNlIHN0cmljdCc7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGEpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCc7XG59O1xuXG4vKipcbiAqIEZvckVhY2ggaGVscGVyIGZ1bmN0aW9uXG4gKiBJdGVyYXRlcyBvdmVyIEFycmF5cyBhbmQgT2JqZWN0cyAob3duIHByb3BlcnRpZXMgb25seSlcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBBY2NlcHRzIDMgcGFyYW1zOiAxLiB2YWx1ZSwgMi4ga2V5LCAzLiB0aGUgb3JpZ2luYWwgYXJyYXkvb2JqZWN0XG4gKi9cbnNob3dkb3duLmhlbHBlci5mb3JFYWNoID0gZnVuY3Rpb24gKG9iaiwgY2FsbGJhY2spIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICAvLyBjaGVjayBpZiBvYmogaXMgZGVmaW5lZFxuICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKG9iaikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ29iaiBwYXJhbSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKHNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChjYWxsYmFjaykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxiYWNrIHBhcmFtIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIXNob3dkb3duLmhlbHBlci5pc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2FsbGJhY2sgcGFyYW0gbXVzdCBiZSBhIGZ1bmN0aW9uL2Nsb3N1cmUnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqLmZvckVhY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBvYmouZm9yRWFjaChjYWxsYmFjayk7XG4gIH0gZWxzZSBpZiAoc2hvd2Rvd24uaGVscGVyLmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFjayhvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiAob2JqKSA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICBjYWxsYmFjayhvYmpbcHJvcF0sIHByb3AsIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignb2JqIGRvZXMgbm90IHNlZW0gdG8gYmUgYW4gYXJyYXkgb3IgYW4gaXRlcmFibGUgb2JqZWN0Jyk7XG4gIH1cbn07XG5cbi8qKlxuICogU3RhbmRhcmRpZGl6ZSBleHRlbnNpb24gbmFtZVxuICogQHN0YXRpY1xuICogQHBhcmFtIHtzdHJpbmd9IHMgZXh0ZW5zaW9uIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbnNob3dkb3duLmhlbHBlci5zdGRFeHROYW1lID0gZnVuY3Rpb24gKHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICByZXR1cm4gcy5yZXBsYWNlKC9bXz8qK1xcL1xcXFwuXi1dL2csICcnKS5yZXBsYWNlKC9cXHMvZywgJycpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2sgKHdob2xlTWF0Y2gsIG0xKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdmFyIGNoYXJDb2RlVG9Fc2NhcGUgPSBtMS5jaGFyQ29kZUF0KDApO1xuICByZXR1cm4gJ8KoRScgKyBjaGFyQ29kZVRvRXNjYXBlICsgJ0UnO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIHVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgd2hlbiBwYXNzaW5nIHRocm91Z2ggU3RyaW5nLnJlcGxhY2VcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aG9sZU1hdGNoXG4gKiBAcGFyYW0ge3N0cmluZ30gbTFcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbnNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2sgPSBlc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2s7XG5cbi8qKlxuICogRXNjYXBlIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmdcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcnNUb0VzY2FwZVxuICogQHBhcmFtIHtib29sZWFufSBhZnRlckJhY2tzbGFzaFxuICogQHJldHVybnMge1hNTHxzdHJpbmd8dm9pZHwqfVxuICovXG5zaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVycyA9IGZ1bmN0aW9uICh0ZXh0LCBjaGFyc1RvRXNjYXBlLCBhZnRlckJhY2tzbGFzaCkge1xuICAndXNlIHN0cmljdCc7XG4gIC8vIEZpcnN0IHdlIGhhdmUgdG8gZXNjYXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVycyBzbyB0aGF0XG4gIC8vIHdlIGNhbiBidWlsZCBhIGNoYXJhY3RlciBjbGFzcyBvdXQgb2YgdGhlbVxuICB2YXIgcmVnZXhTdHJpbmcgPSAnKFsnICsgY2hhcnNUb0VzY2FwZS5yZXBsYWNlKC8oW1xcW1xcXVxcXFxdKS9nLCAnXFxcXCQxJykgKyAnXSknO1xuXG4gIGlmIChhZnRlckJhY2tzbGFzaCkge1xuICAgIHJlZ2V4U3RyaW5nID0gJ1xcXFxcXFxcJyArIHJlZ2V4U3RyaW5nO1xuICB9XG5cbiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFN0cmluZywgJ2cnKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZShyZWdleCwgZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcblxuICByZXR1cm4gdGV4dDtcbn07XG5cbi8qKlxuICogVW5lc2NhcGUgSFRNTCBlbnRpdGllc1xuICogQHBhcmFtIHR4dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuc2hvd2Rvd24uaGVscGVyLnVuZXNjYXBlSFRNTEVudGl0aWVzID0gZnVuY3Rpb24gKHR4dCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgcmV0dXJuIHR4dFxuICAgIC5yZXBsYWNlKC8mcXVvdDsvZywgJ1wiJylcbiAgICAucmVwbGFjZSgvJmx0Oy9nLCAnPCcpXG4gICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKVxuICAgIC5yZXBsYWNlKC8mYW1wOy9nLCAnJicpO1xufTtcblxudmFyIHJneEZpbmRNYXRjaFBvcyA9IGZ1bmN0aW9uIChzdHIsIGxlZnQsIHJpZ2h0LCBmbGFncykge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBmID0gZmxhZ3MgfHwgJycsXG4gICAgICBnID0gZi5pbmRleE9mKCdnJykgPiAtMSxcbiAgICAgIHggPSBuZXcgUmVnRXhwKGxlZnQgKyAnfCcgKyByaWdodCwgJ2cnICsgZi5yZXBsYWNlKC9nL2csICcnKSksXG4gICAgICBsID0gbmV3IFJlZ0V4cChsZWZ0LCBmLnJlcGxhY2UoL2cvZywgJycpKSxcbiAgICAgIHBvcyA9IFtdLFxuICAgICAgdCwgcywgbSwgc3RhcnQsIGVuZDtcblxuICBkbyB7XG4gICAgdCA9IDA7XG4gICAgd2hpbGUgKChtID0geC5leGVjKHN0cikpKSB7XG4gICAgICBpZiAobC50ZXN0KG1bMF0pKSB7XG4gICAgICAgIGlmICghKHQrKykpIHtcbiAgICAgICAgICBzID0geC5sYXN0SW5kZXg7XG4gICAgICAgICAgc3RhcnQgPSBzIC0gbVswXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodCkge1xuICAgICAgICBpZiAoIS0tdCkge1xuICAgICAgICAgIGVuZCA9IG0uaW5kZXggKyBtWzBdLmxlbmd0aDtcbiAgICAgICAgICB2YXIgb2JqID0ge1xuICAgICAgICAgICAgbGVmdDoge3N0YXJ0OiBzdGFydCwgZW5kOiBzfSxcbiAgICAgICAgICAgIG1hdGNoOiB7c3RhcnQ6IHMsIGVuZDogbS5pbmRleH0sXG4gICAgICAgICAgICByaWdodDoge3N0YXJ0OiBtLmluZGV4LCBlbmQ6IGVuZH0sXG4gICAgICAgICAgICB3aG9sZU1hdGNoOiB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHBvcy5wdXNoKG9iaik7XG4gICAgICAgICAgaWYgKCFnKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAodCAmJiAoeC5sYXN0SW5kZXggPSBzKSk7XG5cbiAgcmV0dXJuIHBvcztcbn07XG5cbi8qKlxuICogbWF0Y2hSZWN1cnNpdmVSZWdFeHBcbiAqXG4gKiAoYykgMjAwNyBTdGV2ZW4gTGV2aXRoYW4gPHN0ZXZlbmxldml0aGFuLmNvbT5cbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQWNjZXB0cyBhIHN0cmluZyB0byBzZWFyY2gsIGEgbGVmdCBhbmQgcmlnaHQgZm9ybWF0IGRlbGltaXRlclxuICogYXMgcmVnZXggcGF0dGVybnMsIGFuZCBvcHRpb25hbCByZWdleCBmbGFncy4gUmV0dXJucyBhbiBhcnJheVxuICogb2YgbWF0Y2hlcywgYWxsb3dpbmcgbmVzdGVkIGluc3RhbmNlcyBvZiBsZWZ0L3JpZ2h0IGRlbGltaXRlcnMuXG4gKiBVc2UgdGhlIFwiZ1wiIGZsYWcgdG8gcmV0dXJuIGFsbCBtYXRjaGVzLCBvdGhlcndpc2Ugb25seSB0aGVcbiAqIGZpcnN0IGlzIHJldHVybmVkLiBCZSBjYXJlZnVsIHRvIGVuc3VyZSB0aGF0IHRoZSBsZWZ0IGFuZFxuICogcmlnaHQgZm9ybWF0IGRlbGltaXRlcnMgcHJvZHVjZSBtdXR1YWxseSBleGNsdXNpdmUgbWF0Y2hlcy5cbiAqIEJhY2tyZWZlcmVuY2VzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGhpbiB0aGUgcmlnaHQgZGVsaW1pdGVyXG4gKiBkdWUgdG8gaG93IGl0IGlzIGludGVybmFsbHkgY29tYmluZWQgd2l0aCB0aGUgbGVmdCBkZWxpbWl0ZXIuXG4gKiBXaGVuIG1hdGNoaW5nIHN0cmluZ3Mgd2hvc2UgZm9ybWF0IGRlbGltaXRlcnMgYXJlIHVuYmFsYW5jZWRcbiAqIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0LCB0aGUgb3V0cHV0IGlzIGludGVudGlvbmFsbHkgYXMgYVxuICogY29udmVudGlvbmFsIHJlZ2V4IGxpYnJhcnkgd2l0aCByZWN1cnNpb24gc3VwcG9ydCB3b3VsZFxuICogcHJvZHVjZSwgZS5nLiBcIjw8eD5cIiBhbmQgXCI8eD4+XCIgYm90aCBwcm9kdWNlIFtcInhcIl0gd2hlbiB1c2luZ1xuICogXCI8XCIgYW5kIFwiPlwiIGFzIHRoZSBkZWxpbWl0ZXJzIChib3RoIHN0cmluZ3MgY29udGFpbiBhIHNpbmdsZSxcbiAqIGJhbGFuY2VkIGluc3RhbmNlIG9mIFwiPHg+XCIpLlxuICpcbiAqIGV4YW1wbGVzOlxuICogbWF0Y2hSZWN1cnNpdmVSZWdFeHAoXCJ0ZXN0XCIsIFwiXFxcXChcIiwgXCJcXFxcKVwiKVxuICogcmV0dXJuczogW11cbiAqIG1hdGNoUmVjdXJzaXZlUmVnRXhwKFwiPHQ8PGU+PjxzPj50PD5cIiwgXCI8XCIsIFwiPlwiLCBcImdcIilcbiAqIHJldHVybnM6IFtcInQ8PGU+PjxzPlwiLCBcIlwiXVxuICogbWF0Y2hSZWN1cnNpdmVSZWdFeHAoXCI8ZGl2IGlkPVxcXCJ4XFxcIj50ZXN0PC9kaXY+XCIsIFwiPGRpdlxcXFxiW14+XSo+XCIsIFwiPC9kaXY+XCIsIFwiZ2lcIilcbiAqIHJldHVybnM6IFtcInRlc3RcIl1cbiAqL1xuc2hvd2Rvd24uaGVscGVyLm1hdGNoUmVjdXJzaXZlUmVnRXhwID0gZnVuY3Rpb24gKHN0ciwgbGVmdCwgcmlnaHQsIGZsYWdzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgbWF0Y2hQb3MgPSByZ3hGaW5kTWF0Y2hQb3MgKHN0ciwgbGVmdCwgcmlnaHQsIGZsYWdzKSxcbiAgICAgIHJlc3VsdHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoUG9zLmxlbmd0aDsgKytpKSB7XG4gICAgcmVzdWx0cy5wdXNoKFtcbiAgICAgIHN0ci5zbGljZShtYXRjaFBvc1tpXS53aG9sZU1hdGNoLnN0YXJ0LCBtYXRjaFBvc1tpXS53aG9sZU1hdGNoLmVuZCksXG4gICAgICBzdHIuc2xpY2UobWF0Y2hQb3NbaV0ubWF0Y2guc3RhcnQsIG1hdGNoUG9zW2ldLm1hdGNoLmVuZCksXG4gICAgICBzdHIuc2xpY2UobWF0Y2hQb3NbaV0ubGVmdC5zdGFydCwgbWF0Y2hQb3NbaV0ubGVmdC5lbmQpLFxuICAgICAgc3RyLnNsaWNlKG1hdGNoUG9zW2ldLnJpZ2h0LnN0YXJ0LCBtYXRjaFBvc1tpXS5yaWdodC5lbmQpXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge3N0cmluZ3xmdW5jdGlvbn0gcmVwbGFjZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsZWZ0XG4gKiBAcGFyYW0ge3N0cmluZ30gcmlnaHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuc2hvd2Rvd24uaGVscGVyLnJlcGxhY2VSZWN1cnNpdmVSZWdFeHAgPSBmdW5jdGlvbiAoc3RyLCByZXBsYWNlbWVudCwgbGVmdCwgcmlnaHQsIGZsYWdzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIXNob3dkb3duLmhlbHBlci5pc0Z1bmN0aW9uKHJlcGxhY2VtZW50KSkge1xuICAgIHZhciByZXBTdHIgPSByZXBsYWNlbWVudDtcbiAgICByZXBsYWNlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXBTdHI7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBtYXRjaFBvcyA9IHJneEZpbmRNYXRjaFBvcyhzdHIsIGxlZnQsIHJpZ2h0LCBmbGFncyksXG4gICAgICBmaW5hbFN0ciA9IHN0cixcbiAgICAgIGxuZyA9IG1hdGNoUG9zLmxlbmd0aDtcblxuICBpZiAobG5nID4gMCkge1xuICAgIHZhciBiaXRzID0gW107XG4gICAgaWYgKG1hdGNoUG9zWzBdLndob2xlTWF0Y2guc3RhcnQgIT09IDApIHtcbiAgICAgIGJpdHMucHVzaChzdHIuc2xpY2UoMCwgbWF0Y2hQb3NbMF0ud2hvbGVNYXRjaC5zdGFydCkpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxuZzsgKytpKSB7XG4gICAgICBiaXRzLnB1c2goXG4gICAgICAgIHJlcGxhY2VtZW50KFxuICAgICAgICAgIHN0ci5zbGljZShtYXRjaFBvc1tpXS53aG9sZU1hdGNoLnN0YXJ0LCBtYXRjaFBvc1tpXS53aG9sZU1hdGNoLmVuZCksXG4gICAgICAgICAgc3RyLnNsaWNlKG1hdGNoUG9zW2ldLm1hdGNoLnN0YXJ0LCBtYXRjaFBvc1tpXS5tYXRjaC5lbmQpLFxuICAgICAgICAgIHN0ci5zbGljZShtYXRjaFBvc1tpXS5sZWZ0LnN0YXJ0LCBtYXRjaFBvc1tpXS5sZWZ0LmVuZCksXG4gICAgICAgICAgc3RyLnNsaWNlKG1hdGNoUG9zW2ldLnJpZ2h0LnN0YXJ0LCBtYXRjaFBvc1tpXS5yaWdodC5lbmQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpZiAoaSA8IGxuZyAtIDEpIHtcbiAgICAgICAgYml0cy5wdXNoKHN0ci5zbGljZShtYXRjaFBvc1tpXS53aG9sZU1hdGNoLmVuZCwgbWF0Y2hQb3NbaSArIDFdLndob2xlTWF0Y2guc3RhcnQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoUG9zW2xuZyAtIDFdLndob2xlTWF0Y2guZW5kIDwgc3RyLmxlbmd0aCkge1xuICAgICAgYml0cy5wdXNoKHN0ci5zbGljZShtYXRjaFBvc1tsbmcgLSAxXS53aG9sZU1hdGNoLmVuZCkpO1xuICAgIH1cbiAgICBmaW5hbFN0ciA9IGJpdHMuam9pbignJyk7XG4gIH1cbiAgcmV0dXJuIGZpbmFsU3RyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCB3aXRoaW4gdGhlIHBhc3NlZCBTdHJpbmcgb2JqZWN0IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzcGVjaWZpZWQgcmVnZXgsXG4gKiBzdGFydGluZyB0aGUgc2VhcmNoIGF0IGZyb21JbmRleC4gUmV0dXJucyAtMSBpZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgc3RyaW5nIHRvIHNlYXJjaFxuICogQHBhcmFtIHtSZWdFeHB9IHJlZ2V4IFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2hcbiAqIEBwYXJhbSB7aW50fSBbZnJvbUluZGV4ID0gMF0gSW5kZXggdG8gc3RhcnQgdGhlIHNlYXJjaFxuICogQHJldHVybnMge051bWJlcn1cbiAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXJyb3JcbiAqL1xuc2hvd2Rvd24uaGVscGVyLnJlZ2V4SW5kZXhPZiA9IGZ1bmN0aW9uIChzdHIsIHJlZ2V4LCBmcm9tSW5kZXgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBpZiAoIXNob3dkb3duLmhlbHBlci5pc1N0cmluZyhzdHIpKSB7XG4gICAgdGhyb3cgJ0ludmFsaWRBcmd1bWVudEVycm9yOiBmaXJzdCBwYXJhbWV0ZXIgb2Ygc2hvd2Rvd24uaGVscGVyLnJlZ2V4SW5kZXhPZiBmdW5jdGlvbiBtdXN0IGJlIGEgc3RyaW5nJztcbiAgfVxuICBpZiAocmVnZXggaW5zdGFuY2VvZiBSZWdFeHAgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgJ0ludmFsaWRBcmd1bWVudEVycm9yOiBzZWNvbmQgcGFyYW1ldGVyIG9mIHNob3dkb3duLmhlbHBlci5yZWdleEluZGV4T2YgZnVuY3Rpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBSZWdFeHAnO1xuICB9XG4gIHZhciBpbmRleE9mID0gc3RyLnN1YnN0cmluZyhmcm9tSW5kZXggfHwgMCkuc2VhcmNoKHJlZ2V4KTtcbiAgcmV0dXJuIChpbmRleE9mID49IDApID8gKGluZGV4T2YgKyAoZnJvbUluZGV4IHx8IDApKSA6IGluZGV4T2Y7XG59O1xuXG4vKipcbiAqIFNwbGl0cyB0aGUgcGFzc2VkIHN0cmluZyBvYmplY3QgYXQgdGhlIGRlZmluZWQgaW5kZXgsIGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbXBvc2VkIG9mIHRoZSB0d28gc3Vic3RyaW5nc1xuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBzdHJpbmcgdG8gc3BsaXRcbiAqIEBwYXJhbSB7aW50fSBpbmRleCBpbmRleCB0byBzcGxpdCBzdHJpbmcgYXRcbiAqIEByZXR1cm5zIHtbc3RyaW5nLHN0cmluZ119XG4gKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEVycm9yXG4gKi9cbnNob3dkb3duLmhlbHBlci5zcGxpdEF0SW5kZXggPSBmdW5jdGlvbiAoc3RyLCBpbmRleCkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICghc2hvd2Rvd24uaGVscGVyLmlzU3RyaW5nKHN0cikpIHtcbiAgICB0aHJvdyAnSW52YWxpZEFyZ3VtZW50RXJyb3I6IGZpcnN0IHBhcmFtZXRlciBvZiBzaG93ZG93bi5oZWxwZXIucmVnZXhJbmRleE9mIGZ1bmN0aW9uIG11c3QgYmUgYSBzdHJpbmcnO1xuICB9XG4gIHJldHVybiBbc3RyLnN1YnN0cmluZygwLCBpbmRleCksIHN0ci5zdWJzdHJpbmcoaW5kZXgpXTtcbn07XG5cbi8qKlxuICogT2JmdXNjYXRlIGFuIGUtbWFpbCBhZGRyZXNzIHRocm91Z2ggdGhlIHVzZSBvZiBDaGFyYWN0ZXIgRW50aXRpZXMsXG4gKiB0cmFuc2Zvcm1pbmcgQVNDSUkgY2hhcmFjdGVycyBpbnRvIHRoZWlyIGVxdWl2YWxlbnQgZGVjaW1hbCBvciBoZXggZW50aXRpZXMuXG4gKlxuICogU2luY2UgaXQgaGFzIGEgcmFuZG9tIGNvbXBvbmVudCwgc3Vic2VxdWVudCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHByb2R1Y2UgZGlmZmVyZW50IHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuc2hvd2Rvd24uaGVscGVyLmVuY29kZUVtYWlsQWRkcmVzcyA9IGZ1bmN0aW9uIChtYWlsKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdmFyIGVuY29kZSA9IFtcbiAgICBmdW5jdGlvbiAoY2gpIHtcbiAgICAgIHJldHVybiAnJiMnICsgY2guY2hhckNvZGVBdCgwKSArICc7JztcbiAgICB9LFxuICAgIGZ1bmN0aW9uIChjaCkge1xuICAgICAgcmV0dXJuICcmI3gnICsgY2guY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikgKyAnOyc7XG4gICAgfSxcbiAgICBmdW5jdGlvbiAoY2gpIHtcbiAgICAgIHJldHVybiBjaDtcbiAgICB9XG4gIF07XG5cbiAgbWFpbCA9IG1haWwucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoY2gpIHtcbiAgICBpZiAoY2ggPT09ICdAJykge1xuICAgICAgLy8gdGhpcyAqbXVzdCogYmUgZW5jb2RlZC4gSSBpbnNpc3QuXG4gICAgICBjaCA9IGVuY29kZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKV0oY2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCk7XG4gICAgICAvLyByb3VnaGx5IDEwJSByYXcsIDQ1JSBoZXgsIDQ1JSBkZWNcbiAgICAgIGNoID0gKFxuICAgICAgICByID4gMC45ID8gZW5jb2RlWzJdKGNoKSA6IHIgPiAwLjQ1ID8gZW5jb2RlWzFdKGNoKSA6IGVuY29kZVswXShjaClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjaDtcbiAgfSk7XG5cbiAgcmV0dXJuIG1haWw7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyXG4gKiBAcGFyYW0gdGFyZ2V0TGVuZ3RoXG4gKiBAcGFyYW0gcGFkU3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5zaG93ZG93bi5oZWxwZXIucGFkRW5kID0gZnVuY3Rpb24gcGFkRW5kIChzdHIsIHRhcmdldExlbmd0aCwgcGFkU3RyaW5nKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgLypqc2hpbnQgYml0d2lzZTogZmFsc2UqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3BhY2UtaW5maXgtb3BzXG4gIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aD4+MDsgLy9mbG9vciBpZiBudW1iZXIgb3IgY29udmVydCBub24tbnVtYmVyIHRvIDA7XG4gIC8qanNoaW50IGJpdHdpc2U6IHRydWUqL1xuICBwYWRTdHJpbmcgPSBTdHJpbmcocGFkU3RyaW5nIHx8ICcgJyk7XG4gIGlmIChzdHIubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzdHIpO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIHN0ci5sZW5ndGg7XG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpOyAvL2FwcGVuZCB0byBvcmlnaW5hbCB0byBlbnN1cmUgd2UgYXJlIGxvbmdlciB0aGFuIG5lZWRlZFxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHN0cikgKyBwYWRTdHJpbmcuc2xpY2UoMCx0YXJnZXRMZW5ndGgpO1xuICB9XG59O1xuXG4vKipcbiAqIFBPTFlGSUxMU1xuICovXG4vLyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGJ1aWx0aW4gaXMgdW5kZWZpbmVkIGZvciBJRTggY29tcGF0aWJpbGl0eVxuaWYgKHR5cGVvZihjb25zb2xlKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc29sZSA9IHtcbiAgICB3YXJuOiBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAndXNlIHN0cmljdCc7XG4gICAgICBhbGVydChtc2cpO1xuICAgIH0sXG4gICAgbG9nOiBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAndXNlIHN0cmljdCc7XG4gICAgICBhbGVydChtc2cpO1xuICAgIH0sXG4gICAgZXJyb3I6IGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgICd1c2Ugc3RyaWN0JztcbiAgICAgIHRocm93IG1zZztcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29tbW9uIHJlZ2V4ZXMuXG4gKiBXZSBkZWNsYXJlIHNvbWUgY29tbW9uIHJlZ2V4ZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZVxuICovXG5zaG93ZG93bi5oZWxwZXIucmVnZXhlcyA9IHtcbiAgYXN0ZXJpc2tEYXNoQW5kQ29sb246IC8oWypfOn5dKS9nXG59O1xuXG4vKipcbiAqIEVNT0pJUyBMSVNUXG4gKi9cbnNob3dkb3duLmhlbHBlci5lbW9qaXMgPSB7XG4gICcrMSc6J1xcdWQ4M2RcXHVkYzRkJyxcbiAgJy0xJzonXFx1ZDgzZFxcdWRjNGUnLFxuICAnMTAwJzonXFx1ZDgzZFxcdWRjYWYnLFxuICAnMTIzNCc6J1xcdWQ4M2RcXHVkZDIyJyxcbiAgJzFzdF9wbGFjZV9tZWRhbCc6J1xcdWQ4M2VcXHVkZDQ3JyxcbiAgJzJuZF9wbGFjZV9tZWRhbCc6J1xcdWQ4M2VcXHVkZDQ4JyxcbiAgJzNyZF9wbGFjZV9tZWRhbCc6J1xcdWQ4M2VcXHVkZDQ5JyxcbiAgJzhiYWxsJzonXFx1ZDgzY1xcdWRmYjEnLFxuICAnYSc6J1xcdWQ4M2NcXHVkZDcwXFx1ZmUwZicsXG4gICdhYic6J1xcdWQ4M2NcXHVkZDhlJyxcbiAgJ2FiYyc6J1xcdWQ4M2RcXHVkZDI0JyxcbiAgJ2FiY2QnOidcXHVkODNkXFx1ZGQyMScsXG4gICdhY2NlcHQnOidcXHVkODNjXFx1ZGU1MScsXG4gICdhZXJpYWxfdHJhbXdheSc6J1xcdWQ4M2RcXHVkZWExJyxcbiAgJ2FpcnBsYW5lJzonXFx1MjcwOFxcdWZlMGYnLFxuICAnYWxhcm1fY2xvY2snOidcXHUyM2YwJyxcbiAgJ2FsZW1iaWMnOidcXHUyNjk3XFx1ZmUwZicsXG4gICdhbGllbic6J1xcdWQ4M2RcXHVkYzdkJyxcbiAgJ2FtYnVsYW5jZSc6J1xcdWQ4M2RcXHVkZTkxJyxcbiAgJ2FtcGhvcmEnOidcXHVkODNjXFx1ZGZmYScsXG4gICdhbmNob3InOidcXHUyNjkzXFx1ZmUwZicsXG4gICdhbmdlbCc6J1xcdWQ4M2RcXHVkYzdjJyxcbiAgJ2FuZ2VyJzonXFx1ZDgzZFxcdWRjYTInLFxuICAnYW5ncnknOidcXHVkODNkXFx1ZGUyMCcsXG4gICdhbmd1aXNoZWQnOidcXHVkODNkXFx1ZGUyNycsXG4gICdhbnQnOidcXHVkODNkXFx1ZGMxYycsXG4gICdhcHBsZSc6J1xcdWQ4M2NcXHVkZjRlJyxcbiAgJ2FxdWFyaXVzJzonXFx1MjY1MlxcdWZlMGYnLFxuICAnYXJpZXMnOidcXHUyNjQ4XFx1ZmUwZicsXG4gICdhcnJvd19iYWNrd2FyZCc6J1xcdTI1YzBcXHVmZTBmJyxcbiAgJ2Fycm93X2RvdWJsZV9kb3duJzonXFx1MjNlYycsXG4gICdhcnJvd19kb3VibGVfdXAnOidcXHUyM2ViJyxcbiAgJ2Fycm93X2Rvd24nOidcXHUyYjA3XFx1ZmUwZicsXG4gICdhcnJvd19kb3duX3NtYWxsJzonXFx1ZDgzZFxcdWRkM2QnLFxuICAnYXJyb3dfZm9yd2FyZCc6J1xcdTI1YjZcXHVmZTBmJyxcbiAgJ2Fycm93X2hlYWRpbmdfZG93bic6J1xcdTI5MzVcXHVmZTBmJyxcbiAgJ2Fycm93X2hlYWRpbmdfdXAnOidcXHUyOTM0XFx1ZmUwZicsXG4gICdhcnJvd19sZWZ0JzonXFx1MmIwNVxcdWZlMGYnLFxuICAnYXJyb3dfbG93ZXJfbGVmdCc6J1xcdTIxOTlcXHVmZTBmJyxcbiAgJ2Fycm93X2xvd2VyX3JpZ2h0JzonXFx1MjE5OFxcdWZlMGYnLFxuICAnYXJyb3dfcmlnaHQnOidcXHUyN2ExXFx1ZmUwZicsXG4gICdhcnJvd19yaWdodF9ob29rJzonXFx1MjFhYVxcdWZlMGYnLFxuICAnYXJyb3dfdXAnOidcXHUyYjA2XFx1ZmUwZicsXG4gICdhcnJvd191cF9kb3duJzonXFx1MjE5NVxcdWZlMGYnLFxuICAnYXJyb3dfdXBfc21hbGwnOidcXHVkODNkXFx1ZGQzYycsXG4gICdhcnJvd191cHBlcl9sZWZ0JzonXFx1MjE5NlxcdWZlMGYnLFxuICAnYXJyb3dfdXBwZXJfcmlnaHQnOidcXHUyMTk3XFx1ZmUwZicsXG4gICdhcnJvd3NfY2xvY2t3aXNlJzonXFx1ZDgzZFxcdWRkMDMnLFxuICAnYXJyb3dzX2NvdW50ZXJjbG9ja3dpc2UnOidcXHVkODNkXFx1ZGQwNCcsXG4gICdhcnQnOidcXHVkODNjXFx1ZGZhOCcsXG4gICdhcnRpY3VsYXRlZF9sb3JyeSc6J1xcdWQ4M2RcXHVkZTliJyxcbiAgJ2FydGlmaWNpYWxfc2F0ZWxsaXRlJzonXFx1ZDgzZFxcdWRlZjAnLFxuICAnYXN0b25pc2hlZCc6J1xcdWQ4M2RcXHVkZTMyJyxcbiAgJ2F0aGxldGljX3Nob2UnOidcXHVkODNkXFx1ZGM1ZicsXG4gICdhdG0nOidcXHVkODNjXFx1ZGZlNycsXG4gICdhdG9tX3N5bWJvbCc6J1xcdTI2OWJcXHVmZTBmJyxcbiAgJ2F2b2NhZG8nOidcXHVkODNlXFx1ZGQ1MScsXG4gICdiJzonXFx1ZDgzY1xcdWRkNzFcXHVmZTBmJyxcbiAgJ2JhYnknOidcXHVkODNkXFx1ZGM3NicsXG4gICdiYWJ5X2JvdHRsZSc6J1xcdWQ4M2NcXHVkZjdjJyxcbiAgJ2JhYnlfY2hpY2snOidcXHVkODNkXFx1ZGMyNCcsXG4gICdiYWJ5X3N5bWJvbCc6J1xcdWQ4M2RcXHVkZWJjJyxcbiAgJ2JhY2snOidcXHVkODNkXFx1ZGQxOScsXG4gICdiYWNvbic6J1xcdWQ4M2VcXHVkZDUzJyxcbiAgJ2JhZG1pbnRvbic6J1xcdWQ4M2NcXHVkZmY4JyxcbiAgJ2JhZ2dhZ2VfY2xhaW0nOidcXHVkODNkXFx1ZGVjNCcsXG4gICdiYWd1ZXR0ZV9icmVhZCc6J1xcdWQ4M2VcXHVkZDU2JyxcbiAgJ2JhbGFuY2Vfc2NhbGUnOidcXHUyNjk2XFx1ZmUwZicsXG4gICdiYWxsb29uJzonXFx1ZDgzY1xcdWRmODgnLFxuICAnYmFsbG90X2JveCc6J1xcdWQ4M2RcXHVkZGYzJyxcbiAgJ2JhbGxvdF9ib3hfd2l0aF9jaGVjayc6J1xcdTI2MTFcXHVmZTBmJyxcbiAgJ2JhbWJvbyc6J1xcdWQ4M2NcXHVkZjhkJyxcbiAgJ2JhbmFuYSc6J1xcdWQ4M2NcXHVkZjRjJyxcbiAgJ2JhbmdiYW5nJzonXFx1MjAzY1xcdWZlMGYnLFxuICAnYmFuayc6J1xcdWQ4M2NcXHVkZmU2JyxcbiAgJ2Jhcl9jaGFydCc6J1xcdWQ4M2RcXHVkY2NhJyxcbiAgJ2JhcmJlcic6J1xcdWQ4M2RcXHVkYzg4JyxcbiAgJ2Jhc2ViYWxsJzonXFx1MjZiZVxcdWZlMGYnLFxuICAnYmFza2V0YmFsbCc6J1xcdWQ4M2NcXHVkZmMwJyxcbiAgJ2Jhc2tldGJhbGxfbWFuJzonXFx1MjZmOVxcdWZlMGYnLFxuICAnYmFza2V0YmFsbF93b21hbic6J1xcdTI2ZjlcXHVmZTBmJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdiYXQnOidcXHVkODNlXFx1ZGQ4NycsXG4gICdiYXRoJzonXFx1ZDgzZFxcdWRlYzAnLFxuICAnYmF0aHR1Yic6J1xcdWQ4M2RcXHVkZWMxJyxcbiAgJ2JhdHRlcnknOidcXHVkODNkXFx1ZGQwYicsXG4gICdiZWFjaF91bWJyZWxsYSc6J1xcdWQ4M2NcXHVkZmQ2JyxcbiAgJ2JlYXInOidcXHVkODNkXFx1ZGMzYicsXG4gICdiZWQnOidcXHVkODNkXFx1ZGVjZicsXG4gICdiZWUnOidcXHVkODNkXFx1ZGMxZCcsXG4gICdiZWVyJzonXFx1ZDgzY1xcdWRmN2EnLFxuICAnYmVlcnMnOidcXHVkODNjXFx1ZGY3YicsXG4gICdiZWV0bGUnOidcXHVkODNkXFx1ZGMxZScsXG4gICdiZWdpbm5lcic6J1xcdWQ4M2RcXHVkZDMwJyxcbiAgJ2JlbGwnOidcXHVkODNkXFx1ZGQxNCcsXG4gICdiZWxsaG9wX2JlbGwnOidcXHVkODNkXFx1ZGVjZScsXG4gICdiZW50byc6J1xcdWQ4M2NcXHVkZjcxJyxcbiAgJ2Jpa2luZ19tYW4nOidcXHVkODNkXFx1ZGViNCcsXG4gICdiaWtlJzonXFx1ZDgzZFxcdWRlYjInLFxuICAnYmlraW5nX3dvbWFuJzonXFx1ZDgzZFxcdWRlYjQmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ2Jpa2luaSc6J1xcdWQ4M2RcXHVkYzU5JyxcbiAgJ2Jpb2hhemFyZCc6J1xcdTI2MjNcXHVmZTBmJyxcbiAgJ2JpcmQnOidcXHVkODNkXFx1ZGMyNicsXG4gICdiaXJ0aGRheSc6J1xcdWQ4M2NcXHVkZjgyJyxcbiAgJ2JsYWNrX2NpcmNsZSc6J1xcdTI2YWJcXHVmZTBmJyxcbiAgJ2JsYWNrX2ZsYWcnOidcXHVkODNjXFx1ZGZmNCcsXG4gICdibGFja19oZWFydCc6J1xcdWQ4M2RcXHVkZGE0JyxcbiAgJ2JsYWNrX2pva2VyJzonXFx1ZDgzY1xcdWRjY2YnLFxuICAnYmxhY2tfbGFyZ2Vfc3F1YXJlJzonXFx1MmIxYlxcdWZlMGYnLFxuICAnYmxhY2tfbWVkaXVtX3NtYWxsX3NxdWFyZSc6J1xcdTI1ZmVcXHVmZTBmJyxcbiAgJ2JsYWNrX21lZGl1bV9zcXVhcmUnOidcXHUyNWZjXFx1ZmUwZicsXG4gICdibGFja19uaWInOidcXHUyNzEyXFx1ZmUwZicsXG4gICdibGFja19zbWFsbF9zcXVhcmUnOidcXHUyNWFhXFx1ZmUwZicsXG4gICdibGFja19zcXVhcmVfYnV0dG9uJzonXFx1ZDgzZFxcdWRkMzInLFxuICAnYmxvbmRlX21hbic6J1xcdWQ4M2RcXHVkYzcxJyxcbiAgJ2Jsb25kZV93b21hbic6J1xcdWQ4M2RcXHVkYzcxJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdibG9zc29tJzonXFx1ZDgzY1xcdWRmM2MnLFxuICAnYmxvd2Zpc2gnOidcXHVkODNkXFx1ZGMyMScsXG4gICdibHVlX2Jvb2snOidcXHVkODNkXFx1ZGNkOCcsXG4gICdibHVlX2Nhcic6J1xcdWQ4M2RcXHVkZTk5JyxcbiAgJ2JsdWVfaGVhcnQnOidcXHVkODNkXFx1ZGM5OScsXG4gICdibHVzaCc6J1xcdWQ4M2RcXHVkZTBhJyxcbiAgJ2JvYXInOidcXHVkODNkXFx1ZGMxNycsXG4gICdib2F0JzonXFx1MjZmNVxcdWZlMGYnLFxuICAnYm9tYic6J1xcdWQ4M2RcXHVkY2EzJyxcbiAgJ2Jvb2snOidcXHVkODNkXFx1ZGNkNicsXG4gICdib29rbWFyayc6J1xcdWQ4M2RcXHVkZDE2JyxcbiAgJ2Jvb2ttYXJrX3RhYnMnOidcXHVkODNkXFx1ZGNkMScsXG4gICdib29rcyc6J1xcdWQ4M2RcXHVkY2RhJyxcbiAgJ2Jvb20nOidcXHVkODNkXFx1ZGNhNScsXG4gICdib290JzonXFx1ZDgzZFxcdWRjNjInLFxuICAnYm91cXVldCc6J1xcdWQ4M2RcXHVkYzkwJyxcbiAgJ2Jvd2luZ19tYW4nOidcXHVkODNkXFx1ZGU0NycsXG4gICdib3dfYW5kX2Fycm93JzonXFx1ZDgzY1xcdWRmZjknLFxuICAnYm93aW5nX3dvbWFuJzonXFx1ZDgzZFxcdWRlNDcmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ2Jvd2xpbmcnOidcXHVkODNjXFx1ZGZiMycsXG4gICdib3hpbmdfZ2xvdmUnOidcXHVkODNlXFx1ZGQ0YScsXG4gICdib3knOidcXHVkODNkXFx1ZGM2NicsXG4gICdicmVhZCc6J1xcdWQ4M2NcXHVkZjVlJyxcbiAgJ2JyaWRlX3dpdGhfdmVpbCc6J1xcdWQ4M2RcXHVkYzcwJyxcbiAgJ2JyaWRnZV9hdF9uaWdodCc6J1xcdWQ4M2NcXHVkZjA5JyxcbiAgJ2JyaWVmY2FzZSc6J1xcdWQ4M2RcXHVkY2JjJyxcbiAgJ2Jyb2tlbl9oZWFydCc6J1xcdWQ4M2RcXHVkYzk0JyxcbiAgJ2J1Zyc6J1xcdWQ4M2RcXHVkYzFiJyxcbiAgJ2J1aWxkaW5nX2NvbnN0cnVjdGlvbic6J1xcdWQ4M2NcXHVkZmQ3JyxcbiAgJ2J1bGInOidcXHVkODNkXFx1ZGNhMScsXG4gICdidWxsZXR0cmFpbl9mcm9udCc6J1xcdWQ4M2RcXHVkZTg1JyxcbiAgJ2J1bGxldHRyYWluX3NpZGUnOidcXHVkODNkXFx1ZGU4NCcsXG4gICdidXJyaXRvJzonXFx1ZDgzY1xcdWRmMmYnLFxuICAnYnVzJzonXFx1ZDgzZFxcdWRlOGMnLFxuICAnYnVzaW5lc3Nfc3VpdF9sZXZpdGF0aW5nJzonXFx1ZDgzZFxcdWRkNzQnLFxuICAnYnVzc3RvcCc6J1xcdWQ4M2RcXHVkZThmJyxcbiAgJ2J1c3RfaW5fc2lsaG91ZXR0ZSc6J1xcdWQ4M2RcXHVkYzY0JyxcbiAgJ2J1c3RzX2luX3NpbGhvdWV0dGUnOidcXHVkODNkXFx1ZGM2NScsXG4gICdidXR0ZXJmbHknOidcXHVkODNlXFx1ZGQ4YicsXG4gICdjYWN0dXMnOidcXHVkODNjXFx1ZGYzNScsXG4gICdjYWtlJzonXFx1ZDgzY1xcdWRmNzAnLFxuICAnY2FsZW5kYXInOidcXHVkODNkXFx1ZGNjNicsXG4gICdjYWxsX21lX2hhbmQnOidcXHVkODNlXFx1ZGQxOScsXG4gICdjYWxsaW5nJzonXFx1ZDgzZFxcdWRjZjInLFxuICAnY2FtZWwnOidcXHVkODNkXFx1ZGMyYicsXG4gICdjYW1lcmEnOidcXHVkODNkXFx1ZGNmNycsXG4gICdjYW1lcmFfZmxhc2gnOidcXHVkODNkXFx1ZGNmOCcsXG4gICdjYW1waW5nJzonXFx1ZDgzY1xcdWRmZDUnLFxuICAnY2FuY2VyJzonXFx1MjY0YlxcdWZlMGYnLFxuICAnY2FuZGxlJzonXFx1ZDgzZFxcdWRkNmYnLFxuICAnY2FuZHknOidcXHVkODNjXFx1ZGY2YycsXG4gICdjYW5vZSc6J1xcdWQ4M2RcXHVkZWY2JyxcbiAgJ2NhcGl0YWxfYWJjZCc6J1xcdWQ4M2RcXHVkZDIwJyxcbiAgJ2NhcHJpY29ybic6J1xcdTI2NTFcXHVmZTBmJyxcbiAgJ2Nhcic6J1xcdWQ4M2RcXHVkZTk3JyxcbiAgJ2NhcmRfZmlsZV9ib3gnOidcXHVkODNkXFx1ZGRjMycsXG4gICdjYXJkX2luZGV4JzonXFx1ZDgzZFxcdWRjYzcnLFxuICAnY2FyZF9pbmRleF9kaXZpZGVycyc6J1xcdWQ4M2RcXHVkZGMyJyxcbiAgJ2Nhcm91c2VsX2hvcnNlJzonXFx1ZDgzY1xcdWRmYTAnLFxuICAnY2Fycm90JzonXFx1ZDgzZVxcdWRkNTUnLFxuICAnY2F0JzonXFx1ZDgzZFxcdWRjMzEnLFxuICAnY2F0Mic6J1xcdWQ4M2RcXHVkYzA4JyxcbiAgJ2NkJzonXFx1ZDgzZFxcdWRjYmYnLFxuICAnY2hhaW5zJzonXFx1MjZkMycsXG4gICdjaGFtcGFnbmUnOidcXHVkODNjXFx1ZGY3ZScsXG4gICdjaGFydCc6J1xcdWQ4M2RcXHVkY2I5JyxcbiAgJ2NoYXJ0X3dpdGhfZG93bndhcmRzX3RyZW5kJzonXFx1ZDgzZFxcdWRjYzknLFxuICAnY2hhcnRfd2l0aF91cHdhcmRzX3RyZW5kJzonXFx1ZDgzZFxcdWRjYzgnLFxuICAnY2hlY2tlcmVkX2ZsYWcnOidcXHVkODNjXFx1ZGZjMScsXG4gICdjaGVlc2UnOidcXHVkODNlXFx1ZGRjMCcsXG4gICdjaGVycmllcyc6J1xcdWQ4M2NcXHVkZjUyJyxcbiAgJ2NoZXJyeV9ibG9zc29tJzonXFx1ZDgzY1xcdWRmMzgnLFxuICAnY2hlc3RudXQnOidcXHVkODNjXFx1ZGYzMCcsXG4gICdjaGlja2VuJzonXFx1ZDgzZFxcdWRjMTQnLFxuICAnY2hpbGRyZW5fY3Jvc3NpbmcnOidcXHVkODNkXFx1ZGViOCcsXG4gICdjaGlwbXVuayc6J1xcdWQ4M2RcXHVkYzNmJyxcbiAgJ2Nob2NvbGF0ZV9iYXInOidcXHVkODNjXFx1ZGY2YicsXG4gICdjaHJpc3RtYXNfdHJlZSc6J1xcdWQ4M2NcXHVkZjg0JyxcbiAgJ2NodXJjaCc6J1xcdTI2ZWFcXHVmZTBmJyxcbiAgJ2NpbmVtYSc6J1xcdWQ4M2NcXHVkZmE2JyxcbiAgJ2NpcmN1c190ZW50JzonXFx1ZDgzY1xcdWRmYWEnLFxuICAnY2l0eV9zdW5yaXNlJzonXFx1ZDgzY1xcdWRmMDcnLFxuICAnY2l0eV9zdW5zZXQnOidcXHVkODNjXFx1ZGYwNicsXG4gICdjaXR5c2NhcGUnOidcXHVkODNjXFx1ZGZkOScsXG4gICdjbCc6J1xcdWQ4M2NcXHVkZDkxJyxcbiAgJ2NsYW1wJzonXFx1ZDgzZFxcdWRkZGMnLFxuICAnY2xhcCc6J1xcdWQ4M2RcXHVkYzRmJyxcbiAgJ2NsYXBwZXInOidcXHVkODNjXFx1ZGZhYycsXG4gICdjbGFzc2ljYWxfYnVpbGRpbmcnOidcXHVkODNjXFx1ZGZkYicsXG4gICdjbGlua2luZ19nbGFzc2VzJzonXFx1ZDgzZVxcdWRkNDInLFxuICAnY2xpcGJvYXJkJzonXFx1ZDgzZFxcdWRjY2InLFxuICAnY2xvY2sxJzonXFx1ZDgzZFxcdWRkNTAnLFxuICAnY2xvY2sxMCc6J1xcdWQ4M2RcXHVkZDU5JyxcbiAgJ2Nsb2NrMTAzMCc6J1xcdWQ4M2RcXHVkZDY1JyxcbiAgJ2Nsb2NrMTEnOidcXHVkODNkXFx1ZGQ1YScsXG4gICdjbG9jazExMzAnOidcXHVkODNkXFx1ZGQ2NicsXG4gICdjbG9jazEyJzonXFx1ZDgzZFxcdWRkNWInLFxuICAnY2xvY2sxMjMwJzonXFx1ZDgzZFxcdWRkNjcnLFxuICAnY2xvY2sxMzAnOidcXHVkODNkXFx1ZGQ1YycsXG4gICdjbG9jazInOidcXHVkODNkXFx1ZGQ1MScsXG4gICdjbG9jazIzMCc6J1xcdWQ4M2RcXHVkZDVkJyxcbiAgJ2Nsb2NrMyc6J1xcdWQ4M2RcXHVkZDUyJyxcbiAgJ2Nsb2NrMzMwJzonXFx1ZDgzZFxcdWRkNWUnLFxuICAnY2xvY2s0JzonXFx1ZDgzZFxcdWRkNTMnLFxuICAnY2xvY2s0MzAnOidcXHVkODNkXFx1ZGQ1ZicsXG4gICdjbG9jazUnOidcXHVkODNkXFx1ZGQ1NCcsXG4gICdjbG9jazUzMCc6J1xcdWQ4M2RcXHVkZDYwJyxcbiAgJ2Nsb2NrNic6J1xcdWQ4M2RcXHVkZDU1JyxcbiAgJ2Nsb2NrNjMwJzonXFx1ZDgzZFxcdWRkNjEnLFxuICAnY2xvY2s3JzonXFx1ZDgzZFxcdWRkNTYnLFxuICAnY2xvY2s3MzAnOidcXHVkODNkXFx1ZGQ2MicsXG4gICdjbG9jazgnOidcXHVkODNkXFx1ZGQ1NycsXG4gICdjbG9jazgzMCc6J1xcdWQ4M2RcXHVkZDYzJyxcbiAgJ2Nsb2NrOSc6J1xcdWQ4M2RcXHVkZDU4JyxcbiAgJ2Nsb2NrOTMwJzonXFx1ZDgzZFxcdWRkNjQnLFxuICAnY2xvc2VkX2Jvb2snOidcXHVkODNkXFx1ZGNkNScsXG4gICdjbG9zZWRfbG9ja193aXRoX2tleSc6J1xcdWQ4M2RcXHVkZDEwJyxcbiAgJ2Nsb3NlZF91bWJyZWxsYSc6J1xcdWQ4M2NcXHVkZjAyJyxcbiAgJ2Nsb3VkJzonXFx1MjYwMVxcdWZlMGYnLFxuICAnY2xvdWRfd2l0aF9saWdodG5pbmcnOidcXHVkODNjXFx1ZGYyOScsXG4gICdjbG91ZF93aXRoX2xpZ2h0bmluZ19hbmRfcmFpbic6J1xcdTI2YzgnLFxuICAnY2xvdWRfd2l0aF9yYWluJzonXFx1ZDgzY1xcdWRmMjcnLFxuICAnY2xvdWRfd2l0aF9zbm93JzonXFx1ZDgzY1xcdWRmMjgnLFxuICAnY2xvd25fZmFjZSc6J1xcdWQ4M2VcXHVkZDIxJyxcbiAgJ2NsdWJzJzonXFx1MjY2M1xcdWZlMGYnLFxuICAnY29ja3RhaWwnOidcXHVkODNjXFx1ZGY3OCcsXG4gICdjb2ZmZWUnOidcXHUyNjE1XFx1ZmUwZicsXG4gICdjb2ZmaW4nOidcXHUyNmIwXFx1ZmUwZicsXG4gICdjb2xkX3N3ZWF0JzonXFx1ZDgzZFxcdWRlMzAnLFxuICAnY29tZXQnOidcXHUyNjA0XFx1ZmUwZicsXG4gICdjb21wdXRlcic6J1xcdWQ4M2RcXHVkY2JiJyxcbiAgJ2NvbXB1dGVyX21vdXNlJzonXFx1ZDgzZFxcdWRkYjEnLFxuICAnY29uZmV0dGlfYmFsbCc6J1xcdWQ4M2NcXHVkZjhhJyxcbiAgJ2NvbmZvdW5kZWQnOidcXHVkODNkXFx1ZGUxNicsXG4gICdjb25mdXNlZCc6J1xcdWQ4M2RcXHVkZTE1JyxcbiAgJ2NvbmdyYXR1bGF0aW9ucyc6J1xcdTMyOTdcXHVmZTBmJyxcbiAgJ2NvbnN0cnVjdGlvbic6J1xcdWQ4M2RcXHVkZWE3JyxcbiAgJ2NvbnN0cnVjdGlvbl93b3JrZXJfbWFuJzonXFx1ZDgzZFxcdWRjNzcnLFxuICAnY29uc3RydWN0aW9uX3dvcmtlcl93b21hbic6J1xcdWQ4M2RcXHVkYzc3Jnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdjb250cm9sX2tub2JzJzonXFx1ZDgzY1xcdWRmOWInLFxuICAnY29udmVuaWVuY2Vfc3RvcmUnOidcXHVkODNjXFx1ZGZlYScsXG4gICdjb29raWUnOidcXHVkODNjXFx1ZGY2YScsXG4gICdjb29sJzonXFx1ZDgzY1xcdWRkOTInLFxuICAncG9saWNlbWFuJzonXFx1ZDgzZFxcdWRjNmUnLFxuICAnY29weXJpZ2h0JzonXFx1MDBhOVxcdWZlMGYnLFxuICAnY29ybic6J1xcdWQ4M2NcXHVkZjNkJyxcbiAgJ2NvdWNoX2FuZF9sYW1wJzonXFx1ZDgzZFxcdWRlY2InLFxuICAnY291cGxlJzonXFx1ZDgzZFxcdWRjNmInLFxuICAnY291cGxlX3dpdGhfaGVhcnRfd29tYW5fbWFuJzonXFx1ZDgzZFxcdWRjOTEnLFxuICAnY291cGxlX3dpdGhfaGVhcnRfbWFuX21hbic6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHUyNzY0XFx1ZmUwZiZ6d2o7XFx1ZDgzZFxcdWRjNjgnLFxuICAnY291cGxlX3dpdGhfaGVhcnRfd29tYW5fd29tYW4nOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1Mjc2NFxcdWZlMGYmendqO1xcdWQ4M2RcXHVkYzY5JyxcbiAgJ2NvdXBsZWtpc3NfbWFuX21hbic6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHUyNzY0XFx1ZmUwZiZ6d2o7XFx1ZDgzZFxcdWRjOGImendqO1xcdWQ4M2RcXHVkYzY4JyxcbiAgJ2NvdXBsZWtpc3NfbWFuX3dvbWFuJzonXFx1ZDgzZFxcdWRjOGYnLFxuICAnY291cGxla2lzc193b21hbl93b21hbic6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHUyNzY0XFx1ZmUwZiZ6d2o7XFx1ZDgzZFxcdWRjOGImendqO1xcdWQ4M2RcXHVkYzY5JyxcbiAgJ2Nvdyc6J1xcdWQ4M2RcXHVkYzJlJyxcbiAgJ2NvdzInOidcXHVkODNkXFx1ZGMwNCcsXG4gICdjb3dib3lfaGF0X2ZhY2UnOidcXHVkODNlXFx1ZGQyMCcsXG4gICdjcmFiJzonXFx1ZDgzZVxcdWRkODAnLFxuICAnY3JheW9uJzonXFx1ZDgzZFxcdWRkOGQnLFxuICAnY3JlZGl0X2NhcmQnOidcXHVkODNkXFx1ZGNiMycsXG4gICdjcmVzY2VudF9tb29uJzonXFx1ZDgzY1xcdWRmMTknLFxuICAnY3JpY2tldCc6J1xcdWQ4M2NcXHVkZmNmJyxcbiAgJ2Nyb2NvZGlsZSc6J1xcdWQ4M2RcXHVkYzBhJyxcbiAgJ2Nyb2lzc2FudCc6J1xcdWQ4M2VcXHVkZDUwJyxcbiAgJ2Nyb3NzZWRfZmluZ2Vycyc6J1xcdWQ4M2VcXHVkZDFlJyxcbiAgJ2Nyb3NzZWRfZmxhZ3MnOidcXHVkODNjXFx1ZGY4YycsXG4gICdjcm9zc2VkX3N3b3Jkcyc6J1xcdTI2OTRcXHVmZTBmJyxcbiAgJ2Nyb3duJzonXFx1ZDgzZFxcdWRjNTEnLFxuICAnY3J5JzonXFx1ZDgzZFxcdWRlMjInLFxuICAnY3J5aW5nX2NhdF9mYWNlJzonXFx1ZDgzZFxcdWRlM2YnLFxuICAnY3J5c3RhbF9iYWxsJzonXFx1ZDgzZFxcdWRkMmUnLFxuICAnY3VjdW1iZXInOidcXHVkODNlXFx1ZGQ1MicsXG4gICdjdXBpZCc6J1xcdWQ4M2RcXHVkYzk4JyxcbiAgJ2N1cmx5X2xvb3AnOidcXHUyN2IwJyxcbiAgJ2N1cnJlbmN5X2V4Y2hhbmdlJzonXFx1ZDgzZFxcdWRjYjEnLFxuICAnY3VycnknOidcXHVkODNjXFx1ZGY1YicsXG4gICdjdXN0YXJkJzonXFx1ZDgzY1xcdWRmNmUnLFxuICAnY3VzdG9tcyc6J1xcdWQ4M2RcXHVkZWMzJyxcbiAgJ2N5Y2xvbmUnOidcXHVkODNjXFx1ZGYwMCcsXG4gICdkYWdnZXInOidcXHVkODNkXFx1ZGRlMScsXG4gICdkYW5jZXInOidcXHVkODNkXFx1ZGM4MycsXG4gICdkYW5jaW5nX3dvbWVuJzonXFx1ZDgzZFxcdWRjNmYnLFxuICAnZGFuY2luZ19tZW4nOidcXHVkODNkXFx1ZGM2ZiZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnZGFuZ28nOidcXHVkODNjXFx1ZGY2MScsXG4gICdkYXJrX3N1bmdsYXNzZXMnOidcXHVkODNkXFx1ZGQ3NicsXG4gICdkYXJ0JzonXFx1ZDgzY1xcdWRmYWYnLFxuICAnZGFzaCc6J1xcdWQ4M2RcXHVkY2E4JyxcbiAgJ2RhdGUnOidcXHVkODNkXFx1ZGNjNScsXG4gICdkZWNpZHVvdXNfdHJlZSc6J1xcdWQ4M2NcXHVkZjMzJyxcbiAgJ2RlZXInOidcXHVkODNlXFx1ZGQ4YycsXG4gICdkZXBhcnRtZW50X3N0b3JlJzonXFx1ZDgzY1xcdWRmZWMnLFxuICAnZGVyZWxpY3RfaG91c2UnOidcXHVkODNjXFx1ZGZkYScsXG4gICdkZXNlcnQnOidcXHVkODNjXFx1ZGZkYycsXG4gICdkZXNlcnRfaXNsYW5kJzonXFx1ZDgzY1xcdWRmZGQnLFxuICAnZGVza3RvcF9jb21wdXRlcic6J1xcdWQ4M2RcXHVkZGE1JyxcbiAgJ21hbGVfZGV0ZWN0aXZlJzonXFx1ZDgzZFxcdWRkNzVcXHVmZTBmJyxcbiAgJ2RpYW1vbmRfc2hhcGVfd2l0aF9hX2RvdF9pbnNpZGUnOidcXHVkODNkXFx1ZGNhMCcsXG4gICdkaWFtb25kcyc6J1xcdTI2NjZcXHVmZTBmJyxcbiAgJ2Rpc2FwcG9pbnRlZCc6J1xcdWQ4M2RcXHVkZTFlJyxcbiAgJ2Rpc2FwcG9pbnRlZF9yZWxpZXZlZCc6J1xcdWQ4M2RcXHVkZTI1JyxcbiAgJ2Rpenp5JzonXFx1ZDgzZFxcdWRjYWInLFxuICAnZGl6enlfZmFjZSc6J1xcdWQ4M2RcXHVkZTM1JyxcbiAgJ2RvX25vdF9saXR0ZXInOidcXHVkODNkXFx1ZGVhZicsXG4gICdkb2cnOidcXHVkODNkXFx1ZGMzNicsXG4gICdkb2cyJzonXFx1ZDgzZFxcdWRjMTUnLFxuICAnZG9sbGFyJzonXFx1ZDgzZFxcdWRjYjUnLFxuICAnZG9sbHMnOidcXHVkODNjXFx1ZGY4ZScsXG4gICdkb2xwaGluJzonXFx1ZDgzZFxcdWRjMmMnLFxuICAnZG9vcic6J1xcdWQ4M2RcXHVkZWFhJyxcbiAgJ2RvdWdobnV0JzonXFx1ZDgzY1xcdWRmNjknLFxuICAnZG92ZSc6J1xcdWQ4M2RcXHVkZDRhJyxcbiAgJ2RyYWdvbic6J1xcdWQ4M2RcXHVkYzA5JyxcbiAgJ2RyYWdvbl9mYWNlJzonXFx1ZDgzZFxcdWRjMzInLFxuICAnZHJlc3MnOidcXHVkODNkXFx1ZGM1NycsXG4gICdkcm9tZWRhcnlfY2FtZWwnOidcXHVkODNkXFx1ZGMyYScsXG4gICdkcm9vbGluZ19mYWNlJzonXFx1ZDgzZVxcdWRkMjQnLFxuICAnZHJvcGxldCc6J1xcdWQ4M2RcXHVkY2E3JyxcbiAgJ2RydW0nOidcXHVkODNlXFx1ZGQ0MScsXG4gICdkdWNrJzonXFx1ZDgzZVxcdWRkODYnLFxuICAnZHZkJzonXFx1ZDgzZFxcdWRjYzAnLFxuICAnZS1tYWlsJzonXFx1ZDgzZFxcdWRjZTcnLFxuICAnZWFnbGUnOidcXHVkODNlXFx1ZGQ4NScsXG4gICdlYXInOidcXHVkODNkXFx1ZGM0MicsXG4gICdlYXJfb2ZfcmljZSc6J1xcdWQ4M2NcXHVkZjNlJyxcbiAgJ2VhcnRoX2FmcmljYSc6J1xcdWQ4M2NcXHVkZjBkJyxcbiAgJ2VhcnRoX2FtZXJpY2FzJzonXFx1ZDgzY1xcdWRmMGUnLFxuICAnZWFydGhfYXNpYSc6J1xcdWQ4M2NcXHVkZjBmJyxcbiAgJ2VnZyc6J1xcdWQ4M2VcXHVkZDVhJyxcbiAgJ2VnZ3BsYW50JzonXFx1ZDgzY1xcdWRmNDYnLFxuICAnZWlnaHRfcG9pbnRlZF9ibGFja19zdGFyJzonXFx1MjczNFxcdWZlMGYnLFxuICAnZWlnaHRfc3Bva2VkX2FzdGVyaXNrJzonXFx1MjczM1xcdWZlMGYnLFxuICAnZWxlY3RyaWNfcGx1Zyc6J1xcdWQ4M2RcXHVkZDBjJyxcbiAgJ2VsZXBoYW50JzonXFx1ZDgzZFxcdWRjMTgnLFxuICAnZW1haWwnOidcXHUyNzA5XFx1ZmUwZicsXG4gICdlbmQnOidcXHVkODNkXFx1ZGQxYScsXG4gICdlbnZlbG9wZV93aXRoX2Fycm93JzonXFx1ZDgzZFxcdWRjZTknLFxuICAnZXVybyc6J1xcdWQ4M2RcXHVkY2I2JyxcbiAgJ2V1cm9wZWFuX2Nhc3RsZSc6J1xcdWQ4M2NcXHVkZmYwJyxcbiAgJ2V1cm9wZWFuX3Bvc3Rfb2ZmaWNlJzonXFx1ZDgzY1xcdWRmZTQnLFxuICAnZXZlcmdyZWVuX3RyZWUnOidcXHVkODNjXFx1ZGYzMicsXG4gICdleGNsYW1hdGlvbic6J1xcdTI3NTdcXHVmZTBmJyxcbiAgJ2V4cHJlc3Npb25sZXNzJzonXFx1ZDgzZFxcdWRlMTEnLFxuICAnZXllJzonXFx1ZDgzZFxcdWRjNDEnLFxuICAnZXllX3NwZWVjaF9idWJibGUnOidcXHVkODNkXFx1ZGM0MSZ6d2o7XFx1ZDgzZFxcdWRkZTgnLFxuICAnZXllZ2xhc3Nlcyc6J1xcdWQ4M2RcXHVkYzUzJyxcbiAgJ2V5ZXMnOidcXHVkODNkXFx1ZGM0MCcsXG4gICdmYWNlX3dpdGhfaGVhZF9iYW5kYWdlJzonXFx1ZDgzZVxcdWRkMTUnLFxuICAnZmFjZV93aXRoX3RoZXJtb21ldGVyJzonXFx1ZDgzZVxcdWRkMTInLFxuICAnZmlzdF9vbmNvbWluZyc6J1xcdWQ4M2RcXHVkYzRhJyxcbiAgJ2ZhY3RvcnknOidcXHVkODNjXFx1ZGZlZCcsXG4gICdmYWxsZW5fbGVhZic6J1xcdWQ4M2NcXHVkZjQyJyxcbiAgJ2ZhbWlseV9tYW5fd29tYW5fYm95JzonXFx1ZDgzZFxcdWRjNmEnLFxuICAnZmFtaWx5X21hbl9ib3knOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X21hbl9ib3lfYm95JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY2Jnp3ajtcXHVkODNkXFx1ZGM2NicsXG4gICdmYW1pbHlfbWFuX2dpcmwnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjcnLFxuICAnZmFtaWx5X21hbl9naXJsX2JveSc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2NyZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X21hbl9naXJsX2dpcmwnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjcmendqO1xcdWQ4M2RcXHVkYzY3JyxcbiAgJ2ZhbWlseV9tYW5fbWFuX2JveSc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X21hbl9tYW5fYm95X2JveSc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjYmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV9tYW5fbWFuX2dpcmwnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY3JyxcbiAgJ2ZhbWlseV9tYW5fbWFuX2dpcmxfYm95JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2NyZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X21hbl9tYW5fZ2lybF9naXJsJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2NyZ6d2o7XFx1ZDgzZFxcdWRjNjcnLFxuICAnZmFtaWx5X21hbl93b21hbl9ib3lfYm95JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NiZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X21hbl93b21hbl9naXJsJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NycsXG4gICdmYW1pbHlfbWFuX3dvbWFuX2dpcmxfYm95JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NyZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X21hbl93b21hbl9naXJsX2dpcmwnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY3Jnp3ajtcXHVkODNkXFx1ZGM2NycsXG4gICdmYW1pbHlfd29tYW5fYm95JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV93b21hbl9ib3lfYm95JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY2Jnp3ajtcXHVkODNkXFx1ZGM2NicsXG4gICdmYW1pbHlfd29tYW5fZ2lybCc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NycsXG4gICdmYW1pbHlfd29tYW5fZ2lybF9ib3knOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjcmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV93b21hbl9naXJsX2dpcmwnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjcmendqO1xcdWQ4M2RcXHVkYzY3JyxcbiAgJ2ZhbWlseV93b21hbl93b21hbl9ib3knOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV93b21hbl93b21hbl9ib3lfYm95JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NiZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X3dvbWFuX3dvbWFuX2dpcmwnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY3JyxcbiAgJ2ZhbWlseV93b21hbl93b21hbl9naXJsX2JveSc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjcmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV93b21hbl93b21hbl9naXJsX2dpcmwnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY3Jnp3ajtcXHVkODNkXFx1ZGM2NycsXG4gICdmYXN0X2ZvcndhcmQnOidcXHUyM2U5JyxcbiAgJ2ZheCc6J1xcdWQ4M2RcXHVkY2UwJyxcbiAgJ2ZlYXJmdWwnOidcXHVkODNkXFx1ZGUyOCcsXG4gICdmZWV0JzonXFx1ZDgzZFxcdWRjM2UnLFxuICAnZmVtYWxlX2RldGVjdGl2ZSc6J1xcdWQ4M2RcXHVkZDc1XFx1ZmUwZiZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnZmVycmlzX3doZWVsJzonXFx1ZDgzY1xcdWRmYTEnLFxuICAnZmVycnknOidcXHUyNmY0JyxcbiAgJ2ZpZWxkX2hvY2tleSc6J1xcdWQ4M2NcXHVkZmQxJyxcbiAgJ2ZpbGVfY2FiaW5ldCc6J1xcdWQ4M2RcXHVkZGM0JyxcbiAgJ2ZpbGVfZm9sZGVyJzonXFx1ZDgzZFxcdWRjYzEnLFxuICAnZmlsbV9wcm9qZWN0b3InOidcXHVkODNkXFx1ZGNmZCcsXG4gICdmaWxtX3N0cmlwJzonXFx1ZDgzY1xcdWRmOWUnLFxuICAnZmlyZSc6J1xcdWQ4M2RcXHVkZDI1JyxcbiAgJ2ZpcmVfZW5naW5lJzonXFx1ZDgzZFxcdWRlOTInLFxuICAnZmlyZXdvcmtzJzonXFx1ZDgzY1xcdWRmODYnLFxuICAnZmlyc3RfcXVhcnRlcl9tb29uJzonXFx1ZDgzY1xcdWRmMTMnLFxuICAnZmlyc3RfcXVhcnRlcl9tb29uX3dpdGhfZmFjZSc6J1xcdWQ4M2NcXHVkZjFiJyxcbiAgJ2Zpc2gnOidcXHVkODNkXFx1ZGMxZicsXG4gICdmaXNoX2Nha2UnOidcXHVkODNjXFx1ZGY2NScsXG4gICdmaXNoaW5nX3BvbGVfYW5kX2Zpc2gnOidcXHVkODNjXFx1ZGZhMycsXG4gICdmaXN0X3JhaXNlZCc6J1xcdTI3MGEnLFxuICAnZmlzdF9sZWZ0JzonXFx1ZDgzZVxcdWRkMWInLFxuICAnZmlzdF9yaWdodCc6J1xcdWQ4M2VcXHVkZDFjJyxcbiAgJ2ZsYWdzJzonXFx1ZDgzY1xcdWRmOGYnLFxuICAnZmxhc2hsaWdodCc6J1xcdWQ4M2RcXHVkZDI2JyxcbiAgJ2ZsZXVyX2RlX2xpcyc6J1xcdTI2OWNcXHVmZTBmJyxcbiAgJ2ZsaWdodF9hcnJpdmFsJzonXFx1ZDgzZFxcdWRlZWMnLFxuICAnZmxpZ2h0X2RlcGFydHVyZSc6J1xcdWQ4M2RcXHVkZWViJyxcbiAgJ2Zsb3BweV9kaXNrJzonXFx1ZDgzZFxcdWRjYmUnLFxuICAnZmxvd2VyX3BsYXlpbmdfY2FyZHMnOidcXHVkODNjXFx1ZGZiNCcsXG4gICdmbHVzaGVkJzonXFx1ZDgzZFxcdWRlMzMnLFxuICAnZm9nJzonXFx1ZDgzY1xcdWRmMmInLFxuICAnZm9nZ3knOidcXHVkODNjXFx1ZGYwMScsXG4gICdmb290YmFsbCc6J1xcdWQ4M2NcXHVkZmM4JyxcbiAgJ2Zvb3RwcmludHMnOidcXHVkODNkXFx1ZGM2MycsXG4gICdmb3JrX2FuZF9rbmlmZSc6J1xcdWQ4M2NcXHVkZjc0JyxcbiAgJ2ZvdW50YWluJzonXFx1MjZmMlxcdWZlMGYnLFxuICAnZm91bnRhaW5fcGVuJzonXFx1ZDgzZFxcdWRkOGInLFxuICAnZm91cl9sZWFmX2Nsb3Zlcic6J1xcdWQ4M2NcXHVkZjQwJyxcbiAgJ2ZveF9mYWNlJzonXFx1ZDgzZVxcdWRkOGEnLFxuICAnZnJhbWVkX3BpY3R1cmUnOidcXHVkODNkXFx1ZGRiYycsXG4gICdmcmVlJzonXFx1ZDgzY1xcdWRkOTMnLFxuICAnZnJpZWRfZWdnJzonXFx1ZDgzY1xcdWRmNzMnLFxuICAnZnJpZWRfc2hyaW1wJzonXFx1ZDgzY1xcdWRmNjQnLFxuICAnZnJpZXMnOidcXHVkODNjXFx1ZGY1ZicsXG4gICdmcm9nJzonXFx1ZDgzZFxcdWRjMzgnLFxuICAnZnJvd25pbmcnOidcXHVkODNkXFx1ZGUyNicsXG4gICdmcm93bmluZ19mYWNlJzonXFx1MjYzOVxcdWZlMGYnLFxuICAnZnJvd25pbmdfbWFuJzonXFx1ZDgzZFxcdWRlNGQmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ2Zyb3duaW5nX3dvbWFuJzonXFx1ZDgzZFxcdWRlNGQnLFxuICAnbWlkZGxlX2Zpbmdlcic6J1xcdWQ4M2RcXHVkZDk1JyxcbiAgJ2Z1ZWxwdW1wJzonXFx1MjZmZFxcdWZlMGYnLFxuICAnZnVsbF9tb29uJzonXFx1ZDgzY1xcdWRmMTUnLFxuICAnZnVsbF9tb29uX3dpdGhfZmFjZSc6J1xcdWQ4M2NcXHVkZjFkJyxcbiAgJ2Z1bmVyYWxfdXJuJzonXFx1MjZiMVxcdWZlMGYnLFxuICAnZ2FtZV9kaWUnOidcXHVkODNjXFx1ZGZiMicsXG4gICdnZWFyJzonXFx1MjY5OVxcdWZlMGYnLFxuICAnZ2VtJzonXFx1ZDgzZFxcdWRjOGUnLFxuICAnZ2VtaW5pJzonXFx1MjY0YVxcdWZlMGYnLFxuICAnZ2hvc3QnOidcXHVkODNkXFx1ZGM3YicsXG4gICdnaWZ0JzonXFx1ZDgzY1xcdWRmODEnLFxuICAnZ2lmdF9oZWFydCc6J1xcdWQ4M2RcXHVkYzlkJyxcbiAgJ2dpcmwnOidcXHVkODNkXFx1ZGM2NycsXG4gICdnbG9iZV93aXRoX21lcmlkaWFucyc6J1xcdWQ4M2NcXHVkZjEwJyxcbiAgJ2dvYWxfbmV0JzonXFx1ZDgzZVxcdWRkNDUnLFxuICAnZ29hdCc6J1xcdWQ4M2RcXHVkYzEwJyxcbiAgJ2dvbGYnOidcXHUyNmYzXFx1ZmUwZicsXG4gICdnb2xmaW5nX21hbic6J1xcdWQ4M2NcXHVkZmNjXFx1ZmUwZicsXG4gICdnb2xmaW5nX3dvbWFuJzonXFx1ZDgzY1xcdWRmY2NcXHVmZTBmJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdnb3JpbGxhJzonXFx1ZDgzZVxcdWRkOGQnLFxuICAnZ3JhcGVzJzonXFx1ZDgzY1xcdWRmNDcnLFxuICAnZ3JlZW5fYXBwbGUnOidcXHVkODNjXFx1ZGY0ZicsXG4gICdncmVlbl9ib29rJzonXFx1ZDgzZFxcdWRjZDcnLFxuICAnZ3JlZW5faGVhcnQnOidcXHVkODNkXFx1ZGM5YScsXG4gICdncmVlbl9zYWxhZCc6J1xcdWQ4M2VcXHVkZDU3JyxcbiAgJ2dyZXlfZXhjbGFtYXRpb24nOidcXHUyNzU1JyxcbiAgJ2dyZXlfcXVlc3Rpb24nOidcXHUyNzU0JyxcbiAgJ2dyaW1hY2luZyc6J1xcdWQ4M2RcXHVkZTJjJyxcbiAgJ2dyaW4nOidcXHVkODNkXFx1ZGUwMScsXG4gICdncmlubmluZyc6J1xcdWQ4M2RcXHVkZTAwJyxcbiAgJ2d1YXJkc21hbic6J1xcdWQ4M2RcXHVkYzgyJyxcbiAgJ2d1YXJkc3dvbWFuJzonXFx1ZDgzZFxcdWRjODImendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ2d1aXRhcic6J1xcdWQ4M2NcXHVkZmI4JyxcbiAgJ2d1bic6J1xcdWQ4M2RcXHVkZDJiJyxcbiAgJ2hhaXJjdXRfd29tYW4nOidcXHVkODNkXFx1ZGM4NycsXG4gICdoYWlyY3V0X21hbic6J1xcdWQ4M2RcXHVkYzg3Jnp3ajtcXHUyNjQyXFx1ZmUwZicsXG4gICdoYW1idXJnZXInOidcXHVkODNjXFx1ZGY1NCcsXG4gICdoYW1tZXInOidcXHVkODNkXFx1ZGQyOCcsXG4gICdoYW1tZXJfYW5kX3BpY2snOidcXHUyNjkyJyxcbiAgJ2hhbW1lcl9hbmRfd3JlbmNoJzonXFx1ZDgzZFxcdWRlZTAnLFxuICAnaGFtc3Rlcic6J1xcdWQ4M2RcXHVkYzM5JyxcbiAgJ2hhbmQnOidcXHUyNzBiJyxcbiAgJ2hhbmRiYWcnOidcXHVkODNkXFx1ZGM1YycsXG4gICdoYW5kc2hha2UnOidcXHVkODNlXFx1ZGQxZCcsXG4gICdoYW5rZXknOidcXHVkODNkXFx1ZGNhOScsXG4gICdoYXRjaGVkX2NoaWNrJzonXFx1ZDgzZFxcdWRjMjUnLFxuICAnaGF0Y2hpbmdfY2hpY2snOidcXHVkODNkXFx1ZGMyMycsXG4gICdoZWFkcGhvbmVzJzonXFx1ZDgzY1xcdWRmYTcnLFxuICAnaGVhcl9ub19ldmlsJzonXFx1ZDgzZFxcdWRlNDknLFxuICAnaGVhcnQnOidcXHUyNzY0XFx1ZmUwZicsXG4gICdoZWFydF9kZWNvcmF0aW9uJzonXFx1ZDgzZFxcdWRjOWYnLFxuICAnaGVhcnRfZXllcyc6J1xcdWQ4M2RcXHVkZTBkJyxcbiAgJ2hlYXJ0X2V5ZXNfY2F0JzonXFx1ZDgzZFxcdWRlM2InLFxuICAnaGVhcnRiZWF0JzonXFx1ZDgzZFxcdWRjOTMnLFxuICAnaGVhcnRwdWxzZSc6J1xcdWQ4M2RcXHVkYzk3JyxcbiAgJ2hlYXJ0cyc6J1xcdTI2NjVcXHVmZTBmJyxcbiAgJ2hlYXZ5X2NoZWNrX21hcmsnOidcXHUyNzE0XFx1ZmUwZicsXG4gICdoZWF2eV9kaXZpc2lvbl9zaWduJzonXFx1Mjc5NycsXG4gICdoZWF2eV9kb2xsYXJfc2lnbic6J1xcdWQ4M2RcXHVkY2IyJyxcbiAgJ2hlYXZ5X2hlYXJ0X2V4Y2xhbWF0aW9uJzonXFx1Mjc2M1xcdWZlMGYnLFxuICAnaGVhdnlfbWludXNfc2lnbic6J1xcdTI3OTYnLFxuICAnaGVhdnlfbXVsdGlwbGljYXRpb25feCc6J1xcdTI3MTZcXHVmZTBmJyxcbiAgJ2hlYXZ5X3BsdXNfc2lnbic6J1xcdTI3OTUnLFxuICAnaGVsaWNvcHRlcic6J1xcdWQ4M2RcXHVkZTgxJyxcbiAgJ2hlcmInOidcXHVkODNjXFx1ZGYzZicsXG4gICdoaWJpc2N1cyc6J1xcdWQ4M2NcXHVkZjNhJyxcbiAgJ2hpZ2hfYnJpZ2h0bmVzcyc6J1xcdWQ4M2RcXHVkZDA2JyxcbiAgJ2hpZ2hfaGVlbCc6J1xcdWQ4M2RcXHVkYzYwJyxcbiAgJ2hvY2hvJzonXFx1ZDgzZFxcdWRkMmEnLFxuICAnaG9sZSc6J1xcdWQ4M2RcXHVkZDczJyxcbiAgJ2hvbmV5X3BvdCc6J1xcdWQ4M2NcXHVkZjZmJyxcbiAgJ2hvcnNlJzonXFx1ZDgzZFxcdWRjMzQnLFxuICAnaG9yc2VfcmFjaW5nJzonXFx1ZDgzY1xcdWRmYzcnLFxuICAnaG9zcGl0YWwnOidcXHVkODNjXFx1ZGZlNScsXG4gICdob3RfcGVwcGVyJzonXFx1ZDgzY1xcdWRmMzYnLFxuICAnaG90ZG9nJzonXFx1ZDgzY1xcdWRmMmQnLFxuICAnaG90ZWwnOidcXHVkODNjXFx1ZGZlOCcsXG4gICdob3RzcHJpbmdzJzonXFx1MjY2OFxcdWZlMGYnLFxuICAnaG91cmdsYXNzJzonXFx1MjMxYlxcdWZlMGYnLFxuICAnaG91cmdsYXNzX2Zsb3dpbmdfc2FuZCc6J1xcdTIzZjMnLFxuICAnaG91c2UnOidcXHVkODNjXFx1ZGZlMCcsXG4gICdob3VzZV93aXRoX2dhcmRlbic6J1xcdWQ4M2NcXHVkZmUxJyxcbiAgJ2hvdXNlcyc6J1xcdWQ4M2NcXHVkZmQ4JyxcbiAgJ2h1Z3MnOidcXHVkODNlXFx1ZGQxNycsXG4gICdodXNoZWQnOidcXHVkODNkXFx1ZGUyZicsXG4gICdpY2VfY3JlYW0nOidcXHVkODNjXFx1ZGY2OCcsXG4gICdpY2VfaG9ja2V5JzonXFx1ZDgzY1xcdWRmZDInLFxuICAnaWNlX3NrYXRlJzonXFx1MjZmOCcsXG4gICdpY2VjcmVhbSc6J1xcdWQ4M2NcXHVkZjY2JyxcbiAgJ2lkJzonXFx1ZDgzY1xcdWRkOTQnLFxuICAnaWRlb2dyYXBoX2FkdmFudGFnZSc6J1xcdWQ4M2NcXHVkZTUwJyxcbiAgJ2ltcCc6J1xcdWQ4M2RcXHVkYzdmJyxcbiAgJ2luYm94X3RyYXknOidcXHVkODNkXFx1ZGNlNScsXG4gICdpbmNvbWluZ19lbnZlbG9wZSc6J1xcdWQ4M2RcXHVkY2U4JyxcbiAgJ3RpcHBpbmdfaGFuZF93b21hbic6J1xcdWQ4M2RcXHVkYzgxJyxcbiAgJ2luZm9ybWF0aW9uX3NvdXJjZSc6J1xcdTIxMzlcXHVmZTBmJyxcbiAgJ2lubm9jZW50JzonXFx1ZDgzZFxcdWRlMDcnLFxuICAnaW50ZXJyb2JhbmcnOidcXHUyMDQ5XFx1ZmUwZicsXG4gICdpcGhvbmUnOidcXHVkODNkXFx1ZGNmMScsXG4gICdpemFrYXlhX2xhbnRlcm4nOidcXHVkODNjXFx1ZGZlZScsXG4gICdqYWNrX29fbGFudGVybic6J1xcdWQ4M2NcXHVkZjgzJyxcbiAgJ2phcGFuJzonXFx1ZDgzZFxcdWRkZmUnLFxuICAnamFwYW5lc2VfY2FzdGxlJzonXFx1ZDgzY1xcdWRmZWYnLFxuICAnamFwYW5lc2VfZ29ibGluJzonXFx1ZDgzZFxcdWRjN2EnLFxuICAnamFwYW5lc2Vfb2dyZSc6J1xcdWQ4M2RcXHVkYzc5JyxcbiAgJ2plYW5zJzonXFx1ZDgzZFxcdWRjNTYnLFxuICAnam95JzonXFx1ZDgzZFxcdWRlMDInLFxuICAnam95X2NhdCc6J1xcdWQ4M2RcXHVkZTM5JyxcbiAgJ2pveXN0aWNrJzonXFx1ZDgzZFxcdWRkNzknLFxuICAna2FhYmEnOidcXHVkODNkXFx1ZGQ0YicsXG4gICdrZXknOidcXHVkODNkXFx1ZGQxMScsXG4gICdrZXlib2FyZCc6J1xcdTIzMjhcXHVmZTBmJyxcbiAgJ2tleWNhcF90ZW4nOidcXHVkODNkXFx1ZGQxZicsXG4gICdraWNrX3Njb290ZXInOidcXHVkODNkXFx1ZGVmNCcsXG4gICdraW1vbm8nOidcXHVkODNkXFx1ZGM1OCcsXG4gICdraXNzJzonXFx1ZDgzZFxcdWRjOGInLFxuICAna2lzc2luZyc6J1xcdWQ4M2RcXHVkZTE3JyxcbiAgJ2tpc3NpbmdfY2F0JzonXFx1ZDgzZFxcdWRlM2QnLFxuICAna2lzc2luZ19jbG9zZWRfZXllcyc6J1xcdWQ4M2RcXHVkZTFhJyxcbiAgJ2tpc3NpbmdfaGVhcnQnOidcXHVkODNkXFx1ZGUxOCcsXG4gICdraXNzaW5nX3NtaWxpbmdfZXllcyc6J1xcdWQ4M2RcXHVkZTE5JyxcbiAgJ2tpd2lfZnJ1aXQnOidcXHVkODNlXFx1ZGQ1ZCcsXG4gICdrb2FsYSc6J1xcdWQ4M2RcXHVkYzI4JyxcbiAgJ2tva28nOidcXHVkODNjXFx1ZGUwMScsXG4gICdsYWJlbCc6J1xcdWQ4M2NcXHVkZmY3JyxcbiAgJ2xhcmdlX2JsdWVfY2lyY2xlJzonXFx1ZDgzZFxcdWRkMzUnLFxuICAnbGFyZ2VfYmx1ZV9kaWFtb25kJzonXFx1ZDgzZFxcdWRkMzcnLFxuICAnbGFyZ2Vfb3JhbmdlX2RpYW1vbmQnOidcXHVkODNkXFx1ZGQzNicsXG4gICdsYXN0X3F1YXJ0ZXJfbW9vbic6J1xcdWQ4M2NcXHVkZjE3JyxcbiAgJ2xhc3RfcXVhcnRlcl9tb29uX3dpdGhfZmFjZSc6J1xcdWQ4M2NcXHVkZjFjJyxcbiAgJ2xhdGluX2Nyb3NzJzonXFx1MjcxZFxcdWZlMGYnLFxuICAnbGF1Z2hpbmcnOidcXHVkODNkXFx1ZGUwNicsXG4gICdsZWF2ZXMnOidcXHVkODNjXFx1ZGY0MycsXG4gICdsZWRnZXInOidcXHVkODNkXFx1ZGNkMicsXG4gICdsZWZ0X2x1Z2dhZ2UnOidcXHVkODNkXFx1ZGVjNScsXG4gICdsZWZ0X3JpZ2h0X2Fycm93JzonXFx1MjE5NFxcdWZlMGYnLFxuICAnbGVmdHdhcmRzX2Fycm93X3dpdGhfaG9vayc6J1xcdTIxYTlcXHVmZTBmJyxcbiAgJ2xlbW9uJzonXFx1ZDgzY1xcdWRmNGInLFxuICAnbGVvJzonXFx1MjY0Y1xcdWZlMGYnLFxuICAnbGVvcGFyZCc6J1xcdWQ4M2RcXHVkYzA2JyxcbiAgJ2xldmVsX3NsaWRlcic6J1xcdWQ4M2NcXHVkZjlhJyxcbiAgJ2xpYnJhJzonXFx1MjY0ZVxcdWZlMGYnLFxuICAnbGlnaHRfcmFpbCc6J1xcdWQ4M2RcXHVkZTg4JyxcbiAgJ2xpbmsnOidcXHVkODNkXFx1ZGQxNycsXG4gICdsaW9uJzonXFx1ZDgzZVxcdWRkODEnLFxuICAnbGlwcyc6J1xcdWQ4M2RcXHVkYzQ0JyxcbiAgJ2xpcHN0aWNrJzonXFx1ZDgzZFxcdWRjODQnLFxuICAnbGl6YXJkJzonXFx1ZDgzZVxcdWRkOGUnLFxuICAnbG9jayc6J1xcdWQ4M2RcXHVkZDEyJyxcbiAgJ2xvY2tfd2l0aF9pbmtfcGVuJzonXFx1ZDgzZFxcdWRkMGYnLFxuICAnbG9sbGlwb3AnOidcXHVkODNjXFx1ZGY2ZCcsXG4gICdsb29wJzonXFx1MjdiZicsXG4gICdsb3VkX3NvdW5kJzonXFx1ZDgzZFxcdWRkMGEnLFxuICAnbG91ZHNwZWFrZXInOidcXHVkODNkXFx1ZGNlMicsXG4gICdsb3ZlX2hvdGVsJzonXFx1ZDgzY1xcdWRmZTknLFxuICAnbG92ZV9sZXR0ZXInOidcXHVkODNkXFx1ZGM4YycsXG4gICdsb3dfYnJpZ2h0bmVzcyc6J1xcdWQ4M2RcXHVkZDA1JyxcbiAgJ2x5aW5nX2ZhY2UnOidcXHVkODNlXFx1ZGQyNScsXG4gICdtJzonXFx1MjRjMlxcdWZlMGYnLFxuICAnbWFnJzonXFx1ZDgzZFxcdWRkMGQnLFxuICAnbWFnX3JpZ2h0JzonXFx1ZDgzZFxcdWRkMGUnLFxuICAnbWFoam9uZyc6J1xcdWQ4M2NcXHVkYzA0XFx1ZmUwZicsXG4gICdtYWlsYm94JzonXFx1ZDgzZFxcdWRjZWInLFxuICAnbWFpbGJveF9jbG9zZWQnOidcXHVkODNkXFx1ZGNlYScsXG4gICdtYWlsYm94X3dpdGhfbWFpbCc6J1xcdWQ4M2RcXHVkY2VjJyxcbiAgJ21haWxib3hfd2l0aF9ub19tYWlsJzonXFx1ZDgzZFxcdWRjZWQnLFxuICAnbWFuJzonXFx1ZDgzZFxcdWRjNjgnLFxuICAnbWFuX2FydGlzdCc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNjXFx1ZGZhOCcsXG4gICdtYW5fYXN0cm9uYXV0JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkZTgwJyxcbiAgJ21hbl9jYXJ0d2hlZWxpbmcnOidcXHVkODNlXFx1ZGQzOCZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnbWFuX2Nvb2snOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzY1xcdWRmNzMnLFxuICAnbWFuX2RhbmNpbmcnOidcXHVkODNkXFx1ZGQ3YScsXG4gICdtYW5fZmFjZXBhbG1pbmcnOidcXHVkODNlXFx1ZGQyNiZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnbWFuX2ZhY3Rvcnlfd29ya2VyJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2NcXHVkZmVkJyxcbiAgJ21hbl9mYXJtZXInOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzY1xcdWRmM2UnLFxuICAnbWFuX2ZpcmVmaWdodGVyJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkZTkyJyxcbiAgJ21hbl9oZWFsdGhfd29ya2VyJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdTI2OTVcXHVmZTBmJyxcbiAgJ21hbl9pbl90dXhlZG8nOidcXHVkODNlXFx1ZGQzNScsXG4gICdtYW5fanVkZ2UnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1MjY5NlxcdWZlMGYnLFxuICAnbWFuX2p1Z2dsaW5nJzonXFx1ZDgzZVxcdWRkMzkmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ21hbl9tZWNoYW5pYyc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGQyNycsXG4gICdtYW5fb2ZmaWNlX3dvcmtlcic6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGNiYycsXG4gICdtYW5fcGlsb3QnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1MjcwOFxcdWZlMGYnLFxuICAnbWFuX3BsYXlpbmdfaGFuZGJhbGwnOidcXHVkODNlXFx1ZGQzZSZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnbWFuX3BsYXlpbmdfd2F0ZXJfcG9sbyc6J1xcdWQ4M2VcXHVkZDNkJnp3ajtcXHUyNjQyXFx1ZmUwZicsXG4gICdtYW5fc2NpZW50aXN0JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkZDJjJyxcbiAgJ21hbl9zaHJ1Z2dpbmcnOidcXHVkODNlXFx1ZGQzNyZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnbWFuX3Npbmdlcic6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNjXFx1ZGZhNCcsXG4gICdtYW5fc3R1ZGVudCc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNjXFx1ZGY5MycsXG4gICdtYW5fdGVhY2hlcic6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNjXFx1ZGZlYicsXG4gICdtYW5fdGVjaG5vbG9naXN0JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkY2JiJyxcbiAgJ21hbl93aXRoX2d1YV9waV9tYW8nOidcXHVkODNkXFx1ZGM3MicsXG4gICdtYW5fd2l0aF90dXJiYW4nOidcXHVkODNkXFx1ZGM3MycsXG4gICd0YW5nZXJpbmUnOidcXHVkODNjXFx1ZGY0YScsXG4gICdtYW5zX3Nob2UnOidcXHVkODNkXFx1ZGM1ZScsXG4gICdtYW50ZWxwaWVjZV9jbG9jayc6J1xcdWQ4M2RcXHVkZDcwJyxcbiAgJ21hcGxlX2xlYWYnOidcXHVkODNjXFx1ZGY0MScsXG4gICdtYXJ0aWFsX2FydHNfdW5pZm9ybSc6J1xcdWQ4M2VcXHVkZDRiJyxcbiAgJ21hc2snOidcXHVkODNkXFx1ZGUzNycsXG4gICdtYXNzYWdlX3dvbWFuJzonXFx1ZDgzZFxcdWRjODYnLFxuICAnbWFzc2FnZV9tYW4nOidcXHVkODNkXFx1ZGM4NiZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnbWVhdF9vbl9ib25lJzonXFx1ZDgzY1xcdWRmNTYnLFxuICAnbWVkYWxfbWlsaXRhcnknOidcXHVkODNjXFx1ZGY5NicsXG4gICdtZWRhbF9zcG9ydHMnOidcXHVkODNjXFx1ZGZjNScsXG4gICdtZWdhJzonXFx1ZDgzZFxcdWRjZTMnLFxuICAnbWVsb24nOidcXHVkODNjXFx1ZGY0OCcsXG4gICdtZW1vJzonXFx1ZDgzZFxcdWRjZGQnLFxuICAnbWVuX3dyZXN0bGluZyc6J1xcdWQ4M2VcXHVkZDNjJnp3ajtcXHUyNjQyXFx1ZmUwZicsXG4gICdtZW5vcmFoJzonXFx1ZDgzZFxcdWRkNGUnLFxuICAnbWVucyc6J1xcdWQ4M2RcXHVkZWI5JyxcbiAgJ21ldGFsJzonXFx1ZDgzZVxcdWRkMTgnLFxuICAnbWV0cm8nOidcXHVkODNkXFx1ZGU4NycsXG4gICdtaWNyb3Bob25lJzonXFx1ZDgzY1xcdWRmYTQnLFxuICAnbWljcm9zY29wZSc6J1xcdWQ4M2RcXHVkZDJjJyxcbiAgJ21pbGtfZ2xhc3MnOidcXHVkODNlXFx1ZGQ1YicsXG4gICdtaWxreV93YXknOidcXHVkODNjXFx1ZGYwYycsXG4gICdtaW5pYnVzJzonXFx1ZDgzZFxcdWRlOTAnLFxuICAnbWluaWRpc2MnOidcXHVkODNkXFx1ZGNiZCcsXG4gICdtb2JpbGVfcGhvbmVfb2ZmJzonXFx1ZDgzZFxcdWRjZjQnLFxuICAnbW9uZXlfbW91dGhfZmFjZSc6J1xcdWQ4M2VcXHVkZDExJyxcbiAgJ21vbmV5X3dpdGhfd2luZ3MnOidcXHVkODNkXFx1ZGNiOCcsXG4gICdtb25leWJhZyc6J1xcdWQ4M2RcXHVkY2IwJyxcbiAgJ21vbmtleSc6J1xcdWQ4M2RcXHVkYzEyJyxcbiAgJ21vbmtleV9mYWNlJzonXFx1ZDgzZFxcdWRjMzUnLFxuICAnbW9ub3JhaWwnOidcXHVkODNkXFx1ZGU5ZCcsXG4gICdtb29uJzonXFx1ZDgzY1xcdWRmMTQnLFxuICAnbW9ydGFyX2JvYXJkJzonXFx1ZDgzY1xcdWRmOTMnLFxuICAnbW9zcXVlJzonXFx1ZDgzZFxcdWRkNGMnLFxuICAnbW90b3JfYm9hdCc6J1xcdWQ4M2RcXHVkZWU1JyxcbiAgJ21vdG9yX3Njb290ZXInOidcXHVkODNkXFx1ZGVmNScsXG4gICdtb3RvcmN5Y2xlJzonXFx1ZDgzY1xcdWRmY2QnLFxuICAnbW90b3J3YXknOidcXHVkODNkXFx1ZGVlMycsXG4gICdtb3VudF9mdWppJzonXFx1ZDgzZFxcdWRkZmInLFxuICAnbW91bnRhaW4nOidcXHUyNmYwJyxcbiAgJ21vdW50YWluX2Jpa2luZ19tYW4nOidcXHVkODNkXFx1ZGViNScsXG4gICdtb3VudGFpbl9iaWtpbmdfd29tYW4nOidcXHVkODNkXFx1ZGViNSZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnbW91bnRhaW5fY2FibGV3YXknOidcXHVkODNkXFx1ZGVhMCcsXG4gICdtb3VudGFpbl9yYWlsd2F5JzonXFx1ZDgzZFxcdWRlOWUnLFxuICAnbW91bnRhaW5fc25vdyc6J1xcdWQ4M2NcXHVkZmQ0JyxcbiAgJ21vdXNlJzonXFx1ZDgzZFxcdWRjMmQnLFxuICAnbW91c2UyJzonXFx1ZDgzZFxcdWRjMDEnLFxuICAnbW92aWVfY2FtZXJhJzonXFx1ZDgzY1xcdWRmYTUnLFxuICAnbW95YWknOidcXHVkODNkXFx1ZGRmZicsXG4gICdtcnNfY2xhdXMnOidcXHVkODNlXFx1ZGQzNicsXG4gICdtdXNjbGUnOidcXHVkODNkXFx1ZGNhYScsXG4gICdtdXNocm9vbSc6J1xcdWQ4M2NcXHVkZjQ0JyxcbiAgJ211c2ljYWxfa2V5Ym9hcmQnOidcXHVkODNjXFx1ZGZiOScsXG4gICdtdXNpY2FsX25vdGUnOidcXHVkODNjXFx1ZGZiNScsXG4gICdtdXNpY2FsX3Njb3JlJzonXFx1ZDgzY1xcdWRmYmMnLFxuICAnbXV0ZSc6J1xcdWQ4M2RcXHVkZDA3JyxcbiAgJ25haWxfY2FyZSc6J1xcdWQ4M2RcXHVkYzg1JyxcbiAgJ25hbWVfYmFkZ2UnOidcXHVkODNkXFx1ZGNkYicsXG4gICduYXRpb25hbF9wYXJrJzonXFx1ZDgzY1xcdWRmZGUnLFxuICAnbmF1c2VhdGVkX2ZhY2UnOidcXHVkODNlXFx1ZGQyMicsXG4gICduZWNrdGllJzonXFx1ZDgzZFxcdWRjNTQnLFxuICAnbmVnYXRpdmVfc3F1YXJlZF9jcm9zc19tYXJrJzonXFx1Mjc0ZScsXG4gICduZXJkX2ZhY2UnOidcXHVkODNlXFx1ZGQxMycsXG4gICduZXV0cmFsX2ZhY2UnOidcXHVkODNkXFx1ZGUxMCcsXG4gICduZXcnOidcXHVkODNjXFx1ZGQ5NScsXG4gICduZXdfbW9vbic6J1xcdWQ4M2NcXHVkZjExJyxcbiAgJ25ld19tb29uX3dpdGhfZmFjZSc6J1xcdWQ4M2NcXHVkZjFhJyxcbiAgJ25ld3NwYXBlcic6J1xcdWQ4M2RcXHVkY2YwJyxcbiAgJ25ld3NwYXBlcl9yb2xsJzonXFx1ZDgzZFxcdWRkZGUnLFxuICAnbmV4dF90cmFja19idXR0b24nOidcXHUyM2VkJyxcbiAgJ25nJzonXFx1ZDgzY1xcdWRkOTYnLFxuICAnbm9fZ29vZF9tYW4nOidcXHVkODNkXFx1ZGU0NSZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnbm9fZ29vZF93b21hbic6J1xcdWQ4M2RcXHVkZTQ1JyxcbiAgJ25pZ2h0X3dpdGhfc3RhcnMnOidcXHVkODNjXFx1ZGYwMycsXG4gICdub19iZWxsJzonXFx1ZDgzZFxcdWRkMTUnLFxuICAnbm9fYmljeWNsZXMnOidcXHVkODNkXFx1ZGViMycsXG4gICdub19lbnRyeSc6J1xcdTI2ZDRcXHVmZTBmJyxcbiAgJ25vX2VudHJ5X3NpZ24nOidcXHVkODNkXFx1ZGVhYicsXG4gICdub19tb2JpbGVfcGhvbmVzJzonXFx1ZDgzZFxcdWRjZjUnLFxuICAnbm9fbW91dGgnOidcXHVkODNkXFx1ZGUzNicsXG4gICdub19wZWRlc3RyaWFucyc6J1xcdWQ4M2RcXHVkZWI3JyxcbiAgJ25vX3Ntb2tpbmcnOidcXHVkODNkXFx1ZGVhZCcsXG4gICdub24tcG90YWJsZV93YXRlcic6J1xcdWQ4M2RcXHVkZWIxJyxcbiAgJ25vc2UnOidcXHVkODNkXFx1ZGM0MycsXG4gICdub3RlYm9vayc6J1xcdWQ4M2RcXHVkY2QzJyxcbiAgJ25vdGVib29rX3dpdGhfZGVjb3JhdGl2ZV9jb3Zlcic6J1xcdWQ4M2RcXHVkY2Q0JyxcbiAgJ25vdGVzJzonXFx1ZDgzY1xcdWRmYjYnLFxuICAnbnV0X2FuZF9ib2x0JzonXFx1ZDgzZFxcdWRkMjknLFxuICAnbyc6J1xcdTJiNTVcXHVmZTBmJyxcbiAgJ28yJzonXFx1ZDgzY1xcdWRkN2VcXHVmZTBmJyxcbiAgJ29jZWFuJzonXFx1ZDgzY1xcdWRmMGEnLFxuICAnb2N0b3B1cyc6J1xcdWQ4M2RcXHVkYzE5JyxcbiAgJ29kZW4nOidcXHVkODNjXFx1ZGY2MicsXG4gICdvZmZpY2UnOidcXHVkODNjXFx1ZGZlMicsXG4gICdvaWxfZHJ1bSc6J1xcdWQ4M2RcXHVkZWUyJyxcbiAgJ29rJzonXFx1ZDgzY1xcdWRkOTcnLFxuICAnb2tfaGFuZCc6J1xcdWQ4M2RcXHVkYzRjJyxcbiAgJ29rX21hbic6J1xcdWQ4M2RcXHVkZTQ2Jnp3ajtcXHUyNjQyXFx1ZmUwZicsXG4gICdva193b21hbic6J1xcdWQ4M2RcXHVkZTQ2JyxcbiAgJ29sZF9rZXknOidcXHVkODNkXFx1ZGRkZCcsXG4gICdvbGRlcl9tYW4nOidcXHVkODNkXFx1ZGM3NCcsXG4gICdvbGRlcl93b21hbic6J1xcdWQ4M2RcXHVkYzc1JyxcbiAgJ29tJzonXFx1ZDgzZFxcdWRkNDknLFxuICAnb24nOidcXHVkODNkXFx1ZGQxYicsXG4gICdvbmNvbWluZ19hdXRvbW9iaWxlJzonXFx1ZDgzZFxcdWRlOTgnLFxuICAnb25jb21pbmdfYnVzJzonXFx1ZDgzZFxcdWRlOGQnLFxuICAnb25jb21pbmdfcG9saWNlX2Nhcic6J1xcdWQ4M2RcXHVkZTk0JyxcbiAgJ29uY29taW5nX3RheGknOidcXHVkODNkXFx1ZGU5NicsXG4gICdvcGVuX2ZpbGVfZm9sZGVyJzonXFx1ZDgzZFxcdWRjYzInLFxuICAnb3Blbl9oYW5kcyc6J1xcdWQ4M2RcXHVkYzUwJyxcbiAgJ29wZW5fbW91dGgnOidcXHVkODNkXFx1ZGUyZScsXG4gICdvcGVuX3VtYnJlbGxhJzonXFx1MjYwMlxcdWZlMGYnLFxuICAnb3BoaXVjaHVzJzonXFx1MjZjZScsXG4gICdvcmFuZ2VfYm9vayc6J1xcdWQ4M2RcXHVkY2Q5JyxcbiAgJ29ydGhvZG94X2Nyb3NzJzonXFx1MjYyNlxcdWZlMGYnLFxuICAnb3V0Ym94X3RyYXknOidcXHVkODNkXFx1ZGNlNCcsXG4gICdvd2wnOidcXHVkODNlXFx1ZGQ4OScsXG4gICdveCc6J1xcdWQ4M2RcXHVkYzAyJyxcbiAgJ3BhY2thZ2UnOidcXHVkODNkXFx1ZGNlNicsXG4gICdwYWdlX2ZhY2luZ191cCc6J1xcdWQ4M2RcXHVkY2M0JyxcbiAgJ3BhZ2Vfd2l0aF9jdXJsJzonXFx1ZDgzZFxcdWRjYzMnLFxuICAncGFnZXInOidcXHVkODNkXFx1ZGNkZicsXG4gICdwYWludGJydXNoJzonXFx1ZDgzZFxcdWRkOGMnLFxuICAncGFsbV90cmVlJzonXFx1ZDgzY1xcdWRmMzQnLFxuICAncGFuY2FrZXMnOidcXHVkODNlXFx1ZGQ1ZScsXG4gICdwYW5kYV9mYWNlJzonXFx1ZDgzZFxcdWRjM2MnLFxuICAncGFwZXJjbGlwJzonXFx1ZDgzZFxcdWRjY2UnLFxuICAncGFwZXJjbGlwcyc6J1xcdWQ4M2RcXHVkZDg3JyxcbiAgJ3BhcmFzb2xfb25fZ3JvdW5kJzonXFx1MjZmMScsXG4gICdwYXJraW5nJzonXFx1ZDgzY1xcdWRkN2ZcXHVmZTBmJyxcbiAgJ3BhcnRfYWx0ZXJuYXRpb25fbWFyayc6J1xcdTMwM2RcXHVmZTBmJyxcbiAgJ3BhcnRseV9zdW5ueSc6J1xcdTI2YzVcXHVmZTBmJyxcbiAgJ3Bhc3Nlbmdlcl9zaGlwJzonXFx1ZDgzZFxcdWRlZjMnLFxuICAncGFzc3BvcnRfY29udHJvbCc6J1xcdWQ4M2RcXHVkZWMyJyxcbiAgJ3BhdXNlX2J1dHRvbic6J1xcdTIzZjgnLFxuICAncGVhY2Vfc3ltYm9sJzonXFx1MjYyZVxcdWZlMGYnLFxuICAncGVhY2gnOidcXHVkODNjXFx1ZGY1MScsXG4gICdwZWFudXRzJzonXFx1ZDgzZVxcdWRkNWMnLFxuICAncGVhcic6J1xcdWQ4M2NcXHVkZjUwJyxcbiAgJ3Blbic6J1xcdWQ4M2RcXHVkZDhhJyxcbiAgJ3BlbmNpbDInOidcXHUyNzBmXFx1ZmUwZicsXG4gICdwZW5ndWluJzonXFx1ZDgzZFxcdWRjMjcnLFxuICAncGVuc2l2ZSc6J1xcdWQ4M2RcXHVkZTE0JyxcbiAgJ3BlcmZvcm1pbmdfYXJ0cyc6J1xcdWQ4M2NcXHVkZmFkJyxcbiAgJ3BlcnNldmVyZSc6J1xcdWQ4M2RcXHVkZTIzJyxcbiAgJ3BlcnNvbl9mZW5jaW5nJzonXFx1ZDgzZVxcdWRkM2EnLFxuICAncG91dGluZ193b21hbic6J1xcdWQ4M2RcXHVkZTRlJyxcbiAgJ3Bob25lJzonXFx1MjYwZVxcdWZlMGYnLFxuICAncGljayc6J1xcdTI2Y2YnLFxuICAncGlnJzonXFx1ZDgzZFxcdWRjMzcnLFxuICAncGlnMic6J1xcdWQ4M2RcXHVkYzE2JyxcbiAgJ3BpZ19ub3NlJzonXFx1ZDgzZFxcdWRjM2QnLFxuICAncGlsbCc6J1xcdWQ4M2RcXHVkYzhhJyxcbiAgJ3BpbmVhcHBsZSc6J1xcdWQ4M2NcXHVkZjRkJyxcbiAgJ3BpbmdfcG9uZyc6J1xcdWQ4M2NcXHVkZmQzJyxcbiAgJ3Bpc2Nlcyc6J1xcdTI2NTNcXHVmZTBmJyxcbiAgJ3BpenphJzonXFx1ZDgzY1xcdWRmNTUnLFxuICAncGxhY2Vfb2Zfd29yc2hpcCc6J1xcdWQ4M2RcXHVkZWQwJyxcbiAgJ3BsYXRlX3dpdGhfY3V0bGVyeSc6J1xcdWQ4M2NcXHVkZjdkJyxcbiAgJ3BsYXlfb3JfcGF1c2VfYnV0dG9uJzonXFx1MjNlZicsXG4gICdwb2ludF9kb3duJzonXFx1ZDgzZFxcdWRjNDcnLFxuICAncG9pbnRfbGVmdCc6J1xcdWQ4M2RcXHVkYzQ4JyxcbiAgJ3BvaW50X3JpZ2h0JzonXFx1ZDgzZFxcdWRjNDknLFxuICAncG9pbnRfdXAnOidcXHUyNjFkXFx1ZmUwZicsXG4gICdwb2ludF91cF8yJzonXFx1ZDgzZFxcdWRjNDYnLFxuICAncG9saWNlX2Nhcic6J1xcdWQ4M2RcXHVkZTkzJyxcbiAgJ3BvbGljZXdvbWFuJzonXFx1ZDgzZFxcdWRjNmUmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3Bvb2RsZSc6J1xcdWQ4M2RcXHVkYzI5JyxcbiAgJ3BvcGNvcm4nOidcXHVkODNjXFx1ZGY3ZicsXG4gICdwb3N0X29mZmljZSc6J1xcdWQ4M2NcXHVkZmUzJyxcbiAgJ3Bvc3RhbF9ob3JuJzonXFx1ZDgzZFxcdWRjZWYnLFxuICAncG9zdGJveCc6J1xcdWQ4M2RcXHVkY2VlJyxcbiAgJ3BvdGFibGVfd2F0ZXInOidcXHVkODNkXFx1ZGViMCcsXG4gICdwb3RhdG8nOidcXHVkODNlXFx1ZGQ1NCcsXG4gICdwb3VjaCc6J1xcdWQ4M2RcXHVkYzVkJyxcbiAgJ3BvdWx0cnlfbGVnJzonXFx1ZDgzY1xcdWRmNTcnLFxuICAncG91bmQnOidcXHVkODNkXFx1ZGNiNycsXG4gICdyYWdlJzonXFx1ZDgzZFxcdWRlMjEnLFxuICAncG91dGluZ19jYXQnOidcXHVkODNkXFx1ZGUzZScsXG4gICdwb3V0aW5nX21hbic6J1xcdWQ4M2RcXHVkZTRlJnp3ajtcXHUyNjQyXFx1ZmUwZicsXG4gICdwcmF5JzonXFx1ZDgzZFxcdWRlNGYnLFxuICAncHJheWVyX2JlYWRzJzonXFx1ZDgzZFxcdWRjZmYnLFxuICAncHJlZ25hbnRfd29tYW4nOidcXHVkODNlXFx1ZGQzMCcsXG4gICdwcmV2aW91c190cmFja19idXR0b24nOidcXHUyM2VlJyxcbiAgJ3ByaW5jZSc6J1xcdWQ4M2VcXHVkZDM0JyxcbiAgJ3ByaW5jZXNzJzonXFx1ZDgzZFxcdWRjNzgnLFxuICAncHJpbnRlcic6J1xcdWQ4M2RcXHVkZGE4JyxcbiAgJ3B1cnBsZV9oZWFydCc6J1xcdWQ4M2RcXHVkYzljJyxcbiAgJ3B1cnNlJzonXFx1ZDgzZFxcdWRjNWInLFxuICAncHVzaHBpbic6J1xcdWQ4M2RcXHVkY2NjJyxcbiAgJ3B1dF9saXR0ZXJfaW5faXRzX3BsYWNlJzonXFx1ZDgzZFxcdWRlYWUnLFxuICAncXVlc3Rpb24nOidcXHUyNzUzJyxcbiAgJ3JhYmJpdCc6J1xcdWQ4M2RcXHVkYzMwJyxcbiAgJ3JhYmJpdDInOidcXHVkODNkXFx1ZGMwNycsXG4gICdyYWNlaG9yc2UnOidcXHVkODNkXFx1ZGMwZScsXG4gICdyYWNpbmdfY2FyJzonXFx1ZDgzY1xcdWRmY2UnLFxuICAncmFkaW8nOidcXHVkODNkXFx1ZGNmYicsXG4gICdyYWRpb19idXR0b24nOidcXHVkODNkXFx1ZGQxOCcsXG4gICdyYWRpb2FjdGl2ZSc6J1xcdTI2MjJcXHVmZTBmJyxcbiAgJ3JhaWx3YXlfY2FyJzonXFx1ZDgzZFxcdWRlODMnLFxuICAncmFpbHdheV90cmFjayc6J1xcdWQ4M2RcXHVkZWU0JyxcbiAgJ3JhaW5ib3cnOidcXHVkODNjXFx1ZGYwOCcsXG4gICdyYWluYm93X2ZsYWcnOidcXHVkODNjXFx1ZGZmM1xcdWZlMGYmendqO1xcdWQ4M2NcXHVkZjA4JyxcbiAgJ3JhaXNlZF9iYWNrX29mX2hhbmQnOidcXHVkODNlXFx1ZGQxYScsXG4gICdyYWlzZWRfaGFuZF93aXRoX2ZpbmdlcnNfc3BsYXllZCc6J1xcdWQ4M2RcXHVkZDkwJyxcbiAgJ3JhaXNlZF9oYW5kcyc6J1xcdWQ4M2RcXHVkZTRjJyxcbiAgJ3JhaXNpbmdfaGFuZF93b21hbic6J1xcdWQ4M2RcXHVkZTRiJyxcbiAgJ3JhaXNpbmdfaGFuZF9tYW4nOidcXHVkODNkXFx1ZGU0YiZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAncmFtJzonXFx1ZDgzZFxcdWRjMGYnLFxuICAncmFtZW4nOidcXHVkODNjXFx1ZGY1YycsXG4gICdyYXQnOidcXHVkODNkXFx1ZGMwMCcsXG4gICdyZWNvcmRfYnV0dG9uJzonXFx1MjNmYScsXG4gICdyZWN5Y2xlJzonXFx1MjY3YlxcdWZlMGYnLFxuICAncmVkX2NpcmNsZSc6J1xcdWQ4M2RcXHVkZDM0JyxcbiAgJ3JlZ2lzdGVyZWQnOidcXHUwMGFlXFx1ZmUwZicsXG4gICdyZWxheGVkJzonXFx1MjYzYVxcdWZlMGYnLFxuICAncmVsaWV2ZWQnOidcXHVkODNkXFx1ZGUwYycsXG4gICdyZW1pbmRlcl9yaWJib24nOidcXHVkODNjXFx1ZGY5NycsXG4gICdyZXBlYXQnOidcXHVkODNkXFx1ZGQwMScsXG4gICdyZXBlYXRfb25lJzonXFx1ZDgzZFxcdWRkMDInLFxuICAncmVzY3VlX3dvcmtlcl9oZWxtZXQnOidcXHUyNmQxJyxcbiAgJ3Jlc3Ryb29tJzonXFx1ZDgzZFxcdWRlYmInLFxuICAncmV2b2x2aW5nX2hlYXJ0cyc6J1xcdWQ4M2RcXHVkYzllJyxcbiAgJ3Jld2luZCc6J1xcdTIzZWEnLFxuICAncmhpbm9jZXJvcyc6J1xcdWQ4M2VcXHVkZDhmJyxcbiAgJ3JpYmJvbic6J1xcdWQ4M2NcXHVkZjgwJyxcbiAgJ3JpY2UnOidcXHVkODNjXFx1ZGY1YScsXG4gICdyaWNlX2JhbGwnOidcXHVkODNjXFx1ZGY1OScsXG4gICdyaWNlX2NyYWNrZXInOidcXHVkODNjXFx1ZGY1OCcsXG4gICdyaWNlX3NjZW5lJzonXFx1ZDgzY1xcdWRmOTEnLFxuICAncmlnaHRfYW5nZXJfYnViYmxlJzonXFx1ZDgzZFxcdWRkZWYnLFxuICAncmluZyc6J1xcdWQ4M2RcXHVkYzhkJyxcbiAgJ3JvYm90JzonXFx1ZDgzZVxcdWRkMTYnLFxuICAncm9ja2V0JzonXFx1ZDgzZFxcdWRlODAnLFxuICAncm9mbCc6J1xcdWQ4M2VcXHVkZDIzJyxcbiAgJ3JvbGxfZXllcyc6J1xcdWQ4M2RcXHVkZTQ0JyxcbiAgJ3JvbGxlcl9jb2FzdGVyJzonXFx1ZDgzY1xcdWRmYTInLFxuICAncm9vc3Rlcic6J1xcdWQ4M2RcXHVkYzEzJyxcbiAgJ3Jvc2UnOidcXHVkODNjXFx1ZGYzOScsXG4gICdyb3NldHRlJzonXFx1ZDgzY1xcdWRmZjUnLFxuICAncm90YXRpbmdfbGlnaHQnOidcXHVkODNkXFx1ZGVhOCcsXG4gICdyb3VuZF9wdXNocGluJzonXFx1ZDgzZFxcdWRjY2QnLFxuICAncm93aW5nX21hbic6J1xcdWQ4M2RcXHVkZWEzJyxcbiAgJ3Jvd2luZ193b21hbic6J1xcdWQ4M2RcXHVkZWEzJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdydWdieV9mb290YmFsbCc6J1xcdWQ4M2NcXHVkZmM5JyxcbiAgJ3J1bm5pbmdfbWFuJzonXFx1ZDgzY1xcdWRmYzMnLFxuICAncnVubmluZ19zaGlydF93aXRoX3Nhc2gnOidcXHVkODNjXFx1ZGZiZCcsXG4gICdydW5uaW5nX3dvbWFuJzonXFx1ZDgzY1xcdWRmYzMmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3NhJzonXFx1ZDgzY1xcdWRlMDJcXHVmZTBmJyxcbiAgJ3NhZ2l0dGFyaXVzJzonXFx1MjY1MFxcdWZlMGYnLFxuICAnc2FrZSc6J1xcdWQ4M2NcXHVkZjc2JyxcbiAgJ3NhbmRhbCc6J1xcdWQ4M2RcXHVkYzYxJyxcbiAgJ3NhbnRhJzonXFx1ZDgzY1xcdWRmODUnLFxuICAnc2F0ZWxsaXRlJzonXFx1ZDgzZFxcdWRjZTEnLFxuICAnc2F4b3Bob25lJzonXFx1ZDgzY1xcdWRmYjcnLFxuICAnc2Nob29sJzonXFx1ZDgzY1xcdWRmZWInLFxuICAnc2Nob29sX3NhdGNoZWwnOidcXHVkODNjXFx1ZGY5MicsXG4gICdzY2lzc29ycyc6J1xcdTI3MDJcXHVmZTBmJyxcbiAgJ3Njb3JwaW9uJzonXFx1ZDgzZVxcdWRkODInLFxuICAnc2NvcnBpdXMnOidcXHUyNjRmXFx1ZmUwZicsXG4gICdzY3JlYW0nOidcXHVkODNkXFx1ZGUzMScsXG4gICdzY3JlYW1fY2F0JzonXFx1ZDgzZFxcdWRlNDAnLFxuICAnc2Nyb2xsJzonXFx1ZDgzZFxcdWRjZGMnLFxuICAnc2VhdCc6J1xcdWQ4M2RcXHVkY2JhJyxcbiAgJ3NlY3JldCc6J1xcdTMyOTlcXHVmZTBmJyxcbiAgJ3NlZV9ub19ldmlsJzonXFx1ZDgzZFxcdWRlNDgnLFxuICAnc2VlZGxpbmcnOidcXHVkODNjXFx1ZGYzMScsXG4gICdzZWxmaWUnOidcXHVkODNlXFx1ZGQzMycsXG4gICdzaGFsbG93X3Bhbl9vZl9mb29kJzonXFx1ZDgzZVxcdWRkNTgnLFxuICAnc2hhbXJvY2snOidcXHUyNjE4XFx1ZmUwZicsXG4gICdzaGFyayc6J1xcdWQ4M2VcXHVkZDg4JyxcbiAgJ3NoYXZlZF9pY2UnOidcXHVkODNjXFx1ZGY2NycsXG4gICdzaGVlcCc6J1xcdWQ4M2RcXHVkYzExJyxcbiAgJ3NoZWxsJzonXFx1ZDgzZFxcdWRjMWEnLFxuICAnc2hpZWxkJzonXFx1ZDgzZFxcdWRlZTEnLFxuICAnc2hpbnRvX3NocmluZSc6J1xcdTI2ZTknLFxuICAnc2hpcCc6J1xcdWQ4M2RcXHVkZWEyJyxcbiAgJ3NoaXJ0JzonXFx1ZDgzZFxcdWRjNTUnLFxuICAnc2hvcHBpbmcnOidcXHVkODNkXFx1ZGVjZCcsXG4gICdzaG9wcGluZ19jYXJ0JzonXFx1ZDgzZFxcdWRlZDInLFxuICAnc2hvd2VyJzonXFx1ZDgzZFxcdWRlYmYnLFxuICAnc2hyaW1wJzonXFx1ZDgzZVxcdWRkOTAnLFxuICAnc2lnbmFsX3N0cmVuZ3RoJzonXFx1ZDgzZFxcdWRjZjYnLFxuICAnc2l4X3BvaW50ZWRfc3Rhcic6J1xcdWQ4M2RcXHVkZDJmJyxcbiAgJ3NraSc6J1xcdWQ4M2NcXHVkZmJmJyxcbiAgJ3NraWVyJzonXFx1MjZmNycsXG4gICdza3VsbCc6J1xcdWQ4M2RcXHVkYzgwJyxcbiAgJ3NrdWxsX2FuZF9jcm9zc2JvbmVzJzonXFx1MjYyMFxcdWZlMGYnLFxuICAnc2xlZXBpbmcnOidcXHVkODNkXFx1ZGUzNCcsXG4gICdzbGVlcGluZ19iZWQnOidcXHVkODNkXFx1ZGVjYycsXG4gICdzbGVlcHknOidcXHVkODNkXFx1ZGUyYScsXG4gICdzbGlnaHRseV9mcm93bmluZ19mYWNlJzonXFx1ZDgzZFxcdWRlNDEnLFxuICAnc2xpZ2h0bHlfc21pbGluZ19mYWNlJzonXFx1ZDgzZFxcdWRlNDInLFxuICAnc2xvdF9tYWNoaW5lJzonXFx1ZDgzY1xcdWRmYjAnLFxuICAnc21hbGxfYWlycGxhbmUnOidcXHVkODNkXFx1ZGVlOScsXG4gICdzbWFsbF9ibHVlX2RpYW1vbmQnOidcXHVkODNkXFx1ZGQzOScsXG4gICdzbWFsbF9vcmFuZ2VfZGlhbW9uZCc6J1xcdWQ4M2RcXHVkZDM4JyxcbiAgJ3NtYWxsX3JlZF90cmlhbmdsZSc6J1xcdWQ4M2RcXHVkZDNhJyxcbiAgJ3NtYWxsX3JlZF90cmlhbmdsZV9kb3duJzonXFx1ZDgzZFxcdWRkM2InLFxuICAnc21pbGUnOidcXHVkODNkXFx1ZGUwNCcsXG4gICdzbWlsZV9jYXQnOidcXHVkODNkXFx1ZGUzOCcsXG4gICdzbWlsZXknOidcXHVkODNkXFx1ZGUwMycsXG4gICdzbWlsZXlfY2F0JzonXFx1ZDgzZFxcdWRlM2EnLFxuICAnc21pbGluZ19pbXAnOidcXHVkODNkXFx1ZGUwOCcsXG4gICdzbWlyayc6J1xcdWQ4M2RcXHVkZTBmJyxcbiAgJ3NtaXJrX2NhdCc6J1xcdWQ4M2RcXHVkZTNjJyxcbiAgJ3Ntb2tpbmcnOidcXHVkODNkXFx1ZGVhYycsXG4gICdzbmFpbCc6J1xcdWQ4M2RcXHVkYzBjJyxcbiAgJ3NuYWtlJzonXFx1ZDgzZFxcdWRjMGQnLFxuICAnc25lZXppbmdfZmFjZSc6J1xcdWQ4M2VcXHVkZDI3JyxcbiAgJ3Nub3dib2FyZGVyJzonXFx1ZDgzY1xcdWRmYzInLFxuICAnc25vd2ZsYWtlJzonXFx1Mjc0NFxcdWZlMGYnLFxuICAnc25vd21hbic6J1xcdTI2YzRcXHVmZTBmJyxcbiAgJ3Nub3dtYW5fd2l0aF9zbm93JzonXFx1MjYwM1xcdWZlMGYnLFxuICAnc29iJzonXFx1ZDgzZFxcdWRlMmQnLFxuICAnc29jY2VyJzonXFx1MjZiZFxcdWZlMGYnLFxuICAnc29vbic6J1xcdWQ4M2RcXHVkZDFjJyxcbiAgJ3Nvcyc6J1xcdWQ4M2NcXHVkZDk4JyxcbiAgJ3NvdW5kJzonXFx1ZDgzZFxcdWRkMDknLFxuICAnc3BhY2VfaW52YWRlcic6J1xcdWQ4M2RcXHVkYzdlJyxcbiAgJ3NwYWRlcyc6J1xcdTI2NjBcXHVmZTBmJyxcbiAgJ3NwYWdoZXR0aSc6J1xcdWQ4M2NcXHVkZjVkJyxcbiAgJ3NwYXJrbGUnOidcXHUyNzQ3XFx1ZmUwZicsXG4gICdzcGFya2xlcic6J1xcdWQ4M2NcXHVkZjg3JyxcbiAgJ3NwYXJrbGVzJzonXFx1MjcyOCcsXG4gICdzcGFya2xpbmdfaGVhcnQnOidcXHVkODNkXFx1ZGM5NicsXG4gICdzcGVha19ub19ldmlsJzonXFx1ZDgzZFxcdWRlNGEnLFxuICAnc3BlYWtlcic6J1xcdWQ4M2RcXHVkZDA4JyxcbiAgJ3NwZWFraW5nX2hlYWQnOidcXHVkODNkXFx1ZGRlMycsXG4gICdzcGVlY2hfYmFsbG9vbic6J1xcdWQ4M2RcXHVkY2FjJyxcbiAgJ3NwZWVkYm9hdCc6J1xcdWQ4M2RcXHVkZWE0JyxcbiAgJ3NwaWRlcic6J1xcdWQ4M2RcXHVkZDc3JyxcbiAgJ3NwaWRlcl93ZWInOidcXHVkODNkXFx1ZGQ3OCcsXG4gICdzcGlyYWxfY2FsZW5kYXInOidcXHVkODNkXFx1ZGRkMycsXG4gICdzcGlyYWxfbm90ZXBhZCc6J1xcdWQ4M2RcXHVkZGQyJyxcbiAgJ3Nwb29uJzonXFx1ZDgzZVxcdWRkNDQnLFxuICAnc3F1aWQnOidcXHVkODNlXFx1ZGQ5MScsXG4gICdzdGFkaXVtJzonXFx1ZDgzY1xcdWRmZGYnLFxuICAnc3Rhcic6J1xcdTJiNTBcXHVmZTBmJyxcbiAgJ3N0YXIyJzonXFx1ZDgzY1xcdWRmMWYnLFxuICAnc3Rhcl9hbmRfY3Jlc2NlbnQnOidcXHUyNjJhXFx1ZmUwZicsXG4gICdzdGFyX29mX2RhdmlkJzonXFx1MjcyMVxcdWZlMGYnLFxuICAnc3RhcnMnOidcXHVkODNjXFx1ZGYyMCcsXG4gICdzdGF0aW9uJzonXFx1ZDgzZFxcdWRlODknLFxuICAnc3RhdHVlX29mX2xpYmVydHknOidcXHVkODNkXFx1ZGRmZCcsXG4gICdzdGVhbV9sb2NvbW90aXZlJzonXFx1ZDgzZFxcdWRlODInLFxuICAnc3Rldyc6J1xcdWQ4M2NcXHVkZjcyJyxcbiAgJ3N0b3BfYnV0dG9uJzonXFx1MjNmOScsXG4gICdzdG9wX3NpZ24nOidcXHVkODNkXFx1ZGVkMScsXG4gICdzdG9wd2F0Y2gnOidcXHUyM2YxJyxcbiAgJ3N0cmFpZ2h0X3J1bGVyJzonXFx1ZDgzZFxcdWRjY2YnLFxuICAnc3RyYXdiZXJyeSc6J1xcdWQ4M2NcXHVkZjUzJyxcbiAgJ3N0dWNrX291dF90b25ndWUnOidcXHVkODNkXFx1ZGUxYicsXG4gICdzdHVja19vdXRfdG9uZ3VlX2Nsb3NlZF9leWVzJzonXFx1ZDgzZFxcdWRlMWQnLFxuICAnc3R1Y2tfb3V0X3Rvbmd1ZV93aW5raW5nX2V5ZSc6J1xcdWQ4M2RcXHVkZTFjJyxcbiAgJ3N0dWRpb19taWNyb3Bob25lJzonXFx1ZDgzY1xcdWRmOTknLFxuICAnc3R1ZmZlZF9mbGF0YnJlYWQnOidcXHVkODNlXFx1ZGQ1OScsXG4gICdzdW5fYmVoaW5kX2xhcmdlX2Nsb3VkJzonXFx1ZDgzY1xcdWRmMjUnLFxuICAnc3VuX2JlaGluZF9yYWluX2Nsb3VkJzonXFx1ZDgzY1xcdWRmMjYnLFxuICAnc3VuX2JlaGluZF9zbWFsbF9jbG91ZCc6J1xcdWQ4M2NcXHVkZjI0JyxcbiAgJ3N1bl93aXRoX2ZhY2UnOidcXHVkODNjXFx1ZGYxZScsXG4gICdzdW5mbG93ZXInOidcXHVkODNjXFx1ZGYzYicsXG4gICdzdW5nbGFzc2VzJzonXFx1ZDgzZFxcdWRlMGUnLFxuICAnc3VubnknOidcXHUyNjAwXFx1ZmUwZicsXG4gICdzdW5yaXNlJzonXFx1ZDgzY1xcdWRmMDUnLFxuICAnc3VucmlzZV9vdmVyX21vdW50YWlucyc6J1xcdWQ4M2NcXHVkZjA0JyxcbiAgJ3N1cmZpbmdfbWFuJzonXFx1ZDgzY1xcdWRmYzQnLFxuICAnc3VyZmluZ193b21hbic6J1xcdWQ4M2NcXHVkZmM0Jnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdzdXNoaSc6J1xcdWQ4M2NcXHVkZjYzJyxcbiAgJ3N1c3BlbnNpb25fcmFpbHdheSc6J1xcdWQ4M2RcXHVkZTlmJyxcbiAgJ3N3ZWF0JzonXFx1ZDgzZFxcdWRlMTMnLFxuICAnc3dlYXRfZHJvcHMnOidcXHVkODNkXFx1ZGNhNicsXG4gICdzd2VhdF9zbWlsZSc6J1xcdWQ4M2RcXHVkZTA1JyxcbiAgJ3N3ZWV0X3BvdGF0byc6J1xcdWQ4M2NcXHVkZjYwJyxcbiAgJ3N3aW1taW5nX21hbic6J1xcdWQ4M2NcXHVkZmNhJyxcbiAgJ3N3aW1taW5nX3dvbWFuJzonXFx1ZDgzY1xcdWRmY2EmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3N5bWJvbHMnOidcXHVkODNkXFx1ZGQyMycsXG4gICdzeW5hZ29ndWUnOidcXHVkODNkXFx1ZGQ0ZCcsXG4gICdzeXJpbmdlJzonXFx1ZDgzZFxcdWRjODknLFxuICAndGFjbyc6J1xcdWQ4M2NcXHVkZjJlJyxcbiAgJ3RhZGEnOidcXHVkODNjXFx1ZGY4OScsXG4gICd0YW5hYmF0YV90cmVlJzonXFx1ZDgzY1xcdWRmOGInLFxuICAndGF1cnVzJzonXFx1MjY0OVxcdWZlMGYnLFxuICAndGF4aSc6J1xcdWQ4M2RcXHVkZTk1JyxcbiAgJ3RlYSc6J1xcdWQ4M2NcXHVkZjc1JyxcbiAgJ3RlbGVwaG9uZV9yZWNlaXZlcic6J1xcdWQ4M2RcXHVkY2RlJyxcbiAgJ3RlbGVzY29wZSc6J1xcdWQ4M2RcXHVkZDJkJyxcbiAgJ3Rlbm5pcyc6J1xcdWQ4M2NcXHVkZmJlJyxcbiAgJ3RlbnQnOidcXHUyNmZhXFx1ZmUwZicsXG4gICd0aGVybW9tZXRlcic6J1xcdWQ4M2NcXHVkZjIxJyxcbiAgJ3RoaW5raW5nJzonXFx1ZDgzZVxcdWRkMTQnLFxuICAndGhvdWdodF9iYWxsb29uJzonXFx1ZDgzZFxcdWRjYWQnLFxuICAndGlja2V0JzonXFx1ZDgzY1xcdWRmYWInLFxuICAndGlja2V0cyc6J1xcdWQ4M2NcXHVkZjlmJyxcbiAgJ3RpZ2VyJzonXFx1ZDgzZFxcdWRjMmYnLFxuICAndGlnZXIyJzonXFx1ZDgzZFxcdWRjMDUnLFxuICAndGltZXJfY2xvY2snOidcXHUyM2YyJyxcbiAgJ3RpcHBpbmdfaGFuZF9tYW4nOidcXHVkODNkXFx1ZGM4MSZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAndGlyZWRfZmFjZSc6J1xcdWQ4M2RcXHVkZTJiJyxcbiAgJ3RtJzonXFx1MjEyMlxcdWZlMGYnLFxuICAndG9pbGV0JzonXFx1ZDgzZFxcdWRlYmQnLFxuICAndG9reW9fdG93ZXInOidcXHVkODNkXFx1ZGRmYycsXG4gICd0b21hdG8nOidcXHVkODNjXFx1ZGY0NScsXG4gICd0b25ndWUnOidcXHVkODNkXFx1ZGM0NScsXG4gICd0b3AnOidcXHVkODNkXFx1ZGQxZCcsXG4gICd0b3BoYXQnOidcXHVkODNjXFx1ZGZhOScsXG4gICd0b3JuYWRvJzonXFx1ZDgzY1xcdWRmMmEnLFxuICAndHJhY2tiYWxsJzonXFx1ZDgzZFxcdWRkYjInLFxuICAndHJhY3Rvcic6J1xcdWQ4M2RcXHVkZTljJyxcbiAgJ3RyYWZmaWNfbGlnaHQnOidcXHVkODNkXFx1ZGVhNScsXG4gICd0cmFpbic6J1xcdWQ4M2RcXHVkZThiJyxcbiAgJ3RyYWluMic6J1xcdWQ4M2RcXHVkZTg2JyxcbiAgJ3RyYW0nOidcXHVkODNkXFx1ZGU4YScsXG4gICd0cmlhbmd1bGFyX2ZsYWdfb25fcG9zdCc6J1xcdWQ4M2RcXHVkZWE5JyxcbiAgJ3RyaWFuZ3VsYXJfcnVsZXInOidcXHVkODNkXFx1ZGNkMCcsXG4gICd0cmlkZW50JzonXFx1ZDgzZFxcdWRkMzEnLFxuICAndHJpdW1waCc6J1xcdWQ4M2RcXHVkZTI0JyxcbiAgJ3Ryb2xsZXlidXMnOidcXHVkODNkXFx1ZGU4ZScsXG4gICd0cm9waHknOidcXHVkODNjXFx1ZGZjNicsXG4gICd0cm9waWNhbF9kcmluayc6J1xcdWQ4M2NcXHVkZjc5JyxcbiAgJ3Ryb3BpY2FsX2Zpc2gnOidcXHVkODNkXFx1ZGMyMCcsXG4gICd0cnVjayc6J1xcdWQ4M2RcXHVkZTlhJyxcbiAgJ3RydW1wZXQnOidcXHVkODNjXFx1ZGZiYScsXG4gICd0dWxpcCc6J1xcdWQ4M2NcXHVkZjM3JyxcbiAgJ3R1bWJsZXJfZ2xhc3MnOidcXHVkODNlXFx1ZGQ0MycsXG4gICd0dXJrZXknOidcXHVkODNlXFx1ZGQ4MycsXG4gICd0dXJ0bGUnOidcXHVkODNkXFx1ZGMyMicsXG4gICd0dic6J1xcdWQ4M2RcXHVkY2ZhJyxcbiAgJ3R3aXN0ZWRfcmlnaHR3YXJkc19hcnJvd3MnOidcXHVkODNkXFx1ZGQwMCcsXG4gICd0d29faGVhcnRzJzonXFx1ZDgzZFxcdWRjOTUnLFxuICAndHdvX21lbl9ob2xkaW5nX2hhbmRzJzonXFx1ZDgzZFxcdWRjNmMnLFxuICAndHdvX3dvbWVuX2hvbGRpbmdfaGFuZHMnOidcXHVkODNkXFx1ZGM2ZCcsXG4gICd1NTI3Mic6J1xcdWQ4M2NcXHVkZTM5JyxcbiAgJ3U1NDA4JzonXFx1ZDgzY1xcdWRlMzQnLFxuICAndTU1YjYnOidcXHVkODNjXFx1ZGUzYScsXG4gICd1NjMwNyc6J1xcdWQ4M2NcXHVkZTJmXFx1ZmUwZicsXG4gICd1NjcwOCc6J1xcdWQ4M2NcXHVkZTM3XFx1ZmUwZicsXG4gICd1NjcwOSc6J1xcdWQ4M2NcXHVkZTM2JyxcbiAgJ3U2ZTgwJzonXFx1ZDgzY1xcdWRlMzUnLFxuICAndTcxMjEnOidcXHVkODNjXFx1ZGUxYVxcdWZlMGYnLFxuICAndTc1MzMnOidcXHVkODNjXFx1ZGUzOCcsXG4gICd1Nzk4MSc6J1xcdWQ4M2NcXHVkZTMyJyxcbiAgJ3U3YTdhJzonXFx1ZDgzY1xcdWRlMzMnLFxuICAndW1icmVsbGEnOidcXHUyNjE0XFx1ZmUwZicsXG4gICd1bmFtdXNlZCc6J1xcdWQ4M2RcXHVkZTEyJyxcbiAgJ3VuZGVyYWdlJzonXFx1ZDgzZFxcdWRkMWUnLFxuICAndW5pY29ybic6J1xcdWQ4M2VcXHVkZDg0JyxcbiAgJ3VubG9jayc6J1xcdWQ4M2RcXHVkZDEzJyxcbiAgJ3VwJzonXFx1ZDgzY1xcdWRkOTknLFxuICAndXBzaWRlX2Rvd25fZmFjZSc6J1xcdWQ4M2RcXHVkZTQzJyxcbiAgJ3YnOidcXHUyNzBjXFx1ZmUwZicsXG4gICd2ZXJ0aWNhbF90cmFmZmljX2xpZ2h0JzonXFx1ZDgzZFxcdWRlYTYnLFxuICAndmhzJzonXFx1ZDgzZFxcdWRjZmMnLFxuICAndmlicmF0aW9uX21vZGUnOidcXHVkODNkXFx1ZGNmMycsXG4gICd2aWRlb19jYW1lcmEnOidcXHVkODNkXFx1ZGNmOScsXG4gICd2aWRlb19nYW1lJzonXFx1ZDgzY1xcdWRmYWUnLFxuICAndmlvbGluJzonXFx1ZDgzY1xcdWRmYmInLFxuICAndmlyZ28nOidcXHUyNjRkXFx1ZmUwZicsXG4gICd2b2xjYW5vJzonXFx1ZDgzY1xcdWRmMGInLFxuICAndm9sbGV5YmFsbCc6J1xcdWQ4M2NcXHVkZmQwJyxcbiAgJ3ZzJzonXFx1ZDgzY1xcdWRkOWEnLFxuICAndnVsY2FuX3NhbHV0ZSc6J1xcdWQ4M2RcXHVkZDk2JyxcbiAgJ3dhbGtpbmdfbWFuJzonXFx1ZDgzZFxcdWRlYjYnLFxuICAnd2Fsa2luZ193b21hbic6J1xcdWQ4M2RcXHVkZWI2Jnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICd3YW5pbmdfY3Jlc2NlbnRfbW9vbic6J1xcdWQ4M2NcXHVkZjE4JyxcbiAgJ3dhbmluZ19naWJib3VzX21vb24nOidcXHVkODNjXFx1ZGYxNicsXG4gICd3YXJuaW5nJzonXFx1MjZhMFxcdWZlMGYnLFxuICAnd2FzdGViYXNrZXQnOidcXHVkODNkXFx1ZGRkMScsXG4gICd3YXRjaCc6J1xcdTIzMWFcXHVmZTBmJyxcbiAgJ3dhdGVyX2J1ZmZhbG8nOidcXHVkODNkXFx1ZGMwMycsXG4gICd3YXRlcm1lbG9uJzonXFx1ZDgzY1xcdWRmNDknLFxuICAnd2F2ZSc6J1xcdWQ4M2RcXHVkYzRiJyxcbiAgJ3dhdnlfZGFzaCc6J1xcdTMwMzBcXHVmZTBmJyxcbiAgJ3dheGluZ19jcmVzY2VudF9tb29uJzonXFx1ZDgzY1xcdWRmMTInLFxuICAnd2MnOidcXHVkODNkXFx1ZGViZScsXG4gICd3ZWFyeSc6J1xcdWQ4M2RcXHVkZTI5JyxcbiAgJ3dlZGRpbmcnOidcXHVkODNkXFx1ZGM5MicsXG4gICd3ZWlnaHRfbGlmdGluZ19tYW4nOidcXHVkODNjXFx1ZGZjYlxcdWZlMGYnLFxuICAnd2VpZ2h0X2xpZnRpbmdfd29tYW4nOidcXHVkODNjXFx1ZGZjYlxcdWZlMGYmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3doYWxlJzonXFx1ZDgzZFxcdWRjMzMnLFxuICAnd2hhbGUyJzonXFx1ZDgzZFxcdWRjMGInLFxuICAnd2hlZWxfb2ZfZGhhcm1hJzonXFx1MjYzOFxcdWZlMGYnLFxuICAnd2hlZWxjaGFpcic6J1xcdTI2N2ZcXHVmZTBmJyxcbiAgJ3doaXRlX2NoZWNrX21hcmsnOidcXHUyNzA1JyxcbiAgJ3doaXRlX2NpcmNsZSc6J1xcdTI2YWFcXHVmZTBmJyxcbiAgJ3doaXRlX2ZsYWcnOidcXHVkODNjXFx1ZGZmM1xcdWZlMGYnLFxuICAnd2hpdGVfZmxvd2VyJzonXFx1ZDgzZFxcdWRjYWUnLFxuICAnd2hpdGVfbGFyZ2Vfc3F1YXJlJzonXFx1MmIxY1xcdWZlMGYnLFxuICAnd2hpdGVfbWVkaXVtX3NtYWxsX3NxdWFyZSc6J1xcdTI1ZmRcXHVmZTBmJyxcbiAgJ3doaXRlX21lZGl1bV9zcXVhcmUnOidcXHUyNWZiXFx1ZmUwZicsXG4gICd3aGl0ZV9zbWFsbF9zcXVhcmUnOidcXHUyNWFiXFx1ZmUwZicsXG4gICd3aGl0ZV9zcXVhcmVfYnV0dG9uJzonXFx1ZDgzZFxcdWRkMzMnLFxuICAnd2lsdGVkX2Zsb3dlcic6J1xcdWQ4M2VcXHVkZDQwJyxcbiAgJ3dpbmRfY2hpbWUnOidcXHVkODNjXFx1ZGY5MCcsXG4gICd3aW5kX2ZhY2UnOidcXHVkODNjXFx1ZGYyYycsXG4gICd3aW5lX2dsYXNzJzonXFx1ZDgzY1xcdWRmNzcnLFxuICAnd2luayc6J1xcdWQ4M2RcXHVkZTA5JyxcbiAgJ3dvbGYnOidcXHVkODNkXFx1ZGMzYScsXG4gICd3b21hbic6J1xcdWQ4M2RcXHVkYzY5JyxcbiAgJ3dvbWFuX2FydGlzdCc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNjXFx1ZGZhOCcsXG4gICd3b21hbl9hc3Ryb25hdXQnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRlODAnLFxuICAnd29tYW5fY2FydHdoZWVsaW5nJzonXFx1ZDgzZVxcdWRkMzgmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3dvbWFuX2Nvb2snOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzY1xcdWRmNzMnLFxuICAnd29tYW5fZmFjZXBhbG1pbmcnOidcXHVkODNlXFx1ZGQyNiZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnd29tYW5fZmFjdG9yeV93b3JrZXInOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzY1xcdWRmZWQnLFxuICAnd29tYW5fZmFybWVyJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2NcXHVkZjNlJyxcbiAgJ3dvbWFuX2ZpcmVmaWdodGVyJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkZTkyJyxcbiAgJ3dvbWFuX2hlYWx0aF93b3JrZXInOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1MjY5NVxcdWZlMGYnLFxuICAnd29tYW5fanVkZ2UnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1MjY5NlxcdWZlMGYnLFxuICAnd29tYW5fanVnZ2xpbmcnOidcXHVkODNlXFx1ZGQzOSZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnd29tYW5fbWVjaGFuaWMnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRkMjcnLFxuICAnd29tYW5fb2ZmaWNlX3dvcmtlcic6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGNiYycsXG4gICd3b21hbl9waWxvdCc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHUyNzA4XFx1ZmUwZicsXG4gICd3b21hbl9wbGF5aW5nX2hhbmRiYWxsJzonXFx1ZDgzZVxcdWRkM2UmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3dvbWFuX3BsYXlpbmdfd2F0ZXJfcG9sbyc6J1xcdWQ4M2VcXHVkZDNkJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICd3b21hbl9zY2llbnRpc3QnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRkMmMnLFxuICAnd29tYW5fc2hydWdnaW5nJzonXFx1ZDgzZVxcdWRkMzcmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3dvbWFuX3Npbmdlcic6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNjXFx1ZGZhNCcsXG4gICd3b21hbl9zdHVkZW50JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2NcXHVkZjkzJyxcbiAgJ3dvbWFuX3RlYWNoZXInOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzY1xcdWRmZWInLFxuICAnd29tYW5fdGVjaG5vbG9naXN0JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkY2JiJyxcbiAgJ3dvbWFuX3dpdGhfdHVyYmFuJzonXFx1ZDgzZFxcdWRjNzMmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3dvbWFuc19jbG90aGVzJzonXFx1ZDgzZFxcdWRjNWEnLFxuICAnd29tYW5zX2hhdCc6J1xcdWQ4M2RcXHVkYzUyJyxcbiAgJ3dvbWVuX3dyZXN0bGluZyc6J1xcdWQ4M2VcXHVkZDNjJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICd3b21lbnMnOidcXHVkODNkXFx1ZGViYScsXG4gICd3b3JsZF9tYXAnOidcXHVkODNkXFx1ZGRmYScsXG4gICd3b3JyaWVkJzonXFx1ZDgzZFxcdWRlMWYnLFxuICAnd3JlbmNoJzonXFx1ZDgzZFxcdWRkMjcnLFxuICAnd3JpdGluZ19oYW5kJzonXFx1MjcwZFxcdWZlMGYnLFxuICAneCc6J1xcdTI3NGMnLFxuICAneWVsbG93X2hlYXJ0JzonXFx1ZDgzZFxcdWRjOWInLFxuICAneWVuJzonXFx1ZDgzZFxcdWRjYjQnLFxuICAneWluX3lhbmcnOidcXHUyNjJmXFx1ZmUwZicsXG4gICd5dW0nOidcXHVkODNkXFx1ZGUwYicsXG4gICd6YXAnOidcXHUyNmExXFx1ZmUwZicsXG4gICd6aXBwZXJfbW91dGhfZmFjZSc6J1xcdWQ4M2VcXHVkZDEwJyxcbiAgJ3p6eic6J1xcdWQ4M2RcXHVkY2E0JyxcblxuICAvKiBzcGVjaWFsIGVtb2ppcyA6UCAqL1xuICAnb2N0b2NhdCc6ICAnPGltZyBhbHQ9XCI6b2N0b2NhdDpcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBhbGlnbj1cImFic21pZGRsZVwiIHNyYz1cImh0dHBzOi8vYXNzZXRzLWNkbi5naXRodWIuY29tL2ltYWdlcy9pY29ucy9lbW9qaS9vY3RvY2F0LnBuZ1wiPicsXG4gICdzaG93ZG93bic6ICc8c3BhbiBzdHlsZT1cImZvbnQtZmFtaWx5OiBcXCdBbm9ueW1vdXMgUHJvXFwnLCBtb25vc3BhY2U7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB0ZXh0LWRlY29yYXRpb24tc3R5bGU6IGRhc2hlZDsgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiAjM2U4YjhhO3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uOiB1bmRlcjtcIj5TPC9zcGFuPidcbn07XG5cclxuLyoqXG4gKiBDcmVhdGVkIGJ5IEVzdGV2YW8gb24gMzEtMDUtMjAxNS5cbiAqL1xuXG4vKipcbiAqIFNob3dkb3duIENvbnZlcnRlciBjbGFzc1xuICogQGNsYXNzXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnZlcnRlck9wdGlvbnNdXG4gKiBAcmV0dXJucyB7Q29udmVydGVyfVxuICovXG5zaG93ZG93bi5Db252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyT3B0aW9ucykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyXG4gICAgICAvKipcbiAgICAgICAqIE9wdGlvbnMgdXNlZCBieSB0aGlzIGNvbnZlcnRlclxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEB0eXBlIHt7fX1cbiAgICAgICAqL1xuICAgICAgb3B0aW9ucyA9IHt9LFxuXG4gICAgICAvKipcbiAgICAgICAqIExhbmd1YWdlIGV4dGVuc2lvbnMgdXNlZCBieSB0aGlzIGNvbnZlcnRlclxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgICAqL1xuICAgICAgbGFuZ0V4dGVuc2lvbnMgPSBbXSxcblxuICAgICAgLyoqXG4gICAgICAgKiBPdXRwdXQgbW9kaWZpZXJzIGV4dGVuc2lvbnMgdXNlZCBieSB0aGlzIGNvbnZlcnRlclxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgICAqL1xuICAgICAgb3V0cHV0TW9kaWZpZXJzID0gW10sXG5cbiAgICAgIC8qKlxuICAgICAgICogRXZlbnQgbGlzdGVuZXJzXG4gICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICogQHR5cGUge3t9fVxuICAgICAgICovXG4gICAgICBsaXN0ZW5lcnMgPSB7fSxcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZmxhdm9yIHNldCBpbiB0aGlzIGNvbnZlcnRlclxuICAgICAgICovXG4gICAgICBzZXRDb252Rmxhdm9yID0gc2V0Rmxhdm9yLFxuXG4gICAgLyoqXG4gICAgICogTWV0YWRhdGEgb2YgdGhlIGRvY3VtZW50XG4gICAgICogQHR5cGUge3twYXJzZWQ6IHt9LCByYXc6IHN0cmluZywgZm9ybWF0OiBzdHJpbmd9fVxuICAgICAqL1xuICAgICAgbWV0YWRhdGEgPSB7XG4gICAgICAgIHBhcnNlZDoge30sXG4gICAgICAgIHJhdzogJycsXG4gICAgICAgIGZvcm1hdDogJydcbiAgICAgIH07XG5cbiAgX2NvbnN0cnVjdG9yKCk7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRlciBjb25zdHJ1Y3RvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gX2NvbnN0cnVjdG9yICgpIHtcbiAgICBjb252ZXJ0ZXJPcHRpb25zID0gY29udmVydGVyT3B0aW9ucyB8fCB7fTtcblxuICAgIGZvciAodmFyIGdPcHQgaW4gZ2xvYmFsT3B0aW9ucykge1xuICAgICAgaWYgKGdsb2JhbE9wdGlvbnMuaGFzT3duUHJvcGVydHkoZ09wdCkpIHtcbiAgICAgICAgb3B0aW9uc1tnT3B0XSA9IGdsb2JhbE9wdGlvbnNbZ09wdF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVyZ2Ugb3B0aW9uc1xuICAgIGlmICh0eXBlb2YgY29udmVydGVyT3B0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvciAodmFyIG9wdCBpbiBjb252ZXJ0ZXJPcHRpb25zKSB7XG4gICAgICAgIGlmIChjb252ZXJ0ZXJPcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpIHtcbiAgICAgICAgICBvcHRpb25zW29wdF0gPSBjb252ZXJ0ZXJPcHRpb25zW29wdF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NvbnZlcnRlciBleHBlY3RzIHRoZSBwYXNzZWQgcGFyYW1ldGVyIHRvIGJlIGFuIG9iamVjdCwgYnV0ICcgKyB0eXBlb2YgY29udmVydGVyT3B0aW9ucyArXG4gICAgICAnIHdhcyBwYXNzZWQgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5leHRlbnNpb25zKSB7XG4gICAgICBzaG93ZG93bi5oZWxwZXIuZm9yRWFjaChvcHRpb25zLmV4dGVuc2lvbnMsIF9wYXJzZUV4dGVuc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGV4dGVuc2lvblxuICAgKiBAcGFyYW0geyp9IGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9JyddXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBfcGFyc2VFeHRlbnNpb24gKGV4dCwgbmFtZSkge1xuXG4gICAgbmFtZSA9IG5hbWUgfHwgbnVsbDtcbiAgICAvLyBJZiBpdCdzIGEgc3RyaW5nLCB0aGUgZXh0ZW5zaW9uIHdhcyBwcmV2aW91c2x5IGxvYWRlZFxuICAgIGlmIChzaG93ZG93bi5oZWxwZXIuaXNTdHJpbmcoZXh0KSkge1xuICAgICAgZXh0ID0gc2hvd2Rvd24uaGVscGVyLnN0ZEV4dE5hbWUoZXh0KTtcbiAgICAgIG5hbWUgPSBleHQ7XG5cbiAgICAgIC8vIExFR0FDWV9TVVBQT1JUIENPREVcbiAgICAgIGlmIChzaG93ZG93bi5leHRlbnNpb25zW2V4dF0pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdERVBSRUNBVElPTiBXQVJOSU5HOiAnICsgZXh0ICsgJyBpcyBhbiBvbGQgZXh0ZW5zaW9uIHRoYXQgdXNlcyBhIGRlcHJlY2F0ZWQgbG9hZGluZyBtZXRob2QuJyArXG4gICAgICAgICAgJ1BsZWFzZSBpbmZvcm0gdGhlIGRldmVsb3BlciB0aGF0IHRoZSBleHRlbnNpb24gc2hvdWxkIGJlIHVwZGF0ZWQhJyk7XG4gICAgICAgIGxlZ2FjeUV4dGVuc2lvbkxvYWRpbmcoc2hvd2Rvd24uZXh0ZW5zaW9uc1tleHRdLCBleHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICAvLyBFTkQgTEVHQUNZIFNVUFBPUlQgQ09ERVxuXG4gICAgICB9IGVsc2UgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZXh0ZW5zaW9uc1tleHRdKSkge1xuICAgICAgICBleHQgPSBleHRlbnNpb25zW2V4dF07XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKCdFeHRlbnNpb24gXCInICsgZXh0ICsgJ1wiIGNvdWxkIG5vdCBiZSBsb2FkZWQuIEl0IHdhcyBlaXRoZXIgbm90IGZvdW5kIG9yIGlzIG5vdCBhIHZhbGlkIGV4dGVuc2lvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXh0ID0gZXh0KCk7XG4gICAgfVxuXG4gICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNBcnJheShleHQpKSB7XG4gICAgICBleHQgPSBbZXh0XTtcbiAgICB9XG5cbiAgICB2YXIgdmFsaWRFeHQgPSB2YWxpZGF0ZShleHQsIG5hbWUpO1xuICAgIGlmICghdmFsaWRFeHQudmFsaWQpIHtcbiAgICAgIHRocm93IEVycm9yKHZhbGlkRXh0LmVycm9yKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dC5sZW5ndGg7ICsraSkge1xuICAgICAgc3dpdGNoIChleHRbaV0udHlwZSkge1xuXG4gICAgICAgIGNhc2UgJ2xhbmcnOlxuICAgICAgICAgIGxhbmdFeHRlbnNpb25zLnB1c2goZXh0W2ldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdvdXRwdXQnOlxuICAgICAgICAgIG91dHB1dE1vZGlmaWVycy5wdXNoKGV4dFtpXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoZXh0W2ldLmhhc093blByb3BlcnR5KCdsaXN0ZW5lcnMnKSkge1xuICAgICAgICBmb3IgKHZhciBsbiBpbiBleHRbaV0ubGlzdGVuZXJzKSB7XG4gICAgICAgICAgaWYgKGV4dFtpXS5saXN0ZW5lcnMuaGFzT3duUHJvcGVydHkobG4pKSB7XG4gICAgICAgICAgICBsaXN0ZW4obG4sIGV4dFtpXS5saXN0ZW5lcnNbbG5dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBMRUdBQ1lfU1VQUE9SVFxuICAgKiBAcGFyYW0geyp9IGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZnVuY3Rpb24gbGVnYWN5RXh0ZW5zaW9uTG9hZGluZyAoZXh0LCBuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGV4dCA9IGV4dChuZXcgc2hvd2Rvd24uQ29udmVydGVyKCkpO1xuICAgIH1cbiAgICBpZiAoIXNob3dkb3duLmhlbHBlci5pc0FycmF5KGV4dCkpIHtcbiAgICAgIGV4dCA9IFtleHRdO1xuICAgIH1cbiAgICB2YXIgdmFsaWQgPSB2YWxpZGF0ZShleHQsIG5hbWUpO1xuXG4gICAgaWYgKCF2YWxpZC52YWxpZCkge1xuICAgICAgdGhyb3cgRXJyb3IodmFsaWQuZXJyb3IpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBzd2l0Y2ggKGV4dFtpXS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2xhbmcnOlxuICAgICAgICAgIGxhbmdFeHRlbnNpb25zLnB1c2goZXh0W2ldKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb3V0cHV0JzpcbiAgICAgICAgICBvdXRwdXRNb2RpZmllcnMucHVzaChleHRbaV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0Oi8vIHNob3VsZCBuZXZlciByZWFjaCBoZXJlXG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ0V4dGVuc2lvbiBsb2FkZXIgZXJyb3I6IFR5cGUgdW5yZWNvZ25pemVkISEhJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBhbiBldmVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgZnVuY3Rpb24gbGlzdGVuIChuYW1lLCBjYWxsYmFjaykge1xuICAgIGlmICghc2hvd2Rvd24uaGVscGVyLmlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBpbiBjb252ZXJ0ZXIubGlzdGVuKCkgbWV0aG9kOiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCAnICsgdHlwZW9mIG5hbWUgKyAnIGdpdmVuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgaW4gY29udmVydGVyLmxpc3RlbigpIG1ldGhvZDogY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgJyArIHR5cGVvZiBjYWxsYmFjayArICcgZ2l2ZW4nKTtcbiAgICB9XG5cbiAgICBpZiAoIWxpc3RlbmVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgbGlzdGVuZXJzW25hbWVdID0gW107XG4gICAgfVxuICAgIGxpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJUcmltSW5wdXRUZXh0ICh0ZXh0KSB7XG4gICAgdmFyIHJzcCA9IHRleHQubWF0Y2goL15cXHMqLylbMF0ubGVuZ3RoLFxuICAgICAgICByZ3ggPSBuZXcgUmVnRXhwKCdeXFxcXHN7MCwnICsgcnNwICsgJ30nLCAnZ20nKTtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHJneCwgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFuIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldnROYW1lIEV2ZW50IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGV4dFxuICAgKiBAcGFyYW0ge3t9fSBvcHRpb25zIENvbnZlcnRlciBPcHRpb25zXG4gICAqIEBwYXJhbSB7e319IGdsb2JhbHNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRoaXMuX2Rpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2ggKGV2dE5hbWUsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgICBpZiAobGlzdGVuZXJzLmhhc093blByb3BlcnR5KGV2dE5hbWUpKSB7XG4gICAgICBmb3IgKHZhciBlaSA9IDA7IGVpIDwgbGlzdGVuZXJzW2V2dE5hbWVdLmxlbmd0aDsgKytlaSkge1xuICAgICAgICB2YXIgblRleHQgPSBsaXN0ZW5lcnNbZXZ0TmFtZV1bZWldKGV2dE5hbWUsIHRleHQsIHRoaXMsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgICBpZiAoblRleHQgJiYgdHlwZW9mIG5UZXh0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRleHQgPSBuVGV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dDtcbiAgfTtcblxuICAvKipcbiAgICogTGlzdGVuIHRvIGFuIGV2ZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtzaG93ZG93bi5Db252ZXJ0ZXJ9XG4gICAqL1xuICB0aGlzLmxpc3RlbiA9IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaykge1xuICAgIGxpc3RlbihuYW1lLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgbWFya2Rvd24gc3RyaW5nIGludG8gSFRNTFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHRoaXMubWFrZUh0bWwgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgIC8vY2hlY2sgaWYgdGV4dCBpcyBub3QgZmFsc3lcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIHZhciBnbG9iYWxzID0ge1xuICAgICAgZ0h0bWxCbG9ja3M6ICAgICBbXSxcbiAgICAgIGdIdG1sTWRCbG9ja3M6ICAgW10sXG4gICAgICBnSHRtbFNwYW5zOiAgICAgIFtdLFxuICAgICAgZ1VybHM6ICAgICAgICAgICB7fSxcbiAgICAgIGdUaXRsZXM6ICAgICAgICAge30sXG4gICAgICBnRGltZW5zaW9uczogICAgIHt9LFxuICAgICAgZ0xpc3RMZXZlbDogICAgICAwLFxuICAgICAgaGFzaExpbmtDb3VudHM6ICB7fSxcbiAgICAgIGxhbmdFeHRlbnNpb25zOiAgbGFuZ0V4dGVuc2lvbnMsXG4gICAgICBvdXRwdXRNb2RpZmllcnM6IG91dHB1dE1vZGlmaWVycyxcbiAgICAgIGNvbnZlcnRlcjogICAgICAgdGhpcyxcbiAgICAgIGdoQ29kZUJsb2NrczogICAgW10sXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBwYXJzZWQ6IHt9LFxuICAgICAgICByYXc6ICcnLFxuICAgICAgICBmb3JtYXQ6ICcnXG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFRoaXMgbGV0cyB1cyB1c2UgwqggdHJlbWEgYXMgYW4gZXNjYXBlIGNoYXIgdG8gYXZvaWQgbWQ1IGhhc2hlc1xuICAgIC8vIFRoZSBjaG9pY2Ugb2YgY2hhcmFjdGVyIGlzIGFyYml0cmFyeTsgYW55dGhpbmcgdGhhdCBpc24ndFxuICAgIC8vIG1hZ2ljIGluIE1hcmtkb3duIHdpbGwgd29yay5cbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqC9nLCAnwqhUJyk7XG5cbiAgICAvLyBSZXBsYWNlICQgd2l0aCDCqERcbiAgICAvLyBSZWdFeHAgaW50ZXJwcmV0cyAkIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXJcbiAgICAvLyB3aGVuIGl0J3MgaW4gYSByZXBsYWNlbWVudCBzdHJpbmdcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXCQvZywgJ8KoRCcpO1xuXG4gICAgLy8gU3RhbmRhcmRpemUgbGluZSBlbmRpbmdzXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKTsgLy8gRE9TIHRvIFVuaXhcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHIvZywgJ1xcbicpOyAvLyBNYWMgdG8gVW5peFxuXG4gICAgLy8gU3RhcmRhcmRpemUgbGluZSBzcGFjZXNcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHUwMEEwL2csICcmbmJzcDsnKTtcblxuICAgIGlmIChvcHRpb25zLnNtYXJ0SW5kZW50YXRpb25GaXgpIHtcbiAgICAgIHRleHQgPSByVHJpbUlucHV0VGV4dCh0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGV4dCBiZWdpbnMgYW5kIGVuZHMgd2l0aCBhIGNvdXBsZSBvZiBuZXdsaW5lczpcbiAgICB0ZXh0ID0gJ1xcblxcbicgKyB0ZXh0ICsgJ1xcblxcbic7XG5cbiAgICAvLyBkZXRhYlxuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2RldGFiJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgICAvKipcbiAgICAgKiBTdHJpcCBhbnkgbGluZXMgY29uc2lzdGluZyBvbmx5IG9mIHNwYWNlcyBhbmQgdGFicy5cbiAgICAgKiBUaGlzIG1ha2VzIHN1YnNlcXVlbnQgcmVnZXhzIGVhc2llciB0byB3cml0ZSwgYmVjYXVzZSB3ZSBjYW5cbiAgICAgKiBtYXRjaCBjb25zZWN1dGl2ZSBibGFuayBsaW5lcyB3aXRoIC9cXG4rLyBpbnN0ZWFkIG9mIHNvbWV0aGluZ1xuICAgICAqIGNvbnRvcnRlZCBsaWtlIC9bIFxcdF0qXFxuKy9cbiAgICAgKi9cbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9eWyBcXHRdKyQvbWcsICcnKTtcblxuICAgIC8vcnVuIGxhbmd1YWdlRXh0ZW5zaW9uc1xuICAgIHNob3dkb3duLmhlbHBlci5mb3JFYWNoKGxhbmdFeHRlbnNpb25zLCBmdW5jdGlvbiAoZXh0KSB7XG4gICAgICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdydW5FeHRlbnNpb24nKShleHQsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIH0pO1xuXG4gICAgLy8gcnVuIHRoZSBzdWIgcGFyc2Vyc1xuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ldGFkYXRhJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignaGFzaFByZUNvZGVUYWdzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignZ2l0aHViQ29kZUJsb2NrcycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hIVE1MQmxvY2tzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignaGFzaENvZGVUYWdzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignc3RyaXBMaW5rRGVmaW5pdGlvbnMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdibG9ja0dhbXV0JykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcigndW5oYXNoSFRNTFNwYW5zJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcigndW5lc2NhcGVTcGVjaWFsQ2hhcnMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAgIC8vIGF0dGFja2xhYjogUmVzdG9yZSBkb2xsYXIgc2lnbnNcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqEQvZywgJyQkJyk7XG5cbiAgICAvLyBhdHRhY2tsYWI6IFJlc3RvcmUgdHJlbWFzXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvwqhUL2csICfCqCcpO1xuXG4gICAgLy8gcmVuZGVyIGEgY29tcGxldGUgaHRtbCBkb2N1bWVudCBpbnN0ZWFkIG9mIGEgcGFydGlhbCBpZiB0aGUgb3B0aW9uIGlzIGVuYWJsZWRcbiAgICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdjb21wbGV0ZUhUTUxEb2N1bWVudCcpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gICAgLy8gUnVuIG91dHB1dCBtb2RpZmllcnNcbiAgICBzaG93ZG93bi5oZWxwZXIuZm9yRWFjaChvdXRwdXRNb2RpZmllcnMsIGZ1bmN0aW9uIChleHQpIHtcbiAgICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3J1bkV4dGVuc2lvbicpKGV4dCwgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgbWV0YWRhdGFcbiAgICBtZXRhZGF0YSA9IGdsb2JhbHMubWV0YWRhdGE7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIEhUTUwgc3RyaW5nIGludG8gYSBtYXJrZG93biBzdHJpbmdcbiAgICogQHBhcmFtIHNyY1xuICAgKiBAcGFyYW0gW0hUTUxQYXJzZXJdIEEgV0hBVFdHIERPTSBhbmQgSFRNTCBwYXJzZXIsIHN1Y2ggYXMgSlNET00uIElmIG5vbmUgaXMgc3VwcGxpZWQsIHdpbmRvdy5kb2N1bWVudCB3aWxsIGJlIHVzZWQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0aGlzLm1ha2VNYXJrZG93biA9IHRoaXMubWFrZU1kID0gZnVuY3Rpb24gKHNyYywgSFRNTFBhcnNlcikge1xuXG4gICAgLy8gcmVwbGFjZSBcXHJcXG4gd2l0aCBcXG5cbiAgICBzcmMgPSBzcmMucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKTtcbiAgICBzcmMgPSBzcmMucmVwbGFjZSgvXFxyL2csICdcXG4nKTsgLy8gb2xkIG1hY3NcblxuICAgIC8vIGR1ZSB0byBhbiBlZGdlIGNhc2UsIHdlIG5lZWQgdG8gZmluZCB0aGlzOiA+IDxcbiAgICAvLyB0byBwcmV2ZW50IHJlbW92aW5nIG9mIG5vbiBzaWxlbnQgd2hpdGUgc3BhY2VzXG4gICAgLy8gZXg6IDxlbT50aGlzIGlzPC9lbT4gPHN0cm9uZz5zcGFydGE8L3N0cm9uZz5cbiAgICBzcmMgPSBzcmMucmVwbGFjZSgvPlsgXFx0XSs8LywgJz7CqE5CU1A7PCcpO1xuXG4gICAgaWYgKCFIVE1MUGFyc2VyKSB7XG4gICAgICBpZiAod2luZG93ICYmIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICBIVE1MUGFyc2VyID0gd2luZG93LmRvY3VtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIVE1MUGFyc2VyIGlzIHVuZGVmaW5lZC4gSWYgaW4gYSB3ZWJ3b3JrZXIgb3Igbm9kZWpzIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBwcm92aWRlIGEgV0hBVFdHIERPTSBhbmQgSFRNTCBzdWNoIGFzIEpTRE9NJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRvYyA9IEhUTUxQYXJzZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZG9jLmlubmVySFRNTCA9IHNyYztcblxuICAgIHZhciBnbG9iYWxzID0ge1xuICAgICAgcHJlTGlzdDogc3Vic3RpdHV0ZVByZUNvZGVUYWdzKGRvYylcbiAgICB9O1xuXG4gICAgLy8gcmVtb3ZlIGFsbCBuZXdsaW5lcyBhbmQgY29sbGFwc2Ugc3BhY2VzXG4gICAgY2xlYW4oZG9jKTtcblxuICAgIC8vIHNvbWUgc3R1ZmYsIGxpa2UgYWNjaWRlbnRhbCByZWZlcmVuY2UgbGlua3MgbXVzdCBub3cgYmUgZXNjYXBlZFxuICAgIC8vIFRPRE9cbiAgICAvLyBkb2MuaW5uZXJIVE1MID0gZG9jLmlubmVySFRNTC5yZXBsYWNlKC9cXFtbXFxTXFx0IF1dLyk7XG5cbiAgICB2YXIgbm9kZXMgPSBkb2MuY2hpbGROb2RlcyxcbiAgICAgICAgbWREb2MgPSAnJztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1kRG9jICs9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLm5vZGUnKShub2Rlc1tpXSwgZ2xvYmFscyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW4gKG5vZGUpIHtcbiAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgKytuKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGROb2Rlc1tuXTtcbiAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgICAgaWYgKCEvXFxTLy50ZXN0KGNoaWxkLm5vZGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgICAgLS1uO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZC5ub2RlVmFsdWUgPSBjaGlsZC5ub2RlVmFsdWUuc3BsaXQoJ1xcbicpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgIGNoaWxkLm5vZGVWYWx1ZSA9IGNoaWxkLm5vZGVWYWx1ZS5yZXBsYWNlKC8oXFxzKSsvZywgJyQxJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgY2xlYW4oY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmluZCBhbGwgcHJlIHRhZ3MgYW5kIHJlcGxhY2UgY29udGVudHMgd2l0aCBwbGFjZWhvbGRlclxuICAgIC8vIHdlIG5lZWQgdGhpcyBzbyB0aGF0IHdlIGNhbiByZW1vdmUgYWxsIGluZGVudGF0aW9uIGZyb20gaHRtbFxuICAgIC8vIHRvIGVhc2UgdXAgcGFyc2luZ1xuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVQcmVDb2RlVGFncyAoZG9jKSB7XG5cbiAgICAgIHZhciBwcmVzID0gZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZScpLFxuICAgICAgICAgIHByZXNQSCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXMubGVuZ3RoOyArK2kpIHtcblxuICAgICAgICBpZiAocHJlc1tpXS5jaGlsZEVsZW1lbnRDb3VudCA9PT0gMSAmJiBwcmVzW2ldLmZpcnN0Q2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnY29kZScpIHtcbiAgICAgICAgICB2YXIgY29udGVudCA9IHByZXNbaV0uZmlyc3RDaGlsZC5pbm5lckhUTUwudHJpbSgpLFxuICAgICAgICAgICAgICBsYW5ndWFnZSA9IHByZXNbaV0uZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFuZ3VhZ2UnKSB8fCAnJztcblxuICAgICAgICAgIC8vIGlmIGRhdGEtbGFuZ3VhZ2UgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkLCB0aGVuIHdlIGxvb2sgZm9yIGNsYXNzIGxhbmd1YWdlLSpcbiAgICAgICAgICBpZiAobGFuZ3VhZ2UgPT09ICcnKSB7XG4gICAgICAgICAgICB2YXIgY2xhc3NlcyA9IHByZXNbaV0uZmlyc3RDaGlsZC5jbGFzc05hbWUuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7ICsrYykge1xuICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGNsYXNzZXNbY10ubWF0Y2goL15sYW5ndWFnZS0oLispJC8pO1xuICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGxhbmd1YWdlID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHVuZXNjYXBlIGh0bWwgZW50aXRpZXMgaW4gY29udGVudFxuICAgICAgICAgIGNvbnRlbnQgPSBzaG93ZG93bi5oZWxwZXIudW5lc2NhcGVIVE1MRW50aXRpZXMoY29udGVudCk7XG5cbiAgICAgICAgICBwcmVzUEgucHVzaChjb250ZW50KTtcbiAgICAgICAgICBwcmVzW2ldLm91dGVySFRNTCA9ICc8cHJlY29kZSBsYW5ndWFnZT1cIicgKyBsYW5ndWFnZSArICdcIiBwcmVjb2RlbnVtPVwiJyArIGkudG9TdHJpbmcoKSArICdcIj48L3ByZWNvZGU+JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmVzUEgucHVzaChwcmVzW2ldLmlubmVySFRNTCk7XG4gICAgICAgICAgcHJlc1tpXS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICBwcmVzW2ldLnNldEF0dHJpYnV0ZSgncHJlbnVtJywgaS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXNQSDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWREb2M7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhbiBvcHRpb24gb2YgdGhpcyBDb252ZXJ0ZXIgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqL1xuICB0aGlzLnNldE9wdGlvbiA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3B0aW9uIG9mIHRoaXMgQ29udmVydGVyIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB0aGlzLmdldE9wdGlvbiA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gb3B0aW9uc1trZXldO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9wdGlvbnMgb2YgdGhpcyBDb252ZXJ0ZXIgaW5zdGFuY2VcbiAgICogQHJldHVybnMge3t9fVxuICAgKi9cbiAgdGhpcy5nZXRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgZXh0ZW5zaW9uIHRvIFRISVMgY29udmVydGVyXG4gICAqIEBwYXJhbSB7e319IGV4dGVuc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9bnVsbF1cbiAgICovXG4gIHRoaXMuYWRkRXh0ZW5zaW9uID0gZnVuY3Rpb24gKGV4dGVuc2lvbiwgbmFtZSkge1xuICAgIG5hbWUgPSBuYW1lIHx8IG51bGw7XG4gICAgX3BhcnNlRXh0ZW5zaW9uKGV4dGVuc2lvbiwgbmFtZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFVzZSBhIGdsb2JhbCByZWdpc3RlcmVkIGV4dGVuc2lvbiB3aXRoIFRISVMgY29udmVydGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHRlbnNpb25OYW1lIE5hbWUgb2YgdGhlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBleHRlbnNpb25cbiAgICovXG4gIHRoaXMudXNlRXh0ZW5zaW9uID0gZnVuY3Rpb24gKGV4dGVuc2lvbk5hbWUpIHtcbiAgICBfcGFyc2VFeHRlbnNpb24oZXh0ZW5zaW9uTmFtZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZmxhdm9yIFRISVMgY29udmVydGVyIHNob3VsZCB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIHRoaXMuc2V0Rmxhdm9yID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAoIWZsYXZvci5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgdGhyb3cgRXJyb3IobmFtZSArICcgZmxhdm9yIHdhcyBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgdmFyIHByZXNldCA9IGZsYXZvcltuYW1lXTtcbiAgICBzZXRDb252Rmxhdm9yID0gbmFtZTtcbiAgICBmb3IgKHZhciBvcHRpb24gaW4gcHJlc2V0KSB7XG4gICAgICBpZiAocHJlc2V0Lmhhc093blByb3BlcnR5KG9wdGlvbikpIHtcbiAgICAgICAgb3B0aW9uc1tvcHRpb25dID0gcHJlc2V0W29wdGlvbl07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnRseSBzZXQgZmxhdm9yIG9mIHRoaXMgY29udmVydGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0aGlzLmdldEZsYXZvciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2V0Q29udkZsYXZvcjtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV4dGVuc2lvbiBmcm9tIFRISVMgY29udmVydGVyLlxuICAgKiBOb3RlOiBUaGlzIGlzIGEgY29zdGx5IG9wZXJhdGlvbi4gSXQncyBiZXR0ZXIgdG8gaW5pdGlhbGl6ZSBhIG5ldyBjb252ZXJ0ZXJcbiAgICogYW5kIHNwZWNpZnkgdGhlIGV4dGVuc2lvbnMgeW91IHdpc2ggdG8gdXNlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGV4dGVuc2lvblxuICAgKi9cbiAgdGhpcy5yZW1vdmVFeHRlbnNpb24gPSBmdW5jdGlvbiAoZXh0ZW5zaW9uKSB7XG4gICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNBcnJheShleHRlbnNpb24pKSB7XG4gICAgICBleHRlbnNpb24gPSBbZXh0ZW5zaW9uXTtcbiAgICB9XG4gICAgZm9yICh2YXIgYSA9IDA7IGEgPCBleHRlbnNpb24ubGVuZ3RoOyArK2EpIHtcbiAgICAgIHZhciBleHQgPSBleHRlbnNpb25bYV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhbmdFeHRlbnNpb25zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChsYW5nRXh0ZW5zaW9uc1tpXSA9PT0gZXh0KSB7XG4gICAgICAgICAgbGFuZ0V4dGVuc2lvbnNbaV0uc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgb3V0cHV0TW9kaWZpZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvdXRwdXRNb2RpZmllcnNbaWldID09PSBleHQpIHtcbiAgICAgICAgICBvdXRwdXRNb2RpZmllcnNbaWldLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogR2V0IGFsbCBleHRlbnNpb24gb2YgVEhJUyBjb252ZXJ0ZXJcbiAgICogQHJldHVybnMge3tsYW5ndWFnZTogQXJyYXksIG91dHB1dDogQXJyYXl9fVxuICAgKi9cbiAgdGhpcy5nZXRBbGxFeHRlbnNpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYW5ndWFnZTogbGFuZ0V4dGVuc2lvbnMsXG4gICAgICBvdXRwdXQ6IG91dHB1dE1vZGlmaWVyc1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWV0YWRhdGEgb2YgdGhlIHByZXZpb3VzbHkgcGFyc2VkIGRvY3VtZW50XG4gICAqIEBwYXJhbSByYXdcbiAgICogQHJldHVybnMge3N0cmluZ3x7fX1cbiAgICovXG4gIHRoaXMuZ2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAocmF3KSB7XG4gICAgaWYgKHJhdykge1xuICAgICAgcmV0dXJuIG1ldGFkYXRhLnJhdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1ldGFkYXRhLnBhcnNlZDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWV0YWRhdGEgZm9ybWF0IG9mIHRoZSBwcmV2aW91c2x5IHBhcnNlZCBkb2N1bWVudFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgdGhpcy5nZXRNZXRhZGF0YUZvcm1hdCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbWV0YWRhdGEuZm9ybWF0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcml2YXRlOiBzZXQgYSBzaW5nbGUga2V5LCB2YWx1ZSBtZXRhZGF0YSBwYWlyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqL1xuICB0aGlzLl9zZXRNZXRhZGF0YVBhaXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIG1ldGFkYXRhLnBhcnNlZFtrZXldID0gdmFsdWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFByaXZhdGU6IHNldCBtZXRhZGF0YSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFxuICAgKi9cbiAgdGhpcy5fc2V0TWV0YWRhdGFGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgbWV0YWRhdGEuZm9ybWF0ID0gZm9ybWF0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcml2YXRlOiBzZXQgbWV0YWRhdGEgcmF3IHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1xuICAgKi9cbiAgdGhpcy5fc2V0TWV0YWRhdGFSYXcgPSBmdW5jdGlvbiAocmF3KSB7XG4gICAgbWV0YWRhdGEucmF3ID0gcmF3O1xuICB9O1xufTtcblxyXG4vKipcbiAqIFR1cm4gTWFya2Rvd24gbGluayBzaG9ydGN1dHMgaW50byBYSFRNTCA8YT4gdGFncy5cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdhbmNob3JzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2FuY2hvcnMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdmFyIHdyaXRlQW5jaG9yVGFnID0gZnVuY3Rpb24gKHdob2xlTWF0Y2gsIGxpbmtUZXh0LCBsaW5rSWQsIHVybCwgbTUsIG02LCB0aXRsZSkge1xuICAgIGlmIChzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQodGl0bGUpKSB7XG4gICAgICB0aXRsZSA9ICcnO1xuICAgIH1cbiAgICBsaW5rSWQgPSBsaW5rSWQudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZXhwbGljaXQgZW1wdHkgdXJsXG4gICAgaWYgKHdob2xlTWF0Y2guc2VhcmNoKC9cXCg8P1xccyo+PyA/KFsnXCJdLipbJ1wiXSk/XFwpJC9tKSA+IC0xKSB7XG4gICAgICB1cmwgPSAnJztcbiAgICB9IGVsc2UgaWYgKCF1cmwpIHtcbiAgICAgIGlmICghbGlua0lkKSB7XG4gICAgICAgIC8vIGxvd2VyLWNhc2UgYW5kIHR1cm4gZW1iZWRkZWQgbmV3bGluZXMgaW50byBzcGFjZXNcbiAgICAgICAgbGlua0lkID0gbGlua1RleHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8gP1xcbi9nLCAnICcpO1xuICAgICAgfVxuICAgICAgdXJsID0gJyMnICsgbGlua0lkO1xuXG4gICAgICBpZiAoIXNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChnbG9iYWxzLmdVcmxzW2xpbmtJZF0pKSB7XG4gICAgICAgIHVybCA9IGdsb2JhbHMuZ1VybHNbbGlua0lkXTtcbiAgICAgICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZ2xvYmFscy5nVGl0bGVzW2xpbmtJZF0pKSB7XG4gICAgICAgICAgdGl0bGUgPSBnbG9iYWxzLmdUaXRsZXNbbGlua0lkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHdob2xlTWF0Y2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy91cmwgPSBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVycyh1cmwsICcqXycsIGZhbHNlKTsgLy8gcmVwbGFjZWQgbGluZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlXG4gICAgdXJsID0gdXJsLnJlcGxhY2Uoc2hvd2Rvd24uaGVscGVyLnJlZ2V4ZXMuYXN0ZXJpc2tEYXNoQW5kQ29sb24sIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuXG4gICAgdmFyIHJlc3VsdCA9ICc8YSBocmVmPVwiJyArIHVybCArICdcIic7XG5cbiAgICBpZiAodGl0bGUgIT09ICcnICYmIHRpdGxlICE9PSBudWxsKSB7XG4gICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbiAgICAgIC8vdGl0bGUgPSBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVycyh0aXRsZSwgJypfJywgZmFsc2UpOyAvLyByZXBsYWNlZCBsaW5lIHRvIGltcHJvdmUgcGVyZm9ybWFuY2VcbiAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShzaG93ZG93bi5oZWxwZXIucmVnZXhlcy5hc3Rlcmlza0Rhc2hBbmRDb2xvbiwgc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG4gICAgICByZXN1bHQgKz0gJyB0aXRsZT1cIicgKyB0aXRsZSArICdcIic7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9uTGlua3NJbk5ld1dpbmRvdyBvbmx5IGFwcGxpZXNcbiAgICAvLyB0byBleHRlcm5hbCBsaW5rcy4gSGFzaCBsaW5rcyAoIykgb3BlbiBpbiBzYW1lIHBhZ2VcbiAgICBpZiAob3B0aW9ucy5vcGVuTGlua3NJbk5ld1dpbmRvdyAmJiAhL14jLy50ZXN0KHVybCkpIHtcbiAgICAgIC8vIGVzY2FwZWQgX1xuICAgICAgcmVzdWx0ICs9ICcgdGFyZ2V0PVwiwqhFOTVFYmxhbmtcIic7XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9ICc+JyArIGxpbmtUZXh0ICsgJzwvYT4nO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBGaXJzdCwgaGFuZGxlIHJlZmVyZW5jZS1zdHlsZSBsaW5rczogW2xpbmsgdGV4dF0gW2lkXVxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFsoKD86XFxbW15cXF1dKl18W15cXFtcXF1dKSopXSA/KD86XFxuICopP1xcWyguKj8pXSgpKCkoKSgpL2csIHdyaXRlQW5jaG9yVGFnKTtcblxuICAvLyBOZXh0LCBpbmxpbmUtc3R5bGUgbGlua3M6IFtsaW5rIHRleHRdKHVybCBcIm9wdGlvbmFsIHRpdGxlXCIpXG4gIC8vIGNhc2VzIHdpdGggY3JhenkgdXJscyBsaWtlIC4vaW1hZ2UvY2F0MSkucG5nXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcWygoPzpcXFtbXlxcXV0qXXxbXlxcW1xcXV0pKildKClbIFxcdF0qXFwoWyBcXHRdPzwoW14+XSopPig/OlsgXFx0XSooKFtcIiddKShbXlwiXSo/KVxcNSkpP1sgXFx0XT9cXCkvZyxcbiAgICB3cml0ZUFuY2hvclRhZyk7XG5cbiAgLy8gbm9ybWFsIGNhc2VzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcWygoPzpcXFtbXlxcXV0qXXxbXlxcW1xcXV0pKildKClbIFxcdF0qXFwoWyBcXHRdPzw/KFtcXFNdKz8oPzpcXChbXFxTXSo/XFwpW1xcU10qPyk/KT4/KD86WyBcXHRdKigoW1wiJ10pKFteXCJdKj8pXFw1KSk/WyBcXHRdP1xcKS9nLFxuICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQW5jaG9yVGFnKTtcblxuICAvLyBoYW5kbGUgcmVmZXJlbmNlLXN0eWxlIHNob3J0Y3V0czogW2xpbmsgdGV4dF1cbiAgLy8gVGhlc2UgbXVzdCBjb21lIGxhc3QgaW4gY2FzZSB5b3UndmUgYWxzbyBnb3QgW2xpbmsgdGVzdF1bMV1cbiAgLy8gb3IgW2xpbmsgdGVzdF0oL2ZvbylcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxbKFteXFxbXFxdXSspXSgpKCkoKSgpKCkvZywgd3JpdGVBbmNob3JUYWcpO1xuXG4gIC8vIExhc3RseSBoYW5kbGUgR2l0aHViTWVudGlvbnMgaWYgb3B0aW9uIGlzIGVuYWJsZWRcbiAgaWYgKG9wdGlvbnMuZ2hNZW50aW9ucykge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhefFxccykoXFxcXCk/KEAoW2EtelxcZF0rKD86W2EtelxcZC4tXSs/W2EtelxcZF0rKSopKS9nbWksIGZ1bmN0aW9uICh3bSwgc3QsIGVzY2FwZSwgbWVudGlvbnMsIHVzZXJuYW1lKSB7XG4gICAgICBpZiAoZXNjYXBlID09PSAnXFxcXCcpIHtcbiAgICAgICAgcmV0dXJuIHN0ICsgbWVudGlvbnM7XG4gICAgICB9XG5cbiAgICAgIC8vY2hlY2sgaWYgb3B0aW9ucy5naE1lbnRpb25zTGluayBpcyBhIHN0cmluZ1xuICAgICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNTdHJpbmcob3B0aW9ucy5naE1lbnRpb25zTGluaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnaE1lbnRpb25zTGluayBvcHRpb24gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgfVxuICAgICAgdmFyIGxuayA9IG9wdGlvbnMuZ2hNZW50aW9uc0xpbmsucmVwbGFjZSgvXFx7dX0vZywgdXNlcm5hbWUpLFxuICAgICAgICAgIHRhcmdldCA9ICcnO1xuICAgICAgaWYgKG9wdGlvbnMub3BlbkxpbmtzSW5OZXdXaW5kb3cpIHtcbiAgICAgICAgdGFyZ2V0ID0gJyB0YXJnZXQ9XCLCqEU5NUVibGFua1wiJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdCArICc8YSBocmVmPVwiJyArIGxuayArICdcIicgKyB0YXJnZXQgKyAnPicgKyBtZW50aW9ucyArICc8L2E+JztcbiAgICB9KTtcbiAgfVxuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2FuY2hvcnMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vLyB1cmwgYWxsb3dlZCBjaGFycyBbYS16XFxkXy5+Oi8/I1tdQCEkJicoKSorLDs9LV1cblxudmFyIHNpbXBsZVVSTFJlZ2V4ICA9IC8oWyp+X10rfFxcYikoKChodHRwcz98ZnRwfGRpY3QpOlxcL1xcL3x3d3dcXC4pW14nXCI+XFxzXSs/XFwuW14nXCI+XFxzXSs/KSgpKFxcMSk/KD89XFxzfCQpKD8hW1wiPD5dKS9naSxcbiAgICBzaW1wbGVVUkxSZWdleDIgPSAvKFsqfl9dK3xcXGIpKCgoaHR0cHM/fGZ0cHxkaWN0KTpcXC9cXC98d3d3XFwuKVteJ1wiPlxcc10rXFwuW14nXCI+XFxzXSs/KShbLiE/LCgpXFxbXFxdXSk/KFxcMSk/KD89XFxzfCQpKD8hW1wiPD5dKS9naSxcbiAgICBkZWxpbVVybFJlZ2V4ICAgPSAvKCk8KCgoaHR0cHM/fGZ0cHxkaWN0KTpcXC9cXC98d3d3XFwuKVteJ1wiPlxcc10rKSgpPigpL2dpLFxuICAgIHNpbXBsZU1haWxSZWdleCA9IC8oXnxcXHMpKD86bWFpbHRvOik/KFtBLVphLXowLTkhIyQlJicqKy0vPT9eX2B7fH1+Ll0rQFstYS16MC05XSsoXFwuWy1hLXowLTldKykqXFwuW2Etel0rKSg/PSR8XFxzKS9nbWksXG4gICAgZGVsaW1NYWlsUmVnZXggID0gLzwoKSg/Om1haWx0bzopPyhbLS5cXHddK0BbLWEtejAtOV0rKFxcLlstYS16MC05XSspKlxcLlthLXpdKyk+L2dpLFxuXG4gICAgcmVwbGFjZUxpbmsgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgJ3VzZSBzdHJpY3QnO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh3bSwgbGVhZGluZ01hZ2ljQ2hhcnMsIGxpbmssIG0yLCBtMywgdHJhaWxpbmdQdW5jdHVhdGlvbiwgdHJhaWxpbmdNYWdpY0NoYXJzKSB7XG4gICAgICAgIGxpbmsgPSBsaW5rLnJlcGxhY2Uoc2hvd2Rvd24uaGVscGVyLnJlZ2V4ZXMuYXN0ZXJpc2tEYXNoQW5kQ29sb24sIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuICAgICAgICB2YXIgbG5rVHh0ID0gbGluayxcbiAgICAgICAgICAgIGFwcGVuZCA9ICcnLFxuICAgICAgICAgICAgdGFyZ2V0ID0gJycsXG4gICAgICAgICAgICBsbWMgICAgPSBsZWFkaW5nTWFnaWNDaGFycyB8fCAnJyxcbiAgICAgICAgICAgIHRtYyAgICA9IHRyYWlsaW5nTWFnaWNDaGFycyB8fCAnJztcbiAgICAgICAgaWYgKC9ed3d3XFwuL2kudGVzdChsaW5rKSkge1xuICAgICAgICAgIGxpbmsgPSBsaW5rLnJlcGxhY2UoL153d3dcXC4vaSwgJ2h0dHA6Ly93d3cuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZVRyYWlsaW5nUHVuY3R1YXRpb25Gcm9tVVJMcyAmJiB0cmFpbGluZ1B1bmN0dWF0aW9uKSB7XG4gICAgICAgICAgYXBwZW5kID0gdHJhaWxpbmdQdW5jdHVhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5vcGVuTGlua3NJbk5ld1dpbmRvdykge1xuICAgICAgICAgIHRhcmdldCA9ICcgdGFyZ2V0PVwiwqhFOTVFYmxhbmtcIic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxtYyArICc8YSBocmVmPVwiJyArIGxpbmsgKyAnXCInICsgdGFyZ2V0ICsgJz4nICsgbG5rVHh0ICsgJzwvYT4nICsgYXBwZW5kICsgdG1jO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgcmVwbGFjZU1haWwgPSBmdW5jdGlvbiAob3B0aW9ucywgZ2xvYmFscykge1xuICAgICAgJ3VzZSBzdHJpY3QnO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh3aG9sZU1hdGNoLCBiLCBtYWlsKSB7XG4gICAgICAgIHZhciBocmVmID0gJ21haWx0bzonO1xuICAgICAgICBiID0gYiB8fCAnJztcbiAgICAgICAgbWFpbCA9IHNob3dkb3duLnN1YlBhcnNlcigndW5lc2NhcGVTcGVjaWFsQ2hhcnMnKShtYWlsLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZW5jb2RlRW1haWxzKSB7XG4gICAgICAgICAgaHJlZiA9IHNob3dkb3duLmhlbHBlci5lbmNvZGVFbWFpbEFkZHJlc3MoaHJlZiArIG1haWwpO1xuICAgICAgICAgIG1haWwgPSBzaG93ZG93bi5oZWxwZXIuZW5jb2RlRW1haWxBZGRyZXNzKG1haWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhyZWYgPSBocmVmICsgbWFpbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYiArICc8YSBocmVmPVwiJyArIGhyZWYgKyAnXCI+JyArIG1haWwgKyAnPC9hPic7XG4gICAgICB9O1xuICAgIH07XG5cbnNob3dkb3duLnN1YlBhcnNlcignYXV0b0xpbmtzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2F1dG9MaW5rcy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGRlbGltVXJsUmVnZXgsIHJlcGxhY2VMaW5rKG9wdGlvbnMpKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZShkZWxpbU1haWxSZWdleCwgcmVwbGFjZU1haWwob3B0aW9ucywgZ2xvYmFscykpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2F1dG9MaW5rcy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHJldHVybiB0ZXh0O1xufSk7XG5cbnNob3dkb3duLnN1YlBhcnNlcignc2ltcGxpZmllZEF1dG9MaW5rcycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIW9wdGlvbnMuc2ltcGxpZmllZEF1dG9MaW5rKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdzaW1wbGlmaWVkQXV0b0xpbmtzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIGlmIChvcHRpb25zLmV4Y2x1ZGVUcmFpbGluZ1B1bmN0dWF0aW9uRnJvbVVSTHMpIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHNpbXBsZVVSTFJlZ2V4MiwgcmVwbGFjZUxpbmsob3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2Uoc2ltcGxlVVJMUmVnZXgsIHJlcGxhY2VMaW5rKG9wdGlvbnMpKTtcbiAgfVxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHNpbXBsZU1haWxSZWdleCwgcmVwbGFjZU1haWwob3B0aW9ucywgZ2xvYmFscykpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ3NpbXBsaWZpZWRBdXRvTGlua3MuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogVGhlc2UgYXJlIGFsbCB0aGUgdHJhbnNmb3JtYXRpb25zIHRoYXQgZm9ybSBibG9jay1sZXZlbFxuICogdGFncyBsaWtlIHBhcmFncmFwaHMsIGhlYWRlcnMsIGFuZCBsaXN0IGl0ZW1zLlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2Jsb2NrR2FtdXQnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnYmxvY2tHYW11dC5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyB3ZSBwYXJzZSBibG9ja3F1b3RlcyBmaXJzdCBzbyB0aGF0IHdlIGNhbiBoYXZlIGhlYWRpbmdzIGFuZCBocnNcbiAgLy8gaW5zaWRlIGJsb2NrcXVvdGVzXG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2Jsb2NrUXVvdGVzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2hlYWRlcnMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBEbyBIb3Jpem9udGFsIFJ1bGVzOlxuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdob3Jpem9udGFsUnVsZScpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2xpc3RzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2NvZGVCbG9ja3MnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcigndGFibGVzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gV2UgYWxyZWFkeSByYW4gX0hhc2hIVE1MQmxvY2tzKCkgYmVmb3JlLCBpbiBNYXJrZG93bigpLCBidXQgdGhhdFxuICAvLyB3YXMgdG8gZXNjYXBlIHJhdyBIVE1MIGluIHRoZSBvcmlnaW5hbCBNYXJrZG93biBzb3VyY2UuIFRoaXMgdGltZSxcbiAgLy8gd2UncmUgZXNjYXBpbmcgdGhlIG1hcmt1cCB3ZSd2ZSBqdXN0IGNyZWF0ZWQsIHNvIHRoYXQgd2UgZG9uJ3Qgd3JhcFxuICAvLyA8cD4gdGFncyBhcm91bmQgYmxvY2stbGV2ZWwgdGFncy5cbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignaGFzaEhUTUxCbG9ja3MnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcigncGFyYWdyYXBocycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2Jsb2NrR2FtdXQuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignYmxvY2tRdW90ZXMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnYmxvY2tRdW90ZXMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gYWRkIGEgY291cGxlIGV4dHJhIGxpbmVzIGFmdGVyIHRoZSB0ZXh0IGFuZCBlbmR0ZXh0IG1hcmtcbiAgdGV4dCA9IHRleHQgKyAnXFxuXFxuJztcblxuICB2YXIgcmd4ID0gLyheIHswLDN9PlsgXFx0XT8uK1xcbiguK1xcbikqXFxuKikrL2dtO1xuXG4gIGlmIChvcHRpb25zLnNwbGl0QWRqYWNlbnRCbG9ja3F1b3Rlcykge1xuICAgIHJneCA9IC9eIHswLDN9PltcXHNcXFNdKj8oPzpcXG5cXG4pL2dtO1xuICB9XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZShyZ3gsIGZ1bmN0aW9uIChicSkge1xuICAgIC8vIGF0dGFja2xhYjogaGFjayBhcm91bmQgS29ucXVlcm9yIDMuNS40IGJ1ZzpcbiAgICAvLyBcIi0tLS0tLS0tLS1idWdcIi5yZXBsYWNlKC9eLS9nLFwiXCIpID09IFwiYnVnXCJcbiAgICBicSA9IGJxLnJlcGxhY2UoL15bIFxcdF0qPlsgXFx0XT8vZ20sICcnKTsgLy8gdHJpbSBvbmUgbGV2ZWwgb2YgcXVvdGluZ1xuXG4gICAgLy8gYXR0YWNrbGFiOiBjbGVhbiB1cCBoYWNrXG4gICAgYnEgPSBicS5yZXBsYWNlKC/CqDAvZywgJycpO1xuXG4gICAgYnEgPSBicS5yZXBsYWNlKC9eWyBcXHRdKyQvZ20sICcnKTsgLy8gdHJpbSB3aGl0ZXNwYWNlLW9ubHkgbGluZXNcbiAgICBicSA9IHNob3dkb3duLnN1YlBhcnNlcignZ2l0aHViQ29kZUJsb2NrcycpKGJxLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICBicSA9IHNob3dkb3duLnN1YlBhcnNlcignYmxvY2tHYW11dCcpKGJxLCBvcHRpb25zLCBnbG9iYWxzKTsgLy8gcmVjdXJzZVxuXG4gICAgYnEgPSBicS5yZXBsYWNlKC8oXnxcXG4pL2csICckMSAgJyk7XG4gICAgLy8gVGhlc2UgbGVhZGluZyBzcGFjZXMgc2NyZXcgd2l0aCA8cHJlPiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIGZpeCB0aGF0OlxuICAgIGJxID0gYnEucmVwbGFjZSgvKFxccyo8cHJlPlteXFxyXSs/PFxcL3ByZT4pL2dtLCBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbTEpIHtcbiAgICAgIHZhciBwcmUgPSBtMTtcbiAgICAgIC8vIGF0dGFja2xhYjogaGFjayBhcm91bmQgS29ucXVlcm9yIDMuNS40IGJ1ZzpcbiAgICAgIHByZSA9IHByZS5yZXBsYWNlKC9eICAvbWcsICfCqDAnKTtcbiAgICAgIHByZSA9IHByZS5yZXBsYWNlKC/CqDAvZywgJycpO1xuICAgICAgcmV0dXJuIHByZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hCbG9jaycpKCc8YmxvY2txdW90ZT5cXG4nICsgYnEgKyAnXFxuPC9ibG9ja3F1b3RlPicsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB9KTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdibG9ja1F1b3Rlcy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogUHJvY2VzcyBNYXJrZG93biBgPHByZT48Y29kZT5gIGJsb2Nrcy5cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdjb2RlQmxvY2tzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2NvZGVCbG9ja3MuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gc2VudGluZWwgd29ya2Fyb3VuZHMgZm9yIGxhY2sgb2YgXFxBIGFuZCBcXFosIHNhZmFyaVxca2h0bWwgYnVnXG4gIHRleHQgKz0gJ8KoMCc7XG5cbiAgdmFyIHBhdHRlcm4gPSAvKD86XFxuXFxufF4pKCg/Oig/OlsgXXs0fXxcXHQpLipcXG4rKSspKFxcbipbIF17MCwzfVteIFxcdFxcbl18KD89wqgwKSkvZztcbiAgdGV4dCA9IHRleHQucmVwbGFjZShwYXR0ZXJuLCBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbTEsIG0yKSB7XG4gICAgdmFyIGNvZGVibG9jayA9IG0xLFxuICAgICAgICBuZXh0Q2hhciA9IG0yLFxuICAgICAgICBlbmQgPSAnXFxuJztcblxuICAgIGNvZGVibG9jayA9IHNob3dkb3duLnN1YlBhcnNlcignb3V0ZGVudCcpKGNvZGVibG9jaywgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgY29kZWJsb2NrID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdlbmNvZGVDb2RlJykoY29kZWJsb2NrLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICBjb2RlYmxvY2sgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2RldGFiJykoY29kZWJsb2NrLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICBjb2RlYmxvY2sgPSBjb2RlYmxvY2sucmVwbGFjZSgvXlxcbisvZywgJycpOyAvLyB0cmltIGxlYWRpbmcgbmV3bGluZXNcbiAgICBjb2RlYmxvY2sgPSBjb2RlYmxvY2sucmVwbGFjZSgvXFxuKyQvZywgJycpOyAvLyB0cmltIHRyYWlsaW5nIG5ld2xpbmVzXG5cbiAgICBpZiAob3B0aW9ucy5vbWl0RXh0cmFXTEluQ29kZUJsb2Nrcykge1xuICAgICAgZW5kID0gJyc7XG4gICAgfVxuXG4gICAgY29kZWJsb2NrID0gJzxwcmU+PGNvZGU+JyArIGNvZGVibG9jayArIGVuZCArICc8L2NvZGU+PC9wcmU+JztcblxuICAgIHJldHVybiBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hCbG9jaycpKGNvZGVibG9jaywgb3B0aW9ucywgZ2xvYmFscykgKyBuZXh0Q2hhcjtcbiAgfSk7XG5cbiAgLy8gc3RyaXAgc2VudGluZWxcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvwqgwLywgJycpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2NvZGVCbG9ja3MuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqXG4gKiAgICogIEJhY2t0aWNrIHF1b3RlcyBhcmUgdXNlZCBmb3IgPGNvZGU+PC9jb2RlPiBzcGFucy5cbiAqXG4gKiAgICogIFlvdSBjYW4gdXNlIG11bHRpcGxlIGJhY2t0aWNrcyBhcyB0aGUgZGVsaW1pdGVycyBpZiB5b3Ugd2FudCB0b1xuICogICAgIGluY2x1ZGUgbGl0ZXJhbCBiYWNrdGlja3MgaW4gdGhlIGNvZGUgc3Bhbi4gU28sIHRoaXMgaW5wdXQ6XG4gKlxuICogICAgICAgICBKdXN0IHR5cGUgYGBmb28gYGJhcmAgYmF6YGAgYXQgdGhlIHByb21wdC5cbiAqXG4gKiAgICAgICBXaWxsIHRyYW5zbGF0ZSB0bzpcbiAqXG4gKiAgICAgICAgIDxwPkp1c3QgdHlwZSA8Y29kZT5mb28gYGJhcmAgYmF6PC9jb2RlPiBhdCB0aGUgcHJvbXB0LjwvcD5cbiAqXG4gKiAgICBUaGVyZSdzIG5vIGFyYml0cmFyeSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGJhY2t0aWNrcyB5b3VcbiAqICAgIGNhbiB1c2UgYXMgZGVsaW10ZXJzLiBJZiB5b3UgbmVlZCB0aHJlZSBjb25zZWN1dGl2ZSBiYWNrdGlja3NcbiAqICAgIGluIHlvdXIgY29kZSwgdXNlIGZvdXIgZm9yIGRlbGltaXRlcnMsIGV0Yy5cbiAqXG4gKiAgKiAgWW91IGNhbiB1c2Ugc3BhY2VzIHRvIGdldCBsaXRlcmFsIGJhY2t0aWNrcyBhdCB0aGUgZWRnZXM6XG4gKlxuICogICAgICAgICAuLi4gdHlwZSBgYCBgYmFyYCBgYCAuLi5cbiAqXG4gKiAgICAgICBUdXJucyB0bzpcbiAqXG4gKiAgICAgICAgIC4uLiB0eXBlIDxjb2RlPmBiYXJgPC9jb2RlPiAuLi5cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdjb2RlU3BhbnMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnY29kZVNwYW5zLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIGlmICh0eXBlb2YodGV4dCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGV4dCA9ICcnO1xuICB9XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhefFteXFxcXF0pKGArKShbXlxccl0qP1teYF0pXFwyKD8hYCkvZ20sXG4gICAgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG0xLCBtMiwgbTMpIHtcbiAgICAgIHZhciBjID0gbTM7XG4gICAgICBjID0gYy5yZXBsYWNlKC9eKFsgXFx0XSopL2csICcnKTtcdC8vIGxlYWRpbmcgd2hpdGVzcGFjZVxuICAgICAgYyA9IGMucmVwbGFjZSgvWyBcXHRdKiQvZywgJycpO1x0Ly8gdHJhaWxpbmcgd2hpdGVzcGFjZVxuICAgICAgYyA9IHNob3dkb3duLnN1YlBhcnNlcignZW5jb2RlQ29kZScpKGMsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgYyA9IG0xICsgJzxjb2RlPicgKyBjICsgJzwvY29kZT4nO1xuICAgICAgYyA9IHNob3dkb3duLnN1YlBhcnNlcignaGFzaEhUTUxTcGFucycpKGMsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICApO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2NvZGVTcGFucy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBIVE1MIGRvY3VtZW50IGZyb20gdGhlIHByb2Nlc3NlZCBtYXJrZG93blxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2NvbXBsZXRlSFRNTERvY3VtZW50JywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmICghb3B0aW9ucy5jb21wbGV0ZUhUTUxEb2N1bWVudCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnY29tcGxldGVIVE1MRG9jdW1lbnQuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdmFyIGRvY3R5cGUgPSAnaHRtbCcsXG4gICAgICBkb2N0eXBlUGFyc2VkID0gJzwhRE9DVFlQRSBIVE1MPlxcbicsXG4gICAgICB0aXRsZSA9ICcnLFxuICAgICAgY2hhcnNldCA9ICc8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cXG4nLFxuICAgICAgbGFuZyA9ICcnLFxuICAgICAgbWV0YWRhdGEgPSAnJztcblxuICBpZiAodHlwZW9mIGdsb2JhbHMubWV0YWRhdGEucGFyc2VkLmRvY3R5cGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZG9jdHlwZVBhcnNlZCA9ICc8IURPQ1RZUEUgJyArICBnbG9iYWxzLm1ldGFkYXRhLnBhcnNlZC5kb2N0eXBlICsgJz5cXG4nO1xuICAgIGRvY3R5cGUgPSBnbG9iYWxzLm1ldGFkYXRhLnBhcnNlZC5kb2N0eXBlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoZG9jdHlwZSA9PT0gJ2h0bWwnIHx8IGRvY3R5cGUgPT09ICdodG1sNScpIHtcbiAgICAgIGNoYXJzZXQgPSAnPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+JztcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBtZXRhIGluIGdsb2JhbHMubWV0YWRhdGEucGFyc2VkKSB7XG4gICAgaWYgKGdsb2JhbHMubWV0YWRhdGEucGFyc2VkLmhhc093blByb3BlcnR5KG1ldGEpKSB7XG4gICAgICBzd2l0Y2ggKG1ldGEudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdkb2N0eXBlJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd0aXRsZSc6XG4gICAgICAgICAgdGl0bGUgPSAnPHRpdGxlPicgKyAgZ2xvYmFscy5tZXRhZGF0YS5wYXJzZWQudGl0bGUgKyAnPC90aXRsZT5cXG4nO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NoYXJzZXQnOlxuICAgICAgICAgIGlmIChkb2N0eXBlID09PSAnaHRtbCcgfHwgZG9jdHlwZSA9PT0gJ2h0bWw1Jykge1xuICAgICAgICAgICAgY2hhcnNldCA9ICc8bWV0YSBjaGFyc2V0PVwiJyArIGdsb2JhbHMubWV0YWRhdGEucGFyc2VkLmNoYXJzZXQgKyAnXCI+XFxuJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hhcnNldCA9ICc8bWV0YSBuYW1lPVwiY2hhcnNldFwiIGNvbnRlbnQ9XCInICsgZ2xvYmFscy5tZXRhZGF0YS5wYXJzZWQuY2hhcnNldCArICdcIj5cXG4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdsYW5ndWFnZSc6XG4gICAgICAgIGNhc2UgJ2xhbmcnOlxuICAgICAgICAgIGxhbmcgPSAnIGxhbmc9XCInICsgZ2xvYmFscy5tZXRhZGF0YS5wYXJzZWRbbWV0YV0gKyAnXCInO1xuICAgICAgICAgIG1ldGFkYXRhICs9ICc8bWV0YSBuYW1lPVwiJyArIG1ldGEgKyAnXCIgY29udGVudD1cIicgKyBnbG9iYWxzLm1ldGFkYXRhLnBhcnNlZFttZXRhXSArICdcIj5cXG4nO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgbWV0YWRhdGEgKz0gJzxtZXRhIG5hbWU9XCInICsgbWV0YSArICdcIiBjb250ZW50PVwiJyArIGdsb2JhbHMubWV0YWRhdGEucGFyc2VkW21ldGFdICsgJ1wiPlxcbic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGV4dCA9IGRvY3R5cGVQYXJzZWQgKyAnPGh0bWwnICsgbGFuZyArICc+XFxuPGhlYWQ+XFxuJyArIHRpdGxlICsgY2hhcnNldCArIG1ldGFkYXRhICsgJzwvaGVhZD5cXG48Ym9keT5cXG4nICsgdGV4dC50cmltKCkgKyAnXFxuPC9ib2R5PlxcbjwvaHRtbD4nO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2NvbXBsZXRlSFRNTERvY3VtZW50LmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBDb252ZXJ0IGFsbCB0YWJzIHRvIHNwYWNlc1xuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2RldGFiJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdkZXRhYi5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBleHBhbmQgZmlyc3Qgbi0xIHRhYnNcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFx0KD89XFx0KS9nLCAnICAgICcpOyAvLyBnX3RhYl93aWR0aFxuXG4gIC8vIHJlcGxhY2UgdGhlIG50aCB3aXRoIHR3byBzZW50aW5lbHNcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFx0L2csICfCqEHCqEInKTtcblxuICAvLyB1c2UgdGhlIHNlbnRpbmVsIHRvIGFuY2hvciBvdXIgcmVnZXggc28gaXQgZG9lc24ndCBleHBsb2RlXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoQiguKz8pwqhBL2csIGZ1bmN0aW9uICh3aG9sZU1hdGNoLCBtMSkge1xuICAgIHZhciBsZWFkaW5nVGV4dCA9IG0xLFxuICAgICAgICBudW1TcGFjZXMgPSA0IC0gbGVhZGluZ1RleHQubGVuZ3RoICUgNDsgIC8vIGdfdGFiX3dpZHRoXG5cbiAgICAvLyB0aGVyZSAqbXVzdCogYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXM6XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1TcGFjZXM7IGkrKykge1xuICAgICAgbGVhZGluZ1RleHQgKz0gJyAnO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFkaW5nVGV4dDtcbiAgfSk7XG5cbiAgLy8gY2xlYW4gdXAgc2VudGluZWxzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoQS9nLCAnICAgICcpOyAgLy8gZ190YWJfd2lkdGhcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvwqhCL2csICcnKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdkZXRhYi5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignZWxsaXBzaXMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZWxsaXBzaXMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwuXFwuXFwuL2csICfigKYnKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdlbGxpcHNpcy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBUdXJuIGVtb2ppIGNvZGVzIGludG8gZW1vamlzXG4gKlxuICogTGlzdCBvZiBzdXBwb3J0ZWQgZW1vamlzOiBodHRwczovL2dpdGh1Yi5jb20vc2hvd2Rvd25qcy9zaG93ZG93bi93aWtpL0Vtb2ppc1xuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2Vtb2ppJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmICghb3B0aW9ucy5lbW9qaSkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZW1vamkuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdmFyIGVtb2ppUmd4ID0gLzooW1xcU10rPyk6L2c7XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZShlbW9qaVJneCwgZnVuY3Rpb24gKHdtLCBlbW9qaUNvZGUpIHtcbiAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmVtb2ppcy5oYXNPd25Qcm9wZXJ0eShlbW9qaUNvZGUpKSB7XG4gICAgICByZXR1cm4gc2hvd2Rvd24uaGVscGVyLmVtb2ppc1tlbW9qaUNvZGVdO1xuICAgIH1cbiAgICByZXR1cm4gd207XG4gIH0pO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2Vtb2ppLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIFNtYXJ0IHByb2Nlc3NpbmcgZm9yIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIHRoYXQgbmVlZCB0byBiZSBlbmNvZGVkLlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUFtcHNBbmRBbmdsZXMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2VuY29kZUFtcHNBbmRBbmdsZXMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gQW1wZXJzYW5kLWVuY29kaW5nIGJhc2VkIGVudGlyZWx5IG9uIE5hdCBJcm9ucydzIEFtcHV0YXRvciBNVCBwbHVnaW46XG4gIC8vIGh0dHA6Ly9idW1wcG8ubmV0L3Byb2plY3RzL2FtcHV0YXRvci9cbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvJig/ISM/W3hYXT8oPzpbMC05YS1mQS1GXSt8XFx3Kyk7KS9nLCAnJmFtcDsnKTtcblxuICAvLyBFbmNvZGUgbmFrZWQgPCdzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLzwoPyFbYS16XFwvPyQhXSkvZ2ksICcmbHQ7Jyk7XG5cbiAgLy8gRW5jb2RlIDxcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvPC9nLCAnJmx0OycpO1xuXG4gIC8vIEVuY29kZSA+XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdlbmNvZGVBbXBzQW5kQW5nbGVzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdHJpbmcsIHdpdGggYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgZm9sbG93aW5nIGJhY2tzbGFzaCBlc2NhcGUgc2VxdWVuY2VzLlxuICpcbiAqIGF0dGFja2xhYjogVGhlIHBvbGl0ZSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoIHRoZSBuZXcgZXNjYXBlQ2hhcmFjdGVycygpIGZ1bmN0aW9uOlxuICpcbiAqICAgIHRleHQgPSBlc2NhcGVDaGFyYWN0ZXJzKHRleHQsXCJcXFxcXCIsdHJ1ZSk7XG4gKiAgICB0ZXh0ID0gZXNjYXBlQ2hhcmFjdGVycyh0ZXh0LFwiYCpfe31bXSgpPiMrLS4hXCIsdHJ1ZSk7XG4gKlxuICogLi4uYnV0IHdlJ3JlIHNpZGVzdGVwcGluZyBpdHMgdXNlIG9mIHRoZSAoc2xvdykgUmVnRXhwIGNvbnN0cnVjdG9yXG4gKiBhcyBhbiBvcHRpbWl6YXRpb24gZm9yIEZpcmVmb3guICBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGEgTE9ULlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUJhY2tzbGFzaEVzY2FwZXMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2VuY29kZUJhY2tzbGFzaEVzY2FwZXMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxcXChcXFxcKS9nLCBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxcXChbYCpfe31cXFtcXF0oKT4jKy4hfj18LV0pL2csIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2VuY29kZUJhY2tzbGFzaEVzY2FwZXMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIEVuY29kZS9lc2NhcGUgY2VydGFpbiBjaGFyYWN0ZXJzIGluc2lkZSBNYXJrZG93biBjb2RlIHJ1bnMuXG4gKiBUaGUgcG9pbnQgaXMgdGhhdCBpbiBjb2RlLCB0aGVzZSBjaGFyYWN0ZXJzIGFyZSBsaXRlcmFscyxcbiAqIGFuZCBsb3NlIHRoZWlyIHNwZWNpYWwgTWFya2Rvd24gbWVhbmluZ3MuXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignZW5jb2RlQ29kZScsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdlbmNvZGVDb2RlLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIEVuY29kZSBhbGwgYW1wZXJzYW5kczsgSFRNTCBlbnRpdGllcyBhcmUgbm90XG4gIC8vIGVudGl0aWVzIHdpdGhpbiBhIE1hcmtkb3duIGNvZGUgc3Bhbi5cbiAgdGV4dCA9IHRleHRcbiAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAvLyBEbyB0aGUgYW5nbGUgYnJhY2tldCBzb25nIGFuZCBkYW5jZTpcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAvLyBOb3csIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG1hZ2ljIGluIE1hcmtkb3duOlxuICAgIC5yZXBsYWNlKC8oWypfe31cXFtcXF1cXFxcPX4tXSkvZywgc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZW5jb2RlQ29kZS5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogV2l0aGluIHRhZ3MgLS0gbWVhbmluZyBiZXR3ZWVuIDwgYW5kID4gLS0gZW5jb2RlIFtcXCBgICogXyB+ID1dIHNvIHRoZXlcbiAqIGRvbid0IGNvbmZsaWN0IHdpdGggdGhlaXIgdXNlIGluIE1hcmtkb3duIGZvciBjb2RlLCBpdGFsaWNzIGFuZCBzdHJvbmcuXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignZXNjYXBlU3BlY2lhbENoYXJzV2l0aGluVGFnQXR0cmlidXRlcycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZXNjYXBlU3BlY2lhbENoYXJzV2l0aGluVGFnQXR0cmlidXRlcy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBCdWlsZCBhIHJlZ2V4IHRvIGZpbmQgSFRNTCB0YWdzLlxuICB2YXIgdGFncyAgICAgPSAvPFxcLz9bYS16XFxkXzotXSsoPzpbXFxzXStbXFxzXFxTXSs/KT8+L2dpLFxuICAgICAgY29tbWVudHMgPSAvPCEoLS0oPzooPzpbXj4tXXwtW14+XSkoPzpbXi1dfC1bXi1dKSopLS0pPi9naTtcblxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHRhZ3MsIGZ1bmN0aW9uICh3aG9sZU1hdGNoKSB7XG4gICAgcmV0dXJuIHdob2xlTWF0Y2hcbiAgICAgIC5yZXBsYWNlKC8oLik8XFwvP2NvZGU+KD89LikvZywgJyQxYCcpXG4gICAgICAucmVwbGFjZSgvKFtcXFxcYCpffj18XSkvZywgc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG4gIH0pO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoY29tbWVudHMsIGZ1bmN0aW9uICh3aG9sZU1hdGNoKSB7XG4gICAgcmV0dXJuIHdob2xlTWF0Y2hcbiAgICAgIC5yZXBsYWNlKC8oW1xcXFxgKl9+PXxdKS9nLCBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcbiAgfSk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZXNjYXBlU3BlY2lhbENoYXJzV2l0aGluVGFnQXR0cmlidXRlcy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogSGFuZGxlIGdpdGh1YiBjb2RlYmxvY2tzIHByaW9yIHRvIHJ1bm5pbmcgSGFzaEhUTUwgc28gdGhhdFxuICogSFRNTCBjb250YWluZWQgd2l0aGluIHRoZSBjb2RlYmxvY2sgZ2V0cyBlc2NhcGVkIHByb3Blcmx5XG4gKiBFeGFtcGxlOlxuICogYGBgcnVieVxuICogICAgIGRlZiBoZWxsb193b3JsZCh4KVxuICogICAgICAgcHV0cyBcIkhlbGxvLCAje3h9XCJcbiAqICAgICBlbmRcbiAqIGBgYFxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2dpdGh1YkNvZGVCbG9ja3MnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gZWFybHkgZXhpdCBpZiBvcHRpb24gaXMgbm90IGVuYWJsZWRcbiAgaWYgKCFvcHRpb25zLmdoQ29kZUJsb2Nrcykge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZ2l0aHViQ29kZUJsb2Nrcy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB0ZXh0ICs9ICfCqDAnO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyg/Ol58XFxuKSg/OiB7MCwzfSkoYGBgK3x+fn4rKSg/OiAqKShbXlxcc2B+XSopXFxuKFtcXHNcXFNdKj8pXFxuKD86IHswLDN9KVxcMS9nLCBmdW5jdGlvbiAod2hvbGVNYXRjaCwgZGVsaW0sIGxhbmd1YWdlLCBjb2RlYmxvY2spIHtcbiAgICB2YXIgZW5kID0gKG9wdGlvbnMub21pdEV4dHJhV0xJbkNvZGVCbG9ja3MpID8gJycgOiAnXFxuJztcblxuICAgIC8vIEZpcnN0IHBhcnNlIHRoZSBnaXRodWIgY29kZSBibG9ja1xuICAgIGNvZGVibG9jayA9IHNob3dkb3duLnN1YlBhcnNlcignZW5jb2RlQ29kZScpKGNvZGVibG9jaywgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgY29kZWJsb2NrID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdkZXRhYicpKGNvZGVibG9jaywgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgY29kZWJsb2NrID0gY29kZWJsb2NrLnJlcGxhY2UoL15cXG4rL2csICcnKTsgLy8gdHJpbSBsZWFkaW5nIG5ld2xpbmVzXG4gICAgY29kZWJsb2NrID0gY29kZWJsb2NrLnJlcGxhY2UoL1xcbiskL2csICcnKTsgLy8gdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlXG5cbiAgICBjb2RlYmxvY2sgPSAnPHByZT48Y29kZScgKyAobGFuZ3VhZ2UgPyAnIGNsYXNzPVwiJyArIGxhbmd1YWdlICsgJyBsYW5ndWFnZS0nICsgbGFuZ3VhZ2UgKyAnXCInIDogJycpICsgJz4nICsgY29kZWJsb2NrICsgZW5kICsgJzwvY29kZT48L3ByZT4nO1xuXG4gICAgY29kZWJsb2NrID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoQmxvY2snKShjb2RlYmxvY2ssIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gICAgLy8gU2luY2UgR0hDb2RlYmxvY2tzIGNhbiBiZSBmYWxzZSBwb3NpdGl2ZXMsIHdlIG5lZWQgdG9cbiAgICAvLyBzdG9yZSB0aGUgcHJpbWl0aXZlIHRleHQgYW5kIHRoZSBwYXJzZWQgdGV4dCBpbiBhIGdsb2JhbCB2YXIsXG4gICAgLy8gYW5kIHRoZW4gcmV0dXJuIGEgdG9rZW5cbiAgICByZXR1cm4gJ1xcblxcbsKoRycgKyAoZ2xvYmFscy5naENvZGVCbG9ja3MucHVzaCh7dGV4dDogd2hvbGVNYXRjaCwgY29kZWJsb2NrOiBjb2RlYmxvY2t9KSAtIDEpICsgJ0dcXG5cXG4nO1xuICB9KTtcblxuICAvLyBhdHRhY2tsYWI6IHN0cmlwIHNlbnRpbmVsXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoMC8sICcnKTtcblxuICByZXR1cm4gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdnaXRodWJDb2RlQmxvY2tzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hCbG9jaycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaGFzaEJsb2NrLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXlxcbit8XFxuKyQpL2csICcnKTtcbiAgdGV4dCA9ICdcXG5cXG7CqEsnICsgKGdsb2JhbHMuZ0h0bWxCbG9ja3MucHVzaCh0ZXh0KSAtIDEpICsgJ0tcXG5cXG4nO1xuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoYXNoQmxvY2suYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIEhhc2ggYW5kIGVzY2FwZSA8Y29kZT4gZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGJlIHBhcnNlZCBhcyBtYXJrZG93blxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hDb2RlVGFncycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaGFzaENvZGVUYWdzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHZhciByZXBGdW5jID0gZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG1hdGNoLCBsZWZ0LCByaWdodCkge1xuICAgIHZhciBjb2RlYmxvY2sgPSBsZWZ0ICsgc2hvd2Rvd24uc3ViUGFyc2VyKCdlbmNvZGVDb2RlJykobWF0Y2gsIG9wdGlvbnMsIGdsb2JhbHMpICsgcmlnaHQ7XG4gICAgcmV0dXJuICfCqEMnICsgKGdsb2JhbHMuZ0h0bWxTcGFucy5wdXNoKGNvZGVibG9jaykgLSAxKSArICdDJztcbiAgfTtcblxuICAvLyBIYXNoIG5ha2VkIDxjb2RlPlxuICB0ZXh0ID0gc2hvd2Rvd24uaGVscGVyLnJlcGxhY2VSZWN1cnNpdmVSZWdFeHAodGV4dCwgcmVwRnVuYywgJzxjb2RlXFxcXGJbXj5dKj4nLCAnPC9jb2RlPicsICdnaW0nKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoYXNoQ29kZVRhZ3MuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hFbGVtZW50JywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHJldHVybiBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbTEpIHtcbiAgICB2YXIgYmxvY2tUZXh0ID0gbTE7XG5cbiAgICAvLyBVbmRvIGRvdWJsZSBsaW5lc1xuICAgIGJsb2NrVGV4dCA9IGJsb2NrVGV4dC5yZXBsYWNlKC9cXG5cXG4vZywgJ1xcbicpO1xuICAgIGJsb2NrVGV4dCA9IGJsb2NrVGV4dC5yZXBsYWNlKC9eXFxuLywgJycpO1xuXG4gICAgLy8gc3RyaXAgdHJhaWxpbmcgYmxhbmsgbGluZXNcbiAgICBibG9ja1RleHQgPSBibG9ja1RleHQucmVwbGFjZSgvXFxuKyQvZywgJycpO1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgZWxlbWVudCB0ZXh0IHdpdGggYSBtYXJrZXIgKFwiwqhLeEtcIiB3aGVyZSB4IGlzIGl0cyBrZXkpXG4gICAgYmxvY2tUZXh0ID0gJ1xcblxcbsKoSycgKyAoZ2xvYmFscy5nSHRtbEJsb2Nrcy5wdXNoKGJsb2NrVGV4dCkgLSAxKSArICdLXFxuXFxuJztcblxuICAgIHJldHVybiBibG9ja1RleHQ7XG4gIH07XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hIVE1MQmxvY2tzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoYXNoSFRNTEJsb2Nrcy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB2YXIgYmxvY2tUYWdzID0gW1xuICAgICAgICAncHJlJyxcbiAgICAgICAgJ2RpdicsXG4gICAgICAgICdoMScsXG4gICAgICAgICdoMicsXG4gICAgICAgICdoMycsXG4gICAgICAgICdoNCcsXG4gICAgICAgICdoNScsXG4gICAgICAgICdoNicsXG4gICAgICAgICdibG9ja3F1b3RlJyxcbiAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgJ2RsJyxcbiAgICAgICAgJ29sJyxcbiAgICAgICAgJ3VsJyxcbiAgICAgICAgJ3NjcmlwdCcsXG4gICAgICAgICdub3NjcmlwdCcsXG4gICAgICAgICdmb3JtJyxcbiAgICAgICAgJ2ZpZWxkc2V0JyxcbiAgICAgICAgJ2lmcmFtZScsXG4gICAgICAgICdtYXRoJyxcbiAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgJ3NlY3Rpb24nLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICduYXYnLFxuICAgICAgICAnYXJ0aWNsZScsXG4gICAgICAgICdhc2lkZScsXG4gICAgICAgICdhZGRyZXNzJyxcbiAgICAgICAgJ2F1ZGlvJyxcbiAgICAgICAgJ2NhbnZhcycsXG4gICAgICAgICdmaWd1cmUnLFxuICAgICAgICAnaGdyb3VwJyxcbiAgICAgICAgJ291dHB1dCcsXG4gICAgICAgICd2aWRlbycsXG4gICAgICAgICdwJ1xuICAgICAgXSxcbiAgICAgIHJlcEZ1bmMgPSBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbWF0Y2gsIGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHZhciB0eHQgPSB3aG9sZU1hdGNoO1xuICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGh0bWwgZWxlbWVudCBpcyBtYXJrZWQgYXMgbWFya2Rvd25cbiAgICAgICAgLy8gaWYgc28sIGl0J3MgY29udGVudHMgc2hvdWxkIGJlIHBhcnNlZCBhcyBtYXJrZG93blxuICAgICAgICBpZiAobGVmdC5zZWFyY2goL1xcYm1hcmtkb3duXFxiLykgIT09IC0xKSB7XG4gICAgICAgICAgdHh0ID0gbGVmdCArIGdsb2JhbHMuY29udmVydGVyLm1ha2VIdG1sKG1hdGNoKSArIHJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnXFxuXFxuwqhLJyArIChnbG9iYWxzLmdIdG1sQmxvY2tzLnB1c2godHh0KSAtIDEpICsgJ0tcXG5cXG4nO1xuICAgICAgfTtcblxuICBpZiAob3B0aW9ucy5iYWNrc2xhc2hFc2NhcGVzSFRNTFRhZ3MpIHtcbiAgICAvLyBlbmNvZGUgYmFja3NsYXNoIGVzY2FwZWQgSFRNTCB0YWdzXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxcXDwoXFwvP1tePl0rPyk+L2csIGZ1bmN0aW9uICh3bSwgaW5zaWRlKSB7XG4gICAgICByZXR1cm4gJyZsdDsnICsgaW5zaWRlICsgJyZndDsnO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gaGFzaCBIVE1MIEJsb2Nrc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrVGFncy5sZW5ndGg7ICsraSkge1xuXG4gICAgdmFyIG9wVGFnUG9zLFxuICAgICAgICByZ3gxICAgICA9IG5ldyBSZWdFeHAoJ14gezAsM30oPCcgKyBibG9ja1RhZ3NbaV0gKyAnXFxcXGJbXj5dKj4pJywgJ2ltJyksXG4gICAgICAgIHBhdExlZnQgID0gJzwnICsgYmxvY2tUYWdzW2ldICsgJ1xcXFxiW14+XSo+JyxcbiAgICAgICAgcGF0UmlnaHQgPSAnPC8nICsgYmxvY2tUYWdzW2ldICsgJz4nO1xuICAgIC8vIDEuIExvb2sgZm9yIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb3BlbmluZyBIVE1MIHRhZyBpbiB0aGUgdGV4dFxuICAgIHdoaWxlICgob3BUYWdQb3MgPSBzaG93ZG93bi5oZWxwZXIucmVnZXhJbmRleE9mKHRleHQsIHJneDEpKSAhPT0gLTEpIHtcblxuICAgICAgLy8gaWYgdGhlIEhUTUwgdGFnIGlzIFxcIGVzY2FwZWQsIHdlIG5lZWQgdG8gZXNjYXBlIGl0IGFuZCBicmVha1xuXG5cbiAgICAgIC8vMi4gU3BsaXQgdGhlIHRleHQgaW4gdGhhdCBwb3NpdGlvblxuICAgICAgdmFyIHN1YlRleHRzID0gc2hvd2Rvd24uaGVscGVyLnNwbGl0QXRJbmRleCh0ZXh0LCBvcFRhZ1BvcyksXG4gICAgICAvLzMuIE1hdGNoIHJlY3Vyc2l2ZWx5XG4gICAgICAgICAgbmV3U3ViVGV4dDEgPSBzaG93ZG93bi5oZWxwZXIucmVwbGFjZVJlY3Vyc2l2ZVJlZ0V4cChzdWJUZXh0c1sxXSwgcmVwRnVuYywgcGF0TGVmdCwgcGF0UmlnaHQsICdpbScpO1xuXG4gICAgICAvLyBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3BcbiAgICAgIGlmIChuZXdTdWJUZXh0MSA9PT0gc3ViVGV4dHNbMV0pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0ZXh0ID0gc3ViVGV4dHNbMF0uY29uY2F0KG5ld1N1YlRleHQxKTtcbiAgICB9XG4gIH1cbiAgLy8gSFIgU1BFQ0lBTCBDQVNFXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhcXG4gezAsM30oPChocilcXGIoW148Pl0pKj9cXC8/PilbIFxcdF0qKD89XFxuezIsfSkpL2csXG4gICAgc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoRWxlbWVudCcpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpKTtcblxuICAvLyBTcGVjaWFsIGNhc2UgZm9yIHN0YW5kYWxvbmUgSFRNTCBjb21tZW50c1xuICB0ZXh0ID0gc2hvd2Rvd24uaGVscGVyLnJlcGxhY2VSZWN1cnNpdmVSZWdFeHAodGV4dCwgZnVuY3Rpb24gKHR4dCkge1xuICAgIHJldHVybiAnXFxuXFxuwqhLJyArIChnbG9iYWxzLmdIdG1sQmxvY2tzLnB1c2godHh0KSAtIDEpICsgJ0tcXG5cXG4nO1xuICB9LCAnXiB7MCwzfTwhLS0nLCAnLS0+JywgJ2dtJyk7XG5cbiAgLy8gUEhQIGFuZCBBU1Atc3R5bGUgcHJvY2Vzc29yIGluc3RydWN0aW9ucyAoPD8uLi4/PiBhbmQgPCUuLi4lPilcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvKD86XFxuXFxuKSggezAsM30oPzo8KFs/JV0pW15cXHJdKj9cXDI+KVsgXFx0XSooPz1cXG57Mix9KSkvZyxcbiAgICBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hFbGVtZW50JykodGV4dCwgb3B0aW9ucywgZ2xvYmFscykpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2hhc2hIVE1MQmxvY2tzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBIYXNoIHNwYW4gZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGJlIHBhcnNlZCBhcyBtYXJrZG93blxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hIVE1MU3BhbnMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2hhc2hIVE1MU3BhbnMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgZnVuY3Rpb24gaGFzaEhUTUxTcGFuIChodG1sKSB7XG4gICAgcmV0dXJuICfCqEMnICsgKGdsb2JhbHMuZ0h0bWxTcGFucy5wdXNoKGh0bWwpIC0gMSkgKyAnQyc7XG4gIH1cblxuICAvLyBIYXNoIFNlbGYgQ2xvc2luZyB0YWdzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLzxbXj5dKz9cXC8+L2dpLCBmdW5jdGlvbiAod20pIHtcbiAgICByZXR1cm4gaGFzaEhUTUxTcGFuKHdtKTtcbiAgfSk7XG5cbiAgLy8gSGFzaCB0YWdzIHdpdGhvdXQgcHJvcGVydGllc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88KFtePl0rPyk+W1xcc1xcU10qPzxcXC9cXDE+L2csIGZ1bmN0aW9uICh3bSkge1xuICAgIHJldHVybiBoYXNoSFRNTFNwYW4od20pO1xuICB9KTtcblxuICAvLyBIYXNoIHRhZ3Mgd2l0aCBwcm9wZXJ0aWVzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLzwoW14+XSs/KVxcc1tePl0rPz5bXFxzXFxTXSo/PFxcL1xcMT4vZywgZnVuY3Rpb24gKHdtKSB7XG4gICAgcmV0dXJuIGhhc2hIVE1MU3Bhbih3bSk7XG4gIH0pO1xuXG4gIC8vIEhhc2ggc2VsZiBjbG9zaW5nIHRhZ3Mgd2l0aG91dCAvPlxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88W14+XSs/Pi9naSwgZnVuY3Rpb24gKHdtKSB7XG4gICAgcmV0dXJuIGhhc2hIVE1MU3Bhbih3bSk7XG4gIH0pO1xuXG4gIC8qc2hvd2Rvd24uaGVscGVyLm1hdGNoUmVjdXJzaXZlUmVnRXhwKHRleHQsICc8Y29kZVxcXFxiW14+XSo+JywgJzwvY29kZT4nLCAnZ2knKTsqL1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2hhc2hIVE1MU3BhbnMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxuLyoqXG4gKiBVbmhhc2ggSFRNTCBzcGFuc1xuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3VuaGFzaEhUTUxTcGFucycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgndW5oYXNoSFRNTFNwYW5zLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ2xvYmFscy5nSHRtbFNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHJlcFRleHQgPSBnbG9iYWxzLmdIdG1sU3BhbnNbaV0sXG4gICAgICAgIC8vIGxpbWl0ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wIChhc3N1bWUgMTAgYXMgbGltaXQgZm9yIHJlY3Vyc2UpXG4gICAgICAgIGxpbWl0ID0gMDtcblxuICAgIHdoaWxlICgvwqhDKFxcZCspQy8udGVzdChyZXBUZXh0KSkge1xuICAgICAgdmFyIG51bSA9IFJlZ0V4cC4kMTtcbiAgICAgIHJlcFRleHQgPSByZXBUZXh0LnJlcGxhY2UoJ8KoQycgKyBudW0gKyAnQycsIGdsb2JhbHMuZ0h0bWxTcGFuc1tudW1dKTtcbiAgICAgIGlmIChsaW1pdCA9PT0gMTApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbWF4aW11bSBuZXN0aW5nIG9mIDEwIHNwYW5zIHJlYWNoZWQhISEnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICArK2xpbWl0O1xuICAgIH1cbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCfCqEMnICsgaSArICdDJywgcmVwVGV4dCk7XG4gIH1cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCd1bmhhc2hIVE1MU3BhbnMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIEhhc2ggYW5kIGVzY2FwZSA8cHJlPjxjb2RlPiBlbGVtZW50cyB0aGF0IHNob3VsZCBub3QgYmUgcGFyc2VkIGFzIG1hcmtkb3duXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignaGFzaFByZUNvZGVUYWdzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoYXNoUHJlQ29kZVRhZ3MuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdmFyIHJlcEZ1bmMgPSBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbWF0Y2gsIGxlZnQsIHJpZ2h0KSB7XG4gICAgLy8gZW5jb2RlIGh0bWwgZW50aXRpZXNcbiAgICB2YXIgY29kZWJsb2NrID0gbGVmdCArIHNob3dkb3duLnN1YlBhcnNlcignZW5jb2RlQ29kZScpKG1hdGNoLCBvcHRpb25zLCBnbG9iYWxzKSArIHJpZ2h0O1xuICAgIHJldHVybiAnXFxuXFxuwqhHJyArIChnbG9iYWxzLmdoQ29kZUJsb2Nrcy5wdXNoKHt0ZXh0OiB3aG9sZU1hdGNoLCBjb2RlYmxvY2s6IGNvZGVibG9ja30pIC0gMSkgKyAnR1xcblxcbic7XG4gIH07XG5cbiAgLy8gSGFzaCA8cHJlPjxjb2RlPlxuICB0ZXh0ID0gc2hvd2Rvd24uaGVscGVyLnJlcGxhY2VSZWN1cnNpdmVSZWdFeHAodGV4dCwgcmVwRnVuYywgJ14gezAsM308cHJlXFxcXGJbXj5dKj5cXFxccyo8Y29kZVxcXFxiW14+XSo+JywgJ14gezAsM308L2NvZGU+XFxcXHMqPC9wcmU+JywgJ2dpbScpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2hhc2hQcmVDb2RlVGFncy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignaGVhZGVycycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoZWFkZXJzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHZhciBoZWFkZXJMZXZlbFN0YXJ0ID0gKGlzTmFOKHBhcnNlSW50KG9wdGlvbnMuaGVhZGVyTGV2ZWxTdGFydCkpKSA/IDEgOiBwYXJzZUludChvcHRpb25zLmhlYWRlckxldmVsU3RhcnQpLFxuXG4gIC8vIFNldCB0ZXh0LXN0eWxlIGhlYWRlcnM6XG4gIC8vXHRIZWFkZXIgMVxuICAvL1x0PT09PT09PT1cbiAgLy9cbiAgLy9cdEhlYWRlciAyXG4gIC8vXHQtLS0tLS0tLVxuICAvL1xuICAgICAgc2V0ZXh0UmVnZXhIMSA9IChvcHRpb25zLnNtb290aExpdmVQcmV2aWV3KSA/IC9eKC4rKVsgXFx0XSpcXG49ezIsfVsgXFx0XSpcXG4rL2dtIDogL14oLispWyBcXHRdKlxcbj0rWyBcXHRdKlxcbisvZ20sXG4gICAgICBzZXRleHRSZWdleEgyID0gKG9wdGlvbnMuc21vb3RoTGl2ZVByZXZpZXcpID8gL14oLispWyBcXHRdKlxcbi17Mix9WyBcXHRdKlxcbisvZ20gOiAvXiguKylbIFxcdF0qXFxuLStbIFxcdF0qXFxuKy9nbTtcblxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHNldGV4dFJlZ2V4SDEsIGZ1bmN0aW9uICh3aG9sZU1hdGNoLCBtMSkge1xuXG4gICAgdmFyIHNwYW5HYW11dCA9IHNob3dkb3duLnN1YlBhcnNlcignc3BhbkdhbXV0JykobTEsIG9wdGlvbnMsIGdsb2JhbHMpLFxuICAgICAgICBoSUQgPSAob3B0aW9ucy5ub0hlYWRlcklkKSA/ICcnIDogJyBpZD1cIicgKyBoZWFkZXJJZChtMSkgKyAnXCInLFxuICAgICAgICBoTGV2ZWwgPSBoZWFkZXJMZXZlbFN0YXJ0LFxuICAgICAgICBoYXNoQmxvY2sgPSAnPGgnICsgaExldmVsICsgaElEICsgJz4nICsgc3BhbkdhbXV0ICsgJzwvaCcgKyBoTGV2ZWwgKyAnPic7XG4gICAgcmV0dXJuIHNob3dkb3duLnN1YlBhcnNlcignaGFzaEJsb2NrJykoaGFzaEJsb2NrLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgfSk7XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZShzZXRleHRSZWdleEgyLCBmdW5jdGlvbiAobWF0Y2hGb3VuZCwgbTEpIHtcbiAgICB2YXIgc3BhbkdhbXV0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdzcGFuR2FtdXQnKShtMSwgb3B0aW9ucywgZ2xvYmFscyksXG4gICAgICAgIGhJRCA9IChvcHRpb25zLm5vSGVhZGVySWQpID8gJycgOiAnIGlkPVwiJyArIGhlYWRlcklkKG0xKSArICdcIicsXG4gICAgICAgIGhMZXZlbCA9IGhlYWRlckxldmVsU3RhcnQgKyAxLFxuICAgICAgICBoYXNoQmxvY2sgPSAnPGgnICsgaExldmVsICsgaElEICsgJz4nICsgc3BhbkdhbXV0ICsgJzwvaCcgKyBoTGV2ZWwgKyAnPic7XG4gICAgcmV0dXJuIHNob3dkb3duLnN1YlBhcnNlcignaGFzaEJsb2NrJykoaGFzaEJsb2NrLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgfSk7XG5cbiAgLy8gYXR4LXN0eWxlIGhlYWRlcnM6XG4gIC8vICAjIEhlYWRlciAxXG4gIC8vICAjIyBIZWFkZXIgMlxuICAvLyAgIyMgSGVhZGVyIDIgd2l0aCBjbG9zaW5nIGhhc2hlcyAjI1xuICAvLyAgLi4uXG4gIC8vICAjIyMjIyMgSGVhZGVyIDZcbiAgLy9cbiAgdmFyIGF0eFN0eWxlID0gKG9wdGlvbnMucmVxdWlyZVNwYWNlQmVmb3JlSGVhZGluZ1RleHQpID8gL14oI3sxLDZ9KVsgXFx0XSsoLis/KVsgXFx0XSojKlxcbisvZ20gOiAvXigjezEsNn0pWyBcXHRdKiguKz8pWyBcXHRdKiMqXFxuKy9nbTtcblxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGF0eFN0eWxlLCBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbTEsIG0yKSB7XG4gICAgdmFyIGhUZXh0ID0gbTI7XG4gICAgaWYgKG9wdGlvbnMuY3VzdG9taXplZEhlYWRlcklkKSB7XG4gICAgICBoVGV4dCA9IG0yLnJlcGxhY2UoL1xccz9cXHsoW157XSs/KX1cXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICB2YXIgc3BhbiA9IHNob3dkb3duLnN1YlBhcnNlcignc3BhbkdhbXV0JykoaFRleHQsIG9wdGlvbnMsIGdsb2JhbHMpLFxuICAgICAgICBoSUQgPSAob3B0aW9ucy5ub0hlYWRlcklkKSA/ICcnIDogJyBpZD1cIicgKyBoZWFkZXJJZChtMikgKyAnXCInLFxuICAgICAgICBoTGV2ZWwgPSBoZWFkZXJMZXZlbFN0YXJ0IC0gMSArIG0xLmxlbmd0aCxcbiAgICAgICAgaGVhZGVyID0gJzxoJyArIGhMZXZlbCArIGhJRCArICc+JyArIHNwYW4gKyAnPC9oJyArIGhMZXZlbCArICc+JztcblxuICAgIHJldHVybiBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hCbG9jaycpKGhlYWRlciwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGhlYWRlcklkIChtKSB7XG4gICAgdmFyIHRpdGxlLFxuICAgICAgICBwcmVmaXg7XG5cbiAgICAvLyBJdCBpcyBzZXBhcmF0ZSBmcm9tIG90aGVyIG9wdGlvbnMgdG8gYWxsb3cgY29tYmluaW5nIHByZWZpeCBhbmQgY3VzdG9taXplZFxuICAgIGlmIChvcHRpb25zLmN1c3RvbWl6ZWRIZWFkZXJJZCkge1xuICAgICAgdmFyIG1hdGNoID0gbS5tYXRjaCgvXFx7KFtee10rPyl9XFxzKiQvKTtcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgICBtID0gbWF0Y2hbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGl0bGUgPSBtO1xuXG4gICAgLy8gUHJlZml4IGlkIHRvIHByZXZlbnQgY2F1c2luZyBpbmFkdmVydGVudCBwcmUtZXhpc3Rpbmcgc3R5bGUgbWF0Y2hlcy5cbiAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzU3RyaW5nKG9wdGlvbnMucHJlZml4SGVhZGVySWQpKSB7XG4gICAgICBwcmVmaXggPSBvcHRpb25zLnByZWZpeEhlYWRlcklkO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVmaXhIZWFkZXJJZCA9PT0gdHJ1ZSkge1xuICAgICAgcHJlZml4ID0gJ3NlY3Rpb24tJztcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnJhd1ByZWZpeEhlYWRlcklkKSB7XG4gICAgICB0aXRsZSA9IHByZWZpeCArIHRpdGxlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmdoQ29tcGF0aWJsZUhlYWRlcklkKSB7XG4gICAgICB0aXRsZSA9IHRpdGxlXG4gICAgICAgIC5yZXBsYWNlKC8gL2csICctJylcbiAgICAgICAgLy8gcmVwbGFjZSBwcmV2aW91c2x5IGVzY2FwZWQgY2hhcnMgKCYsIMKoIGFuZCAkKVxuICAgICAgICAucmVwbGFjZSgvJmFtcDsvZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC/CqFQvZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC/CqEQvZywgJycpXG4gICAgICAgIC8vIHJlcGxhY2UgcmVzdCBvZiB0aGUgY2hhcnMgKCZ+JCBhcmUgcmVwZWF0ZWQgYXMgdGhleSBtaWdodCBoYXZlIGJlZW4gZXNjYXBlZClcbiAgICAgICAgLy8gYm9ycm93ZWQgZnJvbSBnaXRodWIncyByZWRjYXJwZXQgKHNvbWUgdGhleSBzaG91bGQgcHJvZHVjZSBzaW1pbGFyIHJlc3VsdHMpXG4gICAgICAgIC5yZXBsYWNlKC9bJiskLFxcLzo7PT9AXCIje318XsKoflxcW1xcXWBcXFxcKikoJS4hJzw+XS9nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnJhd0hlYWRlcklkKSB7XG4gICAgICB0aXRsZSA9IHRpdGxlXG4gICAgICAgIC5yZXBsYWNlKC8gL2csICctJylcbiAgICAgICAgLy8gcmVwbGFjZSBwcmV2aW91c2x5IGVzY2FwZWQgY2hhcnMgKCYsIMKoIGFuZCAkKVxuICAgICAgICAucmVwbGFjZSgvJmFtcDsvZywgJyYnKVxuICAgICAgICAucmVwbGFjZSgvwqhUL2csICfCqCcpXG4gICAgICAgIC5yZXBsYWNlKC/CqEQvZywgJyQnKVxuICAgICAgICAvLyByZXBsYWNlIFwiIGFuZCAnXG4gICAgICAgIC5yZXBsYWNlKC9bXCInXS9nLCAnLScpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aXRsZSA9IHRpdGxlXG4gICAgICAgIC5yZXBsYWNlKC9bXlxcd10vZywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJhd1ByZWZpeEhlYWRlcklkKSB7XG4gICAgICB0aXRsZSA9IHByZWZpeCArIHRpdGxlO1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxzLmhhc2hMaW5rQ291bnRzW3RpdGxlXSkge1xuICAgICAgdGl0bGUgPSB0aXRsZSArICctJyArIChnbG9iYWxzLmhhc2hMaW5rQ291bnRzW3RpdGxlXSsrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xvYmFscy5oYXNoTGlua0NvdW50c1t0aXRsZV0gPSAxO1xuICAgIH1cbiAgICByZXR1cm4gdGl0bGU7XG4gIH1cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoZWFkZXJzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBUdXJuIE1hcmtkb3duIGxpbmsgc2hvcnRjdXRzIGludG8gWEhUTUwgPGE+IHRhZ3MuXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignaG9yaXpvbnRhbFJ1bGUnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2hvcml6b250YWxSdWxlLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHZhciBrZXkgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hCbG9jaycpKCc8aHIgLz4nLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXiB7MCwyfSggPy0pezMsfVsgXFx0XSokL2dtLCBrZXkpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9eIHswLDJ9KCA/XFwqKXszLH1bIFxcdF0qJC9nbSwga2V5KTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXiB7MCwyfSggP18pezMsfVsgXFx0XSokL2dtLCBrZXkpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2hvcml6b250YWxSdWxlLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBUdXJuIE1hcmtkb3duIGltYWdlIHNob3J0Y3V0cyBpbnRvIDxpbWc+IHRhZ3MuXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignaW1hZ2VzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2ltYWdlcy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB2YXIgaW5saW5lUmVnRXhwICAgICAgPSAvIVxcWyhbXlxcXV0qPyldWyBcXHRdKigpXFwoWyBcXHRdPzw/KFtcXFNdKz8oPzpcXChbXFxTXSo/XFwpW1xcU10qPyk/KT4/KD86ID0oWypcXGRdK1tBLVphLXolXXswLDR9KXgoWypcXGRdK1tBLVphLXolXXswLDR9KSk/WyBcXHRdKig/OihbXCInXSkoW15cIl0qPylcXDYpP1sgXFx0XT9cXCkvZyxcbiAgICAgIGNyYXp5UmVnRXhwICAgICAgID0gLyFcXFsoW15cXF1dKj8pXVsgXFx0XSooKVxcKFsgXFx0XT88KFtePl0qKT4oPzogPShbKlxcZF0rW0EtWmEteiVdezAsNH0peChbKlxcZF0rW0EtWmEteiVdezAsNH0pKT9bIFxcdF0qKD86KD86KFtcIiddKShbXlwiXSo/KVxcNikpP1sgXFx0XT9cXCkvZyxcbiAgICAgIGJhc2U2NFJlZ0V4cCAgICAgID0gLyFcXFsoW15cXF1dKj8pXVsgXFx0XSooKVxcKFsgXFx0XT88PyhkYXRhOi4rP1xcLy4rPztiYXNlNjQsW0EtWmEtejAtOSsvPVxcbl0rPyk+Pyg/OiA9KFsqXFxkXStbQS1aYS16JV17MCw0fSl4KFsqXFxkXStbQS1aYS16JV17MCw0fSkpP1sgXFx0XSooPzooW1wiJ10pKFteXCJdKj8pXFw2KT9bIFxcdF0/XFwpL2csXG4gICAgICByZWZlcmVuY2VSZWdFeHAgICA9IC8hXFxbKFteXFxdXSo/KV0gPyg/OlxcbiAqKT9cXFsoW1xcc1xcU10qPyldKCkoKSgpKCkoKS9nLFxuICAgICAgcmVmU2hvcnRjdXRSZWdFeHAgPSAvIVxcWyhbXlxcW1xcXV0rKV0oKSgpKCkoKSgpL2c7XG5cbiAgZnVuY3Rpb24gd3JpdGVJbWFnZVRhZ0Jhc2U2NCAod2hvbGVNYXRjaCwgYWx0VGV4dCwgbGlua0lkLCB1cmwsIHdpZHRoLCBoZWlnaHQsIG01LCB0aXRsZSkge1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgIHJldHVybiB3cml0ZUltYWdlVGFnICh3aG9sZU1hdGNoLCBhbHRUZXh0LCBsaW5rSWQsIHVybCwgd2lkdGgsIGhlaWdodCwgbTUsIHRpdGxlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW1hZ2VUYWcgKHdob2xlTWF0Y2gsIGFsdFRleHQsIGxpbmtJZCwgdXJsLCB3aWR0aCwgaGVpZ2h0LCBtNSwgdGl0bGUpIHtcblxuICAgIHZhciBnVXJscyAgID0gZ2xvYmFscy5nVXJscyxcbiAgICAgICAgZ1RpdGxlcyA9IGdsb2JhbHMuZ1RpdGxlcyxcbiAgICAgICAgZ0RpbXMgICA9IGdsb2JhbHMuZ0RpbWVuc2lvbnM7XG5cbiAgICBsaW5rSWQgPSBsaW5rSWQudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHRpdGxlID0gJyc7XG4gICAgfVxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZXhwbGljaXQgZW1wdHkgdXJsXG4gICAgaWYgKHdob2xlTWF0Y2guc2VhcmNoKC9cXCg8P1xccyo+PyA/KFsnXCJdLipbJ1wiXSk/XFwpJC9tKSA+IC0xKSB7XG4gICAgICB1cmwgPSAnJztcblxuICAgIH0gZWxzZSBpZiAodXJsID09PSAnJyB8fCB1cmwgPT09IG51bGwpIHtcbiAgICAgIGlmIChsaW5rSWQgPT09ICcnIHx8IGxpbmtJZCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBsb3dlci1jYXNlIGFuZCB0dXJuIGVtYmVkZGVkIG5ld2xpbmVzIGludG8gc3BhY2VzXG4gICAgICAgIGxpbmtJZCA9IGFsdFRleHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8gP1xcbi9nLCAnICcpO1xuICAgICAgfVxuICAgICAgdXJsID0gJyMnICsgbGlua0lkO1xuXG4gICAgICBpZiAoIXNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChnVXJsc1tsaW5rSWRdKSkge1xuICAgICAgICB1cmwgPSBnVXJsc1tsaW5rSWRdO1xuICAgICAgICBpZiAoIXNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChnVGl0bGVzW2xpbmtJZF0pKSB7XG4gICAgICAgICAgdGl0bGUgPSBnVGl0bGVzW2xpbmtJZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZ0RpbXNbbGlua0lkXSkpIHtcbiAgICAgICAgICB3aWR0aCA9IGdEaW1zW2xpbmtJZF0ud2lkdGg7XG4gICAgICAgICAgaGVpZ2h0ID0gZ0RpbXNbbGlua0lkXS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB3aG9sZU1hdGNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFsdFRleHQgPSBhbHRUZXh0XG4gICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgLy9hbHRUZXh0ID0gc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnMoYWx0VGV4dCwgJypfJywgZmFsc2UpO1xuICAgICAgLnJlcGxhY2Uoc2hvd2Rvd24uaGVscGVyLnJlZ2V4ZXMuYXN0ZXJpc2tEYXNoQW5kQ29sb24sIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuICAgIC8vdXJsID0gc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnModXJsLCAnKl8nLCBmYWxzZSk7XG4gICAgdXJsID0gdXJsLnJlcGxhY2Uoc2hvd2Rvd24uaGVscGVyLnJlZ2V4ZXMuYXN0ZXJpc2tEYXNoQW5kQ29sb24sIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuICAgIHZhciByZXN1bHQgPSAnPGltZyBzcmM9XCInICsgdXJsICsgJ1wiIGFsdD1cIicgKyBhbHRUZXh0ICsgJ1wiJztcblxuICAgIGlmICh0aXRsZSAmJiBzaG93ZG93bi5oZWxwZXIuaXNTdHJpbmcodGl0bGUpKSB7XG4gICAgICB0aXRsZSA9IHRpdGxlXG4gICAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC8vdGl0bGUgPSBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVycyh0aXRsZSwgJypfJywgZmFsc2UpO1xuICAgICAgICAucmVwbGFjZShzaG93ZG93bi5oZWxwZXIucmVnZXhlcy5hc3Rlcmlza0Rhc2hBbmRDb2xvbiwgc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG4gICAgICByZXN1bHQgKz0gJyB0aXRsZT1cIicgKyB0aXRsZSArICdcIic7XG4gICAgfVxuXG4gICAgaWYgKHdpZHRoICYmIGhlaWdodCkge1xuICAgICAgd2lkdGggID0gKHdpZHRoID09PSAnKicpID8gJ2F1dG8nIDogd2lkdGg7XG4gICAgICBoZWlnaHQgPSAoaGVpZ2h0ID09PSAnKicpID8gJ2F1dG8nIDogaGVpZ2h0O1xuXG4gICAgICByZXN1bHQgKz0gJyB3aWR0aD1cIicgKyB3aWR0aCArICdcIic7XG4gICAgICByZXN1bHQgKz0gJyBoZWlnaHQ9XCInICsgaGVpZ2h0ICsgJ1wiJztcbiAgICB9XG5cbiAgICByZXN1bHQgKz0gJyAvPic7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gRmlyc3QsIGhhbmRsZSByZWZlcmVuY2Utc3R5bGUgbGFiZWxlZCBpbWFnZXM6ICFbYWx0IHRleHRdW2lkXVxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlZmVyZW5jZVJlZ0V4cCwgd3JpdGVJbWFnZVRhZyk7XG5cbiAgLy8gTmV4dCwgaGFuZGxlIGlubGluZSBpbWFnZXM6ICAhW2FsdCB0ZXh0XSh1cmwgPTx3aWR0aD54PGhlaWdodD4gXCJvcHRpb25hbCB0aXRsZVwiKVxuXG4gIC8vIGJhc2U2NCBlbmNvZGVkIGltYWdlc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGJhc2U2NFJlZ0V4cCwgd3JpdGVJbWFnZVRhZ0Jhc2U2NCk7XG5cbiAgLy8gY2FzZXMgd2l0aCBjcmF6eSB1cmxzIGxpa2UgLi9pbWFnZS9jYXQxKS5wbmdcbiAgdGV4dCA9IHRleHQucmVwbGFjZShjcmF6eVJlZ0V4cCwgd3JpdGVJbWFnZVRhZyk7XG5cbiAgLy8gbm9ybWFsIGNhc2VzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoaW5saW5lUmVnRXhwLCB3cml0ZUltYWdlVGFnKTtcblxuICAvLyBoYW5kbGUgcmVmZXJlbmNlLXN0eWxlIHNob3J0Y3V0czogIVtpbWcgdGV4dF1cbiAgdGV4dCA9IHRleHQucmVwbGFjZShyZWZTaG9ydGN1dFJlZ0V4cCwgd3JpdGVJbWFnZVRhZyk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaW1hZ2VzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdpdGFsaWNzQW5kQm9sZCcsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdpdGFsaWNzQW5kQm9sZC5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBpdCdzIGZhc3RlciB0byBoYXZlIDMgc2VwYXJhdGUgcmVnZXhlcyBmb3IgZWFjaCBjYXNlIHRoYW4gaGF2ZSBqdXN0IG9uZVxuICAvLyBiZWNhdXNlIG9mIGJhY2t0cmFjaW5nLCBpbiBzb21lIGNhc2VzLCBpdCBjb3VsZCBsZWFkIHRvIGFuIGV4cG9uZW50aWFsIGVmZmVjdFxuICAvLyBjYWxsZWQgXCJjYXRhc3Ryb3BoaWMgYmFja3RyYWNlXCIuIE9taW5vdXMhXG5cbiAgZnVuY3Rpb24gcGFyc2VJbnNpZGUgKHR4dCwgbGVmdCwgcmlnaHQpIHtcbiAgICAvKlxuICAgIGlmIChvcHRpb25zLnNpbXBsaWZpZWRBdXRvTGluaykge1xuICAgICAgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdzaW1wbGlmaWVkQXV0b0xpbmtzJykodHh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICB9XG4gICAgKi9cbiAgICByZXR1cm4gbGVmdCArIHR4dCArIHJpZ2h0O1xuICB9XG5cbiAgLy8gUGFyc2UgdW5kZXJzY29yZXNcbiAgaWYgKG9wdGlvbnMubGl0ZXJhbE1pZFdvcmRVbmRlcnNjb3Jlcykge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcYl9fXyhcXFNbXFxzXFxTXSo/KV9fX1xcYi9nLCBmdW5jdGlvbiAod20sIHR4dCkge1xuICAgICAgcmV0dXJuIHBhcnNlSW5zaWRlICh0eHQsICc8c3Ryb25nPjxlbT4nLCAnPC9lbT48L3N0cm9uZz4nKTtcbiAgICB9KTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXGJfXyhcXFNbXFxzXFxTXSo/KV9fXFxiL2csIGZ1bmN0aW9uICh3bSwgdHh0KSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnNpZGUgKHR4dCwgJzxzdHJvbmc+JywgJzwvc3Ryb25nPicpO1xuICAgIH0pO1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcYl8oXFxTW1xcc1xcU10qPylfXFxiL2csIGZ1bmN0aW9uICh3bSwgdHh0KSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnNpZGUgKHR4dCwgJzxlbT4nLCAnPC9lbT4nKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX18oXFxTW1xcc1xcU10qPylfX18vZywgZnVuY3Rpb24gKHdtLCBtKSB7XG4gICAgICByZXR1cm4gKC9cXFMkLy50ZXN0KG0pKSA/IHBhcnNlSW5zaWRlIChtLCAnPHN0cm9uZz48ZW0+JywgJzwvZW0+PC9zdHJvbmc+JykgOiB3bTtcbiAgICB9KTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fXyhcXFNbXFxzXFxTXSo/KV9fL2csIGZ1bmN0aW9uICh3bSwgbSkge1xuICAgICAgcmV0dXJuICgvXFxTJC8udGVzdChtKSkgPyBwYXJzZUluc2lkZSAobSwgJzxzdHJvbmc+JywgJzwvc3Ryb25nPicpIDogd207XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXyhbXlxcc19dW1xcc1xcU10qPylfL2csIGZ1bmN0aW9uICh3bSwgbSkge1xuICAgICAgLy8gIS9eX1teX10vLnRlc3QobSkgLSB0ZXN0IGlmIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBfXyAoc2luY2UgaXQgc2VlbXMgcmVkdW5kYW50LCB3ZSByZW1vdmVkIGl0KVxuICAgICAgcmV0dXJuICgvXFxTJC8udGVzdChtKSkgPyBwYXJzZUluc2lkZSAobSwgJzxlbT4nLCAnPC9lbT4nKSA6IHdtO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gTm93IHBhcnNlIGFzdGVyaXNrc1xuICBpZiAob3B0aW9ucy5saXRlcmFsTWlkV29yZEFzdGVyaXNrcykge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhbXipdfF4pXFxCXFwqXFwqXFwqKFxcU1tcXHNcXFNdKj8pXFwqXFwqXFwqXFxCKD8hXFwqKS9nLCBmdW5jdGlvbiAod20sIGxlYWQsIHR4dCkge1xuICAgICAgcmV0dXJuIHBhcnNlSW5zaWRlICh0eHQsIGxlYWQgKyAnPHN0cm9uZz48ZW0+JywgJzwvZW0+PC9zdHJvbmc+Jyk7XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvKFteKl18XilcXEJcXCpcXCooXFxTW1xcc1xcU10qPylcXCpcXCpcXEIoPyFcXCopL2csIGZ1bmN0aW9uICh3bSwgbGVhZCwgdHh0KSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnNpZGUgKHR4dCwgbGVhZCArICc8c3Ryb25nPicsICc8L3N0cm9uZz4nKTtcbiAgICB9KTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oW14qXXxeKVxcQlxcKihcXFNbXFxzXFxTXSo/KVxcKlxcQig/IVxcKikvZywgZnVuY3Rpb24gKHdtLCBsZWFkLCB0eHQpIHtcbiAgICAgIHJldHVybiBwYXJzZUluc2lkZSAodHh0LCBsZWFkICsgJzxlbT4nLCAnPC9lbT4nKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXCpcXCpcXCooXFxTW1xcc1xcU10qPylcXCpcXCpcXCovZywgZnVuY3Rpb24gKHdtLCBtKSB7XG4gICAgICByZXR1cm4gKC9cXFMkLy50ZXN0KG0pKSA/IHBhcnNlSW5zaWRlIChtLCAnPHN0cm9uZz48ZW0+JywgJzwvZW0+PC9zdHJvbmc+JykgOiB3bTtcbiAgICB9KTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXCpcXCooXFxTW1xcc1xcU10qPylcXCpcXCovZywgZnVuY3Rpb24gKHdtLCBtKSB7XG4gICAgICByZXR1cm4gKC9cXFMkLy50ZXN0KG0pKSA/IHBhcnNlSW5zaWRlIChtLCAnPHN0cm9uZz4nLCAnPC9zdHJvbmc+JykgOiB3bTtcbiAgICB9KTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXCooW15cXHMqXVtcXHNcXFNdKj8pXFwqL2csIGZ1bmN0aW9uICh3bSwgbSkge1xuICAgICAgLy8gIS9eXFwqW14qXS8udGVzdChtKSAtIHRlc3QgaWYgaXQgZG9lc24ndCBzdGFydCB3aXRoICoqIChzaW5jZSBpdCBzZWVtcyByZWR1bmRhbnQsIHdlIHJlbW92ZWQgaXQpXG4gICAgICByZXR1cm4gKC9cXFMkLy50ZXN0KG0pKSA/IHBhcnNlSW5zaWRlIChtLCAnPGVtPicsICc8L2VtPicpIDogd207XG4gICAgfSk7XG4gIH1cblxuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2l0YWxpY3NBbmRCb2xkLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBGb3JtIEhUTUwgb3JkZXJlZCAobnVtYmVyZWQpIGFuZCB1bm9yZGVyZWQgKGJ1bGxldGVkKSBsaXN0cy5cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdsaXN0cycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgY29udGVudHMgb2YgYSBzaW5nbGUgb3JkZXJlZCBvciB1bm9yZGVyZWQgbGlzdCwgc3BsaXR0aW5nIGl0XG4gICAqIGludG8gaW5kaXZpZHVhbCBsaXN0IGl0ZW1zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdFN0clxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyaW1UcmFpbGluZ1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc0xpc3RJdGVtcyAobGlzdFN0ciwgdHJpbVRyYWlsaW5nKSB7XG4gICAgLy8gVGhlICRnX2xpc3RfbGV2ZWwgZ2xvYmFsIGtlZXBzIHRyYWNrIG9mIHdoZW4gd2UncmUgaW5zaWRlIGEgbGlzdC5cbiAgICAvLyBFYWNoIHRpbWUgd2UgZW50ZXIgYSBsaXN0LCB3ZSBpbmNyZW1lbnQgaXQ7IHdoZW4gd2UgbGVhdmUgYSBsaXN0LFxuICAgIC8vIHdlIGRlY3JlbWVudC4gSWYgaXQncyB6ZXJvLCB3ZSdyZSBub3QgaW4gYSBsaXN0IGFueW1vcmUuXG4gICAgLy9cbiAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2Ugd2hlbiB3ZSdyZSBub3QgaW5zaWRlIGEgbGlzdCwgd2Ugd2FudCB0byB0cmVhdFxuICAgIC8vIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyAgICBJIHJlY29tbWVuZCB1cGdyYWRpbmcgdG8gdmVyc2lvblxuICAgIC8vICAgIDguIE9vcHMsIG5vdyB0aGlzIGxpbmUgaXMgdHJlYXRlZFxuICAgIC8vICAgIGFzIGEgc3ViLWxpc3QuXG4gICAgLy9cbiAgICAvLyBBcyBhIHNpbmdsZSBwYXJhZ3JhcGgsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgc2Vjb25kIGxpbmUgc3RhcnRzXG4gICAgLy8gd2l0aCBhIGRpZ2l0LXBlcmlvZC1zcGFjZSBzZXF1ZW5jZS5cbiAgICAvL1xuICAgIC8vIFdoZXJlYXMgd2hlbiB3ZSdyZSBpbnNpZGUgYSBsaXN0IChvciBzdWItbGlzdCksIHRoYXQgbGluZSB3aWxsIGJlXG4gICAgLy8gdHJlYXRlZCBhcyB0aGUgc3RhcnQgb2YgYSBzdWItbGlzdC4gV2hhdCBhIGtsdWRnZSwgaHVoPyBUaGlzIGlzXG4gICAgLy8gYW4gYXNwZWN0IG9mIE1hcmtkb3duJ3Mgc3ludGF4IHRoYXQncyBoYXJkIHRvIHBhcnNlIHBlcmZlY3RseVxuICAgIC8vIHdpdGhvdXQgcmVzb3J0aW5nIHRvIG1pbmQtcmVhZGluZy4gUGVyaGFwcyB0aGUgc29sdXRpb24gaXMgdG9cbiAgICAvLyBjaGFuZ2UgdGhlIHN5bnRheCBydWxlcyBzdWNoIHRoYXQgc3ViLWxpc3RzIG11c3Qgc3RhcnQgd2l0aCBhXG4gICAgLy8gc3RhcnRpbmcgY2FyZGluYWwgbnVtYmVyOyBlLmcuIFwiMS5cIiBvciBcImEuXCIuXG4gICAgZ2xvYmFscy5nTGlzdExldmVsKys7XG5cbiAgICAvLyB0cmltIHRyYWlsaW5nIGJsYW5rIGxpbmVzOlxuICAgIGxpc3RTdHIgPSBsaXN0U3RyLnJlcGxhY2UoL1xcbnsyLH0kLywgJ1xcbicpO1xuXG4gICAgLy8gYXR0YWNrbGFiOiBhZGQgc2VudGluZWwgdG8gZW11bGF0ZSBcXHpcbiAgICBsaXN0U3RyICs9ICfCqDAnO1xuXG4gICAgdmFyIHJneCA9IC8oXFxuKT8oXiB7MCwzfSkoWyorLV18XFxkK1suXSlbIFxcdF0rKChcXFsoeHxYfCApP10pP1sgXFx0XSpbXlxccl0rPyhcXG57MSwyfSkpKD89XFxuKijCqDB8IHswLDN9KFsqKy1dfFxcZCtbLl0pWyBcXHRdKykpL2dtLFxuICAgICAgICBpc1BhcmFncmFwaGVkID0gKC9cXG5bIFxcdF0qXFxuKD8hwqgwKS8udGVzdChsaXN0U3RyKSk7XG5cbiAgICAvLyBTaW5jZSB2ZXJzaW9uIDEuNSwgbmVzdGluZyBzdWJsaXN0cyByZXF1aXJlcyA0IHNwYWNlcyAob3IgMSB0YWIpIGluZGVudGF0aW9uLFxuICAgIC8vIHdoaWNoIGlzIGEgc3ludGF4IGJyZWFraW5nIGNoYW5nZVxuICAgIC8vIGFjdGl2YXRpbmcgdGhpcyBvcHRpb24gcmV2ZXJ0cyB0byBvbGQgYmVoYXZpb3JcbiAgICBpZiAob3B0aW9ucy5kaXNhYmxlRm9yY2VkNFNwYWNlc0luZGVudGVkU3VibGlzdHMpIHtcbiAgICAgIHJneCA9IC8oXFxuKT8oXiB7MCwzfSkoWyorLV18XFxkK1suXSlbIFxcdF0rKChcXFsoeHxYfCApP10pP1sgXFx0XSpbXlxccl0rPyhcXG57MSwyfSkpKD89XFxuKijCqDB8XFwyKFsqKy1dfFxcZCtbLl0pWyBcXHRdKykpL2dtO1xuICAgIH1cblxuICAgIGxpc3RTdHIgPSBsaXN0U3RyLnJlcGxhY2Uocmd4LCBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbTEsIG0yLCBtMywgbTQsIHRhc2tidG4sIGNoZWNrZWQpIHtcbiAgICAgIGNoZWNrZWQgPSAoY2hlY2tlZCAmJiBjaGVja2VkLnRyaW0oKSAhPT0gJycpO1xuXG4gICAgICB2YXIgaXRlbSA9IHNob3dkb3duLnN1YlBhcnNlcignb3V0ZGVudCcpKG00LCBvcHRpb25zLCBnbG9iYWxzKSxcbiAgICAgICAgICBidWxsZXRTdHlsZSA9ICcnO1xuXG4gICAgICAvLyBTdXBwb3J0IGZvciBnaXRodWIgdGFza2xpc3RzXG4gICAgICBpZiAodGFza2J0biAmJiBvcHRpb25zLnRhc2tsaXN0cykge1xuICAgICAgICBidWxsZXRTdHlsZSA9ICcgY2xhc3M9XCJ0YXNrLWxpc3QtaXRlbVwiIHN0eWxlPVwibGlzdC1zdHlsZS10eXBlOiBub25lO1wiJztcbiAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXlsgXFx0XSpcXFsoeHxYfCApP10vbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBvdHAgPSAnPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRpc2FibGVkIHN0eWxlPVwibWFyZ2luOiAwcHggMC4zNWVtIDAuMjVlbSAtMS42ZW07IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XCInO1xuICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICBvdHAgKz0gJyBjaGVja2VkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3RwICs9ICc+JztcbiAgICAgICAgICByZXR1cm4gb3RwO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSVNTVUUgIzMxMlxuICAgICAgLy8gVGhpcyBpbnB1dDogLSAtIC0gYVxuICAgICAgLy8gY2F1c2VzIHRyb3VibGUgdG8gdGhlIHBhcnNlciwgc2luY2UgaXQgaW50ZXJwcmV0cyBpdCBhczpcbiAgICAgIC8vIDx1bD48bGk+PGxpPjxsaT5hPC9saT48L2xpPjwvbGk+PC91bD5cbiAgICAgIC8vIGluc3RlYWQgb2Y6XG4gICAgICAvLyA8dWw+PGxpPi0gLSBhPC9saT48L3VsPlxuICAgICAgLy8gU28sIHRvIHByZXZlbnQgaXQsIHdlIHdpbGwgcHV0IGEgbWFya2VyICjCqEEpaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuICAgICAgLy8gS2luZCBvZiBoYWNraXNoL21vbmtleSBwYXRjaGluZywgYnV0IHNlZW1zIG1vcmUgZWZmZWN0aXZlIHRoYW4gb3ZlcmNvbXBsaWNhdGluZyB0aGUgbGlzdCBwYXJzZXJcbiAgICAgIGl0ZW0gPSBpdGVtLnJlcGxhY2UoL14oWy0qK118XFxkXFwuKVsgXFx0XStbXFxTXFxuIF0qL2csIGZ1bmN0aW9uICh3bTIpIHtcbiAgICAgICAgcmV0dXJuICfCqEEnICsgd20yO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIG0xIC0gTGVhZGluZyBsaW5lIG9yXG4gICAgICAvLyBIYXMgYSBkb3VibGUgcmV0dXJuIChtdWx0aSBwYXJhZ3JhcGgpIG9yXG4gICAgICAvLyBIYXMgc3VibGlzdFxuICAgICAgaWYgKG0xIHx8IChpdGVtLnNlYXJjaCgvXFxuezIsfS8pID4gLTEpKSB7XG4gICAgICAgIGl0ZW0gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2dpdGh1YkNvZGVCbG9ja3MnKShpdGVtLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICAgICAgaXRlbSA9IHNob3dkb3duLnN1YlBhcnNlcignYmxvY2tHYW11dCcpKGl0ZW0sIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVjdXJzaW9uIGZvciBzdWItbGlzdHM6XG4gICAgICAgIGl0ZW0gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2xpc3RzJykoaXRlbSwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgICAgIGl0ZW0gPSBpdGVtLnJlcGxhY2UoL1xcbiQvLCAnJyk7IC8vIGNob21wKGl0ZW0pXG4gICAgICAgIGl0ZW0gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hIVE1MQmxvY2tzJykoaXRlbSwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgICAgICAgLy8gQ29sYXBzZSBkb3VibGUgbGluZWJyZWFrc1xuICAgICAgICBpdGVtID0gaXRlbS5yZXBsYWNlKC9cXG5cXG4rL2csICdcXG5cXG4nKTtcbiAgICAgICAgaWYgKGlzUGFyYWdyYXBoZWQpIHtcbiAgICAgICAgICBpdGVtID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdwYXJhZ3JhcGhzJykoaXRlbSwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbSA9IHNob3dkb3duLnN1YlBhcnNlcignc3BhbkdhbXV0JykoaXRlbSwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gbm93IHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIgKMKoQSlcbiAgICAgIGl0ZW0gPSBpdGVtLnJlcGxhY2UoJ8KoQScsICcnKTtcbiAgICAgIC8vIHdlIGNhbiBmaW5hbGx5IHdyYXAgdGhlIGxpbmUgaW4gbGlzdCBpdGVtIHRhZ3NcbiAgICAgIGl0ZW0gPSAgJzxsaScgKyBidWxsZXRTdHlsZSArICc+JyArIGl0ZW0gKyAnPC9saT5cXG4nO1xuXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcblxuICAgIC8vIGF0dGFja2xhYjogc3RyaXAgc2VudGluZWxcbiAgICBsaXN0U3RyID0gbGlzdFN0ci5yZXBsYWNlKC/CqDAvZywgJycpO1xuXG4gICAgZ2xvYmFscy5nTGlzdExldmVsLS07XG5cbiAgICBpZiAodHJpbVRyYWlsaW5nKSB7XG4gICAgICBsaXN0U3RyID0gbGlzdFN0ci5yZXBsYWNlKC9cXHMrJC8sICcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdFN0cjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlU3RhcnROdW1iZXIgKGxpc3QsIGxpc3RUeXBlKSB7XG4gICAgLy8gY2hlY2sgaWYgb2wgYW5kIHN0YXJ0cyBieSBhIG51bWJlciBkaWZmZXJlbnQgdGhhbiAxXG4gICAgaWYgKGxpc3RUeXBlID09PSAnb2wnKSB7XG4gICAgICB2YXIgcmVzID0gbGlzdC5tYXRjaCgvXiAqKFxcZCspXFwuLyk7XG4gICAgICBpZiAocmVzICYmIHJlc1sxXSAhPT0gJzEnKSB7XG4gICAgICAgIHJldHVybiAnIHN0YXJ0PVwiJyArIHJlc1sxXSArICdcIic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbmQgcGFyc2UgY29uc2VjdXRpdmUgbGlzdHMgKGJldHRlciBmaXggZm9yIGlzc3VlICMxNDIpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0VHlwZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyaW1UcmFpbGluZ1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VDb25zZWN1dGl2ZUxpc3RzIChsaXN0LCBsaXN0VHlwZSwgdHJpbVRyYWlsaW5nKSB7XG4gICAgLy8gY2hlY2sgaWYgd2UgY2F1Z2h0IDIgb3IgbW9yZSBjb25zZWN1dGl2ZSBsaXN0cyBieSBtaXN0YWtlXG4gICAgLy8gd2UgdXNlIHRoZSBjb3VudGVyUmd4LCBtZWFuaW5nIGlmIGxpc3RUeXBlIGlzIFVMIHdlIGxvb2sgZm9yIE9MIGFuZCB2aWNlIHZlcnNhXG4gICAgdmFyIG9sUmd4ID0gKG9wdGlvbnMuZGlzYWJsZUZvcmNlZDRTcGFjZXNJbmRlbnRlZFN1Ymxpc3RzKSA/IC9eID9cXGQrXFwuWyBcXHRdL2dtIDogL14gezAsM31cXGQrXFwuWyBcXHRdL2dtLFxuICAgICAgICB1bFJneCA9IChvcHRpb25zLmRpc2FibGVGb3JjZWQ0U3BhY2VzSW5kZW50ZWRTdWJsaXN0cykgPyAvXiA/WyorLV1bIFxcdF0vZ20gOiAvXiB7MCwzfVsqKy1dWyBcXHRdL2dtLFxuICAgICAgICBjb3VudGVyUnhnID0gKGxpc3RUeXBlID09PSAndWwnKSA/IG9sUmd4IDogdWxSZ3gsXG4gICAgICAgIHJlc3VsdCA9ICcnO1xuXG4gICAgaWYgKGxpc3Quc2VhcmNoKGNvdW50ZXJSeGcpICE9PSAtMSkge1xuICAgICAgKGZ1bmN0aW9uIHBhcnNlQ0wgKHR4dCkge1xuICAgICAgICB2YXIgcG9zID0gdHh0LnNlYXJjaChjb3VudGVyUnhnKSxcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGVTdGFydE51bWJlcihsaXN0LCBsaXN0VHlwZSk7XG4gICAgICAgIGlmIChwb3MgIT09IC0xKSB7XG4gICAgICAgICAgLy8gc2xpY2VcbiAgICAgICAgICByZXN1bHQgKz0gJ1xcblxcbjwnICsgbGlzdFR5cGUgKyBzdHlsZSArICc+XFxuJyArIHByb2Nlc3NMaXN0SXRlbXModHh0LnNsaWNlKDAsIHBvcyksICEhdHJpbVRyYWlsaW5nKSArICc8LycgKyBsaXN0VHlwZSArICc+XFxuJztcblxuICAgICAgICAgIC8vIGludmVydCBjb3VudGVyVHlwZSBhbmQgbGlzdFR5cGVcbiAgICAgICAgICBsaXN0VHlwZSA9IChsaXN0VHlwZSA9PT0gJ3VsJykgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgICBjb3VudGVyUnhnID0gKGxpc3RUeXBlID09PSAndWwnKSA/IG9sUmd4IDogdWxSZ3g7XG5cbiAgICAgICAgICAvL3JlY3Vyc2VcbiAgICAgICAgICBwYXJzZUNMKHR4dC5zbGljZShwb3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgKz0gJ1xcblxcbjwnICsgbGlzdFR5cGUgKyBzdHlsZSArICc+XFxuJyArIHByb2Nlc3NMaXN0SXRlbXModHh0LCAhIXRyaW1UcmFpbGluZykgKyAnPC8nICsgbGlzdFR5cGUgKyAnPlxcbic7XG4gICAgICAgIH1cbiAgICAgIH0pKGxpc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVN0YXJ0TnVtYmVyKGxpc3QsIGxpc3RUeXBlKTtcbiAgICAgIHJlc3VsdCA9ICdcXG5cXG48JyArIGxpc3RUeXBlICsgc3R5bGUgKyAnPlxcbicgKyBwcm9jZXNzTGlzdEl0ZW1zKGxpc3QsICEhdHJpbVRyYWlsaW5nKSArICc8LycgKyBsaXN0VHlwZSArICc+XFxuJztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIFN0YXJ0IG9mIGxpc3QgcGFyc2luZyAqKi9cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnbGlzdHMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIC8vIGFkZCBzZW50aW5lbCB0byBoYWNrIGFyb3VuZCBraHRtbC9zYWZhcmkgYnVnOlxuICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTIzMVxuICB0ZXh0ICs9ICfCqDAnO1xuXG4gIGlmIChnbG9iYWxzLmdMaXN0TGV2ZWwpIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9eKCggezAsM30oWyorLV18XFxkK1suXSlbIFxcdF0rKVteXFxyXSs/KMKoMHxcXG57Mix9KD89XFxTKSg/IVsgXFx0XSooPzpbKistXXxcXGQrWy5dKVsgXFx0XSspKSkvZ20sXG4gICAgICBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbGlzdCwgbTIpIHtcbiAgICAgICAgdmFyIGxpc3RUeXBlID0gKG0yLnNlYXJjaCgvWyorLV0vZykgPiAtMSkgPyAndWwnIDogJ29sJztcbiAgICAgICAgcmV0dXJuIHBhcnNlQ29uc2VjdXRpdmVMaXN0cyhsaXN0LCBsaXN0VHlwZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXFxuXFxufF5cXG4/KSgoIHswLDN9KFsqKy1dfFxcZCtbLl0pWyBcXHRdKylbXlxccl0rPyjCqDB8XFxuezIsfSg/PVxcUykoPyFbIFxcdF0qKD86WyorLV18XFxkK1suXSlbIFxcdF0rKSkpL2dtLFxuICAgICAgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG0xLCBsaXN0LCBtMykge1xuICAgICAgICB2YXIgbGlzdFR5cGUgPSAobTMuc2VhcmNoKC9bKistXS9nKSA+IC0xKSA/ICd1bCcgOiAnb2wnO1xuICAgICAgICByZXR1cm4gcGFyc2VDb25zZWN1dGl2ZUxpc3RzKGxpc3QsIGxpc3RUeXBlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIHN0cmlwIHNlbnRpbmVsXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoMC8sICcnKTtcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnbGlzdHMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIFBhcnNlIG1ldGFkYXRhIGF0IHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50XG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignbWV0YWRhdGEnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgaWYgKCFvcHRpb25zLm1ldGFkYXRhKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdtZXRhZGF0YS5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICBmdW5jdGlvbiBwYXJzZU1ldGFkYXRhQ29udGVudHMgKGNvbnRlbnQpIHtcbiAgICAvLyByYXcgaXMgcmF3IHNvIGl0J3Mgbm90IGNoYW5nZWQgaW4gYW55IHdheVxuICAgIGdsb2JhbHMubWV0YWRhdGEucmF3ID0gY29udGVudDtcblxuICAgIC8vIGVzY2FwZSBjaGFycyBmb3JiaWRkZW4gaW4gaHRtbCBhdHRyaWJ1dGVzXG4gICAgLy8gZG91YmxlIHF1b3Rlc1xuICAgIGNvbnRlbnQgPSBjb250ZW50XG4gICAgICAvLyBhbXBlcnNhbmQgZmlyc3RcbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAvLyBkb3VibGUgcXVvdGVzXG4gICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuXG4gICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvXFxuIHs0fS9nLCAnICcpO1xuICAgIGNvbnRlbnQucmVwbGFjZSgvXihbXFxTIF0rKTogKyhbXFxzXFxTXSs/KSQvZ20sIGZ1bmN0aW9uICh3bSwga2V5LCB2YWx1ZSkge1xuICAgICAgZ2xvYmFscy5tZXRhZGF0YS5wYXJzZWRba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuICB9XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXlxccyrCq8KrwqsrKFxcUyo/KVxcbihbXFxzXFxTXSs/KVxcbsK7wrvCuytcXG4vLCBmdW5jdGlvbiAod2hvbGVtYXRjaCwgZm9ybWF0LCBjb250ZW50KSB7XG4gICAgcGFyc2VNZXRhZGF0YUNvbnRlbnRzKGNvbnRlbnQpO1xuICAgIHJldHVybiAnwqhNJztcbiAgfSk7XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXlxccyotLS0rKFxcUyo/KVxcbihbXFxzXFxTXSs/KVxcbi0tLStcXG4vLCBmdW5jdGlvbiAod2hvbGVtYXRjaCwgZm9ybWF0LCBjb250ZW50KSB7XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgZ2xvYmFscy5tZXRhZGF0YS5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgfVxuICAgIHBhcnNlTWV0YWRhdGFDb250ZW50cyhjb250ZW50KTtcbiAgICByZXR1cm4gJ8KoTSc7XG4gIH0pO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoTS9nLCAnJyk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnbWV0YWRhdGEuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIFJlbW92ZSBvbmUgbGV2ZWwgb2YgbGluZS1sZWFkaW5nIHRhYnMgb3Igc3BhY2VzXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignb3V0ZGVudCcsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnb3V0ZGVudC5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBhdHRhY2tsYWI6IGhhY2sgYXJvdW5kIEtvbnF1ZXJvciAzLjUuNCBidWc6XG4gIC8vIFwiLS0tLS0tLS0tLWJ1Z1wiLnJlcGxhY2UoL14tL2csXCJcIikgPT0gXCJidWdcIlxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9eKFxcdHxbIF17MSw0fSkvZ20sICfCqDAnKTsgLy8gYXR0YWNrbGFiOiBnX3RhYl93aWR0aFxuXG4gIC8vIGF0dGFja2xhYjogY2xlYW4gdXAgaGFja1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqDAvZywgJycpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ291dGRlbnQuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcigncGFyYWdyYXBocycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdwYXJhZ3JhcGhzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAvLyBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBsaW5lczpcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXlxcbisvZywgJycpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG4rJC9nLCAnJyk7XG5cbiAgdmFyIGdyYWZzID0gdGV4dC5zcGxpdCgvXFxuezIsfS9nKSxcbiAgICAgIGdyYWZzT3V0ID0gW10sXG4gICAgICBlbmQgPSBncmFmcy5sZW5ndGg7IC8vIFdyYXAgPHA+IHRhZ3NcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgdmFyIHN0ciA9IGdyYWZzW2ldO1xuICAgIC8vIGlmIHRoaXMgaXMgYW4gSFRNTCBtYXJrZXIsIGNvcHkgaXRcbiAgICBpZiAoc3RyLnNlYXJjaCgvwqgoS3xHKShcXGQrKVxcMS9nKSA+PSAwKSB7XG4gICAgICBncmFmc091dC5wdXNoKHN0cik7XG5cbiAgICAvLyB0ZXN0IGZvciBwcmVzZW5jZSBvZiBjaGFyYWN0ZXJzIHRvIHByZXZlbnQgZW1wdHkgbGluZXMgYmVpbmcgcGFyc2VkXG4gICAgLy8gYXMgcGFyYWdyYXBocyAocmVzdWx0aW5nIGluIHVuZGVzaXJlZCBleHRyYSBlbXB0eSBwYXJhZ3JhcGhzKVxuICAgIH0gZWxzZSBpZiAoc3RyLnNlYXJjaCgvXFxTLykgPj0gMCkge1xuICAgICAgc3RyID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdzcGFuR2FtdXQnKShzdHIsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL14oWyBcXHRdKikvZywgJzxwPicpO1xuICAgICAgc3RyICs9ICc8L3A+JztcbiAgICAgIGdyYWZzT3V0LnB1c2goc3RyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVW5oYXNoaWZ5IEhUTUwgYmxvY2tzICovXG4gIGVuZCA9IGdyYWZzT3V0Lmxlbmd0aDtcbiAgZm9yIChpID0gMDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgdmFyIGJsb2NrVGV4dCA9ICcnLFxuICAgICAgICBncmFmc091dEl0ID0gZ3JhZnNPdXRbaV0sXG4gICAgICAgIGNvZGVGbGFnID0gZmFsc2U7XG4gICAgLy8gaWYgdGhpcyBpcyBhIG1hcmtlciBmb3IgYW4gaHRtbCBibG9jay4uLlxuICAgIC8vIHVzZSBSZWdFeHAudGVzdCBpbnN0ZWFkIG9mIHN0cmluZy5zZWFyY2ggYmVjYXVzZSBvZiBRTUwgYnVnXG4gICAgd2hpbGUgKC/CqChLfEcpKFxcZCspXFwxLy50ZXN0KGdyYWZzT3V0SXQpKSB7XG4gICAgICB2YXIgZGVsaW0gPSBSZWdFeHAuJDEsXG4gICAgICAgICAgbnVtICAgPSBSZWdFeHAuJDI7XG5cbiAgICAgIGlmIChkZWxpbSA9PT0gJ0snKSB7XG4gICAgICAgIGJsb2NrVGV4dCA9IGdsb2JhbHMuZ0h0bWxCbG9ja3NbbnVtXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gY2hlY2sgaWYgZ2hCbG9jayBpcyBhIGZhbHNlIHBvc2l0aXZlXG4gICAgICAgIGlmIChjb2RlRmxhZykge1xuICAgICAgICAgIC8vIHVzZSBlbmNvZGVkIHZlcnNpb24gb2YgYWxsIHRleHRcbiAgICAgICAgICBibG9ja1RleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUNvZGUnKShnbG9iYWxzLmdoQ29kZUJsb2Nrc1tudW1dLnRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2NrVGV4dCA9IGdsb2JhbHMuZ2hDb2RlQmxvY2tzW251bV0uY29kZWJsb2NrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBibG9ja1RleHQgPSBibG9ja1RleHQucmVwbGFjZSgvXFwkL2csICckJCQkJyk7IC8vIEVzY2FwZSBhbnkgZG9sbGFyIHNpZ25zXG5cbiAgICAgIGdyYWZzT3V0SXQgPSBncmFmc091dEl0LnJlcGxhY2UoLyhcXG5cXG4pP8KoKEt8RylcXGQrXFwyKFxcblxcbik/LywgYmxvY2tUZXh0KTtcbiAgICAgIC8vIENoZWNrIGlmIGdyYWZzT3V0SXQgaXMgYSBwcmUtPmNvZGVcbiAgICAgIGlmICgvXjxwcmVcXGJbXj5dKj5cXHMqPGNvZGVcXGJbXj5dKj4vLnRlc3QoZ3JhZnNPdXRJdCkpIHtcbiAgICAgICAgY29kZUZsYWcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBncmFmc091dFtpXSA9IGdyYWZzT3V0SXQ7XG4gIH1cbiAgdGV4dCA9IGdyYWZzT3V0LmpvaW4oJ1xcbicpO1xuICAvLyBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBsaW5lczpcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXlxcbisvZywgJycpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG4rJC9nLCAnJyk7XG4gIHJldHVybiBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ3BhcmFncmFwaHMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbn0pO1xuXHJcbi8qKlxuICogUnVuIGV4dGVuc2lvblxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3J1bkV4dGVuc2lvbicsIGZ1bmN0aW9uIChleHQsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmIChleHQuZmlsdGVyKSB7XG4gICAgdGV4dCA9IGV4dC5maWx0ZXIodGV4dCwgZ2xvYmFscy5jb252ZXJ0ZXIsIG9wdGlvbnMpO1xuXG4gIH0gZWxzZSBpZiAoZXh0LnJlZ2V4KSB7XG4gICAgLy8gVE9ETyByZW1vdmUgdGhpcyB3aGVuIG9sZCBleHRlbnNpb24gbG9hZGluZyBtZWNoYW5pc20gaXMgZGVwcmVjYXRlZFxuICAgIHZhciByZSA9IGV4dC5yZWdleDtcbiAgICBpZiAoIShyZSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgIHJlID0gbmV3IFJlZ0V4cChyZSwgJ2cnKTtcbiAgICB9XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZShyZSwgZXh0LnJlcGxhY2UpO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIFRoZXNlIGFyZSBhbGwgdGhlIHRyYW5zZm9ybWF0aW9ucyB0aGF0IG9jY3VyICp3aXRoaW4qIGJsb2NrLWxldmVsXG4gKiB0YWdzIGxpa2UgcGFyYWdyYXBocywgaGVhZGVycywgYW5kIGxpc3QgaXRlbXMuXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignc3BhbkdhbXV0JywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ3NwYW5HYW11dC5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignY29kZVNwYW5zJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2VzY2FwZVNwZWNpYWxDaGFyc1dpdGhpblRhZ0F0dHJpYnV0ZXMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignZW5jb2RlQmFja3NsYXNoRXNjYXBlcycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIFByb2Nlc3MgYW5jaG9yIGFuZCBpbWFnZSB0YWdzLiBJbWFnZXMgbXVzdCBjb21lIGZpcnN0LFxuICAvLyBiZWNhdXNlICFbZm9vXVtmXSBsb29rcyBsaWtlIGFuIGFuY2hvci5cbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignaW1hZ2VzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2FuY2hvcnMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBNYWtlIGxpbmtzIG91dCBvZiB0aGluZ3MgbGlrZSBgPGh0dHA6Ly9leGFtcGxlLmNvbS8+YFxuICAvLyBNdXN0IGNvbWUgYWZ0ZXIgYW5jaG9ycywgYmVjYXVzZSB5b3UgY2FuIHVzZSA8IGFuZCA+XG4gIC8vIGRlbGltaXRlcnMgaW4gaW5saW5lIGxpbmtzIGxpa2UgW3RoaXNdKDx1cmw+KS5cbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignYXV0b0xpbmtzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3NpbXBsaWZpZWRBdXRvTGlua3MnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignZW1vamknKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcigndW5kZXJsaW5lJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2l0YWxpY3NBbmRCb2xkJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3N0cmlrZXRocm91Z2gnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignZWxsaXBzaXMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyB3ZSBuZWVkIHRvIGhhc2ggSFRNTCB0YWdzIGluc2lkZSBzcGFuc1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoSFRNTFNwYW5zJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gbm93IHdlIGVuY29kZSBhbXBzIGFuZCBhbmdsZXNcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignZW5jb2RlQW1wc0FuZEFuZ2xlcycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIERvIGhhcmQgYnJlYWtzXG4gIGlmIChvcHRpb25zLnNpbXBsZUxpbmVCcmVha3MpIHtcbiAgICAvLyBHRk0gc3R5bGUgaGFyZCBicmVha3NcbiAgICAvLyBvbmx5IGFkZCBsaW5lIGJyZWFrcyBpZiB0aGUgdGV4dCBkb2VzIG5vdCBjb250YWluIGEgYmxvY2sgKHNwZWNpYWwgY2FzZSBmb3IgbGlzdHMpXG4gICAgaWYgKCEvXFxuXFxuwqhLLy50ZXN0KHRleHQpKSB7XG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG4rL2csICc8YnIgLz5cXG4nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVmFuaWxsYSBoYXJkIGJyZWFrc1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyAgK1xcbi9nLCAnPGJyIC8+XFxuJyk7XG4gIH1cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdzcGFuR2FtdXQuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3N0cmlrZXRocm91Z2gnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gcGFyc2VJbnNpZGUgKHR4dCkge1xuICAgIGlmIChvcHRpb25zLnNpbXBsaWZpZWRBdXRvTGluaykge1xuICAgICAgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdzaW1wbGlmaWVkQXV0b0xpbmtzJykodHh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICB9XG4gICAgcmV0dXJuICc8ZGVsPicgKyB0eHQgKyAnPC9kZWw+JztcbiAgfVxuXG4gIGlmIChvcHRpb25zLnN0cmlrZXRocm91Z2gpIHtcbiAgICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdzdHJpa2V0aHJvdWdoLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyg/On4pezJ9KFtcXHNcXFNdKz8pKD86fil7Mn0vZywgZnVuY3Rpb24gKHdtLCB0eHQpIHsgcmV0dXJuIHBhcnNlSW5zaWRlKHR4dCk7IH0pO1xuICAgIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ3N0cmlrZXRocm91Z2guYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgfVxuXG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBTdHJpcHMgbGluayBkZWZpbml0aW9ucyBmcm9tIHRleHQsIHN0b3JlcyB0aGUgVVJMcyBhbmQgdGl0bGVzIGluXG4gKiBoYXNoIHJlZmVyZW5jZXMuXG4gKiBMaW5rIGRlZnMgYXJlIGluIHRoZSBmb3JtOiBeW2lkXTogdXJsIFwib3B0aW9uYWwgdGl0bGVcIlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3N0cmlwTGlua0RlZmluaXRpb25zJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciByZWdleCAgICAgICA9IC9eIHswLDN9XFxbKC4rKV06WyBcXHRdKlxcbj9bIFxcdF0qPD8oW14+XFxzXSspPj8oPzogPShbKlxcZF0rW0EtWmEteiVdezAsNH0peChbKlxcZF0rW0EtWmEteiVdezAsNH0pKT9bIFxcdF0qXFxuP1sgXFx0XSooPzooXFxuKilbXCJ8JyhdKC4rPylbXCJ8JyldWyBcXHRdKik/KD86XFxuK3woPz3CqDApKS9nbSxcbiAgICAgIGJhc2U2NFJlZ2V4ID0gL14gezAsM31cXFsoLispXTpbIFxcdF0qXFxuP1sgXFx0XSo8PyhkYXRhOi4rP1xcLy4rPztiYXNlNjQsW0EtWmEtejAtOSsvPVxcbl0rPyk+Pyg/OiA9KFsqXFxkXStbQS1aYS16JV17MCw0fSl4KFsqXFxkXStbQS1aYS16JV17MCw0fSkpP1sgXFx0XSpcXG4/WyBcXHRdKig/OihcXG4qKVtcInwnKF0oLis/KVtcInwnKV1bIFxcdF0qKT8oPzpcXG5cXG58KD89wqgwKXwoPz1cXG5cXFspKS9nbTtcblxuICAvLyBhdHRhY2tsYWI6IHNlbnRpbmVsIHdvcmthcm91bmRzIGZvciBsYWNrIG9mIFxcQSBhbmQgXFxaLCBzYWZhcmlcXGtodG1sIGJ1Z1xuICB0ZXh0ICs9ICfCqDAnO1xuXG4gIHZhciByZXBsYWNlRnVuYyA9IGZ1bmN0aW9uICh3aG9sZU1hdGNoLCBsaW5rSWQsIHVybCwgd2lkdGgsIGhlaWdodCwgYmxhbmtMaW5lcywgdGl0bGUpIHtcbiAgICBsaW5rSWQgPSBsaW5rSWQudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodXJsLm1hdGNoKC9eZGF0YTouKz9cXC8uKz87YmFzZTY0LC8pKSB7XG4gICAgICAvLyByZW1vdmUgbmV3bGluZXNcbiAgICAgIGdsb2JhbHMuZ1VybHNbbGlua0lkXSA9IHVybC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnbG9iYWxzLmdVcmxzW2xpbmtJZF0gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUFtcHNBbmRBbmdsZXMnKSh1cmwsIG9wdGlvbnMsIGdsb2JhbHMpOyAgLy8gTGluayBJRHMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcbiAgICB9XG5cbiAgICBpZiAoYmxhbmtMaW5lcykge1xuICAgICAgLy8gT29wcywgZm91bmQgYmxhbmsgbGluZXMsIHNvIGl0J3Mgbm90IGEgdGl0bGUuXG4gICAgICAvLyBQdXQgYmFjayB0aGUgcGFyZW50aGV0aWNhbCBzdGF0ZW1lbnQgd2Ugc3RvbGUuXG4gICAgICByZXR1cm4gYmxhbmtMaW5lcyArIHRpdGxlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICBnbG9iYWxzLmdUaXRsZXNbbGlua0lkXSA9IHRpdGxlLnJlcGxhY2UoL1wifCcvZywgJyZxdW90OycpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucGFyc2VJbWdEaW1lbnNpb25zICYmIHdpZHRoICYmIGhlaWdodCkge1xuICAgICAgICBnbG9iYWxzLmdEaW1lbnNpb25zW2xpbmtJZF0gPSB7XG4gICAgICAgICAgd2lkdGg6ICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21wbGV0ZWx5IHJlbW92ZSB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0ZXh0XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIC8vIGZpcnN0IHdlIHRyeSB0byBmaW5kIGJhc2U2NCBsaW5rIHJlZmVyZW5jZXNcbiAgdGV4dCA9IHRleHQucmVwbGFjZShiYXNlNjRSZWdleCwgcmVwbGFjZUZ1bmMpO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVnZXgsIHJlcGxhY2VGdW5jKTtcblxuICAvLyBhdHRhY2tsYWI6IHN0cmlwIHNlbnRpbmVsXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoMC8sICcnKTtcblxuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcigndGFibGVzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmICghb3B0aW9ucy50YWJsZXMpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHZhciB0YWJsZVJneCAgICAgICA9IC9eIHswLDN9XFx8Py4rXFx8LitcXG4gezAsM31cXHw/WyBcXHRdKjo/WyBcXHRdKig/OlstPV0pezIsfVsgXFx0XSo6P1sgXFx0XSpcXHxbIFxcdF0qOj9bIFxcdF0qKD86Wy09XSl7Mix9W1xcc1xcU10rPyg/OlxcblxcbnzCqDApL2dtLFxuICAgIC8vc2luZ2VDb2xUYmxSZ3ggPSAvXiB7MCwzfVxcfC4rXFx8XFxuIHswLDN9XFx8WyBcXHRdKjo/WyBcXHRdKig/OlstPV0pezIsfVsgXFx0XSo6P1sgXFx0XSpcXHxbIFxcdF0qXFxuKD86IHswLDN9XFx8LitcXHxcXG4pKyg/OlxcblxcbnzCqDApL2dtO1xuICAgICAgc2luZ2VDb2xUYmxSZ3ggPSAvXiB7MCwzfVxcfC4rXFx8WyBcXHRdKlxcbiB7MCwzfVxcfFsgXFx0XSo6P1sgXFx0XSooPzpbLT1dKXsyLH1bIFxcdF0qOj9bIFxcdF0qXFx8WyBcXHRdKlxcbiggezAsM31cXHwuK1xcfFsgXFx0XSpcXG4pKig/OlxcbnzCqDApL2dtO1xuXG4gIGZ1bmN0aW9uIHBhcnNlU3R5bGVzIChzTGluZSkge1xuICAgIGlmICgvXjpbIFxcdF0qLS0qJC8udGVzdChzTGluZSkpIHtcbiAgICAgIHJldHVybiAnIHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0O1wiJztcbiAgICB9IGVsc2UgaWYgKC9eLS0qWyBcXHRdKjpbIFxcdF0qJC8udGVzdChzTGluZSkpIHtcbiAgICAgIHJldHVybiAnIHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodDtcIic7XG4gICAgfSBlbHNlIGlmICgvXjpbIFxcdF0qLS0qWyBcXHRdKjokLy50ZXN0KHNMaW5lKSkge1xuICAgICAgcmV0dXJuICcgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlciwgc3R5bGUpIHtcbiAgICB2YXIgaWQgPSAnJztcbiAgICBoZWFkZXIgPSBoZWFkZXIudHJpbSgpO1xuICAgIC8vIHN1cHBvcnQgYm90aCB0YWJsZXNIZWFkZXJJZCBhbmQgdGFibGVIZWFkZXJJZCBkdWUgdG8gZXJyb3IgaW4gZG9jdW1lbnRhdGlvbiBzbyB3ZSBkb24ndCBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIGlmIChvcHRpb25zLnRhYmxlc0hlYWRlcklkIHx8IG9wdGlvbnMudGFibGVIZWFkZXJJZCkge1xuICAgICAgaWQgPSAnIGlkPVwiJyArIGhlYWRlci5yZXBsYWNlKC8gL2csICdfJykudG9Mb3dlckNhc2UoKSArICdcIic7XG4gICAgfVxuICAgIGhlYWRlciA9IHNob3dkb3duLnN1YlBhcnNlcignc3BhbkdhbXV0JykoaGVhZGVyLCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAgIHJldHVybiAnPHRoJyArIGlkICsgc3R5bGUgKyAnPicgKyBoZWFkZXIgKyAnPC90aD5cXG4nO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDZWxscyAoY2VsbCwgc3R5bGUpIHtcbiAgICB2YXIgc3ViVGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignc3BhbkdhbXV0JykoY2VsbCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgcmV0dXJuICc8dGQnICsgc3R5bGUgKyAnPicgKyBzdWJUZXh0ICsgJzwvdGQ+XFxuJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkVGFibGUgKGhlYWRlcnMsIGNlbGxzKSB7XG4gICAgdmFyIHRiID0gJzx0YWJsZT5cXG48dGhlYWQ+XFxuPHRyPlxcbicsXG4gICAgICAgIHRibExnbiA9IGhlYWRlcnMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YmxMZ247ICsraSkge1xuICAgICAgdGIgKz0gaGVhZGVyc1tpXTtcbiAgICB9XG4gICAgdGIgKz0gJzwvdHI+XFxuPC90aGVhZD5cXG48dGJvZHk+XFxuJztcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7ICsraSkge1xuICAgICAgdGIgKz0gJzx0cj5cXG4nO1xuICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRibExnbjsgKytpaSkge1xuICAgICAgICB0YiArPSBjZWxsc1tpXVtpaV07XG4gICAgICB9XG4gICAgICB0YiArPSAnPC90cj5cXG4nO1xuICAgIH1cbiAgICB0YiArPSAnPC90Ym9keT5cXG48L3RhYmxlPlxcbic7XG4gICAgcmV0dXJuIHRiO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VUYWJsZSAocmF3VGFibGUpIHtcbiAgICB2YXIgaSwgdGFibGVMaW5lcyA9IHJhd1RhYmxlLnNwbGl0KCdcXG4nKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0YWJsZUxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAvLyBzdHJpcCB3cm9uZyBmaXJzdCBhbmQgbGFzdCBjb2x1bW4gaWYgd3JhcHBlZCB0YWJsZXMgYXJlIHVzZWRcbiAgICAgIGlmICgvXiB7MCwzfVxcfC8udGVzdCh0YWJsZUxpbmVzW2ldKSkge1xuICAgICAgICB0YWJsZUxpbmVzW2ldID0gdGFibGVMaW5lc1tpXS5yZXBsYWNlKC9eIHswLDN9XFx8LywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKC9cXHxbIFxcdF0qJC8udGVzdCh0YWJsZUxpbmVzW2ldKSkge1xuICAgICAgICB0YWJsZUxpbmVzW2ldID0gdGFibGVMaW5lc1tpXS5yZXBsYWNlKC9cXHxbIFxcdF0qJC8sICcnKTtcbiAgICAgIH1cbiAgICAgIC8vIHBhcnNlIGNvZGUgc3BhbnMgZmlyc3QsIGJ1dCB3ZSBvbmx5IHN1cHBvcnQgb25lIGxpbmUgY29kZSBzcGFuc1xuICAgICAgdGFibGVMaW5lc1tpXSA9IHNob3dkb3duLnN1YlBhcnNlcignY29kZVNwYW5zJykodGFibGVMaW5lc1tpXSwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgfVxuXG4gICAgdmFyIHJhd0hlYWRlcnMgPSB0YWJsZUxpbmVzWzBdLnNwbGl0KCd8JykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLnRyaW0oKTt9KSxcbiAgICAgICAgcmF3U3R5bGVzID0gdGFibGVMaW5lc1sxXS5zcGxpdCgnfCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy50cmltKCk7fSksXG4gICAgICAgIHJhd0NlbGxzID0gW10sXG4gICAgICAgIGhlYWRlcnMgPSBbXSxcbiAgICAgICAgc3R5bGVzID0gW10sXG4gICAgICAgIGNlbGxzID0gW107XG5cbiAgICB0YWJsZUxpbmVzLnNoaWZ0KCk7XG4gICAgdGFibGVMaW5lcy5zaGlmdCgpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRhYmxlTGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmICh0YWJsZUxpbmVzW2ldLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByYXdDZWxscy5wdXNoKFxuICAgICAgICB0YWJsZUxpbmVzW2ldXG4gICAgICAgICAgLnNwbGl0KCd8JylcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJhd0hlYWRlcnMubGVuZ3RoIDwgcmF3U3R5bGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJhd1RhYmxlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCByYXdTdHlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHBhcnNlU3R5bGVzKHJhd1N0eWxlc1tpXSkpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCByYXdIZWFkZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKHN0eWxlc1tpXSkpIHtcbiAgICAgICAgc3R5bGVzW2ldID0gJyc7XG4gICAgICB9XG4gICAgICBoZWFkZXJzLnB1c2gocGFyc2VIZWFkZXJzKHJhd0hlYWRlcnNbaV0sIHN0eWxlc1tpXSkpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCByYXdDZWxscy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHJvdyA9IFtdO1xuICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGhlYWRlcnMubGVuZ3RoOyArK2lpKSB7XG4gICAgICAgIGlmIChzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQocmF3Q2VsbHNbaV1baWldKSkge1xuXG4gICAgICAgIH1cbiAgICAgICAgcm93LnB1c2gocGFyc2VDZWxscyhyYXdDZWxsc1tpXVtpaV0sIHN0eWxlc1tpaV0pKTtcbiAgICAgIH1cbiAgICAgIGNlbGxzLnB1c2gocm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRUYWJsZShoZWFkZXJzLCBjZWxscyk7XG4gIH1cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCd0YWJsZXMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gZmluZCBlc2NhcGVkIHBpcGUgY2hhcmFjdGVyc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFxcKFxcfCkvZywgc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG5cbiAgLy8gcGFyc2UgbXVsdGkgY29sdW1uIHRhYmxlc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHRhYmxlUmd4LCBwYXJzZVRhYmxlKTtcblxuICAvLyBwYXJzZSBvbmUgY29sdW1uIHRhYmxlc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHNpbmdlQ29sVGJsUmd4LCBwYXJzZVRhYmxlKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCd0YWJsZXMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcigndW5kZXJsaW5lJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmICghb3B0aW9ucy51bmRlcmxpbmUpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ3VuZGVybGluZS5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICBpZiAob3B0aW9ucy5saXRlcmFsTWlkV29yZFVuZGVyc2NvcmVzKSB7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxiX19fKFxcU1tcXHNcXFNdKj8pX19fXFxiL2csIGZ1bmN0aW9uICh3bSwgdHh0KSB7XG4gICAgICByZXR1cm4gJzx1PicgKyB0eHQgKyAnPC91Pic7XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxiX18oXFxTW1xcc1xcU10qPylfX1xcYi9nLCBmdW5jdGlvbiAod20sIHR4dCkge1xuICAgICAgcmV0dXJuICc8dT4nICsgdHh0ICsgJzwvdT4nO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fXyhcXFNbXFxzXFxTXSo/KV9fXy9nLCBmdW5jdGlvbiAod20sIG0pIHtcbiAgICAgIHJldHVybiAoL1xcUyQvLnRlc3QobSkpID8gJzx1PicgKyBtICsgJzwvdT4nIDogd207XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX18oXFxTW1xcc1xcU10qPylfXy9nLCBmdW5jdGlvbiAod20sIG0pIHtcbiAgICAgIHJldHVybiAoL1xcUyQvLnRlc3QobSkpID8gJzx1PicgKyBtICsgJzwvdT4nIDogd207XG4gICAgfSk7XG4gIH1cblxuICAvLyBlc2NhcGUgcmVtYWluaW5nIHVuZGVyc2NvcmVzIHRvIHByZXZlbnQgdGhlbSBiZWluZyBwYXJzZWQgYnkgaXRhbGljIGFuZCBib2xkXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhfKS9nLCBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCd1bmRlcmxpbmUuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogU3dhcCBiYWNrIGluIGFsbCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHdlJ3ZlIGhpZGRlbi5cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCd1bmVzY2FwZVNwZWNpYWxDaGFycycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgndW5lc2NhcGVTcGVjaWFsQ2hhcnMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvwqhFKFxcZCspRS9nLCBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbTEpIHtcbiAgICB2YXIgY2hhckNvZGVUb1JlcGxhY2UgPSBwYXJzZUludChtMSk7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGVUb1JlcGxhY2UpO1xuICB9KTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCd1bmVzY2FwZVNwZWNpYWxDaGFycy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmJsb2NrcXVvdGUnLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHR4dCA9ICcnO1xuICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICAgIGNoaWxkcmVuTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgaW5uZXJUeHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ub2RlJykoY2hpbGRyZW5baV0sIGdsb2JhbHMpO1xuXG4gICAgICBpZiAoaW5uZXJUeHQgPT09ICcnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdHh0ICs9IGlubmVyVHh0O1xuICAgIH1cbiAgfVxuICAvLyBjbGVhbnVwXG4gIHR4dCA9IHR4dC50cmltKCk7XG4gIHR4dCA9ICc+ICcgKyB0eHQuc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbj4gJyk7XG4gIHJldHVybiB0eHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5jb2RlQmxvY2snLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGxhbmcgPSBub2RlLmdldEF0dHJpYnV0ZSgnbGFuZ3VhZ2UnKSxcbiAgICAgIG51bSAgPSBub2RlLmdldEF0dHJpYnV0ZSgncHJlY29kZW51bScpO1xuICByZXR1cm4gJ2BgYCcgKyBsYW5nICsgJ1xcbicgKyBnbG9iYWxzLnByZUxpc3RbbnVtXSArICdcXG5gYGAnO1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uY29kZVNwYW4nLCBmdW5jdGlvbiAobm9kZSkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgcmV0dXJuICdgJyArIG5vZGUuaW5uZXJIVE1MICsgJ2AnO1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uZW1waGFzaXMnLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHR4dCA9ICcnO1xuICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICB0eHQgKz0gJyonO1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcyxcbiAgICAgICAgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgKytpKSB7XG4gICAgICB0eHQgKz0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubm9kZScpKGNoaWxkcmVuW2ldLCBnbG9iYWxzKTtcbiAgICB9XG4gICAgdHh0ICs9ICcqJztcbiAgfVxuICByZXR1cm4gdHh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uaGVhZGVyJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMsIGhlYWRlckxldmVsKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgaGVhZGVyTWFyayA9IG5ldyBBcnJheShoZWFkZXJMZXZlbCArIDEpLmpvaW4oJyMnKSxcbiAgICAgIHR4dCA9ICcnO1xuXG4gIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgIHR4dCA9IGhlYWRlck1hcmsgKyAnICc7XG4gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7ICsraSkge1xuICAgICAgdHh0ICs9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLm5vZGUnKShjaGlsZHJlbltpXSwgZ2xvYmFscyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0eHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ocicsIGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHJldHVybiAnLS0tJztcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmltYWdlJywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB0eHQgPSAnJztcbiAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKCdzcmMnKSkge1xuICAgIHR4dCArPSAnIVsnICsgbm9kZS5nZXRBdHRyaWJ1dGUoJ2FsdCcpICsgJ10oJztcbiAgICB0eHQgKz0gJzwnICsgbm9kZS5nZXRBdHRyaWJ1dGUoJ3NyYycpICsgJz4nO1xuICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZSgnd2lkdGgnKSAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnaGVpZ2h0JykpIHtcbiAgICAgIHR4dCArPSAnID0nICsgbm9kZS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJykgKyAneCcgKyBub2RlLmdldEF0dHJpYnV0ZSgnaGVpZ2h0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKCd0aXRsZScpKSB7XG4gICAgICB0eHQgKz0gJyBcIicgKyBub2RlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSArICdcIic7XG4gICAgfVxuICAgIHR4dCArPSAnKSc7XG4gIH1cbiAgcmV0dXJuIHR4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmxpbmtzJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB0eHQgPSAnJztcbiAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpICYmIG5vZGUuaGFzQXR0cmlidXRlKCdocmVmJykpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICAgIGNoaWxkcmVuTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHR4dCA9ICdbJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyArK2kpIHtcbiAgICAgIHR4dCArPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ub2RlJykoY2hpbGRyZW5baV0sIGdsb2JhbHMpO1xuICAgIH1cbiAgICB0eHQgKz0gJ10oJztcbiAgICB0eHQgKz0gJzwnICsgbm9kZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSArICc+JztcbiAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoJ3RpdGxlJykpIHtcbiAgICAgIHR4dCArPSAnIFwiJyArIG5vZGUuZ2V0QXR0cmlidXRlKCd0aXRsZScpICsgJ1wiJztcbiAgICB9XG4gICAgdHh0ICs9ICcpJztcbiAgfVxuICByZXR1cm4gdHh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubGlzdCcsIGZ1bmN0aW9uIChub2RlLCBnbG9iYWxzLCB0eXBlKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdHh0ID0gJyc7XG4gIGlmICghbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgdmFyIGxpc3RJdGVtcyAgICAgICA9IG5vZGUuY2hpbGROb2RlcyxcbiAgICAgIGxpc3RJdGVtc0xlbmdodCA9IGxpc3RJdGVtcy5sZW5ndGgsXG4gICAgICBsaXN0TnVtID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3N0YXJ0JykgfHwgMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RJdGVtc0xlbmdodDsgKytpKSB7XG4gICAgaWYgKHR5cGVvZiBsaXN0SXRlbXNbaV0udGFnTmFtZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbGlzdEl0ZW1zW2ldLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2xpJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gZGVmaW5lIHRoZSBidWxsZXQgdG8gdXNlIGluIGxpc3RcbiAgICB2YXIgYnVsbGV0ID0gJyc7XG4gICAgaWYgKHR5cGUgPT09ICdvbCcpIHtcbiAgICAgIGJ1bGxldCA9IGxpc3ROdW0udG9TdHJpbmcoKSArICcuICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1bGxldCA9ICctICc7XG4gICAgfVxuXG4gICAgLy8gcGFyc2UgbGlzdCBpdGVtXG4gICAgdHh0ICs9IGJ1bGxldCArIHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmxpc3RJdGVtJykobGlzdEl0ZW1zW2ldLCBnbG9iYWxzKTtcbiAgICArK2xpc3ROdW07XG4gIH1cblxuICAvLyBhZGQgY29tbWVudCBhdCB0aGUgZW5kIHRvIHByZXZlbnQgY29uc2VjdXRpdmUgbGlzdHMgdG8gYmUgcGFyc2VkIGFzIG9uZVxuICB0eHQgKz0gJ1xcbjwhLS0gLS0+XFxuJztcbiAgcmV0dXJuIHR4dC50cmltKCk7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5saXN0SXRlbScsIGZ1bmN0aW9uIChub2RlLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgbGlzdEl0ZW1UeHQgPSAnJztcblxuICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICBjaGlsZHJlbkxlbmdodCA9IGNoaWxkcmVuLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ2h0OyArK2kpIHtcbiAgICBsaXN0SXRlbVR4dCArPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ub2RlJykoY2hpbGRyZW5baV0sIGdsb2JhbHMpO1xuICB9XG4gIC8vIGlmIGl0J3Mgb25seSBvbmUgbGluZXIsIHdlIG5lZWQgdG8gYWRkIGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gIGlmICghL1xcbiQvLnRlc3QobGlzdEl0ZW1UeHQpKSB7XG4gICAgbGlzdEl0ZW1UeHQgKz0gJ1xcbic7XG4gIH0gZWxzZSB7XG4gICAgLy8gaXQncyBtdWx0aXBhcmFncmFwaCwgc28gd2UgbmVlZCB0byBpbmRlbnRcbiAgICBsaXN0SXRlbVR4dCA9IGxpc3RJdGVtVHh0XG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuam9pbignXFxuICAgICcpXG4gICAgICAucmVwbGFjZSgvXiB7NH0kL2dtLCAnJylcbiAgICAgIC5yZXBsYWNlKC9cXG5cXG4rL2csICdcXG5cXG4nKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0SXRlbVR4dDtcbn0pO1xuXHJcblxuXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ub2RlJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMsIHNwYW5zT25seSkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgc3BhbnNPbmx5ID0gc3BhbnNPbmx5IHx8IGZhbHNlO1xuXG4gIHZhciB0eHQgPSAnJztcblxuICAvLyBlZGdlIGNhc2Ugb2YgdGV4dCB3aXRob3V0IHdyYXBwZXIgcGFyYWdyYXBoXG4gIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgcmV0dXJuIHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLnR4dCcpKG5vZGUsIGdsb2JhbHMpO1xuICB9XG5cbiAgLy8gSFRNTCBjb21tZW50XG4gIGlmIChub2RlLm5vZGVUeXBlID09PSA4KSB7XG4gICAgcmV0dXJuICc8IS0tJyArIG5vZGUuZGF0YSArICctLT5cXG5cXG4nO1xuICB9XG5cbiAgLy8gcHJvY2VzcyBvbmx5IG5vZGUgZWxlbWVudHNcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB2YXIgdGFnTmFtZSA9IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIHN3aXRjaCAodGFnTmFtZSkge1xuXG4gICAgLy9cbiAgICAvLyBCTE9DS1NcbiAgICAvL1xuICAgIGNhc2UgJ2gxJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmhlYWRlcicpKG5vZGUsIGdsb2JhbHMsIDEpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2gyJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmhlYWRlcicpKG5vZGUsIGdsb2JhbHMsIDIpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2gzJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmhlYWRlcicpKG5vZGUsIGdsb2JhbHMsIDMpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2g0JzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmhlYWRlcicpKG5vZGUsIGdsb2JhbHMsIDQpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2g1JzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmhlYWRlcicpKG5vZGUsIGdsb2JhbHMsIDUpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2g2JzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmhlYWRlcicpKG5vZGUsIGdsb2JhbHMsIDYpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncCc6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5wYXJhZ3JhcGgnKShub2RlLCBnbG9iYWxzKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgICAgaWYgKCFzcGFuc09ubHkpIHsgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uYmxvY2txdW90ZScpKG5vZGUsIGdsb2JhbHMpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaHInOlxuICAgICAgaWYgKCFzcGFuc09ubHkpIHsgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uaHInKShub2RlLCBnbG9iYWxzKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29sJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmxpc3QnKShub2RlLCBnbG9iYWxzLCAnb2wnKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3VsJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmxpc3QnKShub2RlLCBnbG9iYWxzLCAndWwnKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ByZWNvZGUnOlxuICAgICAgaWYgKCFzcGFuc09ubHkpIHsgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uY29kZUJsb2NrJykobm9kZSwgZ2xvYmFscykgKyAnXFxuXFxuJzsgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwcmUnOlxuICAgICAgaWYgKCFzcGFuc09ubHkpIHsgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ucHJlJykobm9kZSwgZ2xvYmFscykgKyAnXFxuXFxuJzsgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0YWJsZSc6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi50YWJsZScpKG5vZGUsIGdsb2JhbHMpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuXG4gICAgLy9cbiAgICAvLyBTUEFOU1xuICAgIC8vXG4gICAgY2FzZSAnY29kZSc6XG4gICAgICB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5jb2RlU3BhbicpKG5vZGUsIGdsb2JhbHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdlbSc6XG4gICAgY2FzZSAnaSc6XG4gICAgICB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5lbXBoYXNpcycpKG5vZGUsIGdsb2JhbHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzdHJvbmcnOlxuICAgIGNhc2UgJ2InOlxuICAgICAgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uc3Ryb25nJykobm9kZSwgZ2xvYmFscyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RlbCc6XG4gICAgICB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5zdHJpa2V0aHJvdWdoJykobm9kZSwgZ2xvYmFscyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2EnOlxuICAgICAgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubGlua3MnKShub2RlLCBnbG9iYWxzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICAgIHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmltYWdlJykobm9kZSwgZ2xvYmFscyk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0eHQgPSBub2RlLm91dGVySFRNTCArICdcXG5cXG4nO1xuICB9XG5cbiAgLy8gY29tbW9uIG5vcm1hbGl6YXRpb25cbiAgLy8gVE9ETyBldmVudHVhbGx5XG5cbiAgcmV0dXJuIHR4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLnBhcmFncmFwaCcsIGZ1bmN0aW9uIChub2RlLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdHh0ID0gJyc7XG4gIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcyxcbiAgICAgICAgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgKytpKSB7XG4gICAgICB0eHQgKz0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubm9kZScpKGNoaWxkcmVuW2ldLCBnbG9iYWxzKTtcbiAgICB9XG4gIH1cblxuICAvLyBzb21lIHRleHQgbm9ybWFsaXphdGlvblxuICB0eHQgPSB0eHQudHJpbSgpO1xuXG4gIHJldHVybiB0eHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5wcmUnLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIG51bSAgPSBub2RlLmdldEF0dHJpYnV0ZSgncHJlbnVtJyk7XG4gIHJldHVybiAnPHByZT4nICsgZ2xvYmFscy5wcmVMaXN0W251bV0gKyAnPC9wcmU+Jztcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLnN0cmlrZXRocm91Z2gnLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHR4dCA9ICcnO1xuICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICB0eHQgKz0gJ35+JztcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICAgIGNoaWxkcmVuTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7ICsraSkge1xuICAgICAgdHh0ICs9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLm5vZGUnKShjaGlsZHJlbltpXSwgZ2xvYmFscyk7XG4gICAgfVxuICAgIHR4dCArPSAnfn4nO1xuICB9XG4gIHJldHVybiB0eHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5zdHJvbmcnLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHR4dCA9ICcnO1xuICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICB0eHQgKz0gJyoqJztcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICAgIGNoaWxkcmVuTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7ICsraSkge1xuICAgICAgdHh0ICs9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLm5vZGUnKShjaGlsZHJlbltpXSwgZ2xvYmFscyk7XG4gICAgfVxuICAgIHR4dCArPSAnKionO1xuICB9XG4gIHJldHVybiB0eHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi50YWJsZScsIGZ1bmN0aW9uIChub2RlLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdHh0ID0gJycsXG4gICAgICB0YWJsZUFycmF5ID0gW1tdLCBbXV0sXG4gICAgICBoZWFkaW5ncyAgID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKCd0aGVhZD50cj50aCcpLFxuICAgICAgcm93cyAgICAgICA9IG5vZGUucXVlcnlTZWxlY3RvckFsbCgndGJvZHk+dHInKSxcbiAgICAgIGksIGlpO1xuICBmb3IgKGkgPSAwOyBpIDwgaGVhZGluZ3MubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgaGVhZENvbnRlbnQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi50YWJsZUNlbGwnKShoZWFkaW5nc1tpXSwgZ2xvYmFscyksXG4gICAgICAgIGFsbGlnbiA9ICctLS0nO1xuXG4gICAgaWYgKGhlYWRpbmdzW2ldLmhhc0F0dHJpYnV0ZSgnc3R5bGUnKSkge1xuICAgICAgdmFyIHN0eWxlID0gaGVhZGluZ3NbaV0uZ2V0QXR0cmlidXRlKCdzdHlsZScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgICAgY2FzZSAndGV4dC1hbGlnbjpsZWZ0Oyc6XG4gICAgICAgICAgYWxsaWduID0gJzotLS0nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZXh0LWFsaWduOnJpZ2h0Oyc6XG4gICAgICAgICAgYWxsaWduID0gJy0tLTonO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZXh0LWFsaWduOmNlbnRlcjsnOlxuICAgICAgICAgIGFsbGlnbiA9ICc6LS0tOic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRhYmxlQXJyYXlbMF1baV0gPSBoZWFkQ29udGVudC50cmltKCk7XG4gICAgdGFibGVBcnJheVsxXVtpXSA9IGFsbGlnbjtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHIgPSB0YWJsZUFycmF5LnB1c2goW10pIC0gMSxcbiAgICAgICAgY29scyA9IHJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RkJyk7XG5cbiAgICBmb3IgKGlpID0gMDsgaWkgPCBoZWFkaW5ncy5sZW5ndGg7ICsraWkpIHtcbiAgICAgIHZhciBjZWxsQ29udGVudCA9ICcgJztcbiAgICAgIGlmICh0eXBlb2YgY29sc1tpaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNlbGxDb250ZW50ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24udGFibGVDZWxsJykoY29sc1tpaV0sIGdsb2JhbHMpO1xuICAgICAgfVxuICAgICAgdGFibGVBcnJheVtyXS5wdXNoKGNlbGxDb250ZW50KTtcbiAgICB9XG4gIH1cblxuICB2YXIgY2VsbFNwYWNlc0NvdW50ID0gMztcbiAgZm9yIChpID0gMDsgaSA8IHRhYmxlQXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICBmb3IgKGlpID0gMDsgaWkgPCB0YWJsZUFycmF5W2ldLmxlbmd0aDsgKytpaSkge1xuICAgICAgdmFyIHN0ckxlbiA9IHRhYmxlQXJyYXlbaV1baWldLmxlbmd0aDtcbiAgICAgIGlmIChzdHJMZW4gPiBjZWxsU3BhY2VzQ291bnQpIHtcbiAgICAgICAgY2VsbFNwYWNlc0NvdW50ID0gc3RyTGVuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCB0YWJsZUFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgZm9yIChpaSA9IDA7IGlpIDwgdGFibGVBcnJheVtpXS5sZW5ndGg7ICsraWkpIHtcbiAgICAgIGlmIChpID09PSAxKSB7XG4gICAgICAgIGlmICh0YWJsZUFycmF5W2ldW2lpXS5zbGljZSgtMSkgPT09ICc6Jykge1xuICAgICAgICAgIHRhYmxlQXJyYXlbaV1baWldID0gc2hvd2Rvd24uaGVscGVyLnBhZEVuZCh0YWJsZUFycmF5W2ldW2lpXS5zbGljZSgtMSksIGNlbGxTcGFjZXNDb3VudCAtIDEsICctJykgKyAnOic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFibGVBcnJheVtpXVtpaV0gPSBzaG93ZG93bi5oZWxwZXIucGFkRW5kKHRhYmxlQXJyYXlbaV1baWldLCBjZWxsU3BhY2VzQ291bnQsICctJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhYmxlQXJyYXlbaV1baWldID0gc2hvd2Rvd24uaGVscGVyLnBhZEVuZCh0YWJsZUFycmF5W2ldW2lpXSwgY2VsbFNwYWNlc0NvdW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdHh0ICs9ICd8ICcgKyB0YWJsZUFycmF5W2ldLmpvaW4oJyB8ICcpICsgJyB8XFxuJztcbiAgfVxuXG4gIHJldHVybiB0eHQudHJpbSgpO1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24udGFibGVDZWxsJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB0eHQgPSAnJztcbiAgaWYgKCFub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyArK2kpIHtcbiAgICB0eHQgKz0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubm9kZScpKGNoaWxkcmVuW2ldLCBnbG9iYWxzLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gdHh0LnRyaW0oKTtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLnR4dCcsIGZ1bmN0aW9uIChub2RlKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdHh0ID0gbm9kZS5ub2RlVmFsdWU7XG5cbiAgLy8gbXVsdGlwbGUgc3BhY2VzIGFyZSBjb2xsYXBzZWRcbiAgdHh0ID0gdHh0LnJlcGxhY2UoLyArL2csICcgJyk7XG5cbiAgLy8gcmVwbGFjZSB0aGUgY3VzdG9tIMKoTkJTUDsgd2l0aCBhIHNwYWNlXG4gIHR4dCA9IHR4dC5yZXBsYWNlKC/CqE5CU1A7L2csICcgJyk7XG5cbiAgLy8gXCIsIDwsID4gYW5kICYgc2hvdWxkIHJlcGxhY2UgZXNjYXBlZCBodG1sIGVudGl0aWVzXG4gIHR4dCA9IHNob3dkb3duLmhlbHBlci51bmVzY2FwZUhUTUxFbnRpdGllcyh0eHQpO1xuXG4gIC8vIGVzY2FwZSBtYXJrZG93biBtYWdpYyBjaGFyYWN0ZXJzXG4gIC8vIGVtcGhhc2lzLCBzdHJvbmcgYW5kIHN0cmlrZXRocm91Z2ggLSBjYW4gYXBwZWFyIGV2ZXJ5d2hlcmVcbiAgLy8gd2UgYWxzbyBlc2NhcGUgcGlwZSAofCkgYmVjYXVzZSBvZiB0YWJsZXNcbiAgLy8gYW5kIGVzY2FwZSBgIGJlY2F1c2Ugb2YgY29kZSBibG9ja3MgYW5kIHNwYW5zXG4gIHR4dCA9IHR4dC5yZXBsYWNlKC8oWypffnxgXSkvZywgJ1xcXFwkMScpO1xuXG4gIC8vIGVzY2FwZSA+IGJlY2F1c2Ugb2YgYmxvY2txdW90ZXNcbiAgdHh0ID0gdHh0LnJlcGxhY2UoL14oXFxzKik+L2csICdcXFxcJDE+Jyk7XG5cbiAgLy8gaGFzaCBjaGFyYWN0ZXIsIG9ubHkgdHJvdWJsZXNvbWUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgYmVjYXVzZSBvZiBoZWFkZXJzXG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9eIy9nbSwgJ1xcXFwjJyk7XG5cbiAgLy8gaG9yaXpvbnRhbCBydWxlc1xuICB0eHQgPSB0eHQucmVwbGFjZSgvXihcXHMqKShbLT1dezMsfSkoXFxzKikkLywgJyQxXFxcXCQyJDMnKTtcblxuICAvLyBkb3QsIGJlY2F1c2Ugb2Ygb3JkZXJlZCBsaXN0cywgb25seSB0cm91Ymxlc29tZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSB3aGVuIHByZWNlZGVkIGJ5IGFuIGludGVnZXJcbiAgdHh0ID0gdHh0LnJlcGxhY2UoL14oIHswLDN9XFxkKylcXC4vZ20sICckMVxcXFwuJyk7XG5cbiAgLy8gKywgKiBhbmQgLSwgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgYmVjb21lcyBhIGxpc3QsIHNvIHdlIG5lZWQgdG8gZXNjYXBlIHRoZW0gYWxzbyAoYXN0ZXJpc2sgd2FzIGFscmVhZHkgZXNjYXBlZClcbiAgdHh0ID0gdHh0LnJlcGxhY2UoL14oIHswLDN9KShbKy1dKS9nbSwgJyQxXFxcXCQyJyk7XG5cbiAgLy8gaW1hZ2VzIGFuZCBsaW5rcywgXSBmb2xsb3dlZCBieSAoIGlzIHByb2JsZW1hdGljLCBzbyB3ZSBlc2NhcGUgaXRcbiAgdHh0ID0gdHh0LnJlcGxhY2UoL10oW1xcc10qKVxcKC9nLCAnXFxcXF0kMVxcXFwoJyk7XG5cbiAgLy8gcmVmZXJlbmNlIFVSSXMgbXVzdCBhbHNvIGJlIGVzY2FwZWRcbiAgdHh0ID0gdHh0LnJlcGxhY2UoL14gezAsM31cXFsoW1xcUyBcXHRdKj8pXTovZ20sICdcXFxcWyQxXTonKTtcblxuICByZXR1cm4gdHh0O1xufSk7XG5cclxudmFyIHJvb3QgPSB0aGlzO1xuXG4vLyBBTUQgTG9hZGVyXG5pZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIHJldHVybiBzaG93ZG93bjtcbiAgfSk7XG5cbi8vIENvbW1vbkpTL25vZGVKUyBMb2FkZXJcbn0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBzaG93ZG93bjtcblxuLy8gUmVndWxhciBCcm93c2VyIGxvYWRlclxufSBlbHNlIHtcbiAgcm9vdC5zaG93ZG93biA9IHNob3dkb3duO1xufVxufSkuY2FsbCh0aGlzKTtcclxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaG93ZG93bi5qcy5tYXBcclxuIiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgRklMRSA9ICcuL2RhdGEvaW5kZXguanNvbic7XG5jbGFzcyBEb2NTZXRzIHtcbiAgICBzdGF0aWMgYWRkKGNvbnRlbnQsIGZpbGUpIHtcbiAgICAgICAgY29uc3QgbGliID0gY29udGVudC5uYW1lO1xuICAgICAgICBjb25zdCBpID0gRG9jU2V0cy5nTGlzdC5kb2NzLmluZGV4T2YoZmlsZSk7XG4gICAgICAgIERvY1NldHMuZ0xpc3Quc2V0W2ldID0gbGliO1xuICAgICAgICBEb2NTZXRzLmdMaXN0LmluZGV4W2xpYl0gPSB7fTtcbiAgICAgICAgcmVjdXJzaXZlSW5kZXgoY29udGVudCwgRG9jU2V0cy5nTGlzdC5pbmRleFtsaWJdLCBsaWIpO1xuICAgIH1cbiAgICBzdGF0aWMgbG9hZExpc3QoZmlsZSkge1xuICAgICAgICBmaWxlID0gZmlsZTtcbiAgICAgICAgbGV0IGkgPSBmaWxlLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICAgIGNvbnN0IGRpciA9IGZpbGUuc3Vic3RyaW5nKDAsIGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubS5yZXF1ZXN0KHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IGZpbGUgfHwgRklMRSB9KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgRG9jU2V0cy5nVGl0bGUgPSByZXN1bHQudGl0bGU7XG4gICAgICAgICAgICBEb2NTZXRzLmdMaXN0LmRvY3MgPSByZXN1bHQuZG9jcztcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHQuZG9jcy5tYXAoKGYpID0+IGxvYWREb2NTZXQoZGlyLCBmKSkpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9XG4gICAgc3RhdGljIGdldChsaWIsIGlkID0gMCkge1xuICAgICAgICByZXR1cm4gKGxpYiAmJiBEb2NTZXRzLmdMaXN0LmluZGV4W2xpYl0pID9cbiAgICAgICAgICAgIERvY1NldHMuZ0xpc3QuaW5kZXhbbGliXVtpZCArICcnXVxuICAgICAgICAgICAgOiBEb2NTZXRzLmdMaXN0LnNldDtcbiAgICB9XG59XG5Eb2NTZXRzLmdMaXN0ID0geyBzZXQ6IFtdLCBpbmRleDoge30sIGRvY3M6IFtdIH07XG5leHBvcnRzLkRvY1NldHMgPSBEb2NTZXRzO1xuZnVuY3Rpb24gbG9hZERvY1NldChkaXIsIGZpbGUpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tLnJlcXVlc3QoeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogZGlyICsgZmlsZSB9KVxuICAgICAgICAudGhlbigocikgPT4gRG9jU2V0cy5hZGQociwgZmlsZSkpXG4gICAgICAgIC5jYXRjaChjb25zb2xlLmxvZyk7XG59XG5mdW5jdGlvbiByZWN1cnNpdmVJbmRleChjb250ZW50LCBpbmRleCwgbGliLCBwYXRoID0gJycpIHtcbiAgICBmdW5jdGlvbiBnZXROZXdQYXRoKGNvbnRlbnQpIHtcbiAgICAgICAgY29udGVudC5uYW1lID0gY29udGVudC5uYW1lLnJlcGxhY2UoL1tcIiddKC4rKVtcIiddfCguKykvZywgXCIkMSQyXCIpO1xuICAgICAgICBjb25zdCBlbE5hbWUgPSBjb250ZW50Lm5hbWUubWF0Y2goLyhbXlxcL10rKSQvKVsxXTtcbiAgICAgICAgY29udGVudC5uYW1lID0gZWxOYW1lO1xuICAgICAgICByZXR1cm4gY29udGVudC5mdWxsUGF0aCA9IChwYXRoID09PSAnJykgPyBlbE5hbWUgOiBgJHtwYXRofS4ke2VsTmFtZX1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrSWZNb2R1bGUoY29udGVudCkge1xuICAgICAgICBpZiAoY29udGVudC5jb21tZW50ICYmIGNvbnRlbnQuY29tbWVudC50YWdzKSB7XG4gICAgICAgICAgICBjb250ZW50LmNvbW1lbnQudGFncy5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGFnLnRhZyA9PT0gJ21vZHVsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5pbm5lck1vZHVsZSA9IHRhZy50ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb250ZW50LmxpYiA9IGxpYjtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIGNvbnRlbnQubmFtZSkge1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gZ2V0TmV3UGF0aChjb250ZW50KTtcbiAgICAgICAgbWFya0lmTW9kdWxlKGNvbnRlbnQpO1xuICAgICAgICBpbmRleFtjb250ZW50LmlkICsgJyddID0gY29udGVudDtcbiAgICAgICAgaWYgKG5ld1BhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaW5kZXhbbmV3UGF0aF0gPSBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb250ZW50LmNoaWxkcmVuLm1hcCgoYykgPT4gcmVjdXJzaXZlSW5kZXgoYywgaW5kZXgsIGxpYiwgbmV3UGF0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50LnNpZ25hdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnRlbnQuc2lnbmF0dXJlcy5tYXAoKGMpID0+IHJlY3Vyc2l2ZUluZGV4KGMsIGluZGV4LCBsaWIsIG5ld1BhdGgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGVudC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBjb250ZW50LnBhcmFtZXRlcnMubWFwKChjKSA9PiByZWN1cnNpdmVJbmRleChjLCBpbmRleCwgbGliLCBuZXdQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRlbnQudHlwZSAmJiBjb250ZW50LnR5cGUuZGVjbGFyYXRpb24gJiYgY29udGVudC50eXBlLmRlY2xhcmF0aW9uLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb250ZW50LnR5cGUuZGVjbGFyYXRpb24uY2hpbGRyZW4ubWFwKChjKSA9PiByZWN1cnNpdmVJbmRleChjLCBpbmRleCwgbGliLCBuZXdQYXRoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSRzlqVTJWMGN5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlFYjJOVFpYUnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlUwRXNaMFZCUVhsRU8wRkJUWHBFTEUxQlFVMHNTVUZCU1N4SFFVRlZMRzFDUVVGdFFpeERRVUZETzBGQlQzaERMRTFCUVdFc1QwRkJUenRKUVZWVUxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVnl4RlFVRkZMRWxCUVZjN1VVRkRkRU1zVFVGQlRTeEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVONlFpeE5RVUZOTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRNME1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzFGQlF6TkNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNNVFpeGpRVUZqTEVOQlFVTXNUMEZCVHl4RlFVRkZMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRek5FTEVOQlFVTTdTVUZSVFN4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVms3VVVGREwwSXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOYUxFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE9VSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMnhETEU5QlFVOHNXVUZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1NVRkJTU3hKUVVGSkxFVkJRVU1zUTBGQlF6dGhRVU53UkN4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGVkxFVkJRVVVzUlVGQlJUdFpRVU5xUWl4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTTdXVUZET1VJc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVOcVF5eFBRVUZQTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRekZGTEVOQlFVTXNRMEZCUXp0aFFVTkVMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEZUVJc1EwRkJRenRKUVZWTkxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCVnl4RlFVRkZMRXRCUVdsQ0xFTkJRVU03VVVGRE4wTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGQkxFTkJRVU03V1VGRGNrTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkRMRVZCUVVVc1EwRkJRenRaUVVOcVF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU03U1VGRE1VSXNRMEZCUXpzN1FVRXZRMk1zWVVGQlN5eEhRVUUwUXl4RlFVRkRMRWRCUVVjc1JVRkJWeXhGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZETEVWQlFVVXNSVUZCUlN4SlFVRkpMRVZCUVZjc1JVRkJSU3hGUVVGRExFTkJRVU03UVVGR2NFZ3NNRUpCYTBSRE8wRkJVVVFzVTBGQlV5eFZRVUZWTEVOQlFVTXNSMEZCVlN4RlFVRkZMRWxCUVZjN1NVRkRka01zVDBGQlR5eFpRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4SFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xTkJRemRETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRGNrTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU0xUWl4RFFVRkRPMEZCVTBRc1UwRkJVeXhqUVVGakxFTkJRVU1zVDBGQlZ5eEZRVUZGTEV0QlFWTXNSVUZCUlN4SFFVRlZMRVZCUVVVc1NVRkJTU3hIUVVGRExFVkJRVVU3U1VGREwwUXNVMEZCVXl4VlFVRlZMRU5CUVVNc1QwRkJWenRSUVVNelFpeFBRVUZQTEVOQlFVTXNTVUZCU1N4SFFVRkhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEc5Q1FVRnZRaXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEyeEZMRTFCUVUwc1RVRkJUU3hIUVVGSkxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEyNUVMRTlCUVU4c1EwRkJReXhKUVVGSkxFZEJRVWNzVFVGQlRTeERRVUZETzFGQlEzUkNMRTlCUVU4c1QwRkJUeXhEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVsQlFVa3NTMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1NVRkJTU3hOUVVGTkxFVkJRVVVzUTBGQlF6dEpRVU40UlN4RFFVRkRPMGxCUlVRc1UwRkJVeXhaUVVGWkxFTkJRVU1zVDBGQlZ6dFJRVU0zUWl4SlFVRkpMRTlCUVU4c1EwRkJReXhQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVN1dVRkRla01zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlR5eEZRVUZGTEVWQlFVVTdaMEpCUTNKRExFbEJRVWtzUjBGQlJ5eERRVUZETEVkQlFVY3NTMEZCU3l4UlFVRlJMRVZCUVVVN2IwSkJRM1JDTEU5QlFVOHNRMEZCUXl4WFFVRlhMRWRCUVVjc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0cFFrRkRla003V1VGRFRDeERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTk9PMGxCUTB3c1EwRkJRenRKUVVORUxFOUJRVThzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRPMGxCUTJ4Q0xFbEJRVWtzVDBGQlR5eFBRVUZQTEV0QlFVc3NVVUZCVVN4SlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVU3VVVGRE4wTXNUVUZCVFN4UFFVRlBMRWRCUVVjc1ZVRkJWU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlJYQkRMRmxCUVZrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVVYwUWl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUjBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1VVRkRMMElzU1VGQlNTeFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1JVRkJSVHRaUVVGRkxFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1UwRkJSVHRSUVVWdVJDeEpRVUZKTEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVVN1dVRkRiRUlzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGTExFVkJRVVVzUlVGQlJTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFZEJRVWNzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUXpORk8xRkJRMFFzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCVlN4RlFVRkZPMWxCUTNCQ0xFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTTNSVHRSUVVORUxFbEJRVWtzVDBGQlR5eERRVUZETEZWQlFWVXNSVUZCUlR0WlFVTndRaXhQUVVGUExFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZETjBVN1VVRkRSQ3hKUVVGSkxFOUJRVThzUTBGQlF5eEpRVUZKTEVsQlFVa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFbEJRVWtzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1VVRkJVU3hGUVVGRk8xbEJReTlGTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlF6VkdPMHRCUTBvN1FVRkRUQ3hEUVVGREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGhzbGF5b3V0ID0gcmVxdWlyZShcIi4uL25vZGVfbW9kdWxlcy9oc2xheW91dC9pbmRleC5qc1wiKTtcbmNvbnN0IGhlYWRlciA9IHJlcXVpcmUoXCIuL3ZpZXcvRG9jc01lbnVcIik7XG5jb25zdCBsZWZ0ID0gcmVxdWlyZShcIi4vdmlldy9MZWZ0TmF2XCIpO1xuY29uc3QgbWFpbiA9IHJlcXVpcmUoXCIuL3ZpZXcvTWFpbkRldGFpbFwiKTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgaW5kZXhfanNfMiA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanNcIik7XG5jb25zdCBUaXRsZUhlaWdodCA9ICczMHB4JztcbmNvbnN0IEZvb3RlckhlaWdodCA9ICcxMHB4JztcbmNvbnN0IExlZnROYXZXaWR0aCA9ICcyMDBweCc7XG5jb25zdCBteUNvbmZpZzIgPSB7XG4gICAgcm9vdDogeyBMYXlvdXQ6IHtcbiAgICAgICAgICAgIHJvd3M6IFtUaXRsZUhlaWdodCwgXCJmaWxsXCIsIEZvb3RlckhlaWdodF0sXG4gICAgICAgICAgICBjc3M6ICcuaHMtc2l0ZS1tYWluJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFsnaGVhZGVyJywgJ2JvZHknLCAnZm9vdGVyJ11cbiAgICAgICAgfSB9LFxuICAgIGhlYWRlcjogeyBMYXlvdXQ6IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IFtMZWZ0TmF2V2lkdGgsIFwiZmlsbFwiXSxcbiAgICAgICAgICAgIGNzczogJy5ocy1zaXRlLWhlYWRlcicsXG4gICAgICAgICAgICBjb250ZW50OiBbJ3RpdGxlJywgJ21lbnUnXVxuICAgICAgICB9IH0sXG4gICAgYm9keTogeyBMYXlvdXQ6IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IFtMZWZ0TmF2V2lkdGgsIFwiZmlsbFwiXSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFsnbGVmdG5hdicsICdtYWluRGV0YWlsJ11cbiAgICAgICAgfSB9LFxuICAgIGZvb3RlcjogeyBMYXlvdXQ6IHtcbiAgICAgICAgICAgIGNzczogJy5ocy1zaXRlLWZvb3RlcicsXG4gICAgICAgICAgICBjb250ZW50OiAnKGMpIEhlbHBmdWwgU2NyaXB0cydcbiAgICAgICAgfSB9LFxuICAgIHRpdGxlOiB7IExheW91dDoge1xuICAgICAgICAgICAgY3NzOiAnLmhzLXNpdGUtdGl0bGUnLFxuICAgICAgICAgICAgY29udGVudDogJ0hTRG9jcycsXG4gICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tL0hlbHBmdWxTY3JpcHRzL2hzRG9jcydcbiAgICAgICAgfSB9LFxuICAgIG1lbnU6IHsgRG9jc01lbnU6IHtcbiAgICAgICAgICAgIGRvY1NldDogXCIuL2RhdGEvaW5kZXguanNvblwiXG4gICAgICAgIH0gfSxcbiAgICBsZWZ0bmF2OiB7IExlZnROYXY6IHt9IH0sXG4gICAgbWFpbkRldGFpbDogeyBNYWluRGV0YWlsOiB7fSB9XG59O1xuZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBjb25zdCBSb3V0ZXIgPSB7XG4gICAgICAgIHZpZXc6IChub2RlKSA9PiBpbmRleF9qc18xLm0oaW5kZXhfanNfMi5Db25maWcsIE9iamVjdC5hc3NpZ24oeyBzb3VyY2U6IG15Q29uZmlnMiwgY29udGV4dDogW2hzbGF5b3V0LCBoZWFkZXIsIGxlZnQsIG1haW5dIH0sIHsgcm91dGU6IHsgZmllbGQ6IGluZGV4X2pzXzEubS5yb3V0ZS5wYXJhbSgnZmllbGQnKSwgbGliOiBpbmRleF9qc18xLm0ucm91dGUucGFyYW0oJ2xpYicpIH0gfSkpXG4gICAgfTtcbiAgICBpbmRleF9qc18xLm0ucm91dGUoZG9jdW1lbnQuYm9keSwgJy9hcGknLCB7XG4gICAgICAgICcvYXBpJzogUm91dGVyLFxuICAgICAgICAnL2FwaS86bGliJzogUm91dGVyLFxuICAgICAgICAnL2FwaS86bGliLzpmaWVsZCc6IFJvdXRlclxuICAgIH0pO1xufVxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVUybDBaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5VGFYUmxMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlMwRXNPRVJCUVN0RU8wRkJReTlFTERCRFFVRXlRenRCUVVNelF5eDFRMEZCTUVNN1FVRkRNVU1zTUVOQlFUWkRPMEZCUlRkRExHZEZRVUUyUkR0QlFVTTNSQ3huUlVGQk5rUTdRVUZGTjBRc1RVRkJUU3hYUVVGWExFZEJRVXNzVFVGQlRTeERRVUZETzBGQlF6ZENMRTFCUVUwc1dVRkJXU3hIUVVGSkxFMUJRVTBzUTBGQlF6dEJRVU0zUWl4TlFVRk5MRmxCUVZrc1IwRkJTU3hQUVVGUExFTkJRVU03UVVGRk9VSXNUVUZCVFN4VFFVRlRMRWRCUVVjN1NVRkRaQ3hKUVVGSkxFVkJRVVVzUlVGQlJTeE5RVUZOTEVWQlFVVTdXVUZEV2l4SlFVRkpMRVZCUVVjc1EwRkJReXhYUVVGWExFVkJRVVVzVFVGQlRTeEZRVUZGTEZsQlFWa3NRMEZCUXp0WlFVTXhReXhIUVVGSExFVkJRVVVzWlVGQlpUdFpRVU53UWl4UFFVRlBMRVZCUVVVc1EwRkJReXhSUVVGUkxFVkJRVVVzVFVGQlRTeEZRVUZGTEZGQlFWRXNRMEZCUXp0VFFVTjRReXhGUVVGRE8wbEJRMFlzVFVGQlRTeEZRVUZGTEVWQlFVVXNUVUZCVFN4RlFVRkRPMWxCUTJJc1QwRkJUeXhGUVVGRkxFTkJRVU1zV1VGQldTeEZRVUZGTEUxQlFVMHNRMEZCUXp0WlFVTXZRaXhIUVVGSExFVkJRVVVzYVVKQlFXbENPMWxCUTNSQ0xFOUJRVThzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNN1UwRkROMElzUlVGQlF6dEpRVU5HTEVsQlFVa3NSVUZCUlN4RlFVRkZMRTFCUVUwc1JVRkJRenRaUVVOWUxFOUJRVThzUlVGQlJTeERRVUZETEZsQlFWa3NSVUZCUlN4TlFVRk5MRU5CUVVNN1dVRkRMMElzVDBGQlR5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RlFVRkZMRmxCUVZrc1EwRkJRenRUUVVOeVF5eEZRVUZETzBsQlEwWXNUVUZCVFN4RlFVRkZMRVZCUVVNc1RVRkJUU3hGUVVGRk8xbEJRMklzUjBGQlJ5eEZRVUZGTEdsQ1FVRnBRanRaUVVOMFFpeFBRVUZQTEVWQlFVVXNjVUpCUVhGQ08xTkJRMnBETEVWQlFVTTdTVUZEUml4TFFVRkxMRVZCUVVVc1JVRkJReXhOUVVGTkxFVkJRVXM3V1VGRFppeEhRVUZITEVWQlFVVXNaMEpCUVdkQ08xbEJRM0pDTEU5QlFVOHNSVUZCUlN4UlFVRlJPMWxCUTJwQ0xFbEJRVWtzUlVGQlJTd3dRMEZCTUVNN1UwRkRia1FzUlVGQlF6dEpRVU5HTEVsQlFVa3NSVUZCUlN4RlFVRkZMRkZCUVZFc1JVRkJTenRaUVVOcVFpeE5RVUZOTEVWQlFVTXNiVUpCUVcxQ08xTkJRemRDTEVWQlFVTTdTVUZEUml4UFFVRlBMRVZCUVVzc1JVRkJReXhQUVVGUExFVkJRVXNzUlVGQlJTeEZRVUZETzBsQlF6VkNMRlZCUVZVc1JVRkJSU3hGUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEVWQlFVTTdRMEZETDBJc1EwRkJRenRCUVVkR0xGTkJRV2RDTEVsQlFVazdTVUZEYUVJc1RVRkJUU3hOUVVGTkxFZEJRVWM3VVVGRFdDeEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRlZMRVZCUVVVc1JVRkJSU3hEUVVOcVFpeFpRVUZETEVOQlFVTXNhVUpCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVTXNUVUZCVFN4RlFVRkZMRk5CUVZNc1JVRkJSU3hQUVVGUExFVkJRVVVzUTBGQlF5eFJRVUZSTEVWQlFVVXNUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlF5eEZRVU0xUkN4RlFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRExFdEJRVXNzUlVGQlF5eFpRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVTXNXVUZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1MwRkRiRWNzUTBGQlF6dEpRVU5HTEZsQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVTdVVUZETTBJc1RVRkJUU3hGUVVGakxFMUJRVTA3VVVGRE1VSXNWMEZCVnl4RlFVRlRMRTFCUVUwN1VVRkRNVUlzYTBKQlFXdENMRVZCUVVVc1RVRkJUVHRMUVVNM1FpeERRVUZETEVOQlFVTTdRVUZEVUN4RFFVRkRPMEZCV0VRc2IwSkJWME1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgU2l0ZV8xID0gcmVxdWlyZShcIi4vU2l0ZVwiKTtcblNpdGVfMS5pbml0KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZMUVN4cFEwRkJPRUk3UVVGRk9VSXNWMEZCU1N4RlFVRkZMRU5CUVVNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHNob3dkb3duID0gcmVxdWlyZSgnc2hvd2Rvd24nKTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuZnVuY3Rpb24gbWFya0Rvd24odGV4dCwgc2hvcnQgPSBmYWxzZSwgY3VycmVudFJvdXRlID0gaW5kZXhfanNfMS5tLnJvdXRlLmdldCgpKSB7XG4gICAgY29uc3QgY29udmVydGVyID0gbmV3IHNob3dkb3duLkNvbnZlcnRlcih7XG4gICAgICAgIHRhYmxlczogdHJ1ZSxcbiAgICAgICAgZ2hDb21wYXRpYmxlSGVhZGVySWQ6IHRydWUsXG4gICAgICAgIHNtYXJ0SW5kZW50YXRpb25GaXg6IHRydWUsXG4gICAgICAgIHRha3NsaXN0czogdHJ1ZSxcbiAgICAgICAgc3RyaWtldGhyb3VnaDogdHJ1ZVxuICAgIH0pO1xuICAgIGxldCByZXN1bHQgPSAoIXRleHQpID8gJycgOiBjb252ZXJ0ZXIubWFrZUh0bWwodGV4dCk7XG4gICAgaWYgKHNob3J0KSB7XG4gICAgICAgIGNvbnN0IGkgPSByZXN1bHQuaW5kZXhPZignPC9wPicpO1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gc3Vic3RpdHV0ZUxpbmtzKHJlc3VsdCwgY3VycmVudFJvdXRlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5tYXJrRG93biA9IG1hcmtEb3duO1xuZnVuY3Rpb24gc3Vic3RpdHV0ZUxpbmtzKGNvbW1lbnQsIGN1cnJlbnRSb3V0ZSkge1xuICAgIGZ1bmN0aW9uIGRlY29uc3RydWN0Um91dGUocm91dGUpIHtcbiAgICAgICAgbGV0IGxpYiwgbW9kO1xuICAgICAgICByb3V0ZS5yZXBsYWNlKC9cXC8oW15cXC8uXSopXFwvKFteXFwvXFxzXSokKS9naSwgKG1hdGNoLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICBsaWIgPSBhcmdzWzBdO1xuICAgICAgICAgICAgbW9kID0gYXJnc1sxXTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbbGliLCBtb2RdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRMaWJNb2QocGF0aCkge1xuICAgICAgICBsZXQgbGliLCBtb2QsIGZyYWc7XG4gICAgICAgIGlmIChwYXRoLmluZGV4T2YoJzonKSA+IDApIHtcbiAgICAgICAgICAgIFtsaWIsIG1vZF0gPSBwYXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsaWIgPSBkZWZMaWI7XG4gICAgICAgICAgICBtb2QgPSBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2QuaW5kZXhPZignIycpID4gMCkge1xuICAgICAgICAgICAgW21vZCwgZnJhZ10gPSBtb2Quc3BsaXQoJyMnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2xpYiwgbW9kLCBmcmFnXTtcbiAgICB9XG4gICAgbGV0IFtkZWZMaWJdID0gZGVjb25zdHJ1Y3RSb3V0ZShjdXJyZW50Um91dGUpO1xuICAgIGNvbW1lbnQgPSBjb21tZW50LnJlcGxhY2UoL1xcc3tAbGluayAoW1xcU10qKVxccyooW159XSspfS9naSwgKG1hdGNoLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBhcmdzWzBdO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXJnc1sxXTtcbiAgICAgICAgbGV0IFtsaWIsIG1vZHVsZV0gPSBnZXRMaWJNb2QocGF0aCk7XG4gICAgICAgIHJldHVybiAobW9kdWxlID09PSAnJyB8fCBtb2R1bGUgPT09ICcwJyB8fCBtb2R1bGUgPT09ICdvdmVydmlldycpID9cbiAgICAgICAgICAgIGAgPGEgaHJlZj1cIiMhL2FwaS8ke2xpYn0vMFwiPiR7dGV4dH08L2E+YCA6XG4gICAgICAgICAgICBgIDxhIGhyZWY9XCIjIS9hcGkvJHtsaWJ9LyR7bGlifS4ke21vZHVsZX1cIj4ke3RleHR9PC9hPmA7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbW1lbnQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liV0Z5YTJSdmQyNHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YldGeWEyUnZkMjR1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3hOUVVGTkxGRkJRVkVzUjBGQlNTeFBRVUZQTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkRkRU1zWjBWQlFYVkVPMEZCVTNaRUxGTkJRV2RDTEZGQlFWRXNRMEZCUXl4SlFVRlhMRVZCUVVVc1VVRkJZeXhMUVVGTExFVkJRVVVzWlVGQmMwSXNXVUZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFVkJRVVU3U1VGRE1VWXNUVUZCVFN4VFFVRlRMRWRCUVVjc1NVRkJTU3hSUVVGUkxFTkJRVU1zVTBGQlV5eERRVUZETzFGQlEzSkRMRTFCUVUwc1JVRkJhMElzU1VGQlNUdFJRVU0xUWl4dlFrRkJiMElzUlVGQlNTeEpRVUZKTzFGQlF6VkNMRzFDUVVGdFFpeEZRVUZMTEVsQlFVazdVVUZETlVJc1UwRkJVeXhGUVVGbExFbEJRVWs3VVVGRE5VSXNZVUZCWVN4RlFVRlhMRWxCUVVrN1MwRkRMMElzUTBGQlF5eERRVUZETzBsQlEwZ3NTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRjRVFzU1VGQlNTeExRVUZMTEVWQlFVVTdVVUZEVUN4TlFVRk5MRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUTJwRExFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNSVUZCUlR0WlFVRkZMRTFCUVUwc1IwRkJSeXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVGRk8wdEJRMmhFTzBsQlEwUXNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhOUVVGTkxFVkJRVVVzV1VGQldTeERRVUZETEVOQlFVTTdTVUZETDBNc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGJFSXNRMEZCUXp0QlFXWkVMRFJDUVdWRE8wRkJjVUpFTEZOQlFWTXNaVUZCWlN4RFFVRkRMRTlCUVdNc1JVRkJSU3haUVVGdFFqdEpRVXQ0UkN4VFFVRlRMR2RDUVVGblFpeERRVUZETEV0QlFWazdVVUZEYkVNc1NVRkJTU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETzFGQlEySXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXcwUWtGQk5FSXNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFbEJRVWtzUlVGQlJTeEZRVUZGTzFsQlF6TkVMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEWkN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEyUXNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkRaQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGRFSXNRMEZCUXp0SlFVVkVMRk5CUVZNc1UwRkJVeXhEUVVGRExFbEJRVmM3VVVGRE1VSXNTVUZCU1N4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF6dFJRVU51UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZPMWxCUTNKQ0xFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEYUVNN1lVRkJUenRaUVVOS0xFZEJRVWNzUjBGQlJ5eE5RVUZOTEVOQlFVTTdXVUZEWWl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRE8xTkJRMlE3VVVGRFJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZGTzFsQlEzQkNMRU5CUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGFFTTdVVUZEUkN4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTTFRaXhEUVVGRE8wbEJSVVFzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMR2RDUVVGblFpeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMGxCUnpsRExFOUJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMQ3RDUVVFclFpeEZRVUZGTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1NVRkJTU3hGUVVGRkxFVkJRVVU3VVVGRE1VVXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnlRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU53UXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hMUVVGTExFVkJRVVVzU1VGQlNTeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRTFCUVUwc1MwRkJTeXhWUVVGVkxFTkJRVU1zUTBGQlFTeERRVUZETzFsQlF6RkVMRzlDUVVGdlFpeEhRVUZITEU5QlFVOHNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJRenRaUVVNeFF5eHZRa0ZCYjBJc1IwRkJSeXhKUVVGSkxFZEJRVWNzU1VGQlNTeE5RVUZOTEV0QlFVc3NTVUZCU1N4TlFVRk5MRU5CUVVNN1NVRkRjRVVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEU0N4UFFVRlBMRTlCUVU4c1EwRkJRenRCUVVWdVFpeERRVUZESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaW5kZXhfanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanNcIik7XG5jb25zdCBEb2NTZXRzXzEgPSByZXF1aXJlKFwiLi4vRG9jU2V0c1wiKTtcbmNvbnN0IGluZGV4X2pzXzIgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L2luZGV4LmpzXCIpO1xuY2xhc3MgRG9jc01lbnUgZXh0ZW5kcyBpbmRleF9qc18xLkxheW91dCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuZG9jU2V0ID0gJyc7XG4gICAgfVxuICAgIGdldERlc2MoYXR0cnMpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jU2V0ICE9PSBhdHRycy5kb2NTZXQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jU2V0ID0gYXR0cnMuZG9jU2V0O1xuICAgICAgICAgICAgRG9jU2V0c18xLkRvY1NldHMubG9hZExpc3QoYXR0cnMuZG9jU2V0KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IGluZGV4X2pzXzEubS5yZWRyYXcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gRG9jU2V0c18xLkRvY1NldHMuZ2V0KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogaXRlbXMubWFwKChjKSA9PiBjKSxcbiAgICAgICAgICAgIGRlZmF1bHRJdGVtOiBpbmRleF9qc18xLm0ucm91dGUucGFyYW0oJ2xpYicpIHx8IGl0ZW1zWzBdLFxuICAgICAgICAgICAgY2xpY2tlZDogKGl0ZW0pID0+IGluZGV4X2pzXzEubS5yb3V0ZS5zZXQoJy9hcGkvOmxpYi8wJywgeyBsaWI6IGl0ZW0gfSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50cyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGRlc2MgPSB0aGlzLmdldERlc2Mobm9kZS5hdHRycyk7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oaW5kZXhfanNfMi5NZW51LCB7IGRlc2M6IGRlc2MgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5Eb2NzTWVudSA9IERvY3NNZW51O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUkc5amMwMWxiblV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZkbWxsZHk5RWIyTnpUV1Z1ZFM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEcxRlFVRTBSVHRCUVVNMVJTeDNRMEZCYTBRN1FVRkRiRVFzYlVWQlFUUkZPMEZCWjBJMVJTeE5RVUZoTEZGQlFWTXNVMEZCVVN4cFFrRkJUVHRKUVVGd1F6czdVVUZEU1N4WFFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJjVUpvUWl4RFFVRkRPMGxCYmtKWExFOUJRVThzUTBGQlF5eExRVUZUTzFGQlEzSkNMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUzBGQlN5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVNelFpeHBRa0ZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzJsQ1FVTTNRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNXVUZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xTkJRM3BDTzFGQlEwUXNUVUZCVFN4TFFVRkxMRWRCUVVjc2FVSkJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTTFRaXhQUVVGUE8xbEJRMGdzUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGUkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVnFReXhYUVVGWExFVkJRVVVzV1VGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTTNReXhQUVVGUExFVkJRVVVzUTBGQlF5eEpRVUZYTEVWQlFVVXNSVUZCUlN4RFFVRkRMRmxCUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEdGQlFXRXNSVUZCUlN4RlFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFVkJRVU1zUTBGQlF6dFRRVU51UlN4RFFVRkRPMGxCUTA0c1EwRkJRenRKUVVWRUxHRkJRV0VzUTBGQlF5eEpRVUZWTzFGQlEzQkNMRTFCUVUwc1NVRkJTU3hIUVVGblFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU51UkN4UFFVRlBMRmxCUVVNc1EwRkJReXhsUVVGSkxFVkJRVVVzUlVGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkRMRU5CUVVNc1EwRkJRenRKUVVOcVF5eERRVUZETzBOQlEwbzdRVUYwUWtRc05FSkJjMEpESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaW5kZXhfanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanNcIik7XG5jb25zdCBpbmRleF9qc18yID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9oc2xheW91dC9pbmRleC5qc1wiKTtcbmNvbnN0IGluZGV4X2pzXzMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L2luZGV4LmpzXCIpO1xuY29uc3QgRG9jU2V0c18xID0gcmVxdWlyZShcIi4uL0RvY1NldHNcIik7XG5jb25zdCBQYXJ0c18xID0gcmVxdWlyZShcIi4vUGFydHNcIik7XG5jbGFzcyBMZWZ0TmF2IGV4dGVuZHMgaW5kZXhfanNfMi5MYXlvdXQge1xuICAgIGdldENvbXBvbmVudHMobm9kZSkge1xuICAgICAgICBsZXQgbGliID0gaW5kZXhfanNfMS5tLnJvdXRlLnBhcmFtKCdsaWInKTtcbiAgICAgICAgbGV0IGZpZWxkID0gaW5kZXhfanNfMS5tLnJvdXRlLnBhcmFtKCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBkb2NTZXQgPSBEb2NTZXRzXzEuRG9jU2V0cy5nZXQobGliLCAwKSB8fCB7IG5hbWU6ICd1bmtub3duJywgaWQ6IDAgfTtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWxlZnQnLCBbaW5kZXhfanNfMS5tKCcuaHMtbGVmdC1uYXYnLCBuYXZMaXN0KGRvY1NldCwgZmllbGQpKV0pO1xuICAgIH1cbn1cbmV4cG9ydHMuTGVmdE5hdiA9IExlZnROYXY7XG5mdW5jdGlvbiBuYXZMaXN0KGRvY1NldCwgZmllbGQpIHtcbiAgICBmdW5jdGlvbiBjb2xsZWN0TW9kdWxlcyhkb2NTZXQpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlc0J5TmFtZSA9IHt9O1xuICAgICAgICBkb2NTZXQubW9kdWxlcyA9IFtdO1xuICAgICAgICBpZiAoZG9jU2V0LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBkb2NTZXQuY2hpbGRyZW4uZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghKGMuZmxhZ3MgJiYgYy5mbGFncy5pc0V4dGVybmFsKSAmJiAhaWdub3JlTW9kdWxlc1tjLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjLmlubmVyTW9kdWxlID8gYy5pbm5lck1vZHVsZSA6IGMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vZHVsZSA9IG1vZHVsZXNCeU5hbWVbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2NTZXQubW9kdWxlcy5wdXNoKG1vZHVsZSA9IG1vZHVsZXNCeU5hbWVbbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWI6IGRvY1NldC5saWIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFBhdGg6IGRvY1NldC5mdWxsUGF0aCArICcuJyArIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzID0ge307XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5ncm91cHMuZm9yRWFjaCgoZykgPT4gZ3JvdXBzW2cudGl0bGVdID0gZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmdyb3Vwcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5ncm91cHMuZm9yRWFjaCgoZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cCA9IGdyb3Vwc1tnLnRpdGxlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW2cudGl0bGVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogZy5raW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGcudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4gPSBncm91cC5jaGlsZHJlbi5jb25jYXQoZy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dGVybmFsTW9kdWxlKG1kbCkge1xuICAgICAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpZWxkID09PSAnJyArIG1kbC5pZCB8fCBmaWVsZC5pbmRleE9mKG1kbC5mdWxsUGF0aCkgPT09IDApIHtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKGluZGV4X2pzXzMuQ29sbGFwc2libGUsIHsgY3NzOiBgLmhzLWxlZnQtbmF2LW1vZHVsZWAsIHByZUFycm93OiB0cnVlLCBpc0V4cGFuZGVkOiBzZWxlY3RlZCwgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGluZGV4X2pzXzEubShgJHtzZWxlY3RlZCA/ICcuaHMtbGVmdC1uYXYtc2VsZWN0ZWQnIDogJyd9YCwgUGFydHNfMS5saWJMaW5rKGBhLmhzLWxlZnQtbmF2LW1vZHVsZS1uYW1lIGAsIG1kbC5saWIsIG1kbC5mdWxsUGF0aCwgbWRsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAhbWRsLmdyb3VwcyA/IHVuZGVmaW5lZCA6IG1kbC5ncm91cHMubWFwKChnKSA9PiBlbnRyaWVzKGcsIG1kbCwgZmllbGQpKVxuICAgICAgICAgICAgXSB9KTtcbiAgICB9XG4gICAgaWYgKGRvY1NldC5raW5kID09PSAwKSB7XG4gICAgICAgIGNvbGxlY3RNb2R1bGVzKGRvY1NldCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBkb2NTZXQubW9kdWxlcy5tYXAoZXh0ZXJuYWxNb2R1bGUpO1xuICAgICAgICBtb2R1bGVzLnVuc2hpZnQoaW5kZXhfanNfMS5tKCcuaHMtbGVmdC1uYXYtaGVhZGVyJywgJ01vZHVsZXMnKSk7XG4gICAgICAgIHJldHVybiBbaW5kZXhfanNfMS5tKCcuaHMtbGVmdC1uYXYtY29udGVudCcsIG1vZHVsZXMpXTtcbiAgICB9XG59XG5jb25zdCBpZ25vcmVNb2R1bGVzID0ge1xuICAgIG92ZXJ2aWV3OiB0cnVlLFxuICAgIGluZGV4OiB0cnVlXG59O1xuZnVuY3Rpb24gZW50cmllcyhncm91cCwgbWRsLCBmaWVsZCkge1xuICAgIGZ1bmN0aW9uIG1vZHVsZUdldChjKSB7XG4gICAgICAgIHJldHVybiBEb2NTZXRzXzEuRG9jU2V0cy5nZXQobWRsLmxpYiwgYyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudHJ5KG1vZCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IChmaWVsZCA9PT0gJycgKyBtb2QuaWQgfHwgZmllbGQgPT09IG1vZC5mdWxsUGF0aCkgPyAnLmhzLWxlZnQtbmF2LXNlbGVjdGVkJyA6ICcnO1xuICAgICAgICBjb25zdCBleHBvcnRlZCA9IChtb2QuZmxhZ3MgJiYgbW9kLmZsYWdzLmlzRXhwb3J0ZWQpO1xuICAgICAgICBjb25zdCBzdGF0aWsgPSAobW9kLmZsYWdzICYmIG1vZC5mbGFncy5pc1N0YXRpYyk7XG4gICAgICAgIGNvbnN0IGNzcyA9IGBhLmhzLWxlZnQtbmF2LWVudHJ5ICR7c2VsZWN0ZWR9ICR7ZXhwb3J0ZWQgPyAnLmhzLWxlZnQtbmF2LWV4cG9ydGVkJyA6ICcnfWA7XG4gICAgICAgIHJldHVybiAoIWV4cG9ydGVkICYmIGdyb3VwLnRpdGxlID09PSAnVmFyaWFibGVzJykgPyAnJyA6XG4gICAgICAgICAgICBpbmRleF9qc18xLm0oJycsIFtcbiAgICAgICAgICAgICAgICBzdGF0aWsgPyAnc3RhdGljJyA6ICcnLFxuICAgICAgICAgICAgICAgIFBhcnRzXzEubGliTGluayhjc3MsIG1vZC5saWIsIG1vZC5mdWxsUGF0aCwgbW9kLm5hbWUpXG4gICAgICAgICAgICBdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW1wdHkobW9kKSB7IHJldHVybiBtb2QgIT09ICcnOyB9XG4gICAgbGV0IGdycCA9IFtdO1xuICAgIGlmIChncm91cCAmJiBncm91cC5jaGlsZHJlbikge1xuICAgICAgICBncnAgPSBncm91cC5jaGlsZHJlblxuICAgICAgICAgICAgLm1hcChtb2R1bGVHZXQpXG4gICAgICAgICAgICAuc29ydChleHBvcnRBc2NlbmRpbmcpXG4gICAgICAgICAgICAubWFwKGVudHJ5KVxuICAgICAgICAgICAgLmZpbHRlcihlbXB0eSk7XG4gICAgICAgIGlmIChncnAubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ3JwLnVuc2hpZnQoaW5kZXhfanNfMS5tKCcuaHMtbGVmdC1uYXYtaGVhZGVyJywgZ3JvdXAudGl0bGUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKGdycC5sZW5ndGggPiAxKSA/IGluZGV4X2pzXzEubShgLmhzLWxlZnQtbmF2LWVudHJpZXNgLCBncnApIDogJyc7XG59XG5mdW5jdGlvbiBleHBvcnRBc2NlbmRpbmcoYSwgYikge1xuICAgIGlmIChhLmZsYWdzICYmIGIuZmxhZ3MpIHtcbiAgICAgICAgaWYgKGEuZmxhZ3MuaXNFeHBvcnRlZCAmJiBiLmZsYWdzLmlzRXhwb3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhLm5hbWUgPiBiLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYS5mbGFncy5pc0V4cG9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYi5mbGFncy5pc0V4cG9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhLm5hbWUgPiBiLm5hbWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBhLm5hbWUgPiBiLm5hbWU7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVEdWbWRFNWhkaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTJhV1YzTDB4bFpuUk9ZWFl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkxRU3h0UlVGQlowVTdRVUZEYUVVc2JVVkJRVFpFTzBGQlF6ZEVMRzFGUVVGclJUdEJRVU5zUlN4M1EwRkJjVU03UVVGRGNrTXNiVU5CUVd0RE8wRkJUV3hETEUxQlFXRXNUMEZCVVN4VFFVRlJMR2xDUVVGTk8wbEJReTlDTEdGQlFXRXNRMEZCUXl4SlFVRlhPMUZCUTNKQ0xFbEJRVWtzUjBGQlJ5eEhRVUZITEZsQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlF5OUNMRWxCUVVrc1MwRkJTeXhIUVVGSExGbEJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMjVETEUxQlFVMHNUVUZCVFN4SFFVRkhMR2xDUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRExFbEJRVWtzUlVGQlF5eFRRVUZUTEVWQlFVVXNSVUZCUlN4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRE8xRkJRemRFTEU5QlFVOHNXVUZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRExGbEJRVU1zUTBGQlF5eGpRVUZqTEVWQlFVVXNUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjBSU3hEUVVGRE8wTkJRMG83UVVGUVJDd3dRa0ZQUXp0QlFVZEVMRk5CUVZNc1QwRkJUeXhEUVVGRExFMUJRVlVzUlVGQlJTeExRVUZaTzBsQlJYSkRMRk5CUVZNc1kwRkJZeXhEUVVGRExFMUJRVlU3VVVGRE9VSXNUVUZCVFN4aFFVRmhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRM3BDTEUxQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRM0JDTEVsQlFVa3NUVUZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSVHRaUVVOcVFpeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVXNzUlVGQlJTeEZRVUZGTzJkQ1FVVTVRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTzI5Q1FVTTFSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNWMEZCVnl4RFFVRkJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8yOUNRVU51UkN4SlFVRkpMRTFCUVUwc1IwRkJSeXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdiMEpCUTJwRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdkMEpCUTFRc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ6czBRa0ZETDBNc1NVRkJTU3hGUVVGRkxFbEJRVWs3TkVKQlExWXNSMEZCUnl4RlFVRkZMRTFCUVUwc1EwRkJReXhIUVVGSE96UkNRVU5tTEZGQlFWRXNSVUZCUlN4TlFVRk5MRU5CUVVNc1VVRkJVU3hIUVVGSExFZEJRVWNzUjBGQlJTeEpRVUZKT3pSQ1FVTnlReXhOUVVGTkxFVkJRVU1zUlVGQlJUdDVRa0ZEV2l4RFFVRkRMRU5CUVVNN2NVSkJRMDQ3YjBKQlJVUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRE8yOUNRVU5zUWl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRmRFUXNTVUZCU1N4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRk8zZENRVUZGTEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlN5eEZRVUZGTEVWQlFVVTdORUpCUTNaRExFbEJRVWtzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TkVKQlF6VkNMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVU3WjBOQlExSXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVYzdiME5CUTNSQ0xGRkJRVkVzUlVGQlF5eEZRVUZGTzI5RFFVTllMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNUdHZRMEZEV2l4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXM3YVVOQlEycENMRU5CUVVNN1owTkJRMDRzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TmtKQlEzcENPelJDUVVORUxFdEJRVXNzUTBGQlF5eFJRVUZSTEVkQlFVY3NTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPM2RDUVVOMlJDeERRVUZETEVOQlFVTXNRMEZCUXp0eFFrRkJRenRwUWtGRFVEdFpRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTA0N1NVRkRUQ3hEUVVGRE8wbEJTVVFzVTBGQlV5eGpRVUZqTEVOQlFVTXNSMEZCVHp0UlFVTXpRaXhKUVVGSkxGRkJRVkVzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZEY2tJc1NVRkJTU3hMUVVGTExFdEJRVWNzUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRk8xbEJRVVVzVVVGQlVTeEhRVUZETEVsQlFVa3NRMEZCUXp0VFFVRkZPMUZCUlRsRkxFOUJRVThzV1VGQlF5eERRVUZETEhOQ1FVRlhMRVZCUVVVc1JVRkJReXhIUVVGSExFVkJRVU1zY1VKQlFYRkNMRVZCUVVVc1VVRkJVU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFZRVUZWTEVWQlFVTXNVVUZCVVN4RlFVRkZMRlZCUVZVc1JVRkJRenRuUWtGRE9VWXNXVUZCUXl4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGQkxFTkJRVU1zUTBGQlFTeDFRa0ZCZFVJc1EwRkJRU3hEUVVGRExFTkJRVUVzUlVGQlJTeEZRVUZGTEVWQlFVVXNaVUZCVHl4RFFVRkRMRFJDUVVFMFFpeEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJRMjVJTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJRU3hEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1lVRkROMFVzUlVGQlF5eERRVUZETEVOQlFVTTdTVUZEVWl4RFFVRkRPMGxCUlVRc1NVRkJTU3hOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNSVUZCUlR0UlFVTnVRaXhqUVVGakxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZGZGtJc1RVRkJUU3hQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU03VVVGRGJrUXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGRExFTkJRVU1zY1VKQlFYRkNMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU55UkN4UFFVRlBMRU5CUVVNc1dVRkJReXhEUVVGRExITkNRVUZ6UWl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03UzBGREwwTTdRVUZEVEN4RFFVRkRPMEZCUzBRc1RVRkJUU3hoUVVGaExFZEJRVWM3U1VGRGJFSXNVVUZCVVN4RlFVRkpMRWxCUVVrN1NVRkRhRUlzUzBGQlN5eEZRVUZQTEVsQlFVazdRMEZEYmtJc1EwRkJRenRCUVZWR0xGTkJRVk1zVDBGQlR5eERRVUZETEV0QlFWTXNSVUZCUlN4SFFVRlBMRVZCUVVVc1MwRkJXVHRKUVVNM1F5eFRRVUZUTEZOQlFWTXNRMEZCUXl4RFFVRkxPMUZCUTNCQ0xFOUJRVThzYVVKQlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTnVReXhEUVVGRE8wbEJTVVFzVTBGQlV5eExRVUZMTEVOQlFVTXNSMEZCVHp0UlFVTnNRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eERRVUZETEV0QlFVc3NTMEZCUnl4RlFVRkZMRWRCUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzU1VGQlNTeExRVUZMTEV0QlFVY3NSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzFGQlF6TkdMRTFCUVUwc1VVRkJVU3hIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzFGQlEzSkVMRTFCUVUwc1RVRkJUU3hIUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlEyNUVMRTFCUVUwc1IwRkJSeXhIUVVGSExIVkNRVUYxUWl4UlFVRlJMRWxCUVVrc1VVRkJVU3hEUVVGQkxFTkJRVU1zUTBGQlFTeDFRa0ZCZFVJc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZEZGtZc1QwRkJUeXhEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEV0QlFVc3NRMEZCUXl4TFFVRkxMRXRCUVVjc1YwRkJWeXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUTJwRUxGbEJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTBZc1RVRkJUU3hEUVVGQkxFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVRXNRMEZCUXl4RFFVRkRMRVZCUVVVN1owSkJRM0JDTEdWQlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU03WVVGRGFFUXNRMEZCUXl4RFFVRkRPMGxCUTFnc1EwRkJRenRKUVVWRUxGTkJRVk1zUzBGQlN5eERRVUZETEVkQlFVOHNTVUZCU1N4UFFVRlBMRWRCUVVjc1MwRkJTeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJUbERMRWxCUVVrc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5pTEVsQlFVa3NTMEZCU3l4SlFVRkpMRXRCUVVzc1EwRkJReXhSUVVGUkxFVkJRVVU3VVVGRGVrSXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhSUVVGUk8yRkJRMllzUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXp0aFFVTmtMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU03WVVGRGNrSXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJRenRoUVVOV0xFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTnVRaXhKUVVGSkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMWxCUTJoQ0xFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCUXl4RFFVRkRMSEZDUVVGeFFpeEZRVUZGTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1JFTzB0QlEwbzdTVUZEUkN4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1dVRkJReXhEUVVGRExITkNRVUZ6UWl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdRVUZEYWtVc1EwRkJRenRCUVV0RUxGTkJRVk1zWlVGQlpTeERRVUZETEVOQlFVc3NSVUZCUlN4RFFVRkxPMGxCUTJwRExFbEJRVWtzUTBGQlF5eERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRk8xRkJRM0JDTEVsQlFVa3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGVkxFbEJRVWtzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRlZMRVZCUVVVN1dVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRUUVVGRk8yRkJRM0JGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGVkxFVkJRVVU3V1VGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUVVVN1lVRkRkRU1zU1VGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1JVRkJSVHRaUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzFOQlFVVTdZVUZEY2tNN1dVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRUUVVGRk8wdEJRMjVETzFOQlFVMDdVVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0TFFVRkZPMEZCUTNSRExFTkJRVU1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaW5kZXhfanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanNcIik7XG5jb25zdCBtYXJrZG93bl8xID0gcmVxdWlyZShcIi4uL21hcmtkb3duXCIpO1xuY29uc3QgTWFpbkV4YW1wbGVfMSA9IHJlcXVpcmUoXCIuL01haW5FeGFtcGxlXCIpO1xuZnVuY3Rpb24gY29tbWVudExvbmcobWRsKSB7XG4gICAgbGV0IGNvbnRlbnQgPSBbXTtcbiAgICBpZiAobWRsLmNvbW1lbnQpIHtcbiAgICAgICAgY29udGVudC5wdXNoKHRleHRPclNob3J0VGV4dE9yRGVzY3JpcHRpb24obWRsLmNvbW1lbnQsIGZhbHNlKSk7XG4gICAgICAgIGNvbnRlbnQucHVzaChyZXR1cm5zKG1kbC5jb21tZW50LCBmYWxzZSkpO1xuICAgICAgICBjb250ZW50LnB1c2goY29tbWVudFJlbWFpbmRlcihtZGwuY29tbWVudCkpO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1jb21tZW50JywgY29udGVudCk7XG59XG5leHBvcnRzLmNvbW1lbnRMb25nID0gY29tbWVudExvbmc7XG5mdW5jdGlvbiBjb21tZW50KG1kbCwgc2hvcnQgPSBmYWxzZSkge1xuICAgIGxldCBjb250ZW50ID0gW107XG4gICAgaWYgKG1kbC5jb21tZW50KSB7XG4gICAgICAgIGNvbnRlbnQucHVzaCh0ZXh0T3JTaG9ydFRleHRPckRlc2NyaXB0aW9uKG1kbC5jb21tZW50LCBzaG9ydCkpO1xuICAgICAgICBpZiAoIXNob3J0KSB7XG4gICAgICAgICAgICBjb250ZW50LnB1c2gob3RoZXJDb21tZW50VGFncyhtZGwuY29tbWVudCkpO1xuICAgICAgICAgICAgaWYgKG1kbC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuY29uY2F0KG1haW5Db21tZW50UGFyYW1zKG1kbC5wYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudC5wdXNoKHJldHVybnMobWRsLmNvbW1lbnQsIGZhbHNlKSk7XG4gICAgICAgIGNvbnRlbnQucHVzaChjb21tZW50UmVtYWluZGVyKG1kbC5jb21tZW50KSk7XG4gICAgfVxuICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWNvbW1lbnQnLCBjb250ZW50KTtcbn1cbmV4cG9ydHMuY29tbWVudCA9IGNvbW1lbnQ7XG5mdW5jdGlvbiB0ZXh0T3JTaG9ydFRleHRPckRlc2NyaXB0aW9uKGNvbW1lbnQsIHNob3J0KSB7XG4gICAgbGV0IHRleHQgPSAoY29tbWVudC5zaG9ydFRleHQgfHwgJycpO1xuICAgIGlmIChjb21tZW50LnRleHQpIHtcbiAgICAgICAgdGV4dCArPSAnXFxuJyArIChjb21tZW50LnRleHQgfHwgJycpO1xuICAgIH1cbiAgICBpZiAoY29tbWVudC50YWdzKSB7XG4gICAgICAgIGNvbW1lbnQudGFncy5tYXAoKHRhZykgPT4geyBpZiAodGFnLnRhZyA9PT0gJ2Rlc2NyaXB0aW9uJykge1xuICAgICAgICAgICAgdGV4dCA9IHRhZy50ZXh0O1xuICAgICAgICB9IH0pO1xuICAgIH1cbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88ZXhhbXBsZShbXFxTXFxzXSo/KTxcXC9leGFtcGxlPi9naSwgc2hvcnQgPyAnJyA6IE1haW5FeGFtcGxlXzEuZXhhbXBsZSk7XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tY29tbWVudC1kZXNjJywgcHJldHRpZnlDb2RlKHRleHQsIHNob3J0KSk7XG59XG5mdW5jdGlvbiByZXR1cm5zKGNvbW1lbnQsIHNob3J0KSB7XG4gICAgbGV0IHRleHQgPSBjb21tZW50LnJldHVybnM7XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tY29tbWVudC1yZXR1cm4nLCAhdGV4dCA/ICcnIDogW1xuICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1jb21tZW50LXRhZycsICdyZXR1cm5zOicpLFxuICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1jb21tZW50LXRleHQnLCB0ZXh0KVxuICAgIF0pO1xufVxuZnVuY3Rpb24gY29tbWVudFJlbWFpbmRlcihjb21tZW50KSB7XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnJywgT2JqZWN0LmtleXMoY29tbWVudCkubWFwKCh0YWcpID0+IHtcbiAgICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RhZ3MnOlxuICAgICAgICAgICAgY2FzZSAnc2hvcnRUZXh0JzpcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb24nOlxuICAgICAgICAgICAgY2FzZSAncmV0dXJucyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1jb21tZW50LXNwZWNpYWwnLCBbXG4gICAgICAgICAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWNvbW1lbnQtdGFnJywgdGFnKSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tY29tbWVudC10ZXh0JywgY29tbWVudFt0YWddKVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIG90aGVyQ29tbWVudFRhZ3MoY29tbWVudCkge1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJycsICFjb21tZW50LnRhZ3MgPyBbXSA6IGNvbW1lbnQudGFncy5tYXAoKHRhZykgPT4ge1xuICAgICAgICBzd2l0Y2ggKHRhZy50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uJzogcmV0dXJuICcnO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tY29tbWVudC1zcGVjaWFsJywgW1xuICAgICAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWNvbW1lbnQtdGFnJywgdGFnLnRhZyksXG4gICAgICAgICAgICAgICAgaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tY29tbWVudC10ZXh0JywgdGFnLnRleHQpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIG1haW5Db21tZW50UGFyYW1zKHBhcmFtcykge1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWNvbW1lbnQtcGFyYW1zJywgcGFyYW1zLm1hcCgocGFyKSA9PiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWNvbW1lbnQtcGFyYW0nLCBbXG4gICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWNvbW1lbnQtdGFnJywgcGFyLm5hbWUgKyAnOicpLFxuICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1jb21tZW50LXRleHQnLCAhcGFyLmNvbW1lbnQgPyAnJyA6XG4gICAgICAgICAgICAoKHBhci5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkgPyBgW2RlZmF1bHQ6ICR7cGFyLmRlZmF1bHRWYWx1ZX1dIGAgOiAnJykgKyBwYXIuY29tbWVudC50ZXh0KVxuICAgIF0pKSk7XG59XG5mdW5jdGlvbiBwcmV0dGlmeUNvZGUoY29tbWVudCwgc2hvcnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gY29tbWVudDtcbiAgICBmdW5jdGlvbiBicmFjZUluZGVudGluZyh0ZXh0KSB7XG4gICAgICAgIGxldCBpbmRlbnQgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0ZXh0XG4gICAgICAgICAgICAuc3Vic3RyaW5nKDYsIHRleHQubGVuZ3RoIC0gNylcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oPCkvZywgJyZsdDsnKS5yZXBsYWNlKC8oPikvZywgJyZndDsnKVxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLm1hcCgobCkgPT4ge1xuICAgICAgICAgICAgbGV0IG9sZEluZGVudCA9IGluZGVudDtcbiAgICAgICAgICAgIGxldCBrID0gbC50cmltKCk7XG4gICAgICAgICAgICBpbmRlbnQgKz0gTWF0aC5tYXgoLTEsIE1hdGgubWluKDEsIGsuc3BsaXQoJ3snKS5sZW5ndGggLSBrLnNwbGl0KCd9JykubGVuZ3RoKSk7XG4gICAgICAgICAgICBpbmRlbnQgKz0gTWF0aC5tYXgoLTEsIE1hdGgubWluKDEsIGsuc3BsaXQoJ1snKS5sZW5ndGggLSBrLnNwbGl0KCddJykubGVuZ3RoKSk7XG4gICAgICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwiaHMtY29kZS1pbmRlbnRcIj48L3NwYW4+Jy5yZXBlYXQoKChpbmRlbnQgPCBvbGRJbmRlbnQpID8gaW5kZW50IDogb2xkSW5kZW50KSkgKyBrO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICByZXR1cm4gJzxwcmU+PGNvZGU+JyArIHJlc3VsdCArICc8L2NvZGU+PC9wcmU+JztcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLzxjb2RlPihbXFxTXFxzXSo/KTxcXC9jb2RlPi9naSwgYnJhY2VJbmRlbnRpbmcpO1xuICAgIHJldHVybiBpbmRleF9qc18xLm0udHJ1c3QobWFya2Rvd25fMS5tYXJrRG93bihyZXN1bHQsIHNob3J0LCBpbmRleF9qc18xLm0ucm91dGUuZ2V0KCkpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRXRnBia052YlcxbGJuUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmRtbGxkeTlOWVdsdVEyOXRiV1Z1ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVXRCTEcxRlFVRm5SVHRCUVVOb1JTd3dRMEZCZFVNN1FVRkRka01zSzBOQlFYbERPMEZCVTNwRExGTkJRV2RDTEZkQlFWY3NRMEZCUXl4SFFVRlBPMGxCUXk5Q0xFbEJRVWtzVDBGQlR5eEhRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTjJRaXhKUVVGSkxFZEJRVWNzUTBGQlF5eFBRVUZQTEVWQlFVVTdVVUZEWWl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExEUkNRVUUwUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXZSQ3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0TFFVTXZRenRKUVVORUxFOUJRVThzV1VGQlF5eERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBGQlF6RkRMRU5CUVVNN1FVRlNSQ3hyUTBGUlF6dEJRVlZFTEZOQlFXZENMRTlCUVU4c1EwRkJReXhIUVVGUExFVkJRVVVzUzBGQlN5eEhRVUZETEV0QlFVczdTVUZEZUVNc1NVRkJTU3hQUVVGUExFZEJRVk1zUlVGQlJTeERRVUZETzBsQlEzWkNMRWxCUVVrc1IwRkJSeXhEUVVGRExFOUJRVThzUlVGQlJUdFJRVU5pTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc05FSkJRVFJDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF5OUVMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVU3V1VGRFVpeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRelZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1JVRkJSVHRuUWtGRGFFSXNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZETDBRN1UwRkRTanRSUVVORUxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXhReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMHRCUXk5RE8wbEJRMFFzVDBGQlR5eFpRVUZETEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdRVUZETVVNc1EwRkJRenRCUVdSRUxEQkNRV05ETzBGQlYwUXNVMEZCVXl3MFFrRkJORUlzUTBGQlF5eFBRVUZYTEVWQlFVVXNTMEZCWVR0SlFVTTFSQ3hKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU03U1VGRGNrTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRk8xRkJRVVVzU1VGQlNTeEpRVUZKTEVsQlFVa3NSMEZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTTdTMEZCUlR0SlFVTjZSQ3hKUVVGSkxFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVTdVVUZEWkN4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVOHNSVUZCUlN4RlFVRkZMRWRCUVVVc1NVRkJTU3hIUVVGSExFTkJRVU1zUjBGQlJ5eExRVUZITEdGQlFXRXNSVUZCUlR0WlFVRkZMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETzFOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVVc1EwRkJRenRMUVVOMFJqdEpRVU5FTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExHbERRVUZwUXl4RlFVRkZMRXRCUVVzc1EwRkJRU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4eFFrRkJUeXhEUVVGRExFTkJRVU03U1VGRE5VVXNUMEZCVHl4WlFVRkRMRU5CUVVNc2RVSkJRWFZDTEVWQlFVVXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEycEZMRU5CUVVNN1FVRkxSQ3hUUVVGVExFOUJRVThzUTBGQlF5eFBRVUZYTEVWQlFVVXNTMEZCWVR0SlFVTjJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRPMGxCUXpOQ0xFOUJRVThzV1VGQlF5eERRVUZETEhsQ1FVRjVRaXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVFc1EwRkJReXhEUVVGRE8xRkJRek5ETEZsQlFVTXNRMEZCUXl3d1FrRkJNRUlzUlVGQlJTeFZRVUZWTEVOQlFVTTdVVUZEZWtNc1dVRkJReXhEUVVGRExESkNRVUV5UWl4RlFVRkZMRWxCUVVrc1EwRkJRenRMUVVOMlF5eERRVUZETEVOQlFVTTdRVUZEVUN4RFFVRkRPMEZCUlVRc1UwRkJVeXhuUWtGQlowSXNRMEZCUXl4UFFVRlhPMGxCUTJwRExFOUJRVThzV1VGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVU4c1JVRkJSU3hGUVVGRk8xRkJRekZETEZGQlFVOHNSMEZCUnl4RlFVRkZPMWxCUTFJc1MwRkJTeXhOUVVGTkxFTkJRVU03V1VGRFdpeExRVUZMTEZkQlFWY3NRMEZCUXp0WlFVTnFRaXhMUVVGTExFMUJRVTBzUTBGQlF6dFpRVU5hTEV0QlFVc3NZVUZCWVN4RFFVRkRPMWxCUTI1Q0xFdEJRVXNzVTBGQlV6dG5Ra0ZEVGl4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOc1FqdG5Ra0ZCVXl4UFFVRlBMRmxCUVVNc1EwRkJReXd3UWtGQk1FSXNSVUZCUlR0dlFrRkRNVU1zV1VGQlF5eERRVUZETERCQ1FVRXdRaXhGUVVGRkxFZEJRVWNzUTBGQlF6dHZRa0ZEYkVNc1dVRkJReXhEUVVGRExESkNRVUV5UWl4RlFVRkZMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHBRa0ZETDBNc1EwRkJReXhEUVVGRE8yZENRVUZCTEVOQlFVTTdVMEZEVUR0SlFVTlVMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRFVpeERRVUZETzBGQlJVUXNVMEZCVXl4blFrRkJaMElzUTBGQlF5eFBRVUZYTzBsQlEycERMRTlCUVU4c1dVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZQTEVWQlFVVXNSVUZCUlR0UlFVTXhSQ3hSUVVGUExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVTdXVUZEV2l4TFFVRkxMR0ZCUVdFc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzFsQlF6bENMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzV1VGQlF5eERRVUZETERCQ1FVRXdRaXhGUVVGRk8yZENRVU14UXl4WlFVRkRMRU5CUVVNc01FSkJRVEJDTEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJRenRuUWtGRGRFTXNXVUZCUXl4RFFVRkRMREpDUVVFeVFpeEZRVUZGTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNN1lVRkRNME1zUTBGQlF5eERRVUZETzFOQlEwNDdTVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMUlzUTBGQlF6dEJRVVZFTEZOQlFWTXNhVUpCUVdsQ0xFTkJRVU1zVFVGQlZUdEpRVU5xUXl4UFFVRlBMRmxCUVVNc1EwRkJReXg1UWtGQmVVSXNSVUZCUnl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlR5eEZRVUZGTEVWQlFVVXNRMEZEZUVRc1dVRkJReXhEUVVGRExIZENRVUYzUWl4RlFVRkZPMUZCUTNoQ0xGbEJRVU1zUTBGQlF5d3dRa0ZCTUVJc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZETEVkQlFVY3NRMEZCUXp0UlFVTXpReXhaUVVGRExFTkJRVU1zTWtKQlFUSkNMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVNM1F5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1MwRkJSeXhUUVVGVExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNZVUZCWVN4SFFVRkhMRU5CUVVNc1dVRkJXU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVU01Ump0TFFVTktMRU5CUVVNc1EwRkRUQ3hEUVVGRExFTkJRVU03UVVGRFVDeERRVUZETzBGQldVUXNVMEZCVXl4WlFVRlpMRU5CUVVNc1QwRkJZeXhGUVVGRkxFdEJRV0U3U1VGRkwwTXNTVUZCU1N4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJSWEpDTEZOQlFWTXNZMEZCWXl4RFFVRkRMRWxCUVZjN1VVRkRMMElzU1VGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJZc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNUdGhRVU5rTEZOQlFWTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTTdZVUZETTBJc1NVRkJTU3hGUVVGRk8yRkJRMDRzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXp0aFFVTXZReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETzJGQlExZ3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFVkJRVVU3V1VGRFpDeEpRVUZKTEZOQlFWTXNSMEZCUnl4TlFVRk5MRU5CUVVNN1dVRkRka0lzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJRMnBDTEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU12UlN4TlFVRk5MRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETDBVc1QwRkJUeXh6UTBGQmMwTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eFRRVUZUTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1RVRkJUU3hEUVVGQkxFTkJRVU1zUTBGQlFTeFRRVUZUTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFJ5eERRVUZETEVOQlFVTTdZVUZEUkN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRE8yRkJRMVlzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEV2l4UFFVRlBMR0ZCUVdFc1IwRkJSeXhOUVVGTkxFZEJRVWNzWlVGQlpTeERRVUZETzBsQlEzQkVMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl3MFFrRkJORUlzUlVGQlJTeGpRVUZqTEVOQlFVTXNRMEZCUXp0SlFVTjBSU3hQUVVGUExGbEJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNiVUpCUVZFc1EwRkJReXhOUVVGTkxFVkJRVVVzUzBGQlN5eEZRVUZGTEZsQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6TkVMRU5CUVVNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgaW5kZXhfanNfMiA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanNcIik7XG5jb25zdCBEb2NTZXRzXzEgPSByZXF1aXJlKFwiLi4vRG9jU2V0c1wiKTtcbmNvbnN0IE1haW5Db21tZW50XzEgPSByZXF1aXJlKFwiLi9NYWluQ29tbWVudFwiKTtcbmNvbnN0IFBhcnRzXzEgPSByZXF1aXJlKFwiLi9QYXJ0c1wiKTtcbmNsYXNzIE1haW5EZXRhaWwgZXh0ZW5kcyBpbmRleF9qc18yLkxheW91dCB7XG4gICAgZ2V0Q29tcG9uZW50cyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGxpYiA9IGluZGV4X2pzXzEubS5yb3V0ZS5wYXJhbSgnbGliJyk7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gaW5kZXhfanNfMS5tLnJvdXRlLnBhcmFtKCdmaWVsZCcpO1xuICAgICAgICBub2RlLmF0dHJzLnJvdXRlID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0T3ZlcnZpZXcobGliLCBmaWVsZCkgfHwgaXRlbURvYyhEb2NTZXRzXzEuRG9jU2V0cy5nZXQobGliLCBmaWVsZCkgfHwgJycpO1xuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtbWFpbi1kZXRhaWwnLCBbcmVzdWx0XSk7XG4gICAgfVxufVxuZXhwb3J0cy5NYWluRGV0YWlsID0gTWFpbkRldGFpbDtcbmZ1bmN0aW9uIGdldE92ZXJ2aWV3KGxpYiwgbWRsKSB7XG4gICAgaWYgKG1kbCA9PT0gJzAnIHx8IG1kbCA9PT0gJycpIHtcbiAgICAgICAgbWRsID0gRG9jU2V0c18xLkRvY1NldHMuZ2V0KGxpYiwgYCR7bGlifS5vdmVydmlld2ApO1xuICAgICAgICBpZiAobWRsKSB7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnZpZXdEb2MobWRsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaXRlbURvYyhtZGwpIHtcbiAgICBjb25zdCBzaWcgPSBtZGwuc2lnbmF0dXJlcyA/IG1kbC5zaWduYXR1cmVzWzBdIDogbWRsO1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWRvYycsIFtcbiAgICAgICAgdGl0bGUobWRsLCBzaWcpLFxuICAgICAgICBNYWluQ29tbWVudF8xLmNvbW1lbnRMb25nKHNpZyksXG4gICAgICAgIG1lbWJlcnMoc2lnLCBzaWcpXG4gICAgXSk7XG59XG5mdW5jdGlvbiBvdmVydmlld0RvYyhtZGwpIHtcbiAgICBjb25zdCBzaWcgPSBtZGwuc2lnbmF0dXJlcyA/IG1kbC5zaWduYXR1cmVzWzBdIDogbWRsO1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWRvYycsIFtcbiAgICAgICAgTWFpbkNvbW1lbnRfMS5jb21tZW50TG9uZyhzaWcpLFxuICAgIF0pO1xufVxuZnVuY3Rpb24gdGl0bGUobWRsLCBzaWcpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS10aXRsZScsIHsgaWQ6IFBhcnRzXzEubWFrZUlEKCd0aXRsZScsIG1kbCkgfSwgaXRlbURlc2NyaXB0b3IobWRsLCBzaWcpKTtcbn1cbmZ1bmN0aW9uIG1lbWJlcnMobWRsLCBzaWcpIHtcbiAgICBpZiAobWRsLmdyb3Vwcykge1xuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1tZW1iZXJzJywgW1xuICAgICAgICAgICAgLi4ubWRsLmdyb3Vwcy5tYXAoKGcpID0+IG1lbWJlcihnLCBtZGwubGliLCB0cnVlLCB0cnVlKSksXG4gICAgICAgICAgICAuLi5tZGwuZ3JvdXBzLm1hcCgoZykgPT4gbWVtYmVyKGcsIG1kbC5saWIsIHRydWUsIGZhbHNlKSksXG4gICAgICAgICAgICAuLi5tZGwuZ3JvdXBzLm1hcCgoZykgPT4gbWVtYmVyKGcsIG1kbC5saWIsIGZhbHNlLCB0cnVlKSksXG4gICAgICAgICAgICAuLi5tZGwuZ3JvdXBzLm1hcCgoZykgPT4gbWVtYmVyKGcsIG1kbC5saWIsIGZhbHNlLCBmYWxzZSkpXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChtZGwucGFyYW1ldGVycykge1xuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1tZW1iZXJzJywgcGFyYW1ldGVyKG1kbC5wYXJhbWV0ZXJzLCBtZGwubGliKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1kbC50eXBlICYmIG1kbC50eXBlLmRlY2xhcmF0aW9uKSB7XG4gICAgICAgIG1kbC50eXBlLmRlY2xhcmF0aW9uLmxpYiA9IG1kbC5saWI7XG4gICAgICAgIHJldHVybiBtZW1iZXJzKG1kbC50eXBlLmRlY2xhcmF0aW9uLCBzaWcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tbWVtYmVycycpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcmFtZXRlcihnLCBsaWIpIHtcbiAgICBsZXQgY29udGVudCA9IGcubWFwKChjKSA9PiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLXBhcmFtZXRlcicsIHsgaWQ6IFBhcnRzXzEubWFrZUlEKCdwYXJhbWV0ZXInLCBjKSB9LCBpdGVtQ2hpbGQoYykpKTtcbiAgICBjb250ZW50LnVuc2hpZnQoaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1tZW1iZXItdGl0bGUnLCB7IGlkOiAncGFyYW1ldGVycycgfSwgaW5kZXhfanNfMS5tKCdzcGFuJywgJ1BhcmFtZXRlcnMnKSkpO1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLW1lbWJlcicsIGNvbnRlbnQpO1xufVxuZnVuY3Rpb24gbWVtYmVyKGdyb3VwLCBsaWIsIHN0YXRjLCBwdWJsYykge1xuICAgIGNvbnN0IHJlc29sdmUgPSAoKGMpID0+IERvY1NldHNfMS5Eb2NTZXRzLmdldChsaWIsIGMpKTtcbiAgICBjb25zdCBkaXJlY3RDaGlsZHJlbiA9ICgobWRsKSA9PiAhbWRsWydpbmhlcml0ZWRGcm9tJ10pO1xuICAgIGNvbnN0IGluaGVyaXRlZENoaWxkcmVuID0gKChtZGwpID0+IG1kbFsnaW5oZXJpdGVkRnJvbSddKTtcbiAgICBjb25zdCBncm91cE1hcCA9IHtcbiAgICAgICAgJ0V4dGVybmFsIG1vZHVsZXMnOiAnLmhzLWl0ZW0tZXh0ZXJuYWwtbW9kdWxlJyxcbiAgICAgICAgJ0NvbnN0cnVjdG9ycyc6ICcuaHMtaXRlbS1jb25zdHJ1Y3RvcicsXG4gICAgICAgICdDbGFzc2VzJzogJy5ocy1pdGVtLWNsYXNzJyxcbiAgICAgICAgJ0ludGVyZmFjZXMnOiAnLmhzLWl0ZW0taW50ZXJmYWNlJyxcbiAgICAgICAgJ0Z1bmN0aW9ucyc6ICcuaHMtaXRlbS1mdW5jdGlvbicsXG4gICAgICAgICdNZXRob2RzJzogJy5ocy1pdGVtLW1ldGhvZCcsXG4gICAgICAgICdWYXJpYWJsZXMnOiAnLmhzLWl0ZW0tdmFyaWFibGUnLFxuICAgICAgICAnT2JqZWN0IGxpdGVyYWxzJzogJy5ocy1pdGVtLW9iamVjdC1saXRlcmFsJyxcbiAgICAgICAgJ1Byb3BlcnRpZXMnOiAnLmhzLWl0ZW0tcHJvcGVydHknLFxuICAgICAgICAnVHlwZSBhbGlhc2VzJzogJy5ocy1pdGVtLWFsaWFzJyxcbiAgICAgICAgJ0FjY2Vzc29ycyc6ICcuaHMtaXRlbS1hY2Nlc3NvcnMnXG4gICAgfTtcbiAgICBjb25zdCBmbiA9IGdyb3VwTWFwW2dyb3VwLnRpdGxlXSB8fCAnLmhzLWl0ZW0tdW5rbm93bi1tZW1iZXInO1xuICAgIGNvbnN0IGlzUHVibGljID0gKGZsYWdzKSA9PiBmbGFncy5pc1B1YmxpYyB8fCAoZmxhZ3MuaXNFeHBvcnRlZCAmJiAhZmxhZ3MuaXNQcml2YXRlKTtcbiAgICBjb25zdCBjb250ZW50ID0gZ3JvdXAuY2hpbGRyZW5cbiAgICAgICAgLm1hcChyZXNvbHZlKVxuICAgICAgICAuZmlsdGVyKGRpcmVjdENoaWxkcmVuKVxuICAgICAgICAuZmlsdGVyKChtZGwpID0+IHN0YXRjID8gbWRsLmZsYWdzLmlzU3RhdGljIDogIW1kbC5mbGFncy5pc1N0YXRpYylcbiAgICAgICAgLmZpbHRlcigobWRsKSA9PiBwdWJsYyA/IGlzUHVibGljKG1kbC5mbGFncykgOiAhaXNQdWJsaWMobWRsLmZsYWdzKSlcbiAgICAgICAgLm1hcCgobWRsKSA9PiBpbmRleF9qc18xLm0oZm4sIHsgaWQ6IFBhcnRzXzEubWFrZUlEKGdyb3VwLnRpdGxlLCBtZGwpIH0sIGl0ZW1DaGlsZChtZGwpKSk7XG4gICAgY29uc3QgaW5oZXJpdGVkID0gZ3JvdXAuY2hpbGRyZW5cbiAgICAgICAgLm1hcChyZXNvbHZlKVxuICAgICAgICAuZmlsdGVyKGluaGVyaXRlZENoaWxkcmVuKVxuICAgICAgICAuZmlsdGVyKChtZGwpID0+IHN0YXRjID8gbWRsLmZsYWdzLmlzU3RhdGljIDogIW1kbC5mbGFncy5pc1N0YXRpYylcbiAgICAgICAgLmZpbHRlcigobWRsKSA9PiBwdWJsYyA/IG1kbC5mbGFncy5pc1B1YmxpYyA6ICFtZGwuZmxhZ3MuaXNQdWJsaWMpXG4gICAgICAgIC5tYXAoKG1kbCkgPT4gaW5kZXhfanNfMS5tKGAuaHMtaXRlbS1pbmhlcml0ZWQgJHtmbn1gLCB7IGlkOiBQYXJ0c18xLm1ha2VJRChncm91cC50aXRsZSwgbWRsKSB9LCBpdGVtQ2hpbGQobWRsKSkpO1xuICAgIGNvbnN0IHB1YmxTdHIgPSBwdWJsYyA/ICdQdWJsaWMnIDogJ1Byb3RlY3RlZCBvciBQcml2YXRlJztcbiAgICBjb25zdCBzdGF0U3RyID0gc3RhdGMgPyAnU3RhdGljJyA6ICcnO1xuICAgIGlmIChpbmhlcml0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBpbmhlcml0ZWQudW5zaGlmdChpbmRleF9qc18xLm0oJy5ocy1pdGVtLWluaGVyaXRlZCAuaHMtaXRlbS1tZW1iZXItdGl0bGUnLCBpbmRleF9qc18xLm0oJ3NwYW4nLCBgJHtwdWJsU3RyfSAke3N0YXRTdHJ9IEluaGVyaXRlZCAke2dyb3VwLnRpdGxlfWApKSk7XG4gICAgfVxuICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29udGVudC51bnNoaWZ0KGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tbWVtYmVyLXRpdGxlJywgeyBpZDogZ3JvdXAudGl0bGUudG9Mb3dlckNhc2UoKSB9LCBpbmRleF9qc18xLm0oJ3NwYW4nLCBgJHtwdWJsU3RyfSAke3N0YXRTdHJ9ICR7Z3JvdXAudGl0bGV9YCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubShgLmhzLWl0ZW0tbWVtYmVyICR7c3RhdGMgPyAnLmhzLWl0ZW0tc3RhdGljJyA6ICcnfSAke3B1YmxjID8gJy5ocy1pdGVtLXB1YmxpYycgOiAnJ31gLCBjb250ZW50LmNvbmNhdChpbmhlcml0ZWQpKTtcbn1cbmZ1bmN0aW9uIGl0ZW1EZXNjcmlwdG9yKG1kbCwgc2lnKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tZGVzYycsIFtcbiAgICAgICAgICAgIFBhcnRzXzEuZmxhZ3MobWRsKSxcbiAgICAgICAgICAgIFBhcnRzXzEua2luZFN0cmluZyhtZGwpLFxuICAgICAgICAgICAgUGFydHNfMS5pdGVtTmFtZShtZGwsIG1kbCksXG4gICAgICAgICAgICBQYXJ0c18xLnNpZ25hdHVyZShzaWcsIG1kbCksXG4gICAgICAgICAgICBQYXJ0c18xLnR5cGUoc2lnLCBtZGwubGliKSxcbiAgICAgICAgICAgIFBhcnRzXzEuZXh0ZW5zaW9uT2YobWRsKSxcbiAgICAgICAgICAgIFBhcnRzXzEuaW5oZXJpdGVkRnJvbShtZGwpLFxuICAgICAgICAgICAgUGFydHNfMS5zb3VyY2VMaW5rKG1kbClcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICBjb25zb2xlLmxvZyhtZGwpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGl0ZW1DaGlsZChtZGwsIHNpZyA9IG1kbCkge1xuICAgIHJldHVybiBtZGwuc2lnbmF0dXJlcyA/XG4gICAgICAgIG1kbC5zaWduYXR1cmVzLm1hcCgocykgPT4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1jaGlsZC1zaWduYXR1cmUnLCBbaXRlbURlc2NyaXB0b3IobWRsLCBzKSwgTWFpbkNvbW1lbnRfMS5jb21tZW50KHMsIHRydWUpXSkpIDpcbiAgICAgICAgW2l0ZW1EZXNjcmlwdG9yKG1kbCwgc2lnKSwgTWFpbkNvbW1lbnRfMS5jb21tZW50KHNpZywgdHJ1ZSldO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVFdGcGJrUmxkR0ZwYkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkyYVdWM0wwMWhhVzVFWlhSaGFXd3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHRSVUZCTkVVN1FVRkROVVVzYlVWQlFUUkZPMEZCUXpWRkxIZERRVUZyUkR0QlFVTnNSQ3dyUTBGQmNVUTdRVUZEY2tRc2JVTkJTU3RETzBGQlRTOURMRTFCUVdFc1ZVRkJWeXhUUVVGUkxHbENRVUZOTzBsQlEyeERMR0ZCUVdFc1EwRkJReXhKUVVGVk8xRkJRM0JDTEUxQlFVMHNSMEZCUnl4SFFVRkpMRmxCUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTJ4RExFMUJRVTBzUzBGQlN5eEhRVUZITEZsQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEzSkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEZOQlFWTXNRMEZCUXp0UlFVVTNRaXhKUVVGSkxFMUJRVTBzUjBGQlJ5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRXRCUVVzc1EwRkJReXhKUVVGSkxFOUJRVThzUTBGQlF5eHBRa0ZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRMMFVzVDBGQlR5eFpRVUZETEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpGRExFTkJRVU03UTBGRFNqdEJRVlJFTEdkRFFWTkRPMEZCVVVRc1UwRkJVeXhYUVVGWExFTkJRVU1zUjBGQlZTeEZRVUZGTEVkQlFWVTdTVUZEZGtNc1NVRkJTU3hIUVVGSExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVkQlFVY3NTMEZCU3l4RlFVRkZMRVZCUVVVN1VVRkRNMElzUjBGQlJ5eEhRVUZITEdsQ1FVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVkQlFVY3NWMEZCVnl4RFFVRkRMRU5CUVVNN1VVRkRNVU1zU1VGQlNTeEhRVUZITEVWQlFVVTdXVUZEVEN4UFFVRlBMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU16UWp0TFFVTktPMGxCUTBRc1QwRkJUeXhUUVVGVExFTkJRVU03UVVGRGNrSXNRMEZCUXp0QlFVMUVMRk5CUVZNc1QwRkJUeXhEUVVGRExFZEJRVTg3U1VGRGNFSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlFTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPMGxCUTNCRUxFOUJRVThzV1VGQlF5eERRVUZETEdOQlFXTXNSVUZCUlR0UlFVTnlRaXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXp0UlFVTm1MSGxDUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlEyaENMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETzB0QlEzQkNMRU5CUVVNc1EwRkJRenRCUVVOUUxFTkJRVU03UVVGTlJDeFRRVUZUTEZkQlFWY3NRMEZCUXl4SFFVRlBPMGxCUTNoQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVFc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6dEpRVU53UkN4UFFVRlBMRmxCUVVNc1EwRkJReXhqUVVGakxFVkJRVVU3VVVGRGNrSXNlVUpCUVZjc1EwRkJReXhIUVVGSExFTkJRVU03UzBGRGJrSXNRMEZCUXl4RFFVRkRPMEZCUTFBc1EwRkJRenRCUVU5RUxGTkJRVk1zUzBGQlN5eERRVUZETEVkQlFVOHNSVUZCUlN4SFFVRlBPMGxCUXpOQ0xFOUJRVThzV1VGQlF5eERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZGTEdOQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVc1IwRkJSeXhEUVVGRExFVkJRVU1zUlVGQlJTeGpRVUZqTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGNrWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1QwRkJUeXhEUVVGRExFZEJRVThzUlVGQlJTeEhRVUZQTzBsQlF6ZENMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlJUdFJRVU5hTEU5QlFVOHNXVUZCUXl4RFFVRkRMR3RDUVVGclFpeEZRVUZGTzFsQlEzcENMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdXVUZETlVRc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTTNSQ3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpkRUxFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGTExFVkJRVVVzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeExRVUZMTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1UwRkRha1VzUTBGQlF5eERRVUZETzB0QlEwNDdVMEZCVFN4SlFVRkpMRWRCUVVjc1EwRkJReXhWUVVGVkxFVkJRVVU3VVVGRGRrSXNUMEZCVHl4WlFVRkRMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRjRVU3VTBGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVTdVVUZEZWtNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU03VVVGRGJrTXNUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkROME03VTBGQlRUdFJRVU5JTEU5QlFVOHNXVUZCUXl4RFFVRkRMR3RDUVVGclFpeERRVUZETEVOQlFVTTdTMEZEYUVNN1FVRkRUQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFRRVUZUTEVOQlFVTXNRMEZCVHl4RlFVRkZMRWRCUVZVN1NVRkRiRU1zU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTXNXVUZCUXl4RFFVRkRMRzlDUVVGdlFpeEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMR05CUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEyNUhMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQlF5eERRVUZETEhWQ1FVRjFRaXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEZsQlFWa3NSVUZCUXl4RlFVRkZMRmxCUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNoR0xFOUJRVThzV1VGQlF5eERRVUZETEdsQ1FVRnBRaXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBGQlEzcERMRU5CUVVNN1FVRkZSQ3hUUVVGVExFMUJRVTBzUTBGQlF5eExRVUZUTEVWQlFVVXNSMEZCVlN4RlFVRkZMRXRCUVdFc1JVRkJSU3hMUVVGak8wbEJRMmhGTEUxQlFVMHNUMEZCVHl4SFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGUkxFVkJRVVVzUlVGQlJTeERRVUZETEdsQ1FVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpsRUxFMUJRVTBzWTBGQll5eEhRVUZOTEVOQlFVTXNRMEZCUXl4SFFVRlBMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRMMFFzVFVGQlRTeHBRa0ZCYVVJc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlR5eEZRVUZGTEVWQlFVVXNRMEZCUlN4SFFVRkhMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU12UkN4TlFVRk5MRkZCUVZFc1IwRkJSenRSUVVOaUxHdENRVUZyUWl4RlFVRkZMREJDUVVFd1FqdFJRVU01UXl4alFVRmpMRVZCUVUwc2MwSkJRWE5DTzFGQlF6RkRMRk5CUVZNc1JVRkJWeXhuUWtGQlowSTdVVUZEY0VNc1dVRkJXU3hGUVVGUkxHOUNRVUZ2UWp0UlFVTjRReXhYUVVGWExFVkJRVk1zYlVKQlFXMUNPMUZCUTNaRExGTkJRVk1zUlVGQlZ5eHBRa0ZCYVVJN1VVRkRja01zVjBGQlZ5eEZRVUZUTEcxQ1FVRnRRanRSUVVOMlF5eHBRa0ZCYVVJc1JVRkJSeXg1UWtGQmVVSTdVVUZETjBNc1dVRkJXU3hGUVVGUkxHMUNRVUZ0UWp0UlFVTjJReXhqUVVGakxFVkJRVTBzWjBKQlFXZENPMUZCUTNCRExGZEJRVmNzUlVGQlV5eHZRa0ZCYjBJN1MwRkRNME1zUTBGQlF6dEpRVU5HTEUxQlFVMHNSVUZCUlN4SFFVRkhMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NlVUpCUVhsQ0xFTkJRVU03U1VGRE9VUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1EwRkJReXhMUVVGVExFVkJRVVVzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlZTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8wbEJSWHBHTEUxQlFVMHNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJReXhSUVVGUk8xTkJRM3BDTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNN1UwRkRXaXhOUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETzFOQlEzUkNMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVThzUlVGQlJTeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkJMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXp0VFFVTndSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZQTEVWQlFVVXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJRU3hEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xTkJRM1JGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVU4c1JVRkJSU3hGUVVGRkxFTkJRVU1zV1VGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhqUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJReXhGUVVGRkxGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkROVVVzVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRkZCUVZFN1UwRkRNMElzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXp0VFFVTmFMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXp0VFFVTjZRaXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZQTEVWQlFVVXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJRU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNN1UwRkRjRVVzVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCVHl4RlFVRkZMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVUVzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRE8xTkJRM0JGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVU4c1JVRkJSU3hGUVVGRkxFTkJRVU1zV1VGQlF5eERRVUZETEhOQ1FVRnpRaXhGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4alFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUXl4RlFVRkZMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGY0Vjc1RVRkJUU3hQUVVGUExFZEJRVWNzUzBGQlN5eERRVUZCTEVOQlFVTXNRMEZCUVN4UlFVRlJMRU5CUVVFc1EwRkJReXhEUVVGQkxITkNRVUZ6UWl4RFFVRkRPMGxCUTNSRUxFMUJRVTBzVDBGQlR5eEhRVUZITEV0QlFVc3NRMEZCUVN4RFFVRkRMRU5CUVVFc1VVRkJVU3hEUVVGQkxFTkJRVU1zUTBGQlFTeEZRVUZGTEVOQlFVTTdTVUZEYkVNc1NVRkJTU3hUUVVGVExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNSVUZCUlR0UlFVTndRaXhUUVVGVExFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFVTXNRMEZCUXl3d1EwRkJNRU1zUlVGQlJTeFpRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1QwRkJUeXhKUVVGSkxFOUJRVThzWTBGQll5eExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGFrazdTVUZEUkN4SlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eEZRVUZGTzFGQlEyeENMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQlF5eERRVUZETEhWQ1FVRjFRaXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhGUVVGRkxFVkJRVU1zUlVGQlJTeFpRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1QwRkJUeXhKUVVGSkxFOUJRVThzU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGJFazdTVUZEUkN4UFFVRlBMRmxCUVVNc1EwRkJReXh0UWtGQmJVSXNTMEZCU3l4RFFVRkJMRU5CUVVNc1EwRkJRU3hwUWtGQmFVSXNRMEZCUVN4RFFVRkRMRU5CUVVFc1JVRkJSU3hKUVVGSkxFdEJRVXNzUTBGQlFTeERRVUZETEVOQlFVRXNhVUpCUVdsQ0xFTkJRVUVzUTBGQlF5eERRVUZCTEVWQlFVVXNSVUZCUlN4RlFVRkZMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjJTQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eGpRVUZqTEVOQlFVTXNSMEZCVHl4RlFVRkZMRWRCUVU4N1NVRkRjRU1zU1VGQlNUdFJRVUZGTEU5QlFVOHNXVUZCUXl4RFFVRkRMR1ZCUVdVc1JVRkJSVHRaUVVONFFpeGhRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRPMWxCUTFZc2EwSkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTTdXVUZEWml4blFrRkJVU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTTdXVUZEYkVJc2FVSkJRVk1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRPMWxCUTI1Q0xGbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJRenRaUVVOdVFpeHRRa0ZCVnl4RFFVRkRMRWRCUVVjc1EwRkJRenRaUVVOb1FpeHhRa0ZCWVN4RFFVRkRMRWRCUVVjc1EwRkJRenRaUVVOc1FpeHJRa0ZCVlN4RFFVRkRMRWRCUVVjc1EwRkJRenRUUVVOc1FpeERRVUZETEVOQlFVTTdTMEZEVGp0SlFVTkVMRTlCUVUwc1EwRkJReXhGUVVGRk8xRkJRVVVzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkJSVHRCUVVOc1JDeERRVUZETzBGQlJVUXNVMEZCVXl4VFFVRlRMRU5CUVVNc1IwRkJUeXhGUVVGRkxFZEJRVWNzUjBGQlF5eEhRVUZITzBsQlF5OUNMRTlCUVU4c1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlFTeERRVUZETzFGQlEyeENMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCU3l4RlFVRkZMRVZCUVVVc1EwRkJReXhaUVVGRExFTkJRVU1zTUVKQlFUQkNMRVZCUVVNc1EwRkJReXhqUVVGakxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMSEZDUVVGUExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGVrY3NRMEZCUXl4alFVRmpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEhGQ1FVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZEVRc1EwRkJReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuY29uc3QgaHN3aWRnZXRfMSA9IHJlcXVpcmUoXCJoc3dpZGdldFwiKTtcbmNvbnN0IGhzd2lkZ2V0ID0gcmVxdWlyZShcImhzd2lkZ2V0XCIpO1xuY29uc3QgaHNsYXlvdXQgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5jb25zdCBoc2xheW91dF8yID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuY29uc3QgaHN1dGlsXzEgPSByZXF1aXJlKFwiaHN1dGlsXCIpO1xuY29uc3QgaHN1dGlsXzIgPSByZXF1aXJlKFwiaHN1dGlsXCIpO1xuY29uc3QgaHN1dGlsID0gcmVxdWlyZShcImhzdXRpbFwiKTtcbmNvbnN0IG1vZHVsZXMgPSB7XG4gICAgbTogUHJvbWlzZS5yZXNvbHZlKGhzbGF5b3V0XzEubSksXG4gICAgaHN1dGlsOiBQcm9taXNlLnJlc29sdmUoaHN1dGlsKSxcbiAgICBoc2xheW91dDogUHJvbWlzZS5yZXNvbHZlKGhzbGF5b3V0KSxcbiAgICBoc3dpZGdldDogUHJvbWlzZS5yZXNvbHZlKGhzd2lkZ2V0KSxcbiAgICBoc2RhdGFiOiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHJlcXVpcmUoJ2hzZGF0YWInKSksXG4gICAgaHNncmFwaDogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiByZXF1aXJlKCdoc2dyYXBoJykpXG59O1xuY29uc3QgZ0luaXRpYWxpemVkID0ge307XG5mdW5jdGlvbiBleGFtcGxlKGV4bXBsKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBoc3V0aWxfMS5zaG9ydENoZWNrU3VtKGV4bXBsKTtcbiAgICBsZXQgSURzID0gZ0luaXRpYWxpemVkW2luc3RhbmNlXTtcbiAgICBpZiAoIUlEcykge1xuICAgICAgICBJRHMgPSBnSW5pdGlhbGl6ZWRbaW5zdGFuY2VdID0gaW5pdERlc2MoSURzKTtcbiAgICAgICAgSURzLmV4ZWN1dGVTb3VyY2UgPSBleG1wbDtcbiAgICAgICAgY3JlYXRlRXhlY3V0ZVNjcmlwdChJRHMsIGV4bXBsKTtcbiAgICB9XG4gICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMubWVudUlEKSkge1xuICAgICAgICBhZGRFeGFtcGxlKElEcykudGhlbihoc3V0aWxfMi5kZWxheSgxKSkudGhlbihleGVjdXRlU2NyaXB0KS5jYXRjaChleGVjdXRlRXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCBmcmFtZUhlaWdodCA9IChJRHMuYXR0cnMgPyBJRHMuYXR0cnMuaGVpZ2h0IDogdW5kZWZpbmVkKSB8fCAnMzAwcHgnO1xuICAgIGNvbnN0IHdyYXBXaXRoSUQgPSAoY3NzKSA9PiBjc3MgPT09ICckZXhhbXBsZUlEJyA/IGAjJHtJRHMuZXhhbXBsZUlEfWAgOiBgIyR7SURzLm1lbnVJRH0gJHtjc3N9YDtcbiAgICBjb25zdCBzdHlsZSA9ICghSURzLnBhZ2VzWydjc3MnXSkgPyAnJyA6XG4gICAgICAgIElEcy5wYWdlc1snY3NzJ10ucmVwbGFjZSgvKF58fSlcXHMqPyhcXFMqPylcXHMqP3svZ2ksICh4LCAuLi5hcmdzKSA9PiB4LnJlcGxhY2UoYXJnc1sxXSwgd3JhcFdpdGhJRChhcmdzWzFdKSkpO1xuICAgIHJldHVybiBgPHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48ZXhhbXBsZSBpZD0ke0lEcy5leGFtcGxlSUR9IHN0eWxlPVwiaGVpZ2h0OiR7ZnJhbWVIZWlnaHR9XCIgY2xhc3M9XCJocy1sYXlvdXQtZnJhbWVcIj48L2V4YW1wbGU+YDtcbn1cbmV4cG9ydHMuZXhhbXBsZSA9IGV4YW1wbGU7XG5mdW5jdGlvbiBjcmVhdGVFeGVjdXRlU2NyaXB0KElEcywgZXhtcGwpIHtcbiAgICBjb25zdCBsaWJOYW1lcyA9IE9iamVjdC5rZXlzKG1vZHVsZXMpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChsaWJOYW1lcy5tYXAobmFtZSA9PiBtb2R1bGVzW25hbWVdKSlcbiAgICAgICAgLnRoZW4oKGxpYnMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdEZuID0gbmV3IEZ1bmN0aW9uKCdyb290JywgLi4ubGliTmFtZXMsIGdldENvbW1lbnREZXNjcmlwdG9yKElEcywgZXhtcGwpKTtcbiAgICAgICAgICAgIElEcy5leGVjdXRlU2NyaXB0ID0gKHJvb3QpID0+IHNjcmlwdEZuKHJvb3QsIC4uLmxpYnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjcmVhdGluZyBzY3JpcHQ6JyArIGUpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpbml0RGVzYyhJRHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBleGFtcGxlSUQ6IGdldE5ld0lEKCksXG4gICAgICAgIG1lbnVJRDogZ2V0TmV3SUQoKSxcbiAgICAgICAgZGVzYzoge1xuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiAnanMnLFxuICAgICAgICAgICAgY2xpY2tlZDogKCkgPT4gYWRkRXhhbXBsZShJRHMpXG4gICAgICAgICAgICAgICAgLnRoZW4oZXhlY3V0ZVNjcmlwdClcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXhlY3V0ZUVycm9yKSxcbiAgICAgICAgICAgIHNpemU6IFtcIjUwcHhcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGFnZXM6IHt9LFxuICAgICAgICBhY3RpdmVTcmNQYWdlOiB1bmRlZmluZWRcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0TmV3SUQoKSB7XG4gICAgcmV0dXJuICdocycgKyBNYXRoLmZsb29yKDEwMDAwMDAgKiBNYXRoLnJhbmRvbSgpKTtcbn1cbmZ1bmN0aW9uIGFkZEV4YW1wbGUoSURzKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShJRHMpLnRoZW4oYWRkRXhhbXBsZVN0cnVjdHVyZSkudGhlbihoc3V0aWxfMi5kZWxheSgxKSk7XG59XG5mdW5jdGlvbiBhZGRFeGFtcGxlU3RydWN0dXJlKElEcykge1xuICAgIGxldCBpdGVtID0gSURzLmFjdGl2ZVNyY1BhZ2UgfHwgJ2pzJztcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLmV4YW1wbGVJRCk7XG4gICAgSURzLmRlc2MuY2xpY2tlZCA9IChuZXdJdGVtKSA9PiB7XG4gICAgICAgIGl0ZW0gPSBJRHMuYWN0aXZlU3JjUGFnZSA9IG5ld0l0ZW07XG4gICAgfTtcbiAgICBoc2xheW91dF8xLm0ubW91bnQocm9vdCwgeyB2aWV3OiAoKSA9PiBoc2xheW91dF8xLm0oaHNsYXlvdXRfMi5MYXlvdXQsIHtcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcIjUwJVwiXSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgICAgICBoc2xheW91dF8xLm0oaHNsYXlvdXRfMi5MYXlvdXQsIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogaHNsYXlvdXRfMS5tKCcuaHMtbGF5b3V0IC5ocy1leGVjdXRpb24nLCB7IGlkOiBJRHMubWVudUlEIH0sICdwbGFjZWhvbGRlcicpXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaHNsYXlvdXRfMS5tKGhzbGF5b3V0XzIuTGF5b3V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3M6IFtcIjMwcHhcIiwgXCJmaWxsXCJdLFxuICAgICAgICAgICAgICAgICAgICBjc3M6ICcuaHMtc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgaHNsYXlvdXRfMS5tKGhzd2lkZ2V0XzEuTWVudSwgeyBkZXNjOiBJRHMuZGVzYywgc2l6ZTogWyc1MHB4J10gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBoc2xheW91dF8xLm0oaHNsYXlvdXRfMi5MYXlvdXQsIHsgY29udGVudDogaHNsYXlvdXRfMS5tKCcuaHMtbGF5b3V0IC5ocy1zb3VyY2UtbWFpbicsIGhzbGF5b3V0XzEubS50cnVzdChgPGNvZGU+PHByZT4ke0lEcy5wYWdlc1tpdGVtXX08L3ByZT48L2NvZGU+YCkpIH0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0pO1xuICAgIHJldHVybiBJRHM7XG59XG5mdW5jdGlvbiBleGVjdXRlU2NyaXB0KElEcykge1xuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMubWVudUlEKTtcbiAgICBpZiAocm9vdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgSURzLmV4ZWN1dGVTY3JpcHQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3IgZXhlY3V0aW5nIHNjcmlwdDogXCIgKyBlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKElEcy5leGVjdXRlU291cmNlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUuc3RhY2spO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgcm9vdCBub3QgZm91bmQgZm9yIG1lbnVJRCAke0lEcy5tZW51SUR9YCk7XG4gICAgfVxuICAgIGhzbGF5b3V0XzEubS5yZWRyYXcoKTtcbiAgICByZXR1cm4gSURzO1xufVxuZnVuY3Rpb24gZXhlY3V0ZUVycm9yKGUpIHtcbiAgICBjb25zb2xlLmxvZygncmVqZWN0aW9uIGV4ZWN1dGluZyBzY3JpcHQ6Jyk7XG4gICAgY29uc29sZS5sb2coZSk7XG59XG5mdW5jdGlvbiBnZXRDb21tZW50RGVzY3JpcHRvcihJRHMsIGV4YW1wbGUpIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgbGV0IGF0dHJzID0gZXhhbXBsZS5tYXRjaCgvPGV4YW1wbGVcXHMoXFxTKj8pKFxcc3w+KS9pKTtcbiAgICBpZiAoYXR0cnMgJiYgYXR0cnNbMV0pIHtcbiAgICAgICAgY29uc3QgYXQgPSBhdHRyc1sxXS5zcGxpdCgnPScpO1xuICAgICAgICBJRHMuYXR0cnMgPSB7IFthdFswXV06IGF0WzFdIH07XG4gICAgfVxuICAgIGV4YW1wbGUucmVwbGFjZSgvPGZpbGVbXFxzXSpuYW1lPVtcXFNdKj9cXC4oW1xcc1xcU10qPylbJ3xcIl0+KFtcXFNcXHNdKj8pPFxcL2ZpbGU+L2dpLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c107XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhcmdzWzJdLnRyaW0oKTtcbiAgICAgICAgSURzLmRlc2MuaXRlbXMucHVzaChhcmdzWzFdKTtcbiAgICAgICAgSURzLnBhZ2VzW2FyZ3NbMV1dID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICByZXR1cm4gSURzLnBhZ2VzWydqcyddO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVFdGcGJrVjRZVzF3YkdVdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12ZG1sbGR5OU5ZV2x1UlhoaGJYQnNaUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFUQkZRU3gxUTBGQlowUTdRVUZEYUVRc2RVTkJRV2RFTzBGQlEyaEVMSEZEUVVGblJEdEJRVU5vUkN4eFEwRkJaMFE3UVVGRGFFUXNkVU5CUVdkRU8wRkJRMmhFTEcxRFFVRTRRenRCUVVNNVF5eHRRMEZCT0VNN1FVRkRPVU1zYVVOQlFUaERPMEZCUlRsRExFMUJRVTBzVDBGQlR5eEhRVUZITzBsQlExb3NRMEZCUXl4RlFVRlhMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQlF5eERRVUZETzBsQlF6bENMRTFCUVUwc1JVRkJUU3hQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXp0SlFVTnVReXhSUVVGUkxFVkJRVWtzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNN1NVRkRja01zVVVGQlVTeEZRVUZKTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRE8wbEJRM0pETEU5QlFVOHNkVU5CUVN0RExGTkJRVk1zUlVGQlF6dEpRVU5vUlN4UFFVRlBMSFZEUVVFclF5eFRRVUZUTEVWQlFVTTdRMEZEYmtVc1EwRkJRenRCUVcxQ1JpeE5RVUZOTEZsQlFWa3NSMEZCSzBJc1JVRkJSU3hEUVVGRE8wRkJaMEp3UkN4VFFVRm5RaXhQUVVGUExFTkJRVU1zUzBGQldUdEpRVU5vUXl4TlFVRk5MRkZCUVZFc1IwRkJSeXh6UWtGQllTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUTNSRExFbEJRVWtzUjBGQlJ5eEhRVUZITEZsQlFWa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRKUVVOcVF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZPMUZCUTA0c1IwRkJSeXhIUVVGSExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE4wTXNSMEZCUnl4RFFVRkRMR0ZCUVdFc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRE1VSXNiVUpCUVcxQ0xFTkJRVU1zUjBGQlJ5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMHRCUTI1RE8wbEJRMFFzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTzFGQlEzUkRMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNZMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dExRVU14UlR0SlFVVkVMRTFCUVUwc1YwRkJWeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFOUJRVThzUTBGQlF6dEpRVU42UlN4TlFVRk5MRlZCUVZVc1IwRkJSeXhEUVVGRExFZEJRVlVzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4TFFVRkhMRmxCUVZrc1EwRkJRU3hEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVFc1EwRkJReXhEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVU5d1J5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVUVzUTBGQlF6dFJRVU4wUWl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4M1FrRkJkMElzUlVGRE4wTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1IwRkJSeXhKUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVU4yUml4RFFVRkRPMGxCUTBZc1QwRkJUeXhWUVVGVkxFdEJRVXNzZFVKQlFYVkNMRWRCUVVjc1EwRkJReXhUUVVGVExHdENRVUZyUWl4WFFVRlhMSE5EUVVGelF5eERRVUZETzBGQlEyeEpMRU5CUVVNN1FVRjZRa1FzTUVKQmVVSkRPMEZCUlVRc1UwRkJVeXh0UWtGQmJVSXNRMEZCUXl4SFFVRnhRaXhGUVVGRkxFdEJRVms3U1VGRE5VUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0SlFVTjBReXhQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1JFTEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRk8xRkJRMWdzU1VGQlNUdFpRVU5CTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1VVRkJVU3hEUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEZGQlFWRXNSVUZCUlN4dlFrRkJiMElzUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOeVJpeEhRVUZITEVOQlFVTXNZVUZCWVN4SFFVRkhMRU5CUVVNc1NVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRE1VUXNUMEZCVHl4SlFVRkpMRU5CUVVNN1UwRkRaanRSUVVORUxFOUJRVTBzUTBGQlF5eEZRVUZGTzFsQlEwd3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhyUWtGQmEwSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOd1F5eFBRVUZQTEV0QlFVc3NRMEZCUXp0VFFVTm9RanRKUVVOTUxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlExQXNRMEZCUXp0QlFVdEVMRk5CUVZNc1VVRkJVU3hEUVVGRExFZEJRWEZDTzBsQlEyNURMRTlCUVU4N1VVRkRTQ3hUUVVGVExFVkJRVWNzVVVGQlVTeEZRVUZGTzFGQlEzUkNMRTFCUVUwc1JVRkJUU3hSUVVGUkxFVkJRVVU3VVVGRGRFSXNTVUZCU1N4RlFVRmxPMWxCUTJZc1MwRkJTeXhGUVVGWExFVkJRVVU3V1VGRGJFSXNXVUZCV1N4RlFVRkZMRWxCUVVrN1dVRkRiRUlzVDBGQlR5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU03YVVKQlEycENMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU03YVVKQlEyNUNMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU03V1VGRGFFTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRE8xTkJRMnBDTzFGQlEwUXNTMEZCU3l4RlFVRkRMRVZCUVVVN1VVRkRVaXhoUVVGaExFVkJRVVVzVTBGQlV6dExRVU16UWl4RFFVRkRPMEZCUTA0c1EwRkJRenRCUVVkRUxGTkJRVk1zVVVGQlVUdEpRVU5pTEU5QlFVOHNTVUZCU1N4SFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRMnhFTEVOQlFVTTdRVUZIUkN4VFFVRlRMRlZCUVZVc1EwRkJReXhIUVVGeFFqdEpRVU55UXl4UFFVRlBMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzcEZMRU5CUVVNN1FVRlBSQ3hUUVVGVExHMUNRVUZ0UWl4RFFVRkRMRWRCUVhGQ08wbEJRemxETEVsQlFVa3NTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhoUVVGaExFbEJRVWtzU1VGQlNTeERRVUZETzBsQlEzSkRMRTFCUVUwc1NVRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8wbEJSWEJFTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQll5eEZRVUZGTEVWQlFVVTdVVUZEYkVNc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eGhRVUZoTEVkQlFVY3NUMEZCVHl4RFFVRkRPMGxCUTNaRExFTkJRVU1zUTBGQlF6dEpRVVZHTEZsQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRkxFVkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRmxCUVVNc1EwRkJReXhwUWtGQlRTeEZRVUZGTzFsQlEycERMRTlCUVU4c1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF6dFpRVU5vUWl4UFFVRlBMRVZCUVVVN1owSkJRMHdzV1VGQlF5eERRVUZETEdsQ1FVRk5MRVZCUVVVN2IwSkJRMDRzVDBGQlR5eEZRVUZGTEZsQlFVTXNRMEZCUXl3d1FrRkJNRUlzUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRExFVkJRVVVzWVVGQllTeERRVUZETzJsQ1FVTjZSU3hEUVVGRE8yZENRVU5HTEZsQlFVTXNRMEZCUXl4cFFrRkJUU3hGUVVGRk8yOUNRVU5PTEVsQlFVa3NSVUZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU03YjBKQlEzSkNMRWRCUVVjc1JVRkJSU3haUVVGWk8yOUNRVU5xUWl4UFFVRlBMRVZCUVVNN2QwSkJRMG9zV1VGQlF5eERRVUZETEdWQlFVa3NSVUZCUlN4RlFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU03ZDBKQlEzcERMRmxCUVVNc1EwRkJReXhwUWtGQlRTeEZRVUZGTEVWQlFVVXNUMEZCVHl4RlFVRkZMRmxCUVVNc1EwRkJReXcwUWtGQk5FSXNSVUZCUlN4WlFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExHTkJRV01zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETzNGQ1FVTm9TRHRwUWtGRFNpeERRVUZETzJGQlEwdzdVMEZCUXl4RFFVRkRPMHRCUTA0c1EwRkJReXhEUVVGRE8wbEJRMGdzVDBGQlR5eEhRVUZITEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCVFVRc1UwRkJVeXhoUVVGaExFTkJRVU1zUjBGQmNVSTdTVUZEZUVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzVVVGQlVTeERRVUZETEdOQlFXTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGFrUXNTVUZCU1N4SlFVRkpMRVZCUVVVN1VVRkZUaXhKUVVGSk8xbEJRVVVzUjBGQlJ5eERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVGRk8xRkJRMmhETEU5QlFVMHNRMEZCUXl4RlFVRkZPMWxCUTB3c1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5d3dRa0ZCTUVJc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU0xUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0WlFVTXZRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRUUVVONFFqdExRVU5LTzFOQlFVMDdVVUZEU0N4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExEWkNRVUUyUWl4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU14UkR0SlFVTkVMRmxCUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dEpRVU5ZTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRUxGTkJRVk1zV1VGQldTeERRVUZETEVOQlFVczdTVUZEZGtJc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5dzJRa0ZCTmtJc1EwRkJReXhEUVVGRE8wbEJRek5ETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGJrSXNRMEZCUXp0QlFWRkVMRk5CUVZNc2IwSkJRVzlDTEVOQlFVTXNSMEZCY1VJc1JVRkJSU3hQUVVGak8wbEJReTlFTEVsQlFVa3NUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOb1FpeEpRVUZKTEV0QlFVc3NSMEZCUnl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExIbENRVUY1UWl4RFFVRkRMRU5CUVVNN1NVRkRja1FzU1VGQlNTeExRVUZMTEVsQlFVa3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8xRkJRMjVDTEUxQlFVMHNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRMMElzUjBGQlJ5eERRVUZETEV0QlFVc3NSMEZCU1N4RlFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU03UzBGRGFrTTdTVUZEUkN4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExEWkVRVUUyUkN4RlFVRkZMRlZCUVZNc1NVRkJWenRSUVVNdlJpeE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRE5VSXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTNRaXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF6dFJRVU0zUWl4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOc1FpeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTklMRTlCUVU4c1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTXpRaXhEUVVGREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgVG9vbHRpcF8xID0gcmVxdWlyZShcIi4vVG9vbHRpcFwiKTtcbmNvbnN0IERvY1NldHNfMSA9IHJlcXVpcmUoXCIuLi9Eb2NTZXRzXCIpO1xuY29uc3QgaW5kZXhfanNfMiA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvaHN1dGlsL2luZGV4LmpzXCIpO1xuY29uc3QgbG9nID0gaW5kZXhfanNfMi5sb2coJ1BhcnRzJyk7XG5jb25zdCBTb3VyY2VCYXNlID0gJ2RhdGEvc3JjLyc7XG5mdW5jdGlvbiBmbGFncyhtZGwsIGlnbm9yZSA9IFtdKSB7XG4gICAgY29uc3QgaWdub3JlRXhwb3J0SW5LaW5kID0gWydNZXRob2QnLCAnUHJvcGVydHknXTtcbiAgICBjb25zdCBrbm93bkZsYWdzID0ge1xuICAgICAgICBpc0V4cG9ydGVkOiAnZXhwb3J0JyxcbiAgICAgICAgaXNFeHRlcm5hbDogJ2V4dGVybmFsJyxcbiAgICAgICAgaXNQdWJsaWM6ICdwdWJsaWMnLFxuICAgICAgICBpc1ByaXZhdGU6ICdwcml2YXRlJyxcbiAgICAgICAgaXNQcm90ZWN0ZWQ6ICdwcm90ZWN0ZWQnLFxuICAgICAgICBpc0NvbnN0cnVjdG9yUHJvcGVydHk6ICdjb25zdHJ1Y3RvclByb3BlcnR5JyxcbiAgICAgICAgaXNBYnN0cmFjdDogJ2Fic3RyYWN0JyxcbiAgICAgICAgaXNDb25zdDogJ2NvbnN0JyxcbiAgICAgICAgaXNMZXQ6ICdsZXQnLFxuICAgICAgICBpc1ZhcjogJ3ZhcicsXG4gICAgICAgIGlzU3RhdGljOiAnc3RhdGljJyxcbiAgICAgICAgaXNPcHRpb25hbDogJ29wdGlvbmFsJ1xuICAgIH07XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWZsYWdzJywgIW1kbC5mbGFncyA/IFtdIDpcbiAgICAgICAgT2JqZWN0LmtleXMobWRsLmZsYWdzKS5tYXAoKGYpID0+IHtcbiAgICAgICAgICAgIGxldCBpZ24gPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBmbGFnID0ga25vd25GbGFnc1tmXTtcbiAgICAgICAgICAgIGlmIChmbGFnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmbGFnID0gZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlnbiA9IChpZ25vcmUuaW5kZXhPZihmbGFnKSA+PSAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbGFnID09PSAnZXhwb3J0JyAmJiBpZ25vcmVFeHBvcnRJbktpbmQuaW5kZXhPZihtZGwua2luZFN0cmluZykgPj0gMCkge1xuICAgICAgICAgICAgICAgIGlnbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKGBzcGFuLmhzLWl0ZW0tJHtpZ24gPyAnaWdub3JlJyA6IChmbGFnID09PSBmID8gJ3Vua25vd24nIDogZmxhZyl9LWZsYWdgLCBpZ24gPyB1bmRlZmluZWQgOiBmbGFnKTtcbiAgICAgICAgfSkpO1xufVxuZXhwb3J0cy5mbGFncyA9IGZsYWdzO1xuZnVuY3Rpb24ga2luZFN0cmluZyhtZGwpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0ta2luZCcsIG1kbC5raW5kU3RyaW5nKTtcbn1cbmV4cG9ydHMua2luZFN0cmluZyA9IGtpbmRTdHJpbmc7XG5mdW5jdGlvbiBpdGVtTmFtZShtZGwsIHN1Yikge1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1uYW1lJywgIW1kbC5mdWxsUGF0aCA/IHN1Yi5uYW1lIDogbGliTGluaygnYScsIG1kbC5saWIsIG1kbC5mdWxsUGF0aCwgc3ViLm5hbWUpKTtcbn1cbmV4cG9ydHMuaXRlbU5hbWUgPSBpdGVtTmFtZTtcbmZ1bmN0aW9uIGl0ZW1Ub29sdGlwKG1kbCkge1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1uYW1lJywgVG9vbHRpcF8xLnRvb2x0aXAobWRsLm5hbWUsICdjbGFzcyBuYW1lIGFuZCB0aGVuIHNvbWUnLCAnYm90dG9tJykpO1xufVxuZXhwb3J0cy5pdGVtVG9vbHRpcCA9IGl0ZW1Ub29sdGlwO1xuZnVuY3Rpb24gZXh0ZW5zaW9uT2YobWRsKSB7XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWV4dGVuc2lvbnMnLCAhbWRsLmV4dGVuZGVkVHlwZXMgPyB1bmRlZmluZWQgOiBbXG4gICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWV4dGVuZHMnLCAnZXh0ZW5kcycpLFxuICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4nLCBtZGwuZXh0ZW5kZWRUeXBlcy5tYXAoKHQsIGkpID0+IGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWV4dGVuc2lvbicsIFtcbiAgICAgICAgICAgIGxpYkxpbmsoJ2EnLCBtZGwubGliLCBEb2NTZXRzXzEuRG9jU2V0cy5nZXQobWRsLmxpYiwgdC5pZCkuZnVsbFBhdGgsIHQubmFtZSksXG4gICAgICAgICAgICBtZGwuZXh0ZW5kZWRUeXBlcy5tYXAubGVuZ3RoID4gKGkgKyAxKSA/ICcsICcgOiAnJ1xuICAgICAgICBdKSkpLFxuICAgIF0pO1xufVxuZXhwb3J0cy5leHRlbnNpb25PZiA9IGV4dGVuc2lvbk9mO1xuZnVuY3Rpb24gaW5oZXJpdGVkRnJvbShtZGwpIHtcbiAgICBpZiAobWRsLmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgbGV0IHBhcmVudCA9IERvY1NldHNfMS5Eb2NTZXRzLmdldChtZGwubGliLCBtZGwuaW5oZXJpdGVkRnJvbS5pZCk7XG4gICAgICAgIHBhcmVudCA9IERvY1NldHNfMS5Eb2NTZXRzLmdldChtZGwubGliLCBwYXJlbnQuZnVsbFBhdGguc3Vic3RyaW5nKDAsIHBhcmVudC5mdWxsUGF0aC5sYXN0SW5kZXhPZignLicpKSk7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1pbmhlcml0ZWQtZnJvbScsIFtcbiAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3BhbicsICdpbmhlcml0ZWQgZnJvbSAnKSxcbiAgICAgICAgICAgIGxpYkxpbmsoJ2EnLCBwYXJlbnQubGliLCBwYXJlbnQuZnVsbFBhdGgsIHBhcmVudC5uYW1lKVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1pbmhlcml0ZWQtZnJvbScsIHVuZGVmaW5lZCk7XG4gICAgfVxufVxuZXhwb3J0cy5pbmhlcml0ZWRGcm9tID0gaW5oZXJpdGVkRnJvbTtcbmZ1bmN0aW9uIHNvdXJjZUxpbmsobWRsKSB7XG4gICAgY29uc3Qgc291cmNlID0gbWRsLnNvdXJjZXMgPyBtZGwuc291cmNlc1swXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGxldCBmaWxlID0gKHNvdXJjZS5maWxlTmFtZSB8fCAnJykucmVwbGFjZSgnLnRzJywgJy5odG1sJyk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmlsZS5pbmRleE9mKG1kbC5saWIpO1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBmaWxlID0gZmlsZS5zdWJzdHIoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1tZW1iZXItc291cmNlJywgaW5kZXhfanNfMS5tKCdhJywgeyBocmVmOiBgJHtTb3VyY2VCYXNlfSR7bWRsLmxpYn0vJHtmaWxlfSMke01hdGgubWF4KDAsIHNvdXJjZS5saW5lIC0gNSl9YCwgdGFyZ2V0OiBcIl9ibGFua1wiIH0sICdbc291cmNlXScpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1tZW1iZXItc291cmNlJywgJycpO1xuICAgIH1cbn1cbmV4cG9ydHMuc291cmNlTGluayA9IHNvdXJjZUxpbms7XG5mdW5jdGlvbiBsaWJMaW5rKGNzcywgbGliLCBpZCwgbmFtZSkge1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oY3NzLCB7IGhyZWY6IGAvYXBpLyR7bGlifS8ke2lkfWAsIG9uY3JlYXRlOiBpbmRleF9qc18xLm0ucm91dGUubGluaywgb251cGRhdGU6IGluZGV4X2pzXzEubS5yb3V0ZS5saW5rIH0sIG5hbWUpO1xufVxuZXhwb3J0cy5saWJMaW5rID0gbGliTGluaztcbjtcbmZ1bmN0aW9uIHNpZ25hdHVyZShzLCBtZGwpIHtcbiAgICBjb25zdCBjb21tYSA9IChpKSA9PiAoaSA+IDApID8gJywgJyA6ICcnO1xuICAgIGZ1bmN0aW9uIG9wdGlvbmFsKGZsYWdzKSB7XG4gICAgICAgIHJldHVybiAoZmxhZ3MgJiYgZmxhZ3MuaXNPcHRpb25hbCkgPyAnLmhzLWl0ZW0tb3B0aW9uYWwnIDogJyc7XG4gICAgfVxuICAgIGxldCBzaWcgPSBbXTtcbiAgICBpZiAocykge1xuICAgICAgICBpZiAocy5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBzaWcgPSBzLnBhcmFtZXRlcnMubWFwKChwLCBpKSA9PiBpbmRleF9qc18xLm0oJ3NwYW4nLCBbXG4gICAgICAgICAgICAgICAgY29tbWEoaSksXG4gICAgICAgICAgICAgICAgaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tc2lnLXBhcmFtJywgW1xuICAgICAgICAgICAgICAgICAgICBpbmRleF9qc18xLm0oYHNwYW4uaHMtaXRlbS1uYW1lJHtvcHRpb25hbChwLmZsYWdzKX1gLCBwLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlKHAsIG1kbC5saWIpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0pKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKG1kbC5raW5kU3RyaW5nKSB7XG4gICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDogYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNZXRob2QnOlxuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb24nOlxuICAgICAgICAgICAgY2FzZSAnQ29uc3RydWN0b3InOlxuICAgICAgICAgICAgICAgIHNpZy51bnNoaWZ0KGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLW5hbWUnLCAnKCcpKTtcbiAgICAgICAgICAgICAgICBzaWcucHVzaChpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1uYW1lJywgJyknKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiBsb2cud2FybihgdW5leHBlY3RlZCBraW5kU3RyaW5nICR7bWRsLmtpbmRTdHJpbmd9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLXNpZ25hdHVyZScsIHNpZyk7XG59XG5leHBvcnRzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbmZ1bmN0aW9uIGRlZmF1bHRWYWwocywgbGliKSB7XG4gICAgaWYgKHMgJiYgcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgbGV0IHZhbCA9IGAgPSAke3MuZGVmYXVsdFZhbHVlfWAucmVwbGFjZSgvey9naSwgJ3sgJykucmVwbGFjZSgvfS9naSwgJyB9Jyk7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1kZWZhdWx0JywgdmFsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHRWYWwgPSBkZWZhdWx0VmFsO1xuZnVuY3Rpb24gdHlwZSh0LCBsaWIpIHtcbiAgICBmdW5jdGlvbiBfdHlwZSh0dCkge1xuICAgICAgICBzd2l0Y2ggKHR0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOiByZXR1cm4gJyc7XG4gICAgICAgICAgICBjYXNlICdhcnJheSc6IHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS10eXBlLWFycmF5JywgWydBcnJheTwnLCBfdHlwZSh0dC5lbGVtZW50VHlwZSksICc+J10pO1xuICAgICAgICAgICAgY2FzZSAndHVwbGUnOiByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tdHlwZS10dXBsZScsIFtcbiAgICAgICAgICAgICAgICAnWyAnLFxuICAgICAgICAgICAgICAgIC4uLnR0LmVsZW1lbnRzLm1hcCgoZSwgaSkgPT4gW2kgPiAwID8gJywgJyA6IHVuZGVmaW5lZCwgX3R5cGUoZSldKSxcbiAgICAgICAgICAgICAgICAnIF0nXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNhc2UgJ2ludHJpbnNpYyc6XG4gICAgICAgICAgICBjYXNlICdpbnN0cmluY3QnOiByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tdHlwZS1pbnN0cmluY3QnLCB0dC5pZCA/IGxpYkxpbmsoJ3NwYW4nLCBsaWIsIHR0LmZ1bGxQYXRoLCB0dC5uYW1lKSA6IHR0Lm5hbWUpO1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nTGl0ZXJhbCc6IHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS10eXBlLXN0cmluZy1saXRlcmFsJywgdHQudHlwZSk7XG4gICAgICAgICAgICBjYXNlICd1bmlvbic6IHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS10eXBlLXVuaW9uJywgWy4uLnR0LnR5cGVzLm1hcCgoZSwgaSkgPT4gW2kgPiAwID8gJyB8ICcgOiB1bmRlZmluZWQsIF90eXBlKGUpXSldKTtcbiAgICAgICAgICAgIGNhc2UgJ3JlZmVyZW5jZSc6XG4gICAgICAgICAgICAgICAgbGV0IHJlZlJlcyA9IHR0Lm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKHR0LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVSZWYgPSBEb2NTZXRzXzEuRG9jU2V0cy5nZXQobGliLCB0dC5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlUmVmLnR5cGVBcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlJlcyA9IHR5cGVSZWYubmFtZSArICc8JyArIHR5cGVSZWYudHlwZUFyZ3VtZW50cy5tYXAoX3R5cGUpLmpvaW4oJywgJykgKyAnPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZVJlZi5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmUmVzID0gbGliTGluaygnYScsIGxpYiwgdHlwZVJlZi5mdWxsUGF0aCwgdHlwZVJlZi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlJlcyA9IHR5cGVSZWYubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tdHlwZS1yZWZlcmVuY2UnLCByZWZSZXMpO1xuICAgICAgICAgICAgY2FzZSAncmVmbGVjdGlvbic6XG4gICAgICAgICAgICAgICAgbGV0IHJmbFJlcztcbiAgICAgICAgICAgICAgICBpZiAodHQuZGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmZsUmVzID0gIXR0LmRlY2xhcmF0aW9uLmNoaWxkcmVuID8gdHQuZGVjbGFyYXRpb24ua2luZFN0cmluZyA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1yZWZsZWN0aW9uJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udHQuZGVjbGFyYXRpb24uY2hpbGRyZW4ubWFwKChjLCBpKSA9PiBbaSA+IDAgPyAnLCAnIDogdW5kZWZpbmVkLCBjLm5hbWUsICc6ICcsIF90eXBlKGMudHlwZSldKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIH0nXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJmbFJlcyA9ICdVTktOT1dOJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLXR5cGUtcmVmbGVjdGlvbicsIHJmbFJlcyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGxvZy53YXJuKCd1bmtub3duIHR5cGUgJyArIHR0LnR5cGUpO1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKGxvZy5pbnNwZWN0KHQsIDMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdC50eXBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4nLCAhdC50eXBlID8gJycgOiBbXG4gICAgICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1uYW1lJywgJzonKSxcbiAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLXNpZy10eXBlJywgX3R5cGUodC50eXBlKSksXG4gICAgICAgICAgICBkZWZhdWx0VmFsKHQsIGxpYilcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvcihlKTtcbiAgICAgICAgbG9nLmVycm9yKGUudHJhY2UpO1xuICAgIH1cbn1cbmV4cG9ydHMudHlwZSA9IHR5cGU7XG5mdW5jdGlvbiBtYWtlSUQoc2VjdGlvbiwgbWRsKSB7XG4gICAgbGV0IHJlc3VsdCA9IHNlY3Rpb24gPyBzZWN0aW9uICsgJ18nIDogJyc7XG4gICAgcmVzdWx0ID0gKHJlc3VsdCArIChtZGwubmFtZSB8fCAnJykpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChyZXN1bHQgIT09ICcnKSA/IHJlc3VsdCA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMubWFrZUlEID0gbWFrZUlEO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVUdGeWRITXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmRtbGxkeTlRWVhKMGN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxHMUZRVUVyUkR0QlFVTXZSQ3gxUTBGQmIwTTdRVUZEY0VNc2QwTkJRWEZETzBGQlEzSkRMR2xGUVVGclJUdEJRVUZGTEUxQlFVMHNSMEZCUnl4SFFVRkhMR05CUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVVU1Uml4TlFVRk5MRlZCUVZVc1IwRkJSeXhYUVVGWExFTkJRVU03UVVGSkwwSXNVMEZCWjBJc1MwRkJTeXhEUVVGRExFZEJRVThzUlVGQlJTeFRRVUZuUWl4RlFVRkZPMGxCUXpkRExFMUJRVTBzYTBKQlFXdENMRWRCUVVjc1EwRkJReXhSUVVGUkxFVkJRVVVzVlVGQlZTeERRVUZETEVOQlFVTTdTVUZEYkVRc1RVRkJUU3hWUVVGVkxFZEJRVWM3VVVGRFppeFZRVUZWTEVWQlFXTXNVVUZCVVR0UlFVTm9ReXhWUVVGVkxFVkJRV01zVlVGQlZUdFJRVU5zUXl4UlFVRlJMRVZCUVdkQ0xGRkJRVkU3VVVGRGFFTXNVMEZCVXl4RlFVRmxMRk5CUVZNN1VVRkRha01zVjBGQlZ5eEZRVUZoTEZkQlFWYzdVVUZEYmtNc2NVSkJRWEZDTEVWQlFVY3NjVUpCUVhGQ08xRkJRemRETEZWQlFWVXNSVUZCWXl4VlFVRlZPMUZCUTJ4RExFOUJRVThzUlVGQmFVSXNUMEZCVHp0UlFVTXZRaXhMUVVGTExFVkJRVzFDTEV0QlFVczdVVUZETjBJc1MwRkJTeXhGUVVGdFFpeExRVUZMTzFGQlF6ZENMRkZCUVZFc1JVRkJaMElzVVVGQlVUdFJRVU5vUXl4VlFVRlZMRVZCUVdNc1ZVRkJWVHRMUVVOeVF5eERRVUZETzBsQlEwWXNUMEZCVHl4WlFVRkRMRU5CUVVNc2IwSkJRVzlDTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGQkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTXpReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZSTEVWQlFVVXNSVUZCUlR0WlFVTndReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEYUVJc1NVRkJTU3hKUVVGSkxFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNwQ0xFbEJRVWtzU1VGQlNTeExRVUZMTEZOQlFWTXNSVUZCUlR0blFrRkJSU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzJGQlFVVTdhVUpCUTJoRE8yZENRVUZGTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkJSVHRaUVVNelF5eEpRVUZKTEVsQlFVa3NTMEZCU3l4UlFVRlJMRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlJTeERRVUZETEVWQlFVVTdaMEpCUVVVc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF6dGhRVUZGTzFsQlEzWkdMRTlCUVU4c1dVRkJReXhEUVVGRExHZENRVUZuUWl4SFFVRkhMRU5CUVVFc1EwRkJReXhEUVVGQkxGRkJRVkVzUTBGQlFTeERRVUZETEVOQlFVRXNRMEZCUXl4SlFVRkpMRXRCUVVjc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlFTeFRRVUZUTEVOQlFVRXNRMEZCUXl4RFFVRkJMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUjBGQlJ5eERRVUZCTEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEyNUhMRU5CUVVNc1EwRkJReXhEUVVOTUxFTkJRVU03UVVGRFRpeERRVUZETzBGQk1VSkVMSE5DUVRCQ1F6dEJRVVZFTEZOQlFXZENMRlZCUVZVc1EwRkJReXhIUVVGUE8wbEJRemxDTEU5QlFVOHNXVUZCUXl4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVOc1JDeERRVUZETzBGQlJrUXNaME5CUlVNN1FVRkZSQ3hUUVVGblFpeFJRVUZSTEVOQlFVTXNSMEZCVHl4RlFVRkZMRWRCUVU4N1NVRkRja01zVDBGQlR5eFpRVUZETEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkJMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTXpSeXhEUVVGRE8wRkJSa1FzTkVKQlJVTTdRVUZIUkN4VFFVRm5RaXhYUVVGWExFTkJRVU1zUjBGQlR6dEpRVU12UWl4UFFVRlBMRmxCUVVNc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4cFFrRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVWQlFVVXNNRUpCUVRCQ0xFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTXpSaXhEUVVGRE8wRkJSa1FzYTBOQlJVTTdRVUZGUkN4VFFVRm5RaXhYUVVGWExFTkJRVU1zUjBGQlR6dEpRVU12UWl4UFFVRlBMRmxCUVVNc1EwRkJReXg1UWtGQmVVSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhoUVVGaExFTkJRVUVzUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRhRVVzV1VGQlF5eERRVUZETEhOQ1FVRnpRaXhGUVVGRkxGTkJRVk1zUTBGQlF6dFJRVU53UXl4WlFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlEyaEVMRmxCUVVNc1EwRkJReXgzUWtGQmQwSXNSVUZCUlR0WlFVTjRRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc2FVSkJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRGJFVXNSMEZCUnl4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVRXNRMEZCUXl4RFFVRkRMRVZCUVVVN1UwRkRMME1zUTBGQlF5eERRVU5NTEVOQlFVTTdTMEZEVEN4RFFVRkRMRU5CUVVNN1FVRkRVQ3hEUVVGRE8wRkJWa1FzYTBOQlZVTTdRVUZGUkN4VFFVRm5RaXhoUVVGaExFTkJRVU1zUjBGQlR6dEpRVU5xUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhoUVVGaExFVkJRVVU3VVVGRGJrSXNTVUZCU1N4TlFVRk5MRWRCUVVjc2FVSkJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNoRUxFMUJRVTBzUjBGQlJ5eHBRa0ZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZET1VZc1QwRkJUeXhaUVVGRExFTkJRVU1zTmtKQlFUWkNMRVZCUVVVN1dVRkRjRU1zV1VGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4cFFrRkJhVUlzUTBGQlF6dFpRVU0xUWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFMUJRVTBzUTBGQlF5eEhRVUZITEVWQlFVVXNUVUZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSU3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETzFOQlEzcEVMRU5CUVVNc1EwRkJRenRMUVVOT08xTkJRVTA3VVVGRFNDeFBRVUZQTEZsQlFVTXNRMEZCUXl3MlFrRkJOa0lzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXp0TFFVTjBSRHRCUVVOTUxFTkJRVU03UVVGWVJDeHpRMEZYUXp0QlFVVkVMRk5CUVdkQ0xGVkJRVlVzUTBGQlF5eEhRVUZQTzBsQlF6bENMRTFCUVUwc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJRenRKUVVOMlJDeEpRVUZKTEUxQlFVMHNSVUZCUlR0UlFVTlNMRWxCUVVrc1NVRkJTU3hIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUXpORUxFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzQkRMRWxCUVVrc1MwRkJTeXhIUVVGRExFTkJRVU1zUlVGQlJUdFpRVU5VTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFOQlF6ZENPMUZCUTBRc1QwRkJUeXhaUVVGRExFTkJRVU1zTkVKQlFUUkNMRVZCUTJwRExGbEJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4SlFVRkpMRVZCUVVNc1IwRkJSeXhWUVVGVkxFZEJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NTVUZCU1N4SlFVRkpMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1IwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEUxQlFVMHNSVUZCUXl4UlFVRlJMRVZCUVVNc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGRE9VY3NRMEZCUXp0TFFVTk1PMU5CUVUwN1VVRkRTQ3hQUVVGUExGbEJRVU1zUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU01UXp0QlFVTk1MRU5CUVVNN1FVRmtSQ3huUTBGalF6dEJRVmRFTEZOQlFXZENMRTlCUVU4c1EwRkJReXhIUVVGVkxFVkJRVVVzUjBGQlZTeEZRVUZGTEVWQlFWTXNSVUZCUlN4SlFVRlhPMGxCUTJ4RkxFOUJRVThzV1VGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeEZRVUZGTEVWQlFVVXNSVUZCUlN4UlFVRlJMRVZCUVVVc1dVRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVWQlFVVXNVVUZCVVN4RlFVRkZMRmxCUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRkRWNzUTBGQlF6dEJRVVpFTERCQ1FVVkRPMEZCUVVFc1EwRkJRenRCUVV0R0xGTkJRV2RDTEZOQlFWTXNRMEZCUXl4RFFVRkxMRVZCUVVVc1IwRkJUenRKUVVOd1F5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlFTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpWRExGTkJRVk1zVVVGQlVTeERRVUZETEV0QlFWVTdVVUZEZUVJc1QwRkJUeXhEUVVGRExFdEJRVXNzU1VGQlNTeExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRGFrVXNRMEZCUXp0SlFVVkVMRWxCUVVrc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5pTEVsQlFVa3NRMEZCUXl4RlFVRkZPMUZCUTBnc1NVRkJTU3hEUVVGRExFTkJRVU1zVlVGQlZTeEZRVUZGTzFsQlEyUXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCU3l4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zV1VGQlF5eERRVUZETEUxQlFVMHNSVUZCUlR0blFrRkRiRVFzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRVaXhaUVVGRExFTkJRVU1zZDBKQlFYZENMRVZCUVVVN2IwSkJRM2hDTEZsQlFVTXNRMEZCUXl4dlFrRkJiMElzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdiMEpCUTJ4RUxFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJRenRwUWtGRGJrSXNRMEZCUXp0aFFVTk1MRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRMUE3VVVGRFJDeFJRVUZSTEVkQlFVY3NRMEZCUXl4VlFVRlZMRVZCUVVVN1dVRkRjRUlzUzBGQlN5eFRRVUZUTEVOQlFVTXNRMEZCUXl4TlFVRk5PMWxCUTNSQ0xFdEJRVXNzVVVGQlVTeERRVUZETzFsQlEyUXNTMEZCU3l4VlFVRlZMRU5CUVVNN1dVRkRhRUlzUzBGQlN5eGhRVUZoTzJkQ1FVTmtMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQlF5eERRVUZETEcxQ1FVRnRRaXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTNwRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCUXl4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRM1JETEUxQlFVMDdXVUZEVml4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEhsQ1FVRjVRaXhIUVVGSExFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTXNRMEZCUXp0VFFVTm9SVHRMUVVOS08wbEJRMFFzVDBGQlR5eFpRVUZETEVOQlFVTXNkMEpCUVhkQ0xFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZETlVNc1EwRkJRenRCUVRkQ1JDdzRRa0UyUWtNN1FVRkxSQ3hUUVVGblFpeFZRVUZWTEVOQlFVTXNRMEZCU3l4RlFVRkZMRWRCUVZVN1NVRkRlRU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRmxCUVZrc1JVRkJSVHRSUVVOeVFpeEpRVUZKTEVkQlFVY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRNMFVzVDBGQlR5eFpRVUZETEVOQlFVTXNjMEpCUVhOQ0xFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZEZWtNN1UwRkJUVHRSUVVOSUxFOUJRVTg3UzBGRFZqdEJRVU5NTEVOQlFVTTdRVUZRUkN4blEwRlBRenRCUVVWRUxGTkJRV2RDTEVsQlFVa3NRMEZCUXl4RFFVRkxMRVZCUVVVc1IwRkJWVHRKUVVOc1F5eFRRVUZUTEV0QlFVc3NRMEZCUXl4RlFVRk5PMUZCUTJwQ0xGRkJRVkVzUlVGQlJTeERRVUZETEVsQlFVa3NSVUZCUlR0WlFVTmlMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVk1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEYkVNc1MwRkJTeXhQUVVGUExFTkJRVU1zUTBGQlZ5eFBRVUZQTEZsQlFVTXNRMEZCUXl4NVFrRkJlVUlzUlVGQlJTeERRVUZETEZGQlFWRXNSVUZCUlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkZjRWNzUzBGQlN5eFBRVUZQTEVOQlFVTXNRMEZCVnl4UFFVRlBMRmxCUVVNc1EwRkJReXg1UWtGQmVVSXNSVUZCUlR0blFrRkRhRU1zU1VGQlNUdG5Ra0ZEU2l4SFFVRkhMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCU3l4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJRU3hKUVVGSkxFTkJRVUVzUTBGQlF5eERRVUZCTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZGtVc1NVRkJTVHRoUVVOUUxFTkJRVU1zUTBGQlF6dFpRVU16UWl4TFFVRkxMRmRCUVZjc1EwRkJRenRaUVVOcVFpeExRVUZMTEZkQlFWY3NRMEZCUXl4RFFVRlBMRTlCUVU4c1dVRkJReXhEUVVGRExEWkNRVUUyUWl4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVUVzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkROMGdzUzBGQlN5eGxRVUZsTEVOQlFVTXNRMEZCUnl4UFFVRlBMRmxCUVVNc1EwRkJReXhyUTBGQmEwTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRE9VVXNTMEZCU3l4UFFVRlBMRU5CUVVNc1EwRkJWeXhQUVVGUExGbEJRVU1zUTBGQlF5eDVRa0ZCZVVJc1JVRkJSU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGTExFVkJRVVVzUTBGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZCTEV0QlFVc3NRMEZCUVN4RFFVRkRMRU5CUVVFc1UwRkJVeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM0pKTEV0QlFVc3NWMEZCVnp0blFrRkJVU3hKUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMmRDUVVOeVFpeEpRVUZKTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN2IwSkJRMUFzVFVGQlRTeFBRVUZQTEVkQlFVY3NhVUpCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenR2UWtGRGVFTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1lVRkJZU3hGUVVGRk8zZENRVUZGTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTU3hIUVVGRExFZEJRVWNzUjBGQlJTeFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8zRkNRVUZGTzNsQ1FVTjJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eEZRVUZGTEVWQlFWRTdkMEpCUVVVc1RVRkJUU3hIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRTlCUVU4c1EwRkJReXhSUVVGUkxFVkJRVVVzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPM0ZDUVVGRk8zbENRVU12UkR0M1FrRkJSU3hOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXp0eFFrRkJSVHRwUWtGRGVFUTdaMEpCUTBRc1QwRkJUeXhaUVVGRExFTkJRVU1zTmtKQlFUWkNMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGVFVXNTMEZCU3l4WlFVRlpPMmRDUVVGUExFbEJRVWtzVFVGQlRTeERRVUZETzJkQ1FVTllMRWxCUVVrc1JVRkJSU3hEUVVGRExGZEJRVmNzUlVGQlJUdHZRa0ZEYUVJc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4UlFVRlJMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN2QwSkJRekZFTEZsQlFVTXNRMEZCUXl4NVFrRkJlVUlzUlVGQlJUczBRa0ZEZWtJc1NVRkJTVHMwUWtGRFNpeEhRVUZITEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUlN4RFFVRlJMRVZCUVVVc1JVRkJSU3hEUVVNdlF5eERRVUZETEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGQkxFbEJRVWtzUTBGQlFTeERRVUZETEVOQlFVRXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGRGNFUTdORUpCUTBRc1NVRkJTVHQ1UWtGRFVDeERRVUZETEVOQlFVTTdhVUpCUTFZN2NVSkJRVTA3YjBKQlEwZ3NUVUZCVFN4SFFVRkhMRk5CUVZNc1EwRkJRenRwUWtGRGRFSTdaMEpCUTBRc1QwRkJUeXhaUVVGRExFTkJRVU1zT0VKQlFUaENMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGVrVTdaMEpCUVZNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVkQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU51UXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6TkNMRTlCUVU4c1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFRRVU14UWp0SlFVTk1MRU5CUVVNN1NVRkZSQ3hKUVVGSk8xRkJRMFFzVDBGQlR5eFpRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlFTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkJMRU5CUVVNc1EwRkJRenRaUVVNeFFpeFpRVUZETEVOQlFVTXNiVUpCUVcxQ0xFVkJRVU1zUjBGQlJ5eERRVUZETzFsQlF6RkNMRmxCUVVNc1EwRkJReXgxUWtGQmRVSXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEzcERMRlZCUVZVc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETzFOQlEzQkNMRU5CUVVNc1EwRkJRenRMUVVOT08wbEJRVU1zVDBGQlRTeERRVUZETEVWQlFVVTdVVUZCUlN4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdTMEZCUlR0QlFVTndSQ3hEUVVGRE8wRkJiRVJFTEc5Q1FXdEVRenRCUVVWRUxGTkJRV2RDTEUxQlFVMHNRMEZCUXl4UFFVRmpMRVZCUVVVc1IwRkJUenRKUVVNeFF5eEpRVUZKTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExFOUJRVThzUjBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVOMlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03U1VGRGJrUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1MwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU03UVVGRE4wTXNRMEZCUXp0QlFVcEVMSGRDUVVsREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuZnVuY3Rpb24gdG9vbHRpcCh0ZXh0LCB0aXAsIHBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLXRvb2x0aXBbaHJlZj0jXScsIFt0ZXh0LCBpbmRleF9qc18xLm0oYHNwYW4uaHMtdG9vbHRpcC0ke3Bvc2l0aW9ufWAsIHRpcCldKTtcbn1cbmV4cG9ydHMudG9vbHRpcCA9IHRvb2x0aXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lWRzl2YkhScGNDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MmFXVjNMMVJ2YjJ4MGFYQXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHRSVUZCSzBRN1FVRkZMMFFzVTBGQlowSXNUMEZCVHl4RFFVRkRMRWxCUVZjc1JVRkJSU3hIUVVGVkxFVkJRVVVzVVVGQlpUdEpRVVUxUkN4UFFVRlBMRmxCUVVNc1EwRkJReXh4UWtGQmNVSXNSVUZCUlN4RFFVRkRMRWxCUVVrc1JVRkJSU3haUVVGRExFTkJRVU1zYlVKQlFXMUNMRkZCUVZFc1JVRkJSU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnVSaXhEUVVGRE8wRkJTRVFzTUVKQlIwTWlmUT09Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jcm9zcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXZpYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9oaXN0b2dyYW0uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWF4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVhbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lZGlhbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lcmdlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWluLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcGFpcnMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9wZXJtdXRlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVhbnRpbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NjYW4uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zaHVmZmxlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VtLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGhyZXNob2xkL2ZyZWVkbWFuRGlhY29uaXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc2NvdHQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc3R1cmdlcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdHJhbnNwb3NlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdmFyaWFuY2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy96aXAuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2FycmF5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvZXZlbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL25vZXZlbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2Nob3JkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL21hdGguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9yaWJib24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL2VudHJpZXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9rZXlzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9tYXAuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL25lc3QuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL3NldC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvdmFsdWVzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jdWJlaGVsaXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FyZWEuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FycmF5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hc2NlbmRpbmcuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2JsdXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvY29udG91cnMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2RlbnNpdHkuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9ub29wLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2RyYWcuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2V2ZW50LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9kcmFnLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2V2ZW50LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2F1dG9UeXBlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2Nzdi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9kc3YuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvdHN2LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9iYWNrLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9ib3VuY2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2NpcmNsZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2VsYXN0aWMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2V4cC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2xpbmVhci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvcG9seS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvcXVhZC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvc2luLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvYmxvYi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2Rzdi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2ltYWdlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9qc29uLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvdGV4dC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL3htbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NlbnRlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NvbGxpZGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvamlnZ2xlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbGluay5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL21hbnlCb2R5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvcmFkaWFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvc2ltdWxhdGlvbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL3guanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy95LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXROdW1lcmFscy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFJvdW5kZWQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvbG9jYWxlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblByZWZpeC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hZGRlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hcmVhLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2JvdW5kcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jYXJ0ZXNpYW4uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2VudHJvaWQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2lyY2xlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvYW50aW1lcmlkaWFuLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvYnVmZmVyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvY2lyY2xlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvZXh0ZW50LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9saW5lLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvcmVjdGFuZ2xlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvcmVqb2luLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NvbXBvc2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29udGFpbnMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvZGlzdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvZ3JhdGljdWxlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2ludGVycG9sYXRlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2xlbmd0aC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL25vb3AuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9hcmVhLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvYm91bmRzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvY2VudHJvaWQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9jb250ZXh0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9tZWFzdXJlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvc3RyaW5nLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BvaW50RXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9seWdvbkNvbnRhaW5zLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYWxiZXJzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYWxiZXJzVXNhLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1YWxBcmVhLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1aWRpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pYy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2NvbmljQ29uZm9ybWFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWNFcXVhbEFyZWEuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0VxdWlkaXN0YW50LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY3lsaW5kcmljYWxFcXVhbEFyZWEuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9lcXVhbEVhcnRoLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZXF1aXJlY3Rhbmd1bGFyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZml0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZ25vbW9uaWMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vbWVyY2F0b3IuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9uYXR1cmFsRWFydGgxLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vb3J0aG9ncmFwaGljLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vcmVzYW1wbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9zdGVyZW9ncmFwaGljLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vdHJhbnN2ZXJzZU1lcmNhdG9yLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3JvdGF0aW9uLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3N0cmVhbS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvYWNjZXNzb3JzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2FycmF5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2NsdXN0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvY291bnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2Rlc2NlbmRhbnRzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQWZ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hCZWZvcmUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xpbmtzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zb3J0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFjay9lbmNsb3NlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFjay9zaWJsaW5ncy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9wYXJ0aXRpb24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvc3RyYXRpZnkuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2JpbmFyeS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2RpY2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3Jlc3F1YXJpZnkuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9yb3VuZC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NsaWNlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc2xpY2VEaWNlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc3F1YXJpZnkuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Rpc2NyZXRlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaGNsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHNsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHVlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9sYWIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9waWVjZXdpc2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9xdWFudGl6ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvc3RyaW5nLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9wYXJzZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3ZhbHVlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvem9vbS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2FyZWEuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2NlbnRyb2lkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvY3Jvc3MuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2h1bGwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9hZGQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9jb3Zlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2RhdGEuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9leHRlbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcXVhZHRyZWUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9yZW1vdmUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9yb290LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvc2l6ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3Zpc2l0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXRBZnRlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3guanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy95LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2JhdGVzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2RlZmF1bHRTb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZXhwb25lbnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaXJ3aW5IYWxsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2xvZ05vcm1hbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9ub3JtYWwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvdW5pZm9ybS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9BY2NlbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvRGFyazIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFpcmVkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1Bhc3RlbDEuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQxLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1NldDIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0My5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9jYXRlZ29yeTEwLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvQnJCRy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUFJHbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUGlZRy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUHVPci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRCdS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRHeS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRZbEJ1LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZFlsR24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1NwZWN0cmFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9CdUduLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvQnVQdS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0duQnUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9PclJkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1QnVHbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1UmQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9SZFB1LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsR25CdS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsT3JCci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL2N1YmVoZWxpeC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3JhaW5ib3cuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9zaW5lYm93LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvdmlyaWRpcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9CbHVlcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9HcmVlbnMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvT3Jhbmdlcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL1JlZHMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9kaXZlcmdpbmcuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5pdC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xvZy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL25pY2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9vcmRpbmFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcG93LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcXVhbnRpbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGl6ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsUXVhbnRpbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zeW1sb2cuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aHJlc2hvbGQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aWNrRm9ybWF0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3V0Y1RpbWUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbG9jYWwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tb3VzZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9wb2ludC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0QWxsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hcHBlbmQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NhbGwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Nsb25lLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXRhLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXR1bS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VtcHR5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5zZXJ0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9qb2luLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9sb3dlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yYWlzZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy90b3VjaC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy90b3VjaGVzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FyYy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FyZWEuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhUmFkaWFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXNDbG9zZWQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpc09wZW4uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9idW5kbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsQ2xvc2VkLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWxPcGVuLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2F0bXVsbFJvbS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tT3Blbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhckNsb3NlZC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL21vbm90b25lLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbmF0dXJhbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL3JhZGlhbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL3N0ZXAuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lUmFkaWFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluay9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL21hdGguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9ub29wLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L2RpdmVyZ2luZy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9leHBhbmQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvbm9uZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9zaWxob3VldHRlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L3dpZ2dsZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL2FwcGVhcmFuY2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9hc2NlbmRpbmcuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9kZXNjZW5kaW5nLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvaW5zaWRlT3V0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvbm9uZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9waWUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50UmFkaWFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3RhY2suanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvY2lyY2xlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2Nyb3NzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2RpYW1vbmQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3F1YXJlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3N0YXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvdHJpYW5nbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvd3llLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvUGFyc2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2RheS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2hvdXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbnV0ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbW9udGguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjRGF5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNNaW51dGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01vbnRoLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNZZWFyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy9pbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVvdXQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvYWN0aXZlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi90cmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0clR3ZWVuLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2R1cmF0aW9uLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2Vhc2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZW5kLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0JlYWNoLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9DZWxsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9DaXJjbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0RpYWdyYW0uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0VkZ2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL1JlZEJsYWNrVHJlZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9wb2ludC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvdm9yb25vaS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2V2ZW50LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvbm9ldmVudC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvdHJhbnNmb3JtLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy96b29tLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9kMy9kaXN0L3BhY2thZ2UuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2QzL2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2RhdGFiL0RhdGEuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZGF0YWIvRGF0YUZpbHRlcnMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZGF0YWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvQXhlcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9DYW52YXMuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvQ2hhcnQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvR3JhcGguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvR3JpZC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9MZWdlbmQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvUGxvdC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9QbG90QXJlYS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9QbG90QmFyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2dyYXBoL1Bsb3RMaW5lLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2dyYXBoL1Bsb3RNYXJrZXJzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2dyYXBoL1NWR0VsZW0uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvU2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzZ3JhcGgvU2VyaWVzLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2dyYXBoL2QzL2dyYXBoMi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9kMy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNncmFwaC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvQ29uZmlnLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc2xheW91dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvbWl0aHJpbC5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvdmlldy9MYXlvdXQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzbGF5b3V0L3ZpZXcvTGF5b3V0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzbGF5b3V0L3ZpZXcvUGlsbGFyZWRMYXlvdXRlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvdmlldy9UaWxlTGF5b3V0ZXIuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzbGF5b3V0L3ZpZXcvVG9rZW5zLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3V0aWwvQ2hlY2tzdW0uanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzdXRpbC9EYXRlLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3V0aWwvTnVtYmVyLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3V0aWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzdXRpbC9sb2cuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzdXRpbC9wcm9taXNlcy5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvQnV0dG9uLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9Db2xsYXBzaWJsZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvTGFiZWwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L01lbnUuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L01vZGFsLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9PcHRpb25zQnV0dG9uLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9SYWRpb0J1dHRvbi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvU2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L1NsaWRlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvaHN3aWRnZXQvVG9nZ2xlQnV0dG9uLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9Ub29sYmFyQnV0dG9uLmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9oc3dpZGdldC9UeXBlQWhlYWQuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL2hzd2lkZ2V0L2luZGV4LmpzIiwid2VicGFjazovLy8vVXNlcnMvc3RoMXBhbC9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvSmF2YVNjcmlwdC9ub2RlanMvdHM2L25vZGVfbW9kdWxlcy9taXRocmlsL21pdGhyaWwuanMiLCJ3ZWJwYWNrOi8vLy9Vc2Vycy9zdGgxcGFsL0RvY3VtZW50cy9EZXZlbG9wbWVudC9KYXZhU2NyaXB0L25vZGVqcy90czYvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvc2hvd2Rvd24vZGlzdC9zaG93ZG93bi5qcyIsIndlYnBhY2s6Ly8vL1VzZXJzL3N0aDFwYWwvRG9jdW1lbnRzL0RldmVsb3BtZW50L0phdmFTY3JpcHQvbm9kZWpzL3RzNi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL2Jpbi9Eb2NTZXRzLmpzIiwid2VicGFjazovLy8uL2Jpbi9TaXRlLmpzIiwid2VicGFjazovLy8uL2Jpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vbWFya2Rvd24uanMiLCJ3ZWJwYWNrOi8vLy4vYmluL3ZpZXcvRG9jc01lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vYmluL3ZpZXcvTGVmdE5hdi5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vdmlldy9NYWluQ29tbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9iaW4vdmlldy9NYWluRGV0YWlsLmpzIiwid2VicGFjazovLy8uL2Jpbi92aWV3L01haW5FeGFtcGxlLmpzIiwid2VicGFjazovLy8uL2Jpbi92aWV3L1BhcnRzLmpzIiwid2VicGFjazovLy8uL2Jpbi92aWV3L1Rvb2x0aXAuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQUE7QUFBQTs7QUFFTztBQUNBOzs7Ozs7Ozs7Ozs7O0FDSFA7QUFBZTtBQUNmO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ0ZEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBb0M7QUFDRjs7QUFFbEMsc0JBQXNCLHlEQUFRLENBQUMsa0RBQVM7QUFDakM7QUFDQTtBQUNRLDBFQUFXLEVBQUM7Ozs7Ozs7Ozs7Ozs7QUNO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QixFQUFFO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdURBQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFYztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Ozs7Ozs7Ozs7O0FDL0REO0FBQUE7QUFBQTtBQUFBO0FBQXVDOzs7Ozs7Ozs7Ozs7O0FDQXZDO0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7Ozs7Ozs7OztBQ2pJcEI7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7Ozs7QUNkRDtBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7Ozs7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QUFBQTtBQUErQjtBQUNKOztBQUVwQjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sK0NBQU07O0FBRUcsb0hBQUksUUFBUSxFQUFDOzs7Ozs7Ozs7Ozs7O0FDZjVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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QTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixrQkFBa0I7QUFDakQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLCtCQUErQixrQkFBa0I7QUFDakQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLCtCQUErQixrQkFBa0I7QUFDakQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLCtCQUErQixrQkFBa0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXVDO0FBQ2Q7QUFDRDtBQUNDO0FBQ0E7QUFDSztBQUNMO0FBQ0U7QUFDQztBQUNKO0FBQ0Q7QUFDQztBQUNDO0FBQ0E7QUFDQztBQUNIO0FBQ007QUFDRTtBQUNQO0FBQ0c7QUFDQztBQUNGO0FBQ0Q7QUFDVTtBQUNOO0FBQ0o7QUFDRDtBQUNPO0FBQ047QUFDSztBQUNIO0FBQ0g7Ozs7Ozs7Ozs7Ozs7QUMvQlg7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxzQkFBc0IsbUJBQU8sQ0FBQyxtRUFBZTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxJQUFJO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYSxZQUFZO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixVQUFVO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QyxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QywyREFBMkQ7QUFDM0QscUZBQXFGO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHFCQUFxQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbUJBQW1CO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRIQUE0SDtBQUM1SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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OztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7Ozs7QUN6TEQsbUNBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakIsZ0JBQWdCO0FBQ2hCLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLCtsVzs7Ozs7Ozs7Ozs7O0FDaE45QjtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELG1CQUFtQixtQkFBTyxDQUFDLHFGQUFzQztBQUNqRTtBQUNBLHNGQUFzRixTQUFTO0FBQy9GO0FBQ0E7QUFDQSwyQ0FBMkMsMloiLCJmaWxlIjoiaHNEb2NzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9iaW4vaW5kZXguanNcIik7XG4iLCJ2YXIgYXJyYXkgPSBBcnJheS5wcm90b3R5cGU7XG5cbmV4cG9ydCB2YXIgc2xpY2UgPSBhcnJheS5zbGljZTtcbmV4cG9ydCB2YXIgbWFwID0gYXJyYXkubWFwO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuaW1wb3J0IGJpc2VjdG9yIGZyb20gXCIuL2Jpc2VjdG9yXCI7XG5cbnZhciBhc2NlbmRpbmdCaXNlY3QgPSBiaXNlY3Rvcihhc2NlbmRpbmcpO1xuZXhwb3J0IHZhciBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCB2YXIgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7XG4gICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtwYWlyfSBmcm9tIFwiLi9wYWlyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMwLCB2YWx1ZXMxLCByZWR1Y2UpIHtcbiAgdmFyIG4wID0gdmFsdWVzMC5sZW5ndGgsXG4gICAgICBuMSA9IHZhbHVlczEubGVuZ3RoLFxuICAgICAgdmFsdWVzID0gbmV3IEFycmF5KG4wICogbjEpLFxuICAgICAgaTAsXG4gICAgICBpMSxcbiAgICAgIGksXG4gICAgICB2YWx1ZTA7XG5cbiAgaWYgKHJlZHVjZSA9PSBudWxsKSByZWR1Y2UgPSBwYWlyO1xuXG4gIGZvciAoaTAgPSBpID0gMDsgaTAgPCBuMDsgKytpMCkge1xuICAgIGZvciAodmFsdWUwID0gdmFsdWVzMFtpMF0sIGkxID0gMDsgaTEgPCBuMTsgKytpMSwgKytpKSB7XG4gICAgICB2YWx1ZXNbaV0gPSByZWR1Y2UodmFsdWUwLCB2YWx1ZXMxW2kxXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGIgPCBhID8gLTEgOiBiID4gYSA/IDEgOiBiID49IGEgPyAwIDogTmFOO1xufVxuIiwiaW1wb3J0IHZhcmlhbmNlIGZyb20gXCIuL3ZhcmlhbmNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBmKSB7XG4gIHZhciB2ID0gdmFyaWFuY2UoYXJyYXksIGYpO1xuICByZXR1cm4gdiA/IE1hdGguc3FydCh2KSA6IHY7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXg7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gW21pbiwgbWF4XTtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgYmlzZWN0IGZyb20gXCIuL2Jpc2VjdFwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgZXh0ZW50IGZyb20gXCIuL2V4dGVudFwiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5XCI7XG5pbXBvcnQgcmFuZ2UgZnJvbSBcIi4vcmFuZ2VcIjtcbmltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCIuL3RpY2tzXCI7XG5pbXBvcnQgc3R1cmdlcyBmcm9tIFwiLi90aHJlc2hvbGQvc3R1cmdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gaWRlbnRpdHksXG4gICAgICBkb21haW4gPSBleHRlbnQsXG4gICAgICB0aHJlc2hvbGQgPSBzdHVyZ2VzO1xuXG4gIGZ1bmN0aW9uIGhpc3RvZ3JhbShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgeCxcbiAgICAgICAgdmFsdWVzID0gbmV3IEFycmF5KG4pO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdmFsdWVzW2ldID0gdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSk7XG4gICAgfVxuXG4gICAgdmFyIHh6ID0gZG9tYWluKHZhbHVlcyksXG4gICAgICAgIHgwID0geHpbMF0sXG4gICAgICAgIHgxID0geHpbMV0sXG4gICAgICAgIHR6ID0gdGhyZXNob2xkKHZhbHVlcywgeDAsIHgxKTtcblxuICAgIC8vIENvbnZlcnQgbnVtYmVyIG9mIHRocmVzaG9sZHMgaW50byB1bmlmb3JtIHRocmVzaG9sZHMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR6KSkge1xuICAgICAgdHogPSB0aWNrU3RlcCh4MCwgeDEsIHR6KTtcbiAgICAgIHR6ID0gcmFuZ2UoTWF0aC5jZWlsKHgwIC8gdHopICogdHosIHgxLCB0eik7IC8vIGV4Y2x1c2l2ZVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbnkgdGhyZXNob2xkcyBvdXRzaWRlIHRoZSBkb21haW4uXG4gICAgdmFyIG0gPSB0ei5sZW5ndGg7XG4gICAgd2hpbGUgKHR6WzBdIDw9IHgwKSB0ei5zaGlmdCgpLCAtLW07XG4gICAgd2hpbGUgKHR6W20gLSAxXSA+IHgxKSB0ei5wb3AoKSwgLS1tO1xuXG4gICAgdmFyIGJpbnMgPSBuZXcgQXJyYXkobSArIDEpLFxuICAgICAgICBiaW47XG5cbiAgICAvLyBJbml0aWFsaXplIGJpbnMuXG4gICAgZm9yIChpID0gMDsgaSA8PSBtOyArK2kpIHtcbiAgICAgIGJpbiA9IGJpbnNbaV0gPSBbXTtcbiAgICAgIGJpbi54MCA9IGkgPiAwID8gdHpbaSAtIDFdIDogeDA7XG4gICAgICBiaW4ueDEgPSBpIDwgbSA/IHR6W2ldIDogeDE7XG4gICAgfVxuXG4gICAgLy8gQXNzaWduIGRhdGEgdG8gYmlucyBieSB2YWx1ZSwgaWdub3JpbmcgYW55IG91dHNpZGUgdGhlIGRvbWFpbi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB4ID0gdmFsdWVzW2ldO1xuICAgICAgaWYgKHgwIDw9IHggJiYgeCA8PSB4MSkge1xuICAgICAgICBiaW5zW2Jpc2VjdCh0eiwgeCwgMCwgbSldLnB1c2goZGF0YVtpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbnM7XG4gIH1cblxuICBoaXN0b2dyYW0udmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmFsdWUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBoaXN0b2dyYW0pIDogdmFsdWU7XG4gIH07XG5cbiAgaGlzdG9ncmFtLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFtfWzBdLCBfWzFdXSksIGhpc3RvZ3JhbSkgOiBkb21haW47XG4gIH07XG5cbiAgaGlzdG9ncmFtLnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgaGlzdG9ncmFtKSA6IHRocmVzaG9sZDtcbiAgfTtcblxuICByZXR1cm4gaGlzdG9ncmFtO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBiaXNlY3QsIGJpc2VjdFJpZ2h0LCBiaXNlY3RMZWZ0fSBmcm9tIFwiLi9iaXNlY3RcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhc2NlbmRpbmd9IGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpc2VjdG9yfSBmcm9tIFwiLi9iaXNlY3RvclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyb3NzfSBmcm9tIFwiLi9jcm9zc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGRlc2NlbmRpbmd9IGZyb20gXCIuL2Rlc2NlbmRpbmdcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkZXZpYXRpb259IGZyb20gXCIuL2RldmlhdGlvblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4dGVudH0gZnJvbSBcIi4vZXh0ZW50XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaGlzdG9ncmFtfSBmcm9tIFwiLi9oaXN0b2dyYW1cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzfSBmcm9tIFwiLi90aHJlc2hvbGQvZnJlZWRtYW5EaWFjb25pc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZFNjb3R0fSBmcm9tIFwiLi90aHJlc2hvbGQvc2NvdHRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aHJlc2hvbGRTdHVyZ2VzfSBmcm9tIFwiLi90aHJlc2hvbGQvc3R1cmdlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1heH0gZnJvbSBcIi4vbWF4XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVhbn0gZnJvbSBcIi4vbWVhblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1lZGlhbn0gZnJvbSBcIi4vbWVkaWFuXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVyZ2V9IGZyb20gXCIuL21lcmdlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWlufSBmcm9tIFwiLi9taW5cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWlyc30gZnJvbSBcIi4vcGFpcnNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwZXJtdXRlfSBmcm9tIFwiLi9wZXJtdXRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVhbnRpbGV9IGZyb20gXCIuL3F1YW50aWxlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZ2V9IGZyb20gXCIuL3JhbmdlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2Nhbn0gZnJvbSBcIi4vc2NhblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNodWZmbGV9IGZyb20gXCIuL3NodWZmbGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdW19IGZyb20gXCIuL3N1bVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRpY2tzLCB0aWNrSW5jcmVtZW50LCB0aWNrU3RlcH0gZnJvbSBcIi4vdGlja3NcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmFuc3Bvc2V9IGZyb20gXCIuL3RyYW5zcG9zZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHZhcmlhbmNlfSBmcm9tIFwiLi92YXJpYW5jZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHppcH0gZnJvbSBcIi4vemlwXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtYXg7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgdmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF4O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG0gPSBuLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBzdW0gPSAwO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZXNbaV0pKSkgc3VtICs9IHZhbHVlO1xuICAgICAgZWxzZSAtLW07XG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpKSkgc3VtICs9IHZhbHVlO1xuICAgICAgZWxzZSAtLW07XG4gICAgfVxuICB9XG5cbiAgaWYgKG0pIHJldHVybiBzdW0gLyBtO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmdcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5pbXBvcnQgcXVhbnRpbGUgZnJvbSBcIi4vcXVhbnRpbGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbnVtYmVycyA9IFtdO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZXNbaV0pKSkge1xuICAgICAgICBudW1iZXJzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHtcbiAgICAgICAgbnVtYmVycy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbnRpbGUobnVtYmVycy5zb3J0KGFzY2VuZGluZyksIDAuNSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheXMpIHtcbiAgdmFyIG4gPSBhcnJheXMubGVuZ3RoLFxuICAgICAgbSxcbiAgICAgIGkgPSAtMSxcbiAgICAgIGogPSAwLFxuICAgICAgbWVyZ2VkLFxuICAgICAgYXJyYXk7XG5cbiAgd2hpbGUgKCsraSA8IG4pIGogKz0gYXJyYXlzW2ldLmxlbmd0aDtcbiAgbWVyZ2VkID0gbmV3IEFycmF5KGopO1xuXG4gIHdoaWxlICgtLW4gPj0gMCkge1xuICAgIGFycmF5ID0gYXJyYXlzW25dO1xuICAgIG0gPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKC0tbSA+PSAwKSB7XG4gICAgICBtZXJnZWRbLS1qXSA9IGFycmF5W21dO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW47XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgbWluID4gdmFsdWUpIHtcbiAgICAgICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWluO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9PT0gbnVsbCA/IE5hTiA6ICt4O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYXJyYXksIGYpIHtcbiAgaWYgKGYgPT0gbnVsbCkgZiA9IHBhaXI7XG4gIHZhciBpID0gMCwgbiA9IGFycmF5Lmxlbmd0aCAtIDEsIHAgPSBhcnJheVswXSwgcGFpcnMgPSBuZXcgQXJyYXkobiA8IDAgPyAwIDogbik7XG4gIHdoaWxlIChpIDwgbikgcGFpcnNbaV0gPSBmKHAsIHAgPSBhcnJheVsrK2ldKTtcbiAgcmV0dXJuIHBhaXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFpcihhLCBiKSB7XG4gIHJldHVybiBbYSwgYl07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgaW5kZXhlcykge1xuICB2YXIgaSA9IGluZGV4ZXMubGVuZ3RoLCBwZXJtdXRlcyA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSkgcGVybXV0ZXNbaV0gPSBhcnJheVtpbmRleGVzW2ldXTtcbiAgcmV0dXJuIHBlcm11dGVzO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCBwLCB2YWx1ZW9mKSB7XG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHZhbHVlb2YgPSBudW1iZXI7XG4gIGlmICghKG4gPSB2YWx1ZXMubGVuZ3RoKSkgcmV0dXJuO1xuICBpZiAoKHAgPSArcCkgPD0gMCB8fCBuIDwgMikgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1swXSwgMCwgdmFsdWVzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1tuIC0gMV0sIG4gLSAxLCB2YWx1ZXMpO1xuICB2YXIgbixcbiAgICAgIGkgPSAobiAtIDEpICogcCxcbiAgICAgIGkwID0gTWF0aC5mbG9vcihpKSxcbiAgICAgIHZhbHVlMCA9ICt2YWx1ZW9mKHZhbHVlc1tpMF0sIGkwLCB2YWx1ZXMpLFxuICAgICAgdmFsdWUxID0gK3ZhbHVlb2YodmFsdWVzW2kwICsgMV0sIGkwICsgMSwgdmFsdWVzKTtcbiAgcmV0dXJuIHZhbHVlMCArICh2YWx1ZTEgLSB2YWx1ZTApICogKGkgLSBpMCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICBzdGFydCA9ICtzdGFydCwgc3RvcCA9ICtzdG9wLCBzdGVwID0gKG4gPSBhcmd1bWVudHMubGVuZ3RoKSA8IDIgPyAoc3RvcCA9IHN0YXJ0LCBzdGFydCA9IDAsIDEpIDogbiA8IDMgPyAxIDogK3N0ZXA7XG5cbiAgdmFyIGkgPSAtMSxcbiAgICAgIG4gPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSkgfCAwLFxuICAgICAgcmFuZ2UgPSBuZXcgQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICByYW5nZVtpXSA9IHN0YXJ0ICsgaSAqIHN0ZXA7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIGNvbXBhcmUpIHtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpKSByZXR1cm47XG4gIHZhciBuLFxuICAgICAgaSA9IDAsXG4gICAgICBqID0gMCxcbiAgICAgIHhpLFxuICAgICAgeGogPSB2YWx1ZXNbal07XG5cbiAgaWYgKGNvbXBhcmUgPT0gbnVsbCkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIGlmIChjb21wYXJlKHhpID0gdmFsdWVzW2ldLCB4aikgPCAwIHx8IGNvbXBhcmUoeGosIHhqKSAhPT0gMCkge1xuICAgICAgeGogPSB4aSwgaiA9IGk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbXBhcmUoeGosIHhqKSA9PT0gMCkgcmV0dXJuIGo7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgaTAsIGkxKSB7XG4gIHZhciBtID0gKGkxID09IG51bGwgPyBhcnJheS5sZW5ndGggOiBpMSkgLSAoaTAgPSBpMCA9PSBudWxsID8gMCA6ICtpMCksXG4gICAgICB0LFxuICAgICAgaTtcblxuICB3aGlsZSAobSkge1xuICAgIGkgPSBNYXRoLnJhbmRvbSgpICogbS0tIHwgMDtcbiAgICB0ID0gYXJyYXlbbSArIGkwXTtcbiAgICBhcnJheVttICsgaTBdID0gYXJyYXlbaSArIGkwXTtcbiAgICBhcnJheVtpICsgaTBdID0gdDtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVzW2ldKSBzdW0gKz0gdmFsdWU7IC8vIE5vdGU6IHplcm8gYW5kIG51bGwgYXJlIGVxdWl2YWxlbnQuXG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgc3VtICs9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdW07XG59XG4iLCJpbXBvcnQge21hcH0gZnJvbSBcIi4uL2FycmF5XCI7XG5pbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuLi9hc2NlbmRpbmdcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlclwiO1xuaW1wb3J0IHF1YW50aWxlIGZyb20gXCIuLi9xdWFudGlsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIG1pbiwgbWF4KSB7XG4gIHZhbHVlcyA9IG1hcC5jYWxsKHZhbHVlcywgbnVtYmVyKS5zb3J0KGFzY2VuZGluZyk7XG4gIHJldHVybiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoMiAqIChxdWFudGlsZSh2YWx1ZXMsIDAuNzUpIC0gcXVhbnRpbGUodmFsdWVzLCAwLjI1KSkgKiBNYXRoLnBvdyh2YWx1ZXMubGVuZ3RoLCAtMSAvIDMpKSk7XG59XG4iLCJpbXBvcnQgZGV2aWF0aW9uIGZyb20gXCIuLi9kZXZpYXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCBtaW4sIG1heCkge1xuICByZXR1cm4gTWF0aC5jZWlsKChtYXggLSBtaW4pIC8gKDMuNSAqIGRldmlhdGlvbih2YWx1ZXMpICogTWF0aC5wb3codmFsdWVzLmxlbmd0aCwgLTEgLyAzKSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHJldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codmFsdWVzLmxlbmd0aCkgLyBNYXRoLkxOMikgKyAxO1xufVxuIiwidmFyIGUxMCA9IE1hdGguc3FydCg1MCksXG4gICAgZTUgPSBNYXRoLnNxcnQoMTApLFxuICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHJldmVyc2UsXG4gICAgICBpID0gLTEsXG4gICAgICBuLFxuICAgICAgdGlja3MsXG4gICAgICBzdGVwO1xuXG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoc3RhcnQgPT09IHN0b3AgJiYgY291bnQgPiAwKSByZXR1cm4gW3N0YXJ0XTtcbiAgaWYgKHJldmVyc2UgPSBzdG9wIDwgc3RhcnQpIG4gPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gbjtcbiAgaWYgKChzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpKSA9PT0gMCB8fCAhaXNGaW5pdGUoc3RlcCkpIHJldHVybiBbXTtcblxuICBpZiAoc3RlcCA+IDApIHtcbiAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAvIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgLyBzdGVwKTtcbiAgICB0aWNrcyA9IG5ldyBBcnJheShuID0gTWF0aC5jZWlsKHN0b3AgLSBzdGFydCArIDEpKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGlja3NbaV0gPSAoc3RhcnQgKyBpKSAqIHN0ZXA7XG4gIH0gZWxzZSB7XG4gICAgc3RhcnQgPSBNYXRoLmZsb29yKHN0YXJ0ICogc3RlcCk7XG4gICAgc3RvcCA9IE1hdGguY2VpbChzdG9wICogc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdGFydCAtIHN0b3AgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0IC0gaSkgLyBzdGVwO1xuICB9XG5cbiAgaWYgKHJldmVyc2UpIHRpY2tzLnJldmVyc2UoKTtcblxuICByZXR1cm4gdGlja3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgcG93ZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXApIC8gTWF0aC5MTjEwKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlcik7XG4gIHJldHVybiBwb3dlciA+PSAwXG4gICAgICA/IChlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDEpICogTWF0aC5wb3coMTAsIHBvd2VyKVxuICAgICAgOiAtTWF0aC5wb3coMTAsIC1wb3dlcikgLyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgc3RlcDEgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwMCkgLyBNYXRoLkxOMTApKSxcbiAgICAgIGVycm9yID0gc3RlcDAgLyBzdGVwMTtcbiAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XG4gIGVsc2UgaWYgKGVycm9yID49IGU1KSBzdGVwMSAqPSA1O1xuICBlbHNlIGlmIChlcnJvciA+PSBlMikgc3RlcDEgKj0gMjtcbiAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xufVxuIiwiaW1wb3J0IG1pbiBmcm9tIFwiLi9taW5cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0cml4KSB7XG4gIGlmICghKG4gPSBtYXRyaXgubGVuZ3RoKSkgcmV0dXJuIFtdO1xuICBmb3IgKHZhciBpID0gLTEsIG0gPSBtaW4obWF0cml4LCBsZW5ndGgpLCB0cmFuc3Bvc2UgPSBuZXcgQXJyYXkobSk7ICsraSA8IG07KSB7XG4gICAgZm9yICh2YXIgaiA9IC0xLCBuLCByb3cgPSB0cmFuc3Bvc2VbaV0gPSBuZXcgQXJyYXkobik7ICsraiA8IG47KSB7XG4gICAgICByb3dbal0gPSBtYXRyaXhbal1baV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFuc3Bvc2U7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aChkKSB7XG4gIHJldHVybiBkLmxlbmd0aDtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gMCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIG1lYW4gPSAwLFxuICAgICAgdmFsdWUsXG4gICAgICBkZWx0YSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlc1tpXSkpKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKyttO1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKyttO1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobSA+IDEpIHJldHVybiBzdW0gLyAobSAtIDEpO1xufVxuIiwiaW1wb3J0IHRyYW5zcG9zZSBmcm9tIFwiLi90cmFuc3Bvc2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0cmFuc3Bvc2UoYXJndW1lbnRzKTtcbn1cbiIsImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLCJpbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5XCI7XG5cbnZhciB0b3AgPSAxLFxuICAgIHJpZ2h0ID0gMixcbiAgICBib3R0b20gPSAzLFxuICAgIGxlZnQgPSA0LFxuICAgIGVwc2lsb24gPSAxZS02O1xuXG5mdW5jdGlvbiB0cmFuc2xhdGVYKHgpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgKHggKyAwLjUpICsgXCIsMClcIjtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlWSh5KSB7XG4gIHJldHVybiBcInRyYW5zbGF0ZSgwLFwiICsgKHkgKyAwLjUpICsgXCIpXCI7XG59XG5cbmZ1bmN0aW9uIG51bWJlcihzY2FsZSkge1xuICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgIHJldHVybiArc2NhbGUoZCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNlbnRlcihzY2FsZSkge1xuICB2YXIgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2NhbGUuYmFuZHdpZHRoKCkgLSAxKSAvIDI7IC8vIEFkanVzdCBmb3IgMC41cHggb2Zmc2V0LlxuICBpZiAoc2NhbGUucm91bmQoKSkgb2Zmc2V0ID0gTWF0aC5yb3VuZChvZmZzZXQpO1xuICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgIHJldHVybiArc2NhbGUoZCkgKyBvZmZzZXQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVudGVyaW5nKCkge1xuICByZXR1cm4gIXRoaXMuX19heGlzO1xufVxuXG5mdW5jdGlvbiBheGlzKG9yaWVudCwgc2NhbGUpIHtcbiAgdmFyIHRpY2tBcmd1bWVudHMgPSBbXSxcbiAgICAgIHRpY2tWYWx1ZXMgPSBudWxsLFxuICAgICAgdGlja0Zvcm1hdCA9IG51bGwsXG4gICAgICB0aWNrU2l6ZUlubmVyID0gNixcbiAgICAgIHRpY2tTaXplT3V0ZXIgPSA2LFxuICAgICAgdGlja1BhZGRpbmcgPSAzLFxuICAgICAgayA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gbGVmdCA/IC0xIDogMSxcbiAgICAgIHggPSBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09PSByaWdodCA/IFwieFwiIDogXCJ5XCIsXG4gICAgICB0cmFuc2Zvcm0gPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGJvdHRvbSA/IHRyYW5zbGF0ZVggOiB0cmFuc2xhdGVZO1xuXG4gIGZ1bmN0aW9uIGF4aXMoY29udGV4dCkge1xuICAgIHZhciB2YWx1ZXMgPSB0aWNrVmFsdWVzID09IG51bGwgPyAoc2NhbGUudGlja3MgPyBzY2FsZS50aWNrcy5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBzY2FsZS5kb21haW4oKSkgOiB0aWNrVmFsdWVzLFxuICAgICAgICBmb3JtYXQgPSB0aWNrRm9ybWF0ID09IG51bGwgPyAoc2NhbGUudGlja0Zvcm1hdCA/IHNjYWxlLnRpY2tGb3JtYXQuYXBwbHkoc2NhbGUsIHRpY2tBcmd1bWVudHMpIDogaWRlbnRpdHkpIDogdGlja0Zvcm1hdCxcbiAgICAgICAgc3BhY2luZyA9IE1hdGgubWF4KHRpY2tTaXplSW5uZXIsIDApICsgdGlja1BhZGRpbmcsXG4gICAgICAgIHJhbmdlID0gc2NhbGUucmFuZ2UoKSxcbiAgICAgICAgcmFuZ2UwID0gK3JhbmdlWzBdICsgMC41LFxuICAgICAgICByYW5nZTEgPSArcmFuZ2VbcmFuZ2UubGVuZ3RoIC0gMV0gKyAwLjUsXG4gICAgICAgIHBvc2l0aW9uID0gKHNjYWxlLmJhbmR3aWR0aCA/IGNlbnRlciA6IG51bWJlcikoc2NhbGUuY29weSgpKSxcbiAgICAgICAgc2VsZWN0aW9uID0gY29udGV4dC5zZWxlY3Rpb24gPyBjb250ZXh0LnNlbGVjdGlvbigpIDogY29udGV4dCxcbiAgICAgICAgcGF0aCA9IHNlbGVjdGlvbi5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLmRhdGEoW251bGxdKSxcbiAgICAgICAgdGljayA9IHNlbGVjdGlvbi5zZWxlY3RBbGwoXCIudGlja1wiKS5kYXRhKHZhbHVlcywgc2NhbGUpLm9yZGVyKCksXG4gICAgICAgIHRpY2tFeGl0ID0gdGljay5leGl0KCksXG4gICAgICAgIHRpY2tFbnRlciA9IHRpY2suZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRpY2tcIiksXG4gICAgICAgIGxpbmUgPSB0aWNrLnNlbGVjdChcImxpbmVcIiksXG4gICAgICAgIHRleHQgPSB0aWNrLnNlbGVjdChcInRleHRcIik7XG5cbiAgICBwYXRoID0gcGF0aC5tZXJnZShwYXRoLmVudGVyKCkuaW5zZXJ0KFwicGF0aFwiLCBcIi50aWNrXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkb21haW5cIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIikpO1xuXG4gICAgdGljayA9IHRpY2subWVyZ2UodGlja0VudGVyKTtcblxuICAgIGxpbmUgPSBsaW5lLm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpKTtcblxuICAgIHRleHQgPSB0ZXh0Lm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLmF0dHIoXCJkeVwiLCBvcmllbnQgPT09IHRvcCA/IFwiMGVtXCIgOiBvcmllbnQgPT09IGJvdHRvbSA/IFwiMC43MWVtXCIgOiBcIjAuMzJlbVwiKSk7XG5cbiAgICBpZiAoY29udGV4dCAhPT0gc2VsZWN0aW9uKSB7XG4gICAgICBwYXRoID0gcGF0aC50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGljayA9IHRpY2sudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIGxpbmUgPSBsaW5lLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0ZXh0ID0gdGV4dC50cmFuc2l0aW9uKGNvbnRleHQpO1xuXG4gICAgICB0aWNrRXhpdCA9IHRpY2tFeGl0LnRyYW5zaXRpb24oY29udGV4dClcbiAgICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgZXBzaWxvbilcbiAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBpc0Zpbml0ZShkID0gcG9zaXRpb24oZCkpID8gdHJhbnNmb3JtKGQpIDogdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIik7IH0pO1xuXG4gICAgICB0aWNrRW50ZXJcbiAgICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgZXBzaWxvbilcbiAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHZhciBwID0gdGhpcy5wYXJlbnROb2RlLl9fYXhpczsgcmV0dXJuIHRyYW5zZm9ybShwICYmIGlzRmluaXRlKHAgPSBwKGQpKSA/IHAgOiBwb3NpdGlvbihkKSk7IH0pO1xuICAgIH1cblxuICAgIHRpY2tFeGl0LnJlbW92ZSgpO1xuXG4gICAgcGF0aFxuICAgICAgICAuYXR0cihcImRcIiwgb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PSByaWdodFxuICAgICAgICAgICAgPyAodGlja1NpemVPdXRlciA/IFwiTVwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIixcIiArIHJhbmdlMCArIFwiSDAuNVZcIiArIHJhbmdlMSArIFwiSFwiICsgayAqIHRpY2tTaXplT3V0ZXIgOiBcIk0wLjUsXCIgKyByYW5nZTAgKyBcIlZcIiArIHJhbmdlMSlcbiAgICAgICAgICAgIDogKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIlYwLjVIXCIgKyByYW5nZTEgKyBcIlZcIiArIGsgKiB0aWNrU2l6ZU91dGVyIDogXCJNXCIgKyByYW5nZTAgKyBcIiwwLjVIXCIgKyByYW5nZTEpKTtcblxuICAgIHRpY2tcbiAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIDEpXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHRyYW5zZm9ybShwb3NpdGlvbihkKSk7IH0pO1xuXG4gICAgbGluZVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKTtcblxuICAgIHRleHRcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC50ZXh0KGZvcm1hdCk7XG5cbiAgICBzZWxlY3Rpb24uZmlsdGVyKGVudGVyaW5nKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJub25lXCIpXG4gICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIDEwKVxuICAgICAgICAuYXR0cihcImZvbnQtZmFtaWx5XCIsIFwic2Fucy1zZXJpZlwiKVxuICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIG9yaWVudCA9PT0gcmlnaHQgPyBcInN0YXJ0XCIgOiBvcmllbnQgPT09IGxlZnQgPyBcImVuZFwiIDogXCJtaWRkbGVcIik7XG5cbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7IHRoaXMuX19heGlzID0gcG9zaXRpb247IH0pO1xuICB9XG5cbiAgYXhpcy5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZSA9IF8sIGF4aXMpIDogc2NhbGU7XG4gIH07XG5cbiAgYXhpcy50aWNrcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aWNrQXJndW1lbnRzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBheGlzO1xuICB9O1xuXG4gIGF4aXMudGlja0FyZ3VtZW50cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrQXJndW1lbnRzID0gXyA9PSBudWxsID8gW10gOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tBcmd1bWVudHMuc2xpY2UoKTtcbiAgfTtcblxuICBheGlzLnRpY2tWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1ZhbHVlcyA9IF8gPT0gbnVsbCA/IG51bGwgOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tWYWx1ZXMgJiYgdGlja1ZhbHVlcy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrRm9ybWF0ID0gXywgYXhpcykgOiB0aWNrRm9ybWF0O1xuICB9O1xuXG4gIGF4aXMudGlja1NpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9IHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVJbm5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gK18sIGF4aXMpIDogdGlja1NpemVJbm5lcjtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplT3V0ZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrUGFkZGluZyA9ICtfLCBheGlzKSA6IHRpY2tQYWRkaW5nO1xuICB9O1xuXG4gIHJldHVybiBheGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1RvcChzY2FsZSkge1xuICByZXR1cm4gYXhpcyh0b3AsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhyaWdodCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0JvdHRvbShzY2FsZSkge1xuICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNMZWZ0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGxlZnQsIHNjYWxlKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJleHBvcnQge1xuICBheGlzVG9wLFxuICBheGlzUmlnaHQsXG4gIGF4aXNCb3R0b20sXG4gIGF4aXNMZWZ0XG59IGZyb20gXCIuL2F4aXNcIjtcbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHtkcmFnRGlzYWJsZSwgZHJhZ0VuYWJsZX0gZnJvbSBcImQzLWRyYWdcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGV9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtjdXN0b21FdmVudCwgZXZlbnQsIG1vdXNlLCBzZWxlY3R9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7aW50ZXJydXB0fSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgQnJ1c2hFdmVudCBmcm9tIFwiLi9ldmVudFwiO1xuaW1wb3J0IG5vZXZlbnQsIHtub3Byb3BhZ2F0aW9ufSBmcm9tIFwiLi9ub2V2ZW50XCI7XG5cbnZhciBNT0RFX0RSQUcgPSB7bmFtZTogXCJkcmFnXCJ9LFxuICAgIE1PREVfU1BBQ0UgPSB7bmFtZTogXCJzcGFjZVwifSxcbiAgICBNT0RFX0hBTkRMRSA9IHtuYW1lOiBcImhhbmRsZVwifSxcbiAgICBNT0RFX0NFTlRFUiA9IHtuYW1lOiBcImNlbnRlclwifTtcblxudmFyIFggPSB7XG4gIG5hbWU6IFwieFwiLFxuICBoYW5kbGVzOiBbXCJlXCIsIFwid1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4LCBlKSB7IHJldHVybiB4ICYmIFtbeFswXSwgZVswXVsxXV0sIFt4WzFdLCBlWzFdWzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVswXSwgeHlbMV1bMF1dOyB9XG59O1xuXG52YXIgWSA9IHtcbiAgbmFtZTogXCJ5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJzXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHksIGUpIHsgcmV0dXJuIHkgJiYgW1tlWzBdWzBdLCB5WzBdXSwgW2VbMV1bMF0sIHlbMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzFdLCB4eVsxXVsxXV07IH1cbn07XG5cbnZhciBYWSA9IHtcbiAgbmFtZTogXCJ4eVwiLFxuICBoYW5kbGVzOiBbXCJuXCIsIFwiZVwiLCBcInNcIiwgXCJ3XCIsIFwibndcIiwgXCJuZVwiLCBcInNlXCIsIFwic3dcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eTsgfVxufTtcblxudmFyIGN1cnNvcnMgPSB7XG4gIG92ZXJsYXk6IFwiY3Jvc3NoYWlyXCIsXG4gIHNlbGVjdGlvbjogXCJtb3ZlXCIsXG4gIG46IFwibnMtcmVzaXplXCIsXG4gIGU6IFwiZXctcmVzaXplXCIsXG4gIHM6IFwibnMtcmVzaXplXCIsXG4gIHc6IFwiZXctcmVzaXplXCIsXG4gIG53OiBcIm53c2UtcmVzaXplXCIsXG4gIG5lOiBcIm5lc3ctcmVzaXplXCIsXG4gIHNlOiBcIm53c2UtcmVzaXplXCIsXG4gIHN3OiBcIm5lc3ctcmVzaXplXCJcbn07XG5cbnZhciBmbGlwWCA9IHtcbiAgZTogXCJ3XCIsXG4gIHc6IFwiZVwiLFxuICBudzogXCJuZVwiLFxuICBuZTogXCJud1wiLFxuICBzZTogXCJzd1wiLFxuICBzdzogXCJzZVwiXG59O1xuXG52YXIgZmxpcFkgPSB7XG4gIG46IFwic1wiLFxuICBzOiBcIm5cIixcbiAgbnc6IFwic3dcIixcbiAgbmU6IFwic2VcIixcbiAgc2U6IFwibmVcIixcbiAgc3c6IFwibndcIlxufTtcblxudmFyIHNpZ25zWCA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IG51bGwsXG4gIGU6ICsxLFxuICBzOiBudWxsLFxuICB3OiAtMSxcbiAgbnc6IC0xLFxuICBuZTogKzEsXG4gIHNlOiArMSxcbiAgc3c6IC0xXG59O1xuXG52YXIgc2lnbnNZID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogLTEsXG4gIGU6IG51bGwsXG4gIHM6ICsxLFxuICB3OiBudWxsLFxuICBudzogLTEsXG4gIG5lOiAtMSxcbiAgc2U6ICsxLFxuICBzdzogKzFcbn07XG5cbmZ1bmN0aW9uIHR5cGUodCkge1xuICByZXR1cm4ge3R5cGU6IHR9O1xufVxuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoKSB7XG4gIHJldHVybiAhZXZlbnQuYnV0dG9uO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RXh0ZW50KCkge1xuICB2YXIgc3ZnID0gdGhpcy5vd25lclNWR0VsZW1lbnQgfHwgdGhpcztcbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIOKAnF9fYnJ1c2jigJ0gcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChicnVzaCwgXCJzdGFydFwiLCBcImJydXNoXCIsIFwiZW5kXCIpLFxuICAgICAgaGFuZGxlU2l6ZSA9IDYsXG4gICAgICB0b3VjaGVuZGluZztcblxuICBmdW5jdGlvbiBicnVzaChncm91cCkge1xuICAgIHZhciBvdmVybGF5ID0gZ3JvdXBcbiAgICAgICAgLnByb3BlcnR5KFwiX19icnVzaFwiLCBpbml0aWFsaXplKVxuICAgICAgLnNlbGVjdEFsbChcIi5vdmVybGF5XCIpXG4gICAgICAuZGF0YShbdHlwZShcIm92ZXJsYXlcIildKTtcblxuICAgIG92ZXJsYXkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJvdmVybGF5XCIpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KVxuICAgICAgLm1lcmdlKG92ZXJsYXkpXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBleHRlbnQgPSBsb2NhbCh0aGlzKS5leHRlbnQ7XG4gICAgICAgICAgc2VsZWN0KHRoaXMpXG4gICAgICAgICAgICAgIC5hdHRyKFwieFwiLCBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBleHRlbnRbMF1bMV0pXG4gICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZXh0ZW50WzFdWzBdIC0gZXh0ZW50WzBdWzBdKVxuICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBleHRlbnRbMV1bMV0gLSBleHRlbnRbMF1bMV0pO1xuICAgICAgICB9KTtcblxuICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb25cIilcbiAgICAgIC5kYXRhKFt0eXBlKFwic2VsZWN0aW9uXCIpXSlcbiAgICAgIC5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInNlbGVjdGlvblwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLnNlbGVjdGlvbilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiIzc3N1wiKVxuICAgICAgICAuYXR0cihcImZpbGwtb3BhY2l0eVwiLCAwLjMpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiI2ZmZlwiKVxuICAgICAgICAuYXR0cihcInNoYXBlLXJlbmRlcmluZ1wiLCBcImNyaXNwRWRnZXNcIik7XG5cbiAgICB2YXIgaGFuZGxlID0gZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgLmRhdGEoZGltLmhhbmRsZXMsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZTsgfSk7XG5cbiAgICBoYW5kbGUuZXhpdCgpLnJlbW92ZSgpO1xuXG4gICAgaGFuZGxlLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIFwiaGFuZGxlIGhhbmRsZS0tXCIgKyBkLnR5cGU7IH0pXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGN1cnNvcnNbZC50eXBlXTsgfSk7XG5cbiAgICBncm91cFxuICAgICAgICAuZWFjaChyZWRyYXcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIiwgXCJyZ2JhKDAsMCwwLDApXCIpXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5icnVzaCB0b3VjaHN0YXJ0LmJydXNoXCIsIHN0YXJ0ZWQpO1xuICB9XG5cbiAgYnJ1c2gubW92ZSA9IGZ1bmN0aW9uKGdyb3VwLCBzZWxlY3Rpb24pIHtcbiAgICBpZiAoZ3JvdXAuc2VsZWN0aW9uKSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5vbihcInN0YXJ0LmJydXNoXCIsIGZ1bmN0aW9uKCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpOyB9KVxuICAgICAgICAgIC5vbihcImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5lbmQoKTsgfSlcbiAgICAgICAgICAudHdlZW4oXCJicnVzaFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjAgPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoc2VsZWN0aW9uMCwgc2VsZWN0aW9uMSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHR3ZWVuKHQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gdCA9PT0gMSAmJiBlbXB0eShzZWxlY3Rpb24xKSA/IG51bGwgOiBpKHQpO1xuICAgICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgICAgZW1pdC5icnVzaCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uMCAmJiBzZWxlY3Rpb24xID8gdHdlZW4gOiB0d2VlbigxKTtcbiAgICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjEgPSBkaW0uaW5wdXQodHlwZW9mIHNlbGVjdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gc2VsZWN0aW9uLmFwcGx5KHRoYXQsIGFyZ3MpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3MpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICAgICAgICAgIGludGVycnVwdCh0aGF0KTtcbiAgICAgICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjEgPT0gbnVsbCB8fCBlbXB0eShzZWxlY3Rpb24xKSA/IG51bGwgOiBzZWxlY3Rpb24xO1xuICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICBlbWl0LnN0YXJ0KCkuYnJ1c2goKS5lbmQoKTtcbiAgICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGlzKSxcbiAgICAgICAgc2VsZWN0aW9uID0gbG9jYWwodGhpcykuc2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBzZWxlY3Rpb25bMF1bMV0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdKTtcblxuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlW2QudHlwZS5sZW5ndGggLSAxXSA9PT0gXCJlXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVswXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbMF0gPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMV0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJuXCIgfHwgZC50eXBlID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJlXCIgfHwgZC50eXBlID09PSBcIndcIiA/IHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgXCJub25lXCIpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXR0ZXIodGhhdCwgYXJncykge1xuICAgIHJldHVybiB0aGF0Ll9fYnJ1c2guZW1pdHRlciB8fCBuZXcgRW1pdHRlcih0aGF0LCBhcmdzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEVtaXR0ZXIodGhhdCwgYXJncykge1xuICAgIHRoaXMudGhhdCA9IHRoYXQ7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLnN0YXRlID0gdGhhdC5fX2JydXNoO1xuICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgfVxuXG4gIEVtaXR0ZXIucHJvdG90eXBlID0ge1xuICAgIGJlZm9yZXN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgrK3RoaXMuYWN0aXZlID09PSAxKSB0aGlzLnN0YXRlLmVtaXR0ZXIgPSB0aGlzLCB0aGlzLnN0YXJ0aW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuc3RhcnRpbmcpIHRoaXMuc3RhcnRpbmcgPSBmYWxzZSwgdGhpcy5lbWl0KFwic3RhcnRcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGJydXNoOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZW1pdChcImJydXNoXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsIHRoaXMuZW1pdChcImVuZFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW1pdDogZnVuY3Rpb24odHlwZSkge1xuICAgICAgY3VzdG9tRXZlbnQobmV3IEJydXNoRXZlbnQoYnJ1c2gsIHR5cGUsIGRpbS5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSwgbGlzdGVuZXJzLmFwcGx5LCBsaXN0ZW5lcnMsIFt0eXBlLCB0aGlzLnRoYXQsIHRoaXMuYXJnc10pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzdGFydGVkKCkge1xuICAgIGlmIChldmVudC50b3VjaGVzKSB7IGlmIChldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPCBldmVudC50b3VjaGVzLmxlbmd0aCkgcmV0dXJuIG5vZXZlbnQoKTsgfVxuICAgIGVsc2UgaWYgKHRvdWNoZW5kaW5nKSByZXR1cm47XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuXG4gICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICB0eXBlID0gZXZlbnQudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsXG4gICAgICAgIG1vZGUgPSAoZXZlbnQubWV0YUtleSA/IHR5cGUgPSBcIm92ZXJsYXlcIiA6IHR5cGUpID09PSBcInNlbGVjdGlvblwiID8gTU9ERV9EUkFHIDogKGV2ZW50LmFsdEtleSA/IE1PREVfQ0VOVEVSIDogTU9ERV9IQU5ETEUpLFxuICAgICAgICBzaWduWCA9IGRpbSA9PT0gWSA/IG51bGwgOiBzaWduc1hbdHlwZV0sXG4gICAgICAgIHNpZ25ZID0gZGltID09PSBYID8gbnVsbCA6IHNpZ25zWVt0eXBlXSxcbiAgICAgICAgc3RhdGUgPSBsb2NhbCh0aGF0KSxcbiAgICAgICAgZXh0ZW50ID0gc3RhdGUuZXh0ZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIFcgPSBleHRlbnRbMF1bMF0sIHcwLCB3MSxcbiAgICAgICAgTiA9IGV4dGVudFswXVsxXSwgbjAsIG4xLFxuICAgICAgICBFID0gZXh0ZW50WzFdWzBdLCBlMCwgZTEsXG4gICAgICAgIFMgPSBleHRlbnRbMV1bMV0sIHMwLCBzMSxcbiAgICAgICAgZHgsXG4gICAgICAgIGR5LFxuICAgICAgICBtb3ZpbmcsXG4gICAgICAgIHNoaWZ0aW5nID0gc2lnblggJiYgc2lnblkgJiYgZXZlbnQuc2hpZnRLZXksXG4gICAgICAgIGxvY2tYLFxuICAgICAgICBsb2NrWSxcbiAgICAgICAgcG9pbnQwID0gbW91c2UodGhhdCksXG4gICAgICAgIHBvaW50ID0gcG9pbnQwLFxuICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJvdmVybGF5XCIpIHtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtcbiAgICAgICAgW3cwID0gZGltID09PSBZID8gVyA6IHBvaW50MFswXSwgbjAgPSBkaW0gPT09IFggPyBOIDogcG9pbnQwWzFdXSxcbiAgICAgICAgW2UwID0gZGltID09PSBZID8gRSA6IHcwLCBzMCA9IGRpbSA9PT0gWCA/IFMgOiBuMF1cbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHcwID0gc2VsZWN0aW9uWzBdWzBdO1xuICAgICAgbjAgPSBzZWxlY3Rpb25bMF1bMV07XG4gICAgICBlMCA9IHNlbGVjdGlvblsxXVswXTtcbiAgICAgIHMwID0gc2VsZWN0aW9uWzFdWzFdO1xuICAgIH1cblxuICAgIHcxID0gdzA7XG4gICAgbjEgPSBuMDtcbiAgICBlMSA9IGUwO1xuICAgIHMxID0gczA7XG5cbiAgICB2YXIgZ3JvdXAgPSBzZWxlY3QodGhhdClcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICB2YXIgb3ZlcmxheSA9IGdyb3VwLnNlbGVjdEFsbChcIi5vdmVybGF5XCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZV0pO1xuXG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsIG1vdmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBzZWxlY3QoZXZlbnQudmlldylcbiAgICAgICAgICAub24oXCJrZXlkb3duLmJydXNoXCIsIGtleWRvd25lZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJrZXl1cC5icnVzaFwiLCBrZXl1cHBlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZW1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwibW91c2V1cC5icnVzaFwiLCBlbmRlZCwgdHJ1ZSk7XG5cbiAgICAgIGRyYWdEaXNhYmxlKGV2ZW50LnZpZXcpO1xuICAgIH1cblxuICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICBpbnRlcnJ1cHQodGhhdCk7XG4gICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgZW1pdC5zdGFydCgpO1xuXG4gICAgZnVuY3Rpb24gbW92ZWQoKSB7XG4gICAgICB2YXIgcG9pbnQxID0gbW91c2UodGhhdCk7XG4gICAgICBpZiAoc2hpZnRpbmcgJiYgIWxvY2tYICYmICFsb2NrWSkge1xuICAgICAgICBpZiAoTWF0aC5hYnMocG9pbnQxWzBdIC0gcG9pbnRbMF0pID4gTWF0aC5hYnMocG9pbnQxWzFdIC0gcG9pbnRbMV0pKSBsb2NrWSA9IHRydWU7XG4gICAgICAgIGVsc2UgbG9ja1ggPSB0cnVlO1xuICAgICAgfVxuICAgICAgcG9pbnQgPSBwb2ludDE7XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudCgpO1xuICAgICAgbW92ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdmUoKSB7XG4gICAgICB2YXIgdDtcblxuICAgICAgZHggPSBwb2ludFswXSAtIHBvaW50MFswXTtcbiAgICAgIGR5ID0gcG9pbnRbMV0gLSBwb2ludDBbMV07XG5cbiAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIE1PREVfU1BBQ0U6XG4gICAgICAgIGNhc2UgTU9ERV9EUkFHOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSBkeCA9IE1hdGgubWF4KFcgLSB3MCwgTWF0aC5taW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gTWF0aC5tYXgoTiAtIG4wLCBNYXRoLm1pbihTIC0gczAsIGR5KSksIG4xID0gbjAgKyBkeSwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTU9ERV9IQU5ETEU6IHtcbiAgICAgICAgICBpZiAoc2lnblggPCAwKSBkeCA9IE1hdGgubWF4KFcgLSB3MCwgTWF0aC5taW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblggPiAwKSBkeCA9IE1hdGgubWF4KFcgLSBlMCwgTWF0aC5taW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwLCBlMSA9IGUwICsgZHg7XG4gICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBuMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwO1xuICAgICAgICAgIGVsc2UgaWYgKHNpZ25ZID4gMCkgZHkgPSBNYXRoLm1heChOIC0gczAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTU9ERV9DRU5URVI6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIHcxID0gTWF0aC5tYXgoVywgTWF0aC5taW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gTWF0aC5tYXgoVywgTWF0aC5taW4oRSwgZTAgKyBkeCAqIHNpZ25YKSk7XG4gICAgICAgICAgaWYgKHNpZ25ZKSBuMSA9IE1hdGgubWF4KE4sIE1hdGgubWluKFMsIG4wIC0gZHkgKiBzaWduWSkpLCBzMSA9IE1hdGgubWF4KE4sIE1hdGgubWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZGVkKCkge1xuICAgICAgbm9wcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGlmICh0b3VjaGVuZGluZykgY2xlYXJUaW1lb3V0KHRvdWNoZW5kaW5nKTtcbiAgICAgICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIDUwMCk7IC8vIEdob3N0IGNsaWNrcyBhcmUgZGVsYXllZCFcbiAgICAgICAgZ3JvdXAub24oXCJ0b3VjaG1vdmUuYnJ1c2ggdG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmFnRW5hYmxlKGV2ZW50LnZpZXcsIG1vdmluZyk7XG4gICAgICAgIHZpZXcub24oXCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoXCIsIG51bGwpO1xuICAgICAgfVxuICAgICAgZ3JvdXAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpO1xuICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMub3ZlcmxheSk7XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSAob24gc3RhcnQpIVxuICAgICAgaWYgKGVtcHR5KHNlbGVjdGlvbikpIHN0YXRlLnNlbGVjdGlvbiA9IG51bGwsIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgZW1pdC5lbmQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXlkb3duZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIHNoaWZ0aW5nID0gc2lnblggJiYgc2lnblk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAxODogeyAvLyBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCkgZTAgPSBlMSAtIGR4ICogc2lnblgsIHcwID0gdzEgKyBkeCAqIHNpZ25YO1xuICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9DRU5URVI7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0U7IHRha2VzIHByaW9yaXR5IG92ZXIgQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFIHx8IG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxIC0gZHg7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MSAtIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMSAtIGR5OyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjEgLSBkeTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX1NQQUNFO1xuICAgICAgICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xuICAgICAgfVxuICAgICAgbm9ldmVudCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleXVwcGVkKCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBpZiAoc2hpZnRpbmcpIHtcbiAgICAgICAgICAgIGxvY2tYID0gbG9ja1kgPSBzaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0NFTlRFUikge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfSEFORExFO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDMyOiB7IC8vIFNQQUNFXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfU1BBQ0UpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICAgIGlmIChzaWduWSkgczAgPSBzMSAtIGR5ICogc2lnblksIG4wID0gbjEgKyBkeSAqIHNpZ25ZO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9DRU5URVI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICAgIGlmIChzaWduWSA8IDApIHMwID0gczE7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMTtcbiAgICAgICAgICAgICAgbW9kZSA9IE1PREVfSEFORExFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZV0pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9fYnJ1c2ggfHwge3NlbGVjdGlvbjogbnVsbH07XG4gICAgc3RhdGUuZXh0ZW50ID0gZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgc3RhdGUuZGltID0gZGltO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFtbK19bMF1bMF0sICtfWzBdWzFdXSwgWytfWzFdWzBdLCArX1sxXVsxXV1dKSwgYnJ1c2gpIDogZXh0ZW50O1xuICB9O1xuXG4gIGJydXNoLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IGZpbHRlcjtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odGFyZ2V0LCB0eXBlLCBzZWxlY3Rpb24pIHtcbiAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xufVxuIiwiZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBicnVzaCxcbiAgYnJ1c2hYLFxuICBicnVzaFksXG4gIGJydXNoU2VsZWN0aW9uXG59IGZyb20gXCIuL2JydXNoXCI7XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiIsImltcG9ydCB7cmFuZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHttYXgsIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuXG5mdW5jdGlvbiBjb21wYXJlVmFsdWUoY29tcGFyZSkge1xuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBjb21wYXJlKFxuICAgICAgYS5zb3VyY2UudmFsdWUgKyBhLnRhcmdldC52YWx1ZSxcbiAgICAgIGIuc291cmNlLnZhbHVlICsgYi50YXJnZXQudmFsdWVcbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHBhZEFuZ2xlID0gMCxcbiAgICAgIHNvcnRHcm91cHMgPSBudWxsLFxuICAgICAgc29ydFN1Ymdyb3VwcyA9IG51bGwsXG4gICAgICBzb3J0Q2hvcmRzID0gbnVsbDtcblxuICBmdW5jdGlvbiBjaG9yZChtYXRyaXgpIHtcbiAgICB2YXIgbiA9IG1hdHJpeC5sZW5ndGgsXG4gICAgICAgIGdyb3VwU3VtcyA9IFtdLFxuICAgICAgICBncm91cEluZGV4ID0gcmFuZ2UobiksXG4gICAgICAgIHN1Ymdyb3VwSW5kZXggPSBbXSxcbiAgICAgICAgY2hvcmRzID0gW10sXG4gICAgICAgIGdyb3VwcyA9IGNob3Jkcy5ncm91cHMgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShuICogbiksXG4gICAgICAgIGssXG4gICAgICAgIHgsXG4gICAgICAgIHgwLFxuICAgICAgICBkeCxcbiAgICAgICAgaSxcbiAgICAgICAgajtcblxuICAgIC8vIENvbXB1dGUgdGhlIHN1bS5cbiAgICBrID0gMCwgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikge1xuICAgICAgeCA9IDAsIGogPSAtMTsgd2hpbGUgKCsraiA8IG4pIHtcbiAgICAgICAgeCArPSBtYXRyaXhbaV1bal07XG4gICAgICB9XG4gICAgICBncm91cFN1bXMucHVzaCh4KTtcbiAgICAgIHN1Ymdyb3VwSW5kZXgucHVzaChyYW5nZShuKSk7XG4gICAgICBrICs9IHg7XG4gICAgfVxuXG4gICAgLy8gU29ydCBncm91cHPigKZcbiAgICBpZiAoc29ydEdyb3VwcykgZ3JvdXBJbmRleC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBzb3J0R3JvdXBzKGdyb3VwU3Vtc1thXSwgZ3JvdXBTdW1zW2JdKTtcbiAgICB9KTtcblxuICAgIC8vIFNvcnQgc3ViZ3JvdXBz4oCmXG4gICAgaWYgKHNvcnRTdWJncm91cHMpIHN1Ymdyb3VwSW5kZXguZm9yRWFjaChmdW5jdGlvbihkLCBpKSB7XG4gICAgICBkLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICByZXR1cm4gc29ydFN1Ymdyb3VwcyhtYXRyaXhbaV1bYV0sIG1hdHJpeFtpXVtiXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdGhlIHN1bSB0byBzY2FsaW5nIGZhY3RvciBmb3IgWzAsIDJwaV0uXG4gICAgLy8gVE9ETyBBbGxvdyBzdGFydCBhbmQgZW5kIGFuZ2xlIHRvIGJlIHNwZWNpZmllZD9cbiAgICAvLyBUT0RPIEFsbG93IHBhZGRpbmcgdG8gYmUgc3BlY2lmaWVkIGFzIHBlcmNlbnRhZ2U/XG4gICAgayA9IG1heCgwLCB0YXUgLSBwYWRBbmdsZSAqIG4pIC8gaztcbiAgICBkeCA9IGsgPyBwYWRBbmdsZSA6IHRhdSAvIG47XG5cbiAgICAvLyBDb21wdXRlIHRoZSBzdGFydCBhbmQgZW5kIGFuZ2xlIGZvciBlYWNoIGdyb3VwIGFuZCBzdWJncm91cC5cbiAgICAvLyBOb3RlOiBPcGVyYSBoYXMgYSBidWcgcmVvcmRlcmluZyBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0aWVzIVxuICAgIHggPSAwLCBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB4MCA9IHgsIGogPSAtMTsgd2hpbGUgKCsraiA8IG4pIHtcbiAgICAgICAgdmFyIGRpID0gZ3JvdXBJbmRleFtpXSxcbiAgICAgICAgICAgIGRqID0gc3ViZ3JvdXBJbmRleFtkaV1bal0sXG4gICAgICAgICAgICB2ID0gbWF0cml4W2RpXVtkal0sXG4gICAgICAgICAgICBhMCA9IHgsXG4gICAgICAgICAgICBhMSA9IHggKz0gdiAqIGs7XG4gICAgICAgIHN1Ymdyb3Vwc1tkaiAqIG4gKyBkaV0gPSB7XG4gICAgICAgICAgaW5kZXg6IGRpLFxuICAgICAgICAgIHN1YmluZGV4OiBkaixcbiAgICAgICAgICBzdGFydEFuZ2xlOiBhMCxcbiAgICAgICAgICBlbmRBbmdsZTogYTEsXG4gICAgICAgICAgdmFsdWU6IHZcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGdyb3Vwc1tkaV0gPSB7XG4gICAgICAgIGluZGV4OiBkaSxcbiAgICAgICAgc3RhcnRBbmdsZTogeDAsXG4gICAgICAgIGVuZEFuZ2xlOiB4LFxuICAgICAgICB2YWx1ZTogZ3JvdXBTdW1zW2RpXVxuICAgICAgfTtcbiAgICAgIHggKz0gZHg7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2hvcmRzIGZvciBlYWNoIChub24tZW1wdHkpIHN1Ymdyb3VwLXN1Ymdyb3VwIGxpbmsuXG4gICAgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaiA9IGkgLSAxOyB3aGlsZSAoKytqIDwgbikge1xuICAgICAgICB2YXIgc291cmNlID0gc3ViZ3JvdXBzW2ogKiBuICsgaV0sXG4gICAgICAgICAgICB0YXJnZXQgPSBzdWJncm91cHNbaSAqIG4gKyBqXTtcbiAgICAgICAgaWYgKHNvdXJjZS52YWx1ZSB8fCB0YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICBjaG9yZHMucHVzaChzb3VyY2UudmFsdWUgPCB0YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgPyB7c291cmNlOiB0YXJnZXQsIHRhcmdldDogc291cmNlfVxuICAgICAgICAgICAgICA6IHtzb3VyY2U6IHNvdXJjZSwgdGFyZ2V0OiB0YXJnZXR9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3J0Q2hvcmRzID8gY2hvcmRzLnNvcnQoc29ydENob3JkcykgOiBjaG9yZHM7XG4gIH1cblxuICBjaG9yZC5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IG1heCgwLCBfKSwgY2hvcmQpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgY2hvcmQuc29ydEdyb3VwcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0R3JvdXBzID0gXywgY2hvcmQpIDogc29ydEdyb3VwcztcbiAgfTtcblxuICBjaG9yZC5zb3J0U3ViZ3JvdXBzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvcnRTdWJncm91cHMgPSBfLCBjaG9yZCkgOiBzb3J0U3ViZ3JvdXBzO1xuICB9O1xuXG4gIGNob3JkLnNvcnRDaG9yZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gc29ydENob3JkcyA9IG51bGwgOiAoc29ydENob3JkcyA9IGNvbXBhcmVWYWx1ZShfKSkuXyA9IF8sIGNob3JkKSA6IHNvcnRDaG9yZHMgJiYgc29ydENob3Jkcy5fO1xuICB9O1xuXG4gIHJldHVybiBjaG9yZDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGNob3JkfSBmcm9tIFwiLi9jaG9yZFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJpYmJvbn0gZnJvbSBcIi4vcmliYm9uXCI7XG4iLCJleHBvcnQgdmFyIGNvcyA9IE1hdGguY29zO1xuZXhwb3J0IHZhciBzaW4gPSBNYXRoLnNpbjtcbmV4cG9ydCB2YXIgcGkgPSBNYXRoLlBJO1xuZXhwb3J0IHZhciBoYWxmUGkgPSBwaSAvIDI7XG5leHBvcnQgdmFyIHRhdSA9IHBpICogMjtcbmV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG4iLCJpbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQge2NvcywgaGFsZlBpLCBzaW59IGZyb20gXCIuL21hdGhcIjtcbmltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcblxuZnVuY3Rpb24gZGVmYXVsdFNvdXJjZShkKSB7XG4gIHJldHVybiBkLnNvdXJjZTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRhcmdldChkKSB7XG4gIHJldHVybiBkLnRhcmdldDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFJhZGl1cyhkKSB7XG4gIHJldHVybiBkLnJhZGl1cztcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFN0YXJ0QW5nbGUoZCkge1xuICByZXR1cm4gZC5zdGFydEFuZ2xlO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RW5kQW5nbGUoZCkge1xuICByZXR1cm4gZC5lbmRBbmdsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzb3VyY2UgPSBkZWZhdWx0U291cmNlLFxuICAgICAgdGFyZ2V0ID0gZGVmYXVsdFRhcmdldCxcbiAgICAgIHJhZGl1cyA9IGRlZmF1bHRSYWRpdXMsXG4gICAgICBzdGFydEFuZ2xlID0gZGVmYXVsdFN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSA9IGRlZmF1bHRFbmRBbmdsZSxcbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHJpYmJvbigpIHtcbiAgICB2YXIgYnVmZmVyLFxuICAgICAgICBhcmd2ID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLFxuICAgICAgICBzID0gc291cmNlLmFwcGx5KHRoaXMsIGFyZ3YpLFxuICAgICAgICB0ID0gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3YpLFxuICAgICAgICBzciA9ICtyYWRpdXMuYXBwbHkodGhpcywgKGFyZ3ZbMF0gPSBzLCBhcmd2KSksXG4gICAgICAgIHNhMCA9IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndikgLSBoYWxmUGksXG4gICAgICAgIHNhMSA9IGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3YpIC0gaGFsZlBpLFxuICAgICAgICBzeDAgPSBzciAqIGNvcyhzYTApLFxuICAgICAgICBzeTAgPSBzciAqIHNpbihzYTApLFxuICAgICAgICB0ciA9ICtyYWRpdXMuYXBwbHkodGhpcywgKGFyZ3ZbMF0gPSB0LCBhcmd2KSksXG4gICAgICAgIHRhMCA9IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndikgLSBoYWxmUGksXG4gICAgICAgIHRhMSA9IGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3YpIC0gaGFsZlBpO1xuXG4gICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gYnVmZmVyID0gcGF0aCgpO1xuXG4gICAgY29udGV4dC5tb3ZlVG8oc3gwLCBzeTApO1xuICAgIGNvbnRleHQuYXJjKDAsIDAsIHNyLCBzYTAsIHNhMSk7XG4gICAgaWYgKHNhMCAhPT0gdGEwIHx8IHNhMSAhPT0gdGExKSB7IC8vIFRPRE8gc3IgIT09IHRyP1xuICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKDAsIDAsIHRyICogY29zKHRhMCksIHRyICogc2luKHRhMCkpO1xuICAgICAgY29udGV4dC5hcmMoMCwgMCwgdHIsIHRhMCwgdGExKTtcbiAgICB9XG4gICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKDAsIDAsIHN4MCwgc3kwKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICByaWJib24ucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCByaWJib24pIDogcmFkaXVzO1xuICB9O1xuXG4gIHJpYmJvbi5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcmliYm9uKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgcmliYm9uLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHJpYmJvbikgOiBlbmRBbmdsZTtcbiAgfTtcblxuICByaWJib24uc291cmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvdXJjZSA9IF8sIHJpYmJvbikgOiBzb3VyY2U7XG4gIH07XG5cbiAgcmliYm9uLnRhcmdldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXJnZXQgPSBfLCByaWJib24pIDogdGFyZ2V0O1xuICB9O1xuXG4gIHJpYmJvbi5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKChjb250ZXh0ID0gXyA9PSBudWxsID8gbnVsbCA6IF8pLCByaWJib24pIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gcmliYm9uO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWFwKSB7XG4gIHZhciBlbnRyaWVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBtYXApIGVudHJpZXMucHVzaCh7a2V5OiBrZXksIHZhbHVlOiBtYXBba2V5XX0pO1xuICByZXR1cm4gZW50cmllcztcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBuZXN0fSBmcm9tIFwiLi9uZXN0XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2V0fSBmcm9tIFwiLi9zZXRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXB9IGZyb20gXCIuL21hcFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGtleXN9IGZyb20gXCIuL2tleXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB2YWx1ZXN9IGZyb20gXCIuL3ZhbHVlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGVudHJpZXN9IGZyb20gXCIuL2VudHJpZXNcIjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gbWFwKSBrZXlzLnB1c2goa2V5KTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJleHBvcnQgdmFyIHByZWZpeCA9IFwiJFwiO1xuXG5mdW5jdGlvbiBNYXAoKSB7fVxuXG5NYXAucHJvdG90eXBlID0gbWFwLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IE1hcCxcbiAgaGFzOiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gKHByZWZpeCArIGtleSkgaW4gdGhpcztcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gdGhpc1twcmVmaXggKyBrZXldO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICB0aGlzW3ByZWZpeCArIGtleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBwcmVmaXggKyBrZXk7XG4gICAgcmV0dXJuIHByb3BlcnR5IGluIHRoaXMgJiYgZGVsZXRlIHRoaXNbcHJvcGVydHldO1xuICB9LFxuICBjbGVhcjogZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAga2V5czogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkga2V5cy5wdXNoKHByb3BlcnR5LnNsaWNlKDEpKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfSxcbiAgdmFsdWVzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIHZhbHVlcy5wdXNoKHRoaXNbcHJvcGVydHldKTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9LFxuICBlbnRyaWVzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBlbnRyaWVzLnB1c2goe2tleTogcHJvcGVydHkuc2xpY2UoMSksIHZhbHVlOiB0aGlzW3Byb3BlcnR5XX0pO1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9LFxuICBzaXplOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2l6ZSA9IDA7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpICsrc2l6ZTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfSxcbiAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGVhY2g6IGZ1bmN0aW9uKGYpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZih0aGlzW3Byb3BlcnR5XSwgcHJvcGVydHkuc2xpY2UoMSksIHRoaXMpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBtYXAob2JqZWN0LCBmKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwO1xuXG4gIC8vIENvcHkgY29uc3RydWN0b3IuXG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNYXApIG9iamVjdC5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsgbWFwLnNldChrZXksIHZhbHVlKTsgfSk7XG5cbiAgLy8gSW5kZXggYXJyYXkgYnkgbnVtZXJpYyBpbmRleCBvciBzcGVjaWZpZWQga2V5IGZ1bmN0aW9uLlxuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICB2YXIgaSA9IC0xLFxuICAgICAgICBuID0gb2JqZWN0Lmxlbmd0aCxcbiAgICAgICAgbztcblxuICAgIGlmIChmID09IG51bGwpIHdoaWxlICgrK2kgPCBuKSBtYXAuc2V0KGksIG9iamVjdFtpXSk7XG4gICAgZWxzZSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChmKG8gPSBvYmplY3RbaV0sIGksIG9iamVjdCksIG8pO1xuICB9XG5cbiAgLy8gQ29udmVydCBvYmplY3QgdG8gbWFwLlxuICBlbHNlIGlmIChvYmplY3QpIGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1hcC5zZXQoa2V5LCBvYmplY3Rba2V5XSk7XG5cbiAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwO1xuIiwiaW1wb3J0IG1hcCBmcm9tIFwiLi9tYXBcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBrZXlzID0gW10sXG4gICAgICBzb3J0S2V5cyA9IFtdLFxuICAgICAgc29ydFZhbHVlcyxcbiAgICAgIHJvbGx1cCxcbiAgICAgIG5lc3Q7XG5cbiAgZnVuY3Rpb24gYXBwbHkoYXJyYXksIGRlcHRoLCBjcmVhdGVSZXN1bHQsIHNldFJlc3VsdCkge1xuICAgIGlmIChkZXB0aCA+PSBrZXlzLmxlbmd0aCkge1xuICAgICAgaWYgKHNvcnRWYWx1ZXMgIT0gbnVsbCkgYXJyYXkuc29ydChzb3J0VmFsdWVzKTtcbiAgICAgIHJldHVybiByb2xsdXAgIT0gbnVsbCA/IHJvbGx1cChhcnJheSkgOiBhcnJheTtcbiAgICB9XG5cbiAgICB2YXIgaSA9IC0xLFxuICAgICAgICBuID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBrZXkgPSBrZXlzW2RlcHRoKytdLFxuICAgICAgICBrZXlWYWx1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlc0J5S2V5ID0gbWFwKCksXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlUmVzdWx0KCk7XG5cbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHZhbHVlcyA9IHZhbHVlc0J5S2V5LmdldChrZXlWYWx1ZSA9IGtleSh2YWx1ZSA9IGFycmF5W2ldKSArIFwiXCIpKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlc0J5S2V5LnNldChrZXlWYWx1ZSwgW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWVzQnlLZXkuZWFjaChmdW5jdGlvbih2YWx1ZXMsIGtleSkge1xuICAgICAgc2V0UmVzdWx0KHJlc3VsdCwga2V5LCBhcHBseSh2YWx1ZXMsIGRlcHRoLCBjcmVhdGVSZXN1bHQsIHNldFJlc3VsdCkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVudHJpZXMobWFwLCBkZXB0aCkge1xuICAgIGlmICgrK2RlcHRoID4ga2V5cy5sZW5ndGgpIHJldHVybiBtYXA7XG4gICAgdmFyIGFycmF5LCBzb3J0S2V5ID0gc29ydEtleXNbZGVwdGggLSAxXTtcbiAgICBpZiAocm9sbHVwICE9IG51bGwgJiYgZGVwdGggPj0ga2V5cy5sZW5ndGgpIGFycmF5ID0gbWFwLmVudHJpZXMoKTtcbiAgICBlbHNlIGFycmF5ID0gW10sIG1hcC5lYWNoKGZ1bmN0aW9uKHYsIGspIHsgYXJyYXkucHVzaCh7a2V5OiBrLCB2YWx1ZXM6IGVudHJpZXModiwgZGVwdGgpfSk7IH0pO1xuICAgIHJldHVybiBzb3J0S2V5ICE9IG51bGwgPyBhcnJheS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIHNvcnRLZXkoYS5rZXksIGIua2V5KTsgfSkgOiBhcnJheTtcbiAgfVxuXG4gIHJldHVybiBuZXN0ID0ge1xuICAgIG9iamVjdDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVPYmplY3QsIHNldE9iamVjdCk7IH0sXG4gICAgbWFwOiBmdW5jdGlvbihhcnJheSkgeyByZXR1cm4gYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKTsgfSxcbiAgICBlbnRyaWVzOiBmdW5jdGlvbihhcnJheSkgeyByZXR1cm4gZW50cmllcyhhcHBseShhcnJheSwgMCwgY3JlYXRlTWFwLCBzZXRNYXApLCAwKTsgfSxcbiAgICBrZXk6IGZ1bmN0aW9uKGQpIHsga2V5cy5wdXNoKGQpOyByZXR1cm4gbmVzdDsgfSxcbiAgICBzb3J0S2V5czogZnVuY3Rpb24ob3JkZXIpIHsgc29ydEtleXNba2V5cy5sZW5ndGggLSAxXSA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICBzb3J0VmFsdWVzOiBmdW5jdGlvbihvcmRlcikgeyBzb3J0VmFsdWVzID0gb3JkZXI7IHJldHVybiBuZXN0OyB9LFxuICAgIHJvbGx1cDogZnVuY3Rpb24oZikgeyByb2xsdXAgPSBmOyByZXR1cm4gbmVzdDsgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3QoKSB7XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gc2V0T2JqZWN0KG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNYXAoKSB7XG4gIHJldHVybiBtYXAoKTtcbn1cblxuZnVuY3Rpb24gc2V0TWFwKG1hcCwga2V5LCB2YWx1ZSkge1xuICBtYXAuc2V0KGtleSwgdmFsdWUpO1xufVxuIiwiaW1wb3J0IHtkZWZhdWx0IGFzIG1hcCwgcHJlZml4fSBmcm9tIFwiLi9tYXBcIjtcblxuZnVuY3Rpb24gU2V0KCkge31cblxudmFyIHByb3RvID0gbWFwLnByb3RvdHlwZTtcblxuU2V0LnByb3RvdHlwZSA9IHNldC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZXQsXG4gIGhhczogcHJvdG8uaGFzLFxuICBhZGQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFsdWUgKz0gXCJcIjtcbiAgICB0aGlzW3ByZWZpeCArIHZhbHVlXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmU6IHByb3RvLnJlbW92ZSxcbiAgY2xlYXI6IHByb3RvLmNsZWFyLFxuICB2YWx1ZXM6IHByb3RvLmtleXMsXG4gIHNpemU6IHByb3RvLnNpemUsXG4gIGVtcHR5OiBwcm90by5lbXB0eSxcbiAgZWFjaDogcHJvdG8uZWFjaFxufTtcblxuZnVuY3Rpb24gc2V0KG9iamVjdCwgZikge1xuICB2YXIgc2V0ID0gbmV3IFNldDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2V0KSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSkgeyBzZXQuYWRkKHZhbHVlKTsgfSk7XG5cbiAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgaXTigJlzIGFuIGFycmF5LlxuICBlbHNlIGlmIChvYmplY3QpIHtcbiAgICB2YXIgaSA9IC0xLCBuID0gb2JqZWN0Lmxlbmd0aDtcbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgc2V0LmFkZChvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIHNldC5hZGQoZihvYmplY3RbaV0sIGksIG9iamVjdCkpO1xuICB9XG5cbiAgcmV0dXJuIHNldDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWFwKSB7XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG1hcCkgdmFsdWVzLnB1c2gobWFwW2tleV0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4MyA9IC9eIyhbMC05YS1mXXszfSkkLyxcbiAgICByZUhleDYgPSAvXiMoWzAtOWEtZl17Nn0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlSSwgcmVJLCByZUldICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlUCwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmhleCgpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmdiKCkgKyBcIlwiO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4My5leGVjKGZvcm1hdCkpID8gKG0gPSBwYXJzZUludChtWzFdLCAxNiksIG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHgwZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpKSAvLyAjZjAwXG4gICAgICA6IChtID0gcmVIZXg2LmV4ZWMoZm9ybWF0KSkgPyByZ2JuKHBhcnNlSW50KG1bMV0sIDE2KSkgLy8gI2ZmMDAwMFxuICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxuICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXG4gICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcbiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcbiAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSlcbiAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXG4gICAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYm4obikge1xuICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xufVxuXG5mdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcbiAgaWYgKGEgPD0gMCkgciA9IGcgPSBiID0gTmFOO1xuICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBSZ2I7XG4gIG8gPSBvLnJnYigpO1xuICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICB0aGlzLnIgPSArcjtcbiAgdGhpcy5nID0gK2c7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnIgJiYgdGhpcy5yIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5nICYmIHRoaXMuZyA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMuYiAmJiB0aGlzLmIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLnIpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmcpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH1cbn0pKTtcblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2IsIGRhcmtlciwgYnJpZ2h0ZXJ9IGZyb20gXCIuL2NvbG9yXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGhcIjtcblxudmFyIEEgPSAtMC4xNDg2MSxcbiAgICBCID0gKzEuNzgyNzcsXG4gICAgQyA9IC0wLjI5MjI3LFxuICAgIEQgPSAtMC45MDY0OSxcbiAgICBFID0gKzEuOTcyOTQsXG4gICAgRUQgPSBFICogRCxcbiAgICBFQiA9IEUgKiBCLFxuICAgIEJDX0RBID0gQiAqIEMgLSBEICogQTtcblxuZnVuY3Rpb24gY3ViZWhlbGl4Q29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgQ3ViZWhlbGl4KSByZXR1cm4gbmV3IEN1YmVoZWxpeChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBsID0gKEJDX0RBICogYiArIEVEICogciAtIEVCICogZykgLyAoQkNfREEgKyBFRCAtIEVCKSxcbiAgICAgIGJsID0gYiAtIGwsXG4gICAgICBrID0gKEUgKiAoZyAtIGwpIC0gQyAqIGJsKSAvIEQsXG4gICAgICBzID0gTWF0aC5zcXJ0KGsgKiBrICsgYmwgKiBibCkgLyAoRSAqIGwgKiAoMSAtIGwpKSwgLy8gTmFOIGlmIGw9MCBvciBsPTFcbiAgICAgIGggPSBzID8gTWF0aC5hdGFuMihrLCBibCkgKiByYWQyZGVnIC0gMTIwIDogTmFOO1xuICByZXR1cm4gbmV3IEN1YmVoZWxpeChoIDwgMCA/IGggKyAzNjAgOiBoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGN1YmVoZWxpeENvbnZlcnQoaCkgOiBuZXcgQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoQ3ViZWhlbGl4LCBjdWJlaGVsaXgsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSBpc05hTih0aGlzLmgpID8gMCA6ICh0aGlzLmggKyAxMjApICogZGVnMnJhZCxcbiAgICAgICAgbCA9ICt0aGlzLmwsXG4gICAgICAgIGEgPSBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyAqIGwgKiAoMSAtIGwpLFxuICAgICAgICBjb3NoID0gTWF0aC5jb3MoaCksXG4gICAgICAgIHNpbmggPSBNYXRoLnNpbihoKTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIDI1NSAqIChsICsgYSAqIChBICogY29zaCArIEIgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoQyAqIGNvc2ggKyBEICogc2luaCkpLFxuICAgICAgMjU1ICogKGwgKyBhICogKEUgKiBjb3NoKSksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjb2xvciwgcmdiLCBoc2x9IGZyb20gXCIuL2NvbG9yXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbGFiLCBoY2wsIGxjaCwgZ3JheX0gZnJvbSBcIi4vbGFiXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3ViZWhlbGl4fSBmcm9tIFwiLi9jdWJlaGVsaXhcIjtcbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZVwiO1xuaW1wb3J0IHtDb2xvciwgcmdiQ29udmVydCwgUmdifSBmcm9tIFwiLi9jb2xvclwiO1xuaW1wb3J0IHtkZWcycmFkLCByYWQyZGVnfSBmcm9tIFwiLi9tYXRoXCI7XG5cbi8vIGh0dHBzOi8vYmV0YS5vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxudmFyIEsgPSAxOCxcbiAgICBYbiA9IDAuOTY0MjIsXG4gICAgWW4gPSAxLFxuICAgIFpuID0gMC44MjUyMSxcbiAgICB0MCA9IDQgLyAyOSxcbiAgICB0MSA9IDYgLyAyOSxcbiAgICB0MiA9IDMgKiB0MSAqIHQxLFxuICAgIHQzID0gdDEgKiB0MSAqIHQxO1xuXG5mdW5jdGlvbiBsYWJDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBMYWIpIHJldHVybiBuZXcgTGFiKG8ubCwgby5hLCBvLmIsIG8ub3BhY2l0eSk7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSB7XG4gICAgaWYgKGlzTmFOKG8uaCkpIHJldHVybiBuZXcgTGFiKG8ubCwgMCwgMCwgby5vcGFjaXR5KTtcbiAgICB2YXIgaCA9IG8uaCAqIGRlZzJyYWQ7XG4gICAgcmV0dXJuIG5ldyBMYWIoby5sLCBNYXRoLmNvcyhoKSAqIG8uYywgTWF0aC5zaW4oaCkgKiBvLmMsIG8ub3BhY2l0eSk7XG4gIH1cbiAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICB2YXIgciA9IHJnYjJscmdiKG8uciksXG4gICAgICBnID0gcmdiMmxyZ2Ioby5nKSxcbiAgICAgIGIgPSByZ2IybHJnYihvLmIpLFxuICAgICAgeSA9IHh5ejJsYWIoKDAuMjIyNTA0NSAqIHIgKyAwLjcxNjg3ODYgKiBnICsgMC4wNjA2MTY5ICogYikgLyBZbiksIHgsIHo7XG4gIGlmIChyID09PSBnICYmIGcgPT09IGIpIHggPSB6ID0geTsgZWxzZSB7XG4gICAgeCA9IHh5ejJsYWIoKDAuNDM2MDc0NyAqIHIgKyAwLjM4NTA2NDkgKiBnICsgMC4xNDMwODA0ICogYikgLyBYbik7XG4gICAgeiA9IHh5ejJsYWIoKDAuMDEzOTMyMiAqIHIgKyAwLjA5NzEwNDUgKiBnICsgMC43MTQxNzMzICogYikgLyBabik7XG4gIH1cbiAgcmV0dXJuIG5ldyBMYWIoMTE2ICogeSAtIDE2LCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JheShsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBuZXcgTGFiKGwsIDAsIDAsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBsYWJDb252ZXJ0KGwpIDogbmV3IExhYihsLCBhLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeSA9ICh0aGlzLmwgKyAxNikgLyAxMTYsXG4gICAgICAgIHggPSBpc05hTih0aGlzLmEpID8geSA6IHkgKyB0aGlzLmEgLyA1MDAsXG4gICAgICAgIHogPSBpc05hTih0aGlzLmIpID8geSA6IHkgLSB0aGlzLmIgLyAyMDA7XG4gICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHogPSBabiAqIGxhYjJ4eXooeik7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBscmdiMnJnYiggMy4xMzM4NTYxICogeCAtIDEuNjE2ODY2NyAqIHkgLSAwLjQ5MDYxNDYgKiB6KSxcbiAgICAgIGxyZ2IycmdiKC0wLjk3ODc2ODQgKiB4ICsgMS45MTYxNDE1ICogeSArIDAuMDMzNDU0MCAqIHopLFxuICAgICAgbHJnYjJyZ2IoIDAuMDcxOTQ1MyAqIHggLSAwLjIyODk5MTQgKiB5ICsgMS40MDUyNDI3ICogeiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIHh5ejJsYWIodCkge1xuICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoodCkge1xuICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTtcbn1cblxuZnVuY3Rpb24gbHJnYjJyZ2IoeCkge1xuICByZXR1cm4gMjU1ICogKHggPD0gMC4wMDMxMzA4ID8gMTIuOTIgKiB4IDogMS4wNTUgKiBNYXRoLnBvdyh4LCAxIC8gMi40KSAtIDAuMDU1KTtcbn1cblxuZnVuY3Rpb24gcmdiMmxyZ2IoeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIGlmIChvLmEgPT09IDAgJiYgby5iID09PSAwKSByZXR1cm4gbmV3IEhjbChOYU4sIDAsIG8ubCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBNYXRoLmF0YW4yKG8uYiwgby5hKSAqIHJhZDJkZWc7XG4gIHJldHVybiBuZXcgSGNsKGggPCAwID8gaCArIDM2MCA6IGgsIE1hdGguc3FydChvLmEgKiBvLmEgKyBvLmIgKiBvLmIpLCBvLmwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsY2gobCwgYywgaCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQobCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaGNsQ29udmVydChoKSA6IG5ldyBIY2woaCwgYywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMuYyA9ICtjO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCArIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGxhYkNvbnZlcnQodGhpcykucmdiKCk7XG4gIH1cbn0pKTtcbiIsImV4cG9ydCB2YXIgZGVnMnJhZCA9IE1hdGguUEkgLyAxODA7XG5leHBvcnQgdmFyIHJhZDJkZWcgPSAxODAgLyBNYXRoLlBJO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmluZykge1xuICB2YXIgaSA9IDAsIG4gPSByaW5nLmxlbmd0aCwgYXJlYSA9IHJpbmdbbiAtIDFdWzFdICogcmluZ1swXVswXSAtIHJpbmdbbiAtIDFdWzBdICogcmluZ1swXVsxXTtcbiAgd2hpbGUgKCsraSA8IG4pIGFyZWEgKz0gcmluZ1tpIC0gMV1bMV0gKiByaW5nW2ldWzBdIC0gcmluZ1tpIC0gMV1bMF0gKiByaW5nW2ldWzFdO1xuICByZXR1cm4gYXJlYTtcbn1cbiIsInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG4iLCIvLyBUT0RPIE9wdGltaXplIGVkZ2UgY2FzZXMuXG4vLyBUT0RPIE9wdGltaXplIGluZGV4IGNhbGN1bGF0aW9uLlxuLy8gVE9ETyBPcHRpbWl6ZSBhcmd1bWVudHMuXG5leHBvcnQgZnVuY3Rpb24gYmx1clgoc291cmNlLCB0YXJnZXQsIHIpIHtcbiAgdmFyIG4gPSBzb3VyY2Uud2lkdGgsXG4gICAgICBtID0gc291cmNlLmhlaWdodCxcbiAgICAgIHcgPSAociA8PCAxKSArIDE7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIHNyID0gMDsgaSA8IG4gKyByOyArK2kpIHtcbiAgICAgIGlmIChpIDwgbikge1xuICAgICAgICBzciArPSBzb3VyY2UuZGF0YVtpICsgaiAqIG5dO1xuICAgICAgfVxuICAgICAgaWYgKGkgPj0gcikge1xuICAgICAgICBpZiAoaSA+PSB3KSB7XG4gICAgICAgICAgc3IgLT0gc291cmNlLmRhdGFbaSAtIHcgKyBqICogbl07XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0LmRhdGFbaSAtIHIgKyBqICogbl0gPSBzciAvIE1hdGgubWluKGkgKyAxLCBuIC0gMSArIHcgLSBpLCB3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETyBPcHRpbWl6ZSBlZGdlIGNhc2VzLlxuLy8gVE9ETyBPcHRpbWl6ZSBpbmRleCBjYWxjdWxhdGlvbi5cbi8vIFRPRE8gT3B0aW1pemUgYXJndW1lbnRzLlxuZXhwb3J0IGZ1bmN0aW9uIGJsdXJZKHNvdXJjZSwgdGFyZ2V0LCByKSB7XG4gIHZhciBuID0gc291cmNlLndpZHRoLFxuICAgICAgbSA9IHNvdXJjZS5oZWlnaHQsXG4gICAgICB3ID0gKHIgPDwgMSkgKyAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGZvciAodmFyIGogPSAwLCBzciA9IDA7IGogPCBtICsgcjsgKytqKSB7XG4gICAgICBpZiAoaiA8IG0pIHtcbiAgICAgICAgc3IgKz0gc291cmNlLmRhdGFbaSArIGogKiBuXTtcbiAgICAgIH1cbiAgICAgIGlmIChqID49IHIpIHtcbiAgICAgICAgaWYgKGogPj0gdykge1xuICAgICAgICAgIHNyIC09IHNvdXJjZS5kYXRhW2kgKyAoaiAtIHcpICogbl07XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0LmRhdGFbaSArIChqIC0gcikgKiBuXSA9IHNyIC8gTWF0aC5taW4oaiArIDEsIG0gLSAxICsgdyAtIGosIHcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyaW5nLCBob2xlKSB7XG4gIHZhciBpID0gLTEsIG4gPSBob2xlLmxlbmd0aCwgYztcbiAgd2hpbGUgKCsraSA8IG4pIGlmIChjID0gcmluZ0NvbnRhaW5zKHJpbmcsIGhvbGVbaV0pKSByZXR1cm4gYztcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHJpbmdDb250YWlucyhyaW5nLCBwb2ludCkge1xuICB2YXIgeCA9IHBvaW50WzBdLCB5ID0gcG9pbnRbMV0sIGNvbnRhaW5zID0gLTE7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gcmluZy5sZW5ndGgsIGogPSBuIC0gMTsgaSA8IG47IGogPSBpKyspIHtcbiAgICB2YXIgcGkgPSByaW5nW2ldLCB4aSA9IHBpWzBdLCB5aSA9IHBpWzFdLCBwaiA9IHJpbmdbal0sIHhqID0gcGpbMF0sIHlqID0gcGpbMV07XG4gICAgaWYgKHNlZ21lbnRDb250YWlucyhwaSwgcGosIHBvaW50KSkgcmV0dXJuIDA7XG4gICAgaWYgKCgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICgoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpKSkgY29udGFpbnMgPSAtY29udGFpbnM7XG4gIH1cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5mdW5jdGlvbiBzZWdtZW50Q29udGFpbnMoYSwgYiwgYykge1xuICB2YXIgaTsgcmV0dXJuIGNvbGxpbmVhcihhLCBiLCBjKSAmJiB3aXRoaW4oYVtpID0gKyhhWzBdID09PSBiWzBdKV0sIGNbaV0sIGJbaV0pO1xufVxuXG5mdW5jdGlvbiBjb2xsaW5lYXIoYSwgYiwgYykge1xuICByZXR1cm4gKGJbMF0gLSBhWzBdKSAqIChjWzFdIC0gYVsxXSkgPT09IChjWzBdIC0gYVswXSkgKiAoYlsxXSAtIGFbMV0pO1xufVxuXG5mdW5jdGlvbiB3aXRoaW4ocCwgcSwgcikge1xuICByZXR1cm4gcCA8PSBxICYmIHEgPD0gciB8fCByIDw9IHEgJiYgcSA8PSBwO1xufVxuIiwiaW1wb3J0IHtleHRlbnQsIHRocmVzaG9sZFN0dXJnZXMsIHRpY2tTdGVwLCByYW5nZX0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmdcIjtcbmltcG9ydCBhcmVhIGZyb20gXCIuL2FyZWFcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wXCI7XG5cbnZhciBjYXNlcyA9IFtcbiAgW10sXG4gIFtbWzEuMCwgMS41XSwgWzAuNSwgMS4wXV1dLFxuICBbW1sxLjUsIDEuMF0sIFsxLjAsIDEuNV1dXSxcbiAgW1tbMS41LCAxLjBdLCBbMC41LCAxLjBdXV0sXG4gIFtbWzEuMCwgMC41XSwgWzEuNSwgMS4wXV1dLFxuICBbW1sxLjAsIDEuNV0sIFswLjUsIDEuMF1dLCBbWzEuMCwgMC41XSwgWzEuNSwgMS4wXV1dLFxuICBbW1sxLjAsIDAuNV0sIFsxLjAsIDEuNV1dXSxcbiAgW1tbMS4wLCAwLjVdLCBbMC41LCAxLjBdXV0sXG4gIFtbWzAuNSwgMS4wXSwgWzEuMCwgMC41XV1dLFxuICBbW1sxLjAsIDEuNV0sIFsxLjAsIDAuNV1dXSxcbiAgW1tbMC41LCAxLjBdLCBbMS4wLCAwLjVdXSwgW1sxLjUsIDEuMF0sIFsxLjAsIDEuNV1dXSxcbiAgW1tbMS41LCAxLjBdLCBbMS4wLCAwLjVdXV0sXG4gIFtbWzAuNSwgMS4wXSwgWzEuNSwgMS4wXV1dLFxuICBbW1sxLjAsIDEuNV0sIFsxLjUsIDEuMF1dXSxcbiAgW1tbMC41LCAxLjBdLCBbMS4wLCAxLjVdXV0sXG4gIFtdXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGR4ID0gMSxcbiAgICAgIGR5ID0gMSxcbiAgICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZFN0dXJnZXMsXG4gICAgICBzbW9vdGggPSBzbW9vdGhMaW5lYXI7XG5cbiAgZnVuY3Rpb24gY29udG91cnModmFsdWVzKSB7XG4gICAgdmFyIHR6ID0gdGhyZXNob2xkKHZhbHVlcyk7XG5cbiAgICAvLyBDb252ZXJ0IG51bWJlciBvZiB0aHJlc2hvbGRzIGludG8gdW5pZm9ybSB0aHJlc2hvbGRzLlxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eikpIHtcbiAgICAgIHZhciBkb21haW4gPSBleHRlbnQodmFsdWVzKSwgc3RhcnQgPSBkb21haW5bMF0sIHN0b3AgPSBkb21haW5bMV07XG4gICAgICB0eiA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCB0eik7XG4gICAgICB0eiA9IHJhbmdlKE1hdGguZmxvb3Ioc3RhcnQgLyB0eikgKiB0eiwgTWF0aC5mbG9vcihzdG9wIC8gdHopICogdHosIHR6KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHogPSB0ei5zbGljZSgpLnNvcnQoYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHoubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gY29udG91cih2YWx1ZXMsIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFjY3VtdWxhdGUsIHNtb290aCBjb250b3VyIHJpbmdzLCBhc3NpZ24gaG9sZXMgdG8gZXh0ZXJpb3IgcmluZ3MuXG4gIC8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9tYm9zdG9jay9zaGFwZWZpbGUvYmxvYi92MC42LjIvc2hwL3BvbHlnb24uanNcbiAgZnVuY3Rpb24gY29udG91cih2YWx1ZXMsIHZhbHVlKSB7XG4gICAgdmFyIHBvbHlnb25zID0gW10sXG4gICAgICAgIGhvbGVzID0gW107XG5cbiAgICBpc29yaW5ncyh2YWx1ZXMsIHZhbHVlLCBmdW5jdGlvbihyaW5nKSB7XG4gICAgICBzbW9vdGgocmluZywgdmFsdWVzLCB2YWx1ZSk7XG4gICAgICBpZiAoYXJlYShyaW5nKSA+IDApIHBvbHlnb25zLnB1c2goW3JpbmddKTtcbiAgICAgIGVsc2UgaG9sZXMucHVzaChyaW5nKTtcbiAgICB9KTtcblxuICAgIGhvbGVzLmZvckVhY2goZnVuY3Rpb24oaG9sZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBwb2x5Z29ucy5sZW5ndGgsIHBvbHlnb247IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKGNvbnRhaW5zKChwb2x5Z29uID0gcG9seWdvbnNbaV0pWzBdLCBob2xlKSAhPT0gLTEpIHtcbiAgICAgICAgICBwb2x5Z29uLnB1c2goaG9sZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJNdWx0aVBvbHlnb25cIixcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGNvb3JkaW5hdGVzOiBwb2x5Z29uc1xuICAgIH07XG4gIH1cblxuICAvLyBNYXJjaGluZyBzcXVhcmVzIHdpdGggaXNvbGluZXMgc3RpdGNoZWQgaW50byByaW5ncy5cbiAgLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3RvcG9qc29uL3RvcG9qc29uLWNsaWVudC9ibG9iL3YzLjAuMC9zcmMvc3RpdGNoLmpzXG4gIGZ1bmN0aW9uIGlzb3JpbmdzKHZhbHVlcywgdmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZyYWdtZW50QnlTdGFydCA9IG5ldyBBcnJheSxcbiAgICAgICAgZnJhZ21lbnRCeUVuZCA9IG5ldyBBcnJheSxcbiAgICAgICAgeCwgeSwgdDAsIHQxLCB0MiwgdDM7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHRoZSBmaXJzdCByb3cgKHkgPSAtMSwgdDIgPSB0MyA9IDApLlxuICAgIHggPSB5ID0gLTE7XG4gICAgdDEgPSB2YWx1ZXNbMF0gPj0gdmFsdWU7XG4gICAgY2FzZXNbdDEgPDwgMV0uZm9yRWFjaChzdGl0Y2gpO1xuICAgIHdoaWxlICgrK3ggPCBkeCAtIDEpIHtcbiAgICAgIHQwID0gdDEsIHQxID0gdmFsdWVzW3ggKyAxXSA+PSB2YWx1ZTtcbiAgICAgIGNhc2VzW3QwIHwgdDEgPDwgMV0uZm9yRWFjaChzdGl0Y2gpO1xuICAgIH1cbiAgICBjYXNlc1t0MSA8PCAwXS5mb3JFYWNoKHN0aXRjaCk7XG5cbiAgICAvLyBHZW5lcmFsIGNhc2UgZm9yIHRoZSBpbnRlcm1lZGlhdGUgcm93cy5cbiAgICB3aGlsZSAoKyt5IDwgZHkgLSAxKSB7XG4gICAgICB4ID0gLTE7XG4gICAgICB0MSA9IHZhbHVlc1t5ICogZHggKyBkeF0gPj0gdmFsdWU7XG4gICAgICB0MiA9IHZhbHVlc1t5ICogZHhdID49IHZhbHVlO1xuICAgICAgY2FzZXNbdDEgPDwgMSB8IHQyIDw8IDJdLmZvckVhY2goc3RpdGNoKTtcbiAgICAgIHdoaWxlICgrK3ggPCBkeCAtIDEpIHtcbiAgICAgICAgdDAgPSB0MSwgdDEgPSB2YWx1ZXNbeSAqIGR4ICsgZHggKyB4ICsgMV0gPj0gdmFsdWU7XG4gICAgICAgIHQzID0gdDIsIHQyID0gdmFsdWVzW3kgKiBkeCArIHggKyAxXSA+PSB2YWx1ZTtcbiAgICAgICAgY2FzZXNbdDAgfCB0MSA8PCAxIHwgdDIgPDwgMiB8IHQzIDw8IDNdLmZvckVhY2goc3RpdGNoKTtcbiAgICAgIH1cbiAgICAgIGNhc2VzW3QxIHwgdDIgPDwgM10uZm9yRWFjaChzdGl0Y2gpO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdGhlIGxhc3Qgcm93ICh5ID0gZHkgLSAxLCB0MCA9IHQxID0gMCkuXG4gICAgeCA9IC0xO1xuICAgIHQyID0gdmFsdWVzW3kgKiBkeF0gPj0gdmFsdWU7XG4gICAgY2FzZXNbdDIgPDwgMl0uZm9yRWFjaChzdGl0Y2gpO1xuICAgIHdoaWxlICgrK3ggPCBkeCAtIDEpIHtcbiAgICAgIHQzID0gdDIsIHQyID0gdmFsdWVzW3kgKiBkeCArIHggKyAxXSA+PSB2YWx1ZTtcbiAgICAgIGNhc2VzW3QyIDw8IDIgfCB0MyA8PCAzXS5mb3JFYWNoKHN0aXRjaCk7XG4gICAgfVxuICAgIGNhc2VzW3QyIDw8IDNdLmZvckVhY2goc3RpdGNoKTtcblxuICAgIGZ1bmN0aW9uIHN0aXRjaChsaW5lKSB7XG4gICAgICB2YXIgc3RhcnQgPSBbbGluZVswXVswXSArIHgsIGxpbmVbMF1bMV0gKyB5XSxcbiAgICAgICAgICBlbmQgPSBbbGluZVsxXVswXSArIHgsIGxpbmVbMV1bMV0gKyB5XSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gaW5kZXgoc3RhcnQpLFxuICAgICAgICAgIGVuZEluZGV4ID0gaW5kZXgoZW5kKSxcbiAgICAgICAgICBmLCBnO1xuICAgICAgaWYgKGYgPSBmcmFnbWVudEJ5RW5kW3N0YXJ0SW5kZXhdKSB7XG4gICAgICAgIGlmIChnID0gZnJhZ21lbnRCeVN0YXJ0W2VuZEluZGV4XSkge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5RW5kW2YuZW5kXTtcbiAgICAgICAgICBkZWxldGUgZnJhZ21lbnRCeVN0YXJ0W2cuc3RhcnRdO1xuICAgICAgICAgIGlmIChmID09PSBnKSB7XG4gICAgICAgICAgICBmLnJpbmcucHVzaChlbmQpO1xuICAgICAgICAgICAgY2FsbGJhY2soZi5yaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2Yuc3RhcnRdID0gZnJhZ21lbnRCeUVuZFtnLmVuZF0gPSB7c3RhcnQ6IGYuc3RhcnQsIGVuZDogZy5lbmQsIHJpbmc6IGYucmluZy5jb25jYXQoZy5yaW5nKX07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5RW5kW2YuZW5kXTtcbiAgICAgICAgICBmLnJpbmcucHVzaChlbmQpO1xuICAgICAgICAgIGZyYWdtZW50QnlFbmRbZi5lbmQgPSBlbmRJbmRleF0gPSBmO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGYgPSBmcmFnbWVudEJ5U3RhcnRbZW5kSW5kZXhdKSB7XG4gICAgICAgIGlmIChnID0gZnJhZ21lbnRCeUVuZFtzdGFydEluZGV4XSkge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydF07XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlFbmRbZy5lbmRdO1xuICAgICAgICAgIGlmIChmID09PSBnKSB7XG4gICAgICAgICAgICBmLnJpbmcucHVzaChlbmQpO1xuICAgICAgICAgICAgY2FsbGJhY2soZi5yaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2cuc3RhcnRdID0gZnJhZ21lbnRCeUVuZFtmLmVuZF0gPSB7c3RhcnQ6IGcuc3RhcnQsIGVuZDogZi5lbmQsIHJpbmc6IGcucmluZy5jb25jYXQoZi5yaW5nKX07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydF07XG4gICAgICAgICAgZi5yaW5nLnVuc2hpZnQoc3RhcnQpO1xuICAgICAgICAgIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0ID0gc3RhcnRJbmRleF0gPSBmO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFnbWVudEJ5U3RhcnRbc3RhcnRJbmRleF0gPSBmcmFnbWVudEJ5RW5kW2VuZEluZGV4XSA9IHtzdGFydDogc3RhcnRJbmRleCwgZW5kOiBlbmRJbmRleCwgcmluZzogW3N0YXJ0LCBlbmRdfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbmRleChwb2ludCkge1xuICAgIHJldHVybiBwb2ludFswXSAqIDIgKyBwb2ludFsxXSAqIChkeCArIDEpICogNDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNtb290aExpbmVhcihyaW5nLCB2YWx1ZXMsIHZhbHVlKSB7XG4gICAgcmluZy5mb3JFYWNoKGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgICB2YXIgeCA9IHBvaW50WzBdLFxuICAgICAgICAgIHkgPSBwb2ludFsxXSxcbiAgICAgICAgICB4dCA9IHggfCAwLFxuICAgICAgICAgIHl0ID0geSB8IDAsXG4gICAgICAgICAgdjAsXG4gICAgICAgICAgdjEgPSB2YWx1ZXNbeXQgKiBkeCArIHh0XTtcbiAgICAgIGlmICh4ID4gMCAmJiB4IDwgZHggJiYgeHQgPT09IHgpIHtcbiAgICAgICAgdjAgPSB2YWx1ZXNbeXQgKiBkeCArIHh0IC0gMV07XG4gICAgICAgIHBvaW50WzBdID0geCArICh2YWx1ZSAtIHYwKSAvICh2MSAtIHYwKSAtIDAuNTtcbiAgICAgIH1cbiAgICAgIGlmICh5ID4gMCAmJiB5IDwgZHkgJiYgeXQgPT09IHkpIHtcbiAgICAgICAgdjAgPSB2YWx1ZXNbKHl0IC0gMSkgKiBkeCArIHh0XTtcbiAgICAgICAgcG9pbnRbMV0gPSB5ICsgKHZhbHVlIC0gdjApIC8gKHYxIC0gdjApIC0gMC41O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29udG91cnMuY29udG91ciA9IGNvbnRvdXI7XG5cbiAgY29udG91cnMuc2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBbZHgsIGR5XTtcbiAgICB2YXIgXzAgPSBNYXRoLmNlaWwoX1swXSksIF8xID0gTWF0aC5jZWlsKF9bMV0pO1xuICAgIGlmICghKF8wID4gMCkgfHwgIShfMSA+IDApKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpemVcIik7XG4gICAgcmV0dXJuIGR4ID0gXzAsIGR5ID0gXzEsIGNvbnRvdXJzO1xuICB9O1xuXG4gIGNvbnRvdXJzLnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgY29udG91cnMpIDogdGhyZXNob2xkO1xuICB9O1xuXG4gIGNvbnRvdXJzLnNtb290aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzbW9vdGggPSBfID8gc21vb3RoTGluZWFyIDogbm9vcCwgY29udG91cnMpIDogc21vb3RoID09PSBzbW9vdGhMaW5lYXI7XG4gIH07XG5cbiAgcmV0dXJuIGNvbnRvdXJzO1xufVxuIiwiaW1wb3J0IHttYXgsIHJhbmdlLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtibHVyWCwgYmx1cll9IGZyb20gXCIuL2JsdXJcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGNvbnRvdXJzIGZyb20gXCIuL2NvbnRvdXJzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRYKGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRZKGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRXZWlnaHQoKSB7XG4gIHJldHVybiAxO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHggPSBkZWZhdWx0WCxcbiAgICAgIHkgPSBkZWZhdWx0WSxcbiAgICAgIHdlaWdodCA9IGRlZmF1bHRXZWlnaHQsXG4gICAgICBkeCA9IDk2MCxcbiAgICAgIGR5ID0gNTAwLFxuICAgICAgciA9IDIwLCAvLyBibHVyIHJhZGl1c1xuICAgICAgayA9IDIsIC8vIGxvZzIoZ3JpZCBjZWxsIHNpemUpXG4gICAgICBvID0gciAqIDMsIC8vIGdyaWQgb2Zmc2V0LCB0byBwYWQgZm9yIGJsdXJcbiAgICAgIG4gPSAoZHggKyBvICogMikgPj4gaywgLy8gZ3JpZCB3aWR0aFxuICAgICAgbSA9IChkeSArIG8gKiAyKSA+PiBrLCAvLyBncmlkIGhlaWdodFxuICAgICAgdGhyZXNob2xkID0gY29uc3RhbnQoMjApO1xuXG4gIGZ1bmN0aW9uIGRlbnNpdHkoZGF0YSkge1xuICAgIHZhciB2YWx1ZXMwID0gbmV3IEZsb2F0MzJBcnJheShuICogbSksXG4gICAgICAgIHZhbHVlczEgPSBuZXcgRmxvYXQzMkFycmF5KG4gKiBtKTtcblxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkLCBpLCBkYXRhKSB7XG4gICAgICB2YXIgeGkgPSAoK3goZCwgaSwgZGF0YSkgKyBvKSA+PiBrLFxuICAgICAgICAgIHlpID0gKCt5KGQsIGksIGRhdGEpICsgbykgPj4gayxcbiAgICAgICAgICB3aSA9ICt3ZWlnaHQoZCwgaSwgZGF0YSk7XG4gICAgICBpZiAoeGkgPj0gMCAmJiB4aSA8IG4gJiYgeWkgPj0gMCAmJiB5aSA8IG0pIHtcbiAgICAgICAgdmFsdWVzMFt4aSArIHlpICogbl0gKz0gd2k7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIE9wdGltaXplLlxuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuXG4gICAgdmFyIHR6ID0gdGhyZXNob2xkKHZhbHVlczApO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHopKSB7XG4gICAgICB2YXIgc3RvcCA9IG1heCh2YWx1ZXMwKTtcbiAgICAgIHR6ID0gdGlja1N0ZXAoMCwgc3RvcCwgdHopO1xuICAgICAgdHogPSByYW5nZSgwLCBNYXRoLmZsb29yKHN0b3AgLyB0eikgKiB0eiwgdHopO1xuICAgICAgdHouc2hpZnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udG91cnMoKVxuICAgICAgICAudGhyZXNob2xkcyh0eilcbiAgICAgICAgLnNpemUoW24sIG1dKVxuICAgICAgKHZhbHVlczApXG4gICAgICAgIC5tYXAodHJhbnNmb3JtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybShnZW9tZXRyeSkge1xuICAgIGdlb21ldHJ5LnZhbHVlICo9IE1hdGgucG93KDIsIC0yICogayk7IC8vIERlbnNpdHkgaW4gcG9pbnRzIHBlciBzcXVhcmUgcGl4ZWwuXG4gICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm1Qb2x5Z29uKTtcbiAgICByZXR1cm4gZ2VvbWV0cnk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Qb2x5Z29uKGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm1SaW5nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVJpbmcoY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcy5mb3JFYWNoKHRyYW5zZm9ybVBvaW50KTtcbiAgfVxuXG4gIC8vIFRPRE8gT3B0aW1pemUuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50KGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXNbMF0gPSBjb29yZGluYXRlc1swXSAqIE1hdGgucG93KDIsIGspIC0gbztcbiAgICBjb29yZGluYXRlc1sxXSA9IGNvb3JkaW5hdGVzWzFdICogTWF0aC5wb3coMiwgaykgLSBvO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgIG8gPSByICogMztcbiAgICBuID0gKGR4ICsgbyAqIDIpID4+IGs7XG4gICAgbSA9IChkeSArIG8gKiAyKSA+PiBrO1xuICAgIHJldHVybiBkZW5zaXR5O1xuICB9XG5cbiAgZGVuc2l0eS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB4O1xuICB9O1xuXG4gIGRlbnNpdHkueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGRlbnNpdHkpIDogeTtcbiAgfTtcblxuICBkZW5zaXR5LndlaWdodCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh3ZWlnaHQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB3ZWlnaHQ7XG4gIH07XG5cbiAgZGVuc2l0eS5zaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtkeCwgZHldO1xuICAgIHZhciBfMCA9IE1hdGguY2VpbChfWzBdKSwgXzEgPSBNYXRoLmNlaWwoX1sxXSk7XG4gICAgaWYgKCEoXzAgPj0gMCkgJiYgIShfMCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzaXplXCIpO1xuICAgIHJldHVybiBkeCA9IF8wLCBkeSA9IF8xLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LmNlbGxTaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIDEgPDwgaztcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAxKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjZWxsIHNpemVcIik7XG4gICAgcmV0dXJuIGsgPSBNYXRoLmZsb29yKE1hdGgubG9nKF8pIC8gTWF0aC5MTjIpLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgZGVuc2l0eSkgOiB0aHJlc2hvbGQ7XG4gIH07XG5cbiAgZGVuc2l0eS5iYW5kd2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gTWF0aC5zcXJ0KHIgKiAociArIDEpKTtcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBiYW5kd2lkdGhcIik7XG4gICAgcmV0dXJuIHIgPSBNYXRoLnJvdW5kKChNYXRoLnNxcnQoNCAqIF8gKiBfICsgMSkgLSAxKSAvIDIpLCByZXNpemUoKTtcbiAgfTtcblxuICByZXR1cm4gZGVuc2l0eTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjb250b3Vyc30gZnJvbSBcIi4vY29udG91cnNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjb250b3VyRGVuc2l0eX0gZnJvbSBcIi4vZGVuc2l0eVwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7fVxuIiwidmFyIG5vb3AgPSB7dmFsdWU6IGZ1bmN0aW9uKCkge319O1xuXG5mdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoLCBfID0ge30sIHQ7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgZGlzcGF0Y2h9IGZyb20gXCIuL2Rpc3BhdGNoXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHtldmVudCwgY3VzdG9tRXZlbnQsIHNlbGVjdCwgbW91c2UsIHRvdWNofSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgbm9kcmFnLCB7eWVzZHJhZ30gZnJvbSBcIi4vbm9kcmFnXCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnRcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IERyYWdFdmVudCBmcm9tIFwiLi9ldmVudFwiO1xuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoKSB7XG4gIHJldHVybiAhZXZlbnQuYnV0dG9uO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29udGFpbmVyKCkge1xuICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0U3ViamVjdChkKSB7XG4gIHJldHVybiBkID09IG51bGwgPyB7eDogZXZlbnQueCwgeTogZXZlbnQueX0gOiBkO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VG91Y2hhYmxlKCkge1xuICByZXR1cm4gXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICBjb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyLFxuICAgICAgc3ViamVjdCA9IGRlZmF1bHRTdWJqZWN0LFxuICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcbiAgICAgIGdlc3R1cmVzID0ge30sXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiZHJhZ1wiLCBcImVuZFwiKSxcbiAgICAgIGFjdGl2ZSA9IDAsXG4gICAgICBtb3VzZWRvd254LFxuICAgICAgbW91c2Vkb3dueSxcbiAgICAgIG1vdXNlbW92aW5nLFxuICAgICAgdG91Y2hlbmRpbmcsXG4gICAgICBjbGlja0Rpc3RhbmNlMiA9IDA7XG5cbiAgZnVuY3Rpb24gZHJhZyhzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmRyYWdcIiwgbW91c2Vkb3duZWQpXG4gICAgICAuZmlsdGVyKHRvdWNoYWJsZSlcbiAgICAgICAgLm9uKFwidG91Y2hzdGFydC5kcmFnXCIsIHRvdWNoc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmRyYWdcIiwgdG91Y2htb3ZlZClcbiAgICAgICAgLm9uKFwidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlZG93bmVkKCkge1xuICAgIGlmICh0b3VjaGVuZGluZyB8fCAhZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgZ2VzdHVyZSA9IGJlZm9yZXN0YXJ0KFwibW91c2VcIiwgY29udGFpbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIG1vdXNlLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICghZ2VzdHVyZSkgcmV0dXJuO1xuICAgIHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnXCIsIG1vdXNlbW92ZWQsIHRydWUpLm9uKFwibW91c2V1cC5kcmFnXCIsIG1vdXNldXBwZWQsIHRydWUpO1xuICAgIG5vZHJhZyhldmVudC52aWV3KTtcbiAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgbW91c2Vtb3ZpbmcgPSBmYWxzZTtcbiAgICBtb3VzZWRvd254ID0gZXZlbnQuY2xpZW50WDtcbiAgICBtb3VzZWRvd255ID0gZXZlbnQuY2xpZW50WTtcbiAgICBnZXN0dXJlKFwic3RhcnRcIik7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZW1vdmVkKCkge1xuICAgIG5vZXZlbnQoKTtcbiAgICBpZiAoIW1vdXNlbW92aW5nKSB7XG4gICAgICB2YXIgZHggPSBldmVudC5jbGllbnRYIC0gbW91c2Vkb3dueCwgZHkgPSBldmVudC5jbGllbnRZIC0gbW91c2Vkb3dueTtcbiAgICAgIG1vdXNlbW92aW5nID0gZHggKiBkeCArIGR5ICogZHkgPiBjbGlja0Rpc3RhbmNlMjtcbiAgICB9XG4gICAgZ2VzdHVyZXMubW91c2UoXCJkcmFnXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2V1cHBlZCgpIHtcbiAgICBzZWxlY3QoZXZlbnQudmlldykub24oXCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWdcIiwgbnVsbCk7XG4gICAgeWVzZHJhZyhldmVudC52aWV3LCBtb3VzZW1vdmluZyk7XG4gICAgbm9ldmVudCgpO1xuICAgIGdlc3R1cmVzLm1vdXNlKFwiZW5kXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKCkge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBjID0gY29udGFpbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgZ2VzdHVyZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChnZXN0dXJlID0gYmVmb3Jlc3RhcnQodG91Y2hlc1tpXS5pZGVudGlmaWVyLCBjLCB0b3VjaCwgdGhpcywgYXJndW1lbnRzKSkge1xuICAgICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICAgIGdlc3R1cmUoXCJzdGFydFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKCkge1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgZ2VzdHVyZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChnZXN0dXJlID0gZ2VzdHVyZXNbdG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICBub2V2ZW50KCk7XG4gICAgICAgIGdlc3R1cmUoXCJkcmFnXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoKSB7XG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgIHRvdWNoZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hlbmRpbmcgPSBudWxsOyB9LCA1MDApOyAvLyBHaG9zdCBjbGlja3MgYXJlIGRlbGF5ZWQhXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGdlc3R1cmUgPSBnZXN0dXJlc1t0b3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICAgICAgZ2VzdHVyZShcImVuZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBiZWZvcmVzdGFydChpZCwgY29udGFpbmVyLCBwb2ludCwgdGhhdCwgYXJncykge1xuICAgIHZhciBwID0gcG9pbnQoY29udGFpbmVyLCBpZCksIHMsIGR4LCBkeSxcbiAgICAgICAgc3VibGlzdGVuZXJzID0gbGlzdGVuZXJzLmNvcHkoKTtcblxuICAgIGlmICghY3VzdG9tRXZlbnQobmV3IERyYWdFdmVudChkcmFnLCBcImJlZm9yZXN0YXJ0XCIsIHMsIGlkLCBhY3RpdmUsIHBbMF0sIHBbMV0sIDAsIDAsIHN1Ymxpc3RlbmVycyksIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKChldmVudC5zdWJqZWN0ID0gcyA9IHN1YmplY3QuYXBwbHkodGhhdCwgYXJncykpID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIGR4ID0gcy54IC0gcFswXSB8fCAwO1xuICAgICAgZHkgPSBzLnkgLSBwWzFdIHx8IDA7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGdlc3R1cmUodHlwZSkge1xuICAgICAgdmFyIHAwID0gcCwgbjtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwic3RhcnRcIjogZ2VzdHVyZXNbaWRdID0gZ2VzdHVyZSwgbiA9IGFjdGl2ZSsrOyBicmVhaztcbiAgICAgICAgY2FzZSBcImVuZFwiOiBkZWxldGUgZ2VzdHVyZXNbaWRdLCAtLWFjdGl2ZTsgLy8gbm9icmVha1xuICAgICAgICBjYXNlIFwiZHJhZ1wiOiBwID0gcG9pbnQoY29udGFpbmVyLCBpZCksIG4gPSBhY3RpdmU7IGJyZWFrO1xuICAgICAgfVxuICAgICAgY3VzdG9tRXZlbnQobmV3IERyYWdFdmVudChkcmFnLCB0eXBlLCBzLCBpZCwgbiwgcFswXSArIGR4LCBwWzFdICsgZHksIHBbMF0gLSBwMFswXSwgcFsxXSAtIHAwWzFdLCBzdWJsaXN0ZW5lcnMpLCBzdWJsaXN0ZW5lcnMuYXBwbHksIHN1Ymxpc3RlbmVycywgW3R5cGUsIHRoYXQsIGFyZ3NdKTtcbiAgICB9O1xuICB9XG5cbiAgZHJhZy5maWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZmlsdGVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBkcmFnKSA6IGZpbHRlcjtcbiAgfTtcblxuICBkcmFnLmNvbnRhaW5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb250YWluZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBkcmFnKSA6IGNvbnRhaW5lcjtcbiAgfTtcblxuICBkcmFnLnN1YmplY3QgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3ViamVjdCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGRyYWcpIDogc3ViamVjdDtcbiAgfTtcblxuICBkcmFnLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGRyYWcpIDogdG91Y2hhYmxlO1xuICB9O1xuXG4gIGRyYWcub24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBsaXN0ZW5lcnMub24uYXBwbHkobGlzdGVuZXJzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGlzdGVuZXJzID8gZHJhZyA6IHZhbHVlO1xuICB9O1xuXG4gIGRyYWcuY2xpY2tEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGlja0Rpc3RhbmNlMiA9IChfID0gK18pICogXywgZHJhZykgOiBNYXRoLnNxcnQoY2xpY2tEaXN0YW5jZTIpO1xuICB9O1xuXG4gIHJldHVybiBkcmFnO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHJhZ0V2ZW50KHRhcmdldCwgdHlwZSwgc3ViamVjdCwgaWQsIGFjdGl2ZSwgeCwgeSwgZHgsIGR5LCBkaXNwYXRjaCkge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zdWJqZWN0ID0gc3ViamVjdDtcbiAgdGhpcy5pZGVudGlmaWVyID0gaWQ7XG4gIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnkgPSB5O1xuICB0aGlzLmR4ID0gZHg7XG4gIHRoaXMuZHkgPSBkeTtcbiAgdGhpcy5fID0gZGlzcGF0Y2g7XG59XG5cbkRyYWdFdmVudC5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fLm9uLmFwcGx5KHRoaXMuXywgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlID09PSB0aGlzLl8gPyB0aGlzIDogdmFsdWU7XG59O1xuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGRyYWd9IGZyb20gXCIuL2RyYWdcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkcmFnRGlzYWJsZSwgeWVzZHJhZyBhcyBkcmFnRW5hYmxlfSBmcm9tIFwiLi9ub2RyYWdcIjtcbiIsImltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgbm9ldmVudCBmcm9tIFwiLi9ub2V2ZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZpZXcpIHtcbiAgdmFyIHJvb3QgPSB2aWV3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdCh2aWV3KS5vbihcImRyYWdzdGFydC5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICBpZiAoXCJvbnNlbGVjdHN0YXJ0XCIgaW4gcm9vdCkge1xuICAgIHNlbGVjdGlvbi5vbihcInNlbGVjdHN0YXJ0LmRyYWdcIiwgbm9ldmVudCwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fX25vc2VsZWN0ID0gcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0O1xuICAgIHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdCA9IFwibm9uZVwiO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5ZXNkcmFnKHZpZXcsIG5vY2xpY2spIHtcbiAgdmFyIHJvb3QgPSB2aWV3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdCh2aWV3KS5vbihcImRyYWdzdGFydC5kcmFnXCIsIG51bGwpO1xuICBpZiAobm9jbGljaykge1xuICAgIHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbm9ldmVudCwgdHJ1ZSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZWN0aW9uLm9uKFwiY2xpY2suZHJhZ1wiLCBudWxsKTsgfSwgMCk7XG4gIH1cbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG51bGwpO1xuICB9IGVsc2Uge1xuICAgIHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdCA9IHJvb3QuX19ub3NlbGVjdDtcbiAgICBkZWxldGUgcm9vdC5fX25vc2VsZWN0O1xuICB9XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0b1R5cGUob2JqZWN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XS50cmltKCksIG51bWJlcjtcbiAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9IG51bGw7XG4gICAgZWxzZSBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB2YWx1ZSA9IHRydWU7XG4gICAgZWxzZSBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikgdmFsdWUgPSBmYWxzZTtcbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJOYU5cIikgdmFsdWUgPSBOYU47XG4gICAgZWxzZSBpZiAoIWlzTmFOKG51bWJlciA9ICt2YWx1ZSkpIHZhbHVlID0gbnVtYmVyO1xuICAgIGVsc2UgaWYgKC9eKFstK11cXGR7Mn0pP1xcZHs0fSgtXFxkezJ9KC1cXGR7Mn0pPyk/KFRcXGR7Mn06XFxkezJ9KDpcXGR7Mn0oXFwuXFxkezN9KT8pPyhafFstK11cXGR7Mn06XFxkezJ9KT8pPyQvLnRlc3QodmFsdWUpKSB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICBlbHNlIGNvbnRpbnVlO1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cbiIsImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2XCI7XG5cbnZhciBjc3YgPSBkc3YoXCIsXCIpO1xuXG5leHBvcnQgdmFyIGNzdlBhcnNlID0gY3N2LnBhcnNlO1xuZXhwb3J0IHZhciBjc3ZQYXJzZVJvd3MgPSBjc3YucGFyc2VSb3dzO1xuZXhwb3J0IHZhciBjc3ZGb3JtYXQgPSBjc3YuZm9ybWF0O1xuZXhwb3J0IHZhciBjc3ZGb3JtYXRCb2R5ID0gY3N2LmZvcm1hdEJvZHk7XG5leHBvcnQgdmFyIGNzdkZvcm1hdFJvd3MgPSBjc3YuZm9ybWF0Um93cztcbiIsInZhciBFT0wgPSB7fSxcbiAgICBFT0YgPSB7fSxcbiAgICBRVU9URSA9IDM0LFxuICAgIE5FV0xJTkUgPSAxMCxcbiAgICBSRVRVUk4gPSAxMztcblxuZnVuY3Rpb24gb2JqZWN0Q29udmVydGVyKGNvbHVtbnMpIHtcbiAgcmV0dXJuIG5ldyBGdW5jdGlvbihcImRcIiwgXCJyZXR1cm4ge1wiICsgY29sdW1ucy5tYXAoZnVuY3Rpb24obmFtZSwgaSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShuYW1lKSArIFwiOiBkW1wiICsgaSArIFwiXVwiO1xuICB9KS5qb2luKFwiLFwiKSArIFwifVwiKTtcbn1cblxuZnVuY3Rpb24gY3VzdG9tQ29udmVydGVyKGNvbHVtbnMsIGYpIHtcbiAgdmFyIG9iamVjdCA9IG9iamVjdENvbnZlcnRlcihjb2x1bW5zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHJvdywgaSkge1xuICAgIHJldHVybiBmKG9iamVjdChyb3cpLCBpLCBjb2x1bW5zKTtcbiAgfTtcbn1cblxuLy8gQ29tcHV0ZSB1bmlxdWUgY29sdW1ucyBpbiBvcmRlciBvZiBkaXNjb3ZlcnkuXG5mdW5jdGlvbiBpbmZlckNvbHVtbnMocm93cykge1xuICB2YXIgY29sdW1uU2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGNvbHVtbnMgPSBbXTtcblxuICByb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgZm9yICh2YXIgY29sdW1uIGluIHJvdykge1xuICAgICAgaWYgKCEoY29sdW1uIGluIGNvbHVtblNldCkpIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtblNldFtjb2x1bW5dID0gY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG5mdW5jdGlvbiBwYWQodmFsdWUsIHdpZHRoKSB7XG4gIHZhciBzID0gdmFsdWUgKyBcIlwiLCBsZW5ndGggPSBzLmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbigwKSArIHMgOiBzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKHllYXIpIHtcbiAgcmV0dXJuIHllYXIgPCAwID8gXCItXCIgKyBwYWQoLXllYXIsIDYpXG4gICAgOiB5ZWFyID4gOTk5OSA/IFwiK1wiICsgcGFkKHllYXIsIDYpXG4gICAgOiBwYWQoeWVhciwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSkge1xuICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgICBtaW51dGVzID0gZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgICBzZWNvbmRzID0gZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgICBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBcIkludmFsaWQgRGF0ZVwiXG4gICAgICA6IGZvcm1hdFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCA0KSArIFwiLVwiICsgcGFkKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsIDIpICsgXCItXCIgKyBwYWQoZGF0ZS5nZXRVVENEYXRlKCksIDIpXG4gICAgICArIChtaWxsaXNlY29uZHMgPyBcIlRcIiArIHBhZChob3VycywgMikgKyBcIjpcIiArIHBhZChtaW51dGVzLCAyKSArIFwiOlwiICsgcGFkKHNlY29uZHMsIDIpICsgXCIuXCIgKyBwYWQobWlsbGlzZWNvbmRzLCAzKSArIFwiWlwiXG4gICAgICA6IHNlY29uZHMgPyBcIlRcIiArIHBhZChob3VycywgMikgKyBcIjpcIiArIHBhZChtaW51dGVzLCAyKSArIFwiOlwiICsgcGFkKHNlY29uZHMsIDIpICsgXCJaXCJcbiAgICAgIDogbWludXRlcyB8fCBob3VycyA/IFwiVFwiICsgcGFkKGhvdXJzLCAyKSArIFwiOlwiICsgcGFkKG1pbnV0ZXMsIDIpICsgXCJaXCJcbiAgICAgIDogXCJcIik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlbGltaXRlcikge1xuICB2YXIgcmVGb3JtYXQgPSBuZXcgUmVnRXhwKFwiW1xcXCJcIiArIGRlbGltaXRlciArIFwiXFxuXFxyXVwiKSxcbiAgICAgIERFTElNSVRFUiA9IGRlbGltaXRlci5jaGFyQ29kZUF0KDApO1xuXG4gIGZ1bmN0aW9uIHBhcnNlKHRleHQsIGYpIHtcbiAgICB2YXIgY29udmVydCwgY29sdW1ucywgcm93cyA9IHBhcnNlUm93cyh0ZXh0LCBmdW5jdGlvbihyb3csIGkpIHtcbiAgICAgIGlmIChjb252ZXJ0KSByZXR1cm4gY29udmVydChyb3csIGkgLSAxKTtcbiAgICAgIGNvbHVtbnMgPSByb3csIGNvbnZlcnQgPSBmID8gY3VzdG9tQ29udmVydGVyKHJvdywgZikgOiBvYmplY3RDb252ZXJ0ZXIocm93KTtcbiAgICB9KTtcbiAgICByb3dzLmNvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VSb3dzKHRleHQsIGYpIHtcbiAgICB2YXIgcm93cyA9IFtdLCAvLyBvdXRwdXQgcm93c1xuICAgICAgICBOID0gdGV4dC5sZW5ndGgsXG4gICAgICAgIEkgPSAwLCAvLyBjdXJyZW50IGNoYXJhY3RlciBpbmRleFxuICAgICAgICBuID0gMCwgLy8gY3VycmVudCBsaW5lIG51bWJlclxuICAgICAgICB0LCAvLyBjdXJyZW50IHRva2VuXG4gICAgICAgIGVvZiA9IE4gPD0gMCwgLy8gY3VycmVudCB0b2tlbiBmb2xsb3dlZCBieSBFT0Y/XG4gICAgICAgIGVvbCA9IGZhbHNlOyAvLyBjdXJyZW50IHRva2VuIGZvbGxvd2VkIGJ5IEVPTD9cblxuICAgIC8vIFN0cmlwIHRoZSB0cmFpbGluZyBuZXdsaW5lLlxuICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoTiAtIDEpID09PSBORVdMSU5FKSAtLU47XG4gICAgaWYgKHRleHQuY2hhckNvZGVBdChOIC0gMSkgPT09IFJFVFVSTikgLS1OO1xuXG4gICAgZnVuY3Rpb24gdG9rZW4oKSB7XG4gICAgICBpZiAoZW9mKSByZXR1cm4gRU9GO1xuICAgICAgaWYgKGVvbCkgcmV0dXJuIGVvbCA9IGZhbHNlLCBFT0w7XG5cbiAgICAgIC8vIFVuZXNjYXBlIHF1b3Rlcy5cbiAgICAgIHZhciBpLCBqID0gSSwgYztcbiAgICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoaikgPT09IFFVT1RFKSB7XG4gICAgICAgIHdoaWxlIChJKysgPCBOICYmIHRleHQuY2hhckNvZGVBdChJKSAhPT0gUVVPVEUgfHwgdGV4dC5jaGFyQ29kZUF0KCsrSSkgPT09IFFVT1RFKTtcbiAgICAgICAgaWYgKChpID0gSSkgPj0gTikgZW9mID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAoKGMgPSB0ZXh0LmNoYXJDb2RlQXQoSSsrKSkgPT09IE5FV0xJTkUpIGVvbCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFJFVFVSTikgeyBlb2wgPSB0cnVlOyBpZiAodGV4dC5jaGFyQ29kZUF0KEkpID09PSBORVdMSU5FKSArK0k7IH1cbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UoaiArIDEsIGkgLSAxKS5yZXBsYWNlKC9cIlwiL2csIFwiXFxcIlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCBuZXh0IGRlbGltaXRlciBvciBuZXdsaW5lLlxuICAgICAgd2hpbGUgKEkgPCBOKSB7XG4gICAgICAgIGlmICgoYyA9IHRleHQuY2hhckNvZGVBdChpID0gSSsrKSkgPT09IE5FV0xJTkUpIGVvbCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFJFVFVSTikgeyBlb2wgPSB0cnVlOyBpZiAodGV4dC5jaGFyQ29kZUF0KEkpID09PSBORVdMSU5FKSArK0k7IH1cbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gREVMSU1JVEVSKSBjb250aW51ZTtcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UoaiwgaSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybiBsYXN0IHRva2VuIGJlZm9yZSBFT0YuXG4gICAgICByZXR1cm4gZW9mID0gdHJ1ZSwgdGV4dC5zbGljZShqLCBOKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoKHQgPSB0b2tlbigpKSAhPT0gRU9GKSB7XG4gICAgICB2YXIgcm93ID0gW107XG4gICAgICB3aGlsZSAodCAhPT0gRU9MICYmIHQgIT09IEVPRikgcm93LnB1c2godCksIHQgPSB0b2tlbigpO1xuICAgICAgaWYgKGYgJiYgKHJvdyA9IGYocm93LCBuKyspKSA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlZm9ybWF0Qm9keShyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKGZ1bmN0aW9uKHJvdykge1xuICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gZm9ybWF0VmFsdWUocm93W2NvbHVtbl0pO1xuICAgICAgfSkuam9pbihkZWxpbWl0ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0KHJvd3MsIGNvbHVtbnMpIHtcbiAgICBpZiAoY29sdW1ucyA9PSBudWxsKSBjb2x1bW5zID0gaW5mZXJDb2x1bW5zKHJvd3MpO1xuICAgIHJldHVybiBbY29sdW1ucy5tYXAoZm9ybWF0VmFsdWUpLmpvaW4oZGVsaW1pdGVyKV0uY29uY2F0KHByZWZvcm1hdEJvZHkocm93cywgY29sdW1ucykpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRCb2R5KHJvd3MsIGNvbHVtbnMpIHtcbiAgICBpZiAoY29sdW1ucyA9PSBudWxsKSBjb2x1bW5zID0gaW5mZXJDb2x1bW5zKHJvd3MpO1xuICAgIHJldHVybiBwcmVmb3JtYXRCb2R5KHJvd3MsIGNvbHVtbnMpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRSb3dzKHJvd3MpIHtcbiAgICByZXR1cm4gcm93cy5tYXAoZm9ybWF0Um93KS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Um93KHJvdykge1xuICAgIHJldHVybiByb3cubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIlxuICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGZvcm1hdERhdGUodmFsdWUpXG4gICAgICAgIDogcmVGb3JtYXQudGVzdCh2YWx1ZSArPSBcIlwiKSA/IFwiXFxcIlwiICsgdmFsdWUucmVwbGFjZSgvXCIvZywgXCJcXFwiXFxcIlwiKSArIFwiXFxcIlwiXG4gICAgICAgIDogdmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBwYXJzZVJvd3M6IHBhcnNlUm93cyxcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICBmb3JtYXRCb2R5OiBmb3JtYXRCb2R5LFxuICAgIGZvcm1hdFJvd3M6IGZvcm1hdFJvd3NcbiAgfTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBkc3ZGb3JtYXR9IGZyb20gXCIuL2RzdlwiO1xuZXhwb3J0IHtjc3ZQYXJzZSwgY3N2UGFyc2VSb3dzLCBjc3ZGb3JtYXQsIGNzdkZvcm1hdEJvZHksIGNzdkZvcm1hdFJvd3N9IGZyb20gXCIuL2NzdlwiO1xuZXhwb3J0IHt0c3ZQYXJzZSwgdHN2UGFyc2VSb3dzLCB0c3ZGb3JtYXQsIHRzdkZvcm1hdEJvZHksIHRzdkZvcm1hdFJvd3N9IGZyb20gXCIuL3RzdlwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGF1dG9UeXBlfSBmcm9tIFwiLi9hdXRvVHlwZVwiO1xuIiwiaW1wb3J0IGRzdiBmcm9tIFwiLi9kc3ZcIjtcblxudmFyIHRzdiA9IGRzdihcIlxcdFwiKTtcblxuZXhwb3J0IHZhciB0c3ZQYXJzZSA9IHRzdi5wYXJzZTtcbmV4cG9ydCB2YXIgdHN2UGFyc2VSb3dzID0gdHN2LnBhcnNlUm93cztcbmV4cG9ydCB2YXIgdHN2Rm9ybWF0ID0gdHN2LmZvcm1hdDtcbmV4cG9ydCB2YXIgdHN2Rm9ybWF0Qm9keSA9IHRzdi5mb3JtYXRCb2R5O1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRSb3dzID0gdHN2LmZvcm1hdFJvd3M7XG4iLCJ2YXIgb3ZlcnNob290ID0gMS43MDE1ODtcblxuZXhwb3J0IHZhciBiYWNrSW4gPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tJbih0KSB7XG4gICAgcmV0dXJuIHQgKiB0ICogKChzICsgMSkgKiB0IC0gcyk7XG4gIH1cblxuICBiYWNrSW4ub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrSW47XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tPdXQodCkge1xuICAgIHJldHVybiAtLXQgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAxO1xuICB9XG5cbiAgYmFja091dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tPdXQ7XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tJbk91dCA9IChmdW5jdGlvbiBjdXN0b20ocykge1xuICBzID0gK3M7XG5cbiAgZnVuY3Rpb24gYmFja0luT3V0KHQpIHtcbiAgICByZXR1cm4gKCh0ICo9IDIpIDwgMSA/IHQgKiB0ICogKChzICsgMSkgKiB0IC0gcykgOiAodCAtPSAyKSAqIHQgKiAoKHMgKyAxKSAqIHQgKyBzKSArIDIpIC8gMjtcbiAgfVxuXG4gIGJhY2tJbk91dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tJbk91dDtcbn0pKG92ZXJzaG9vdCk7XG4iLCJ2YXIgYjEgPSA0IC8gMTEsXG4gICAgYjIgPSA2IC8gMTEsXG4gICAgYjMgPSA4IC8gMTEsXG4gICAgYjQgPSAzIC8gNCxcbiAgICBiNSA9IDkgLyAxMSxcbiAgICBiNiA9IDEwIC8gMTEsXG4gICAgYjcgPSAxNSAvIDE2LFxuICAgIGI4ID0gMjEgLyAyMixcbiAgICBiOSA9IDYzIC8gNjQsXG4gICAgYjAgPSAxIC8gYjEgLyBiMTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5jZUluKHQpIHtcbiAgcmV0dXJuIDEgLSBib3VuY2VPdXQoMSAtIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm91bmNlT3V0KHQpIHtcbiAgcmV0dXJuICh0ID0gK3QpIDwgYjEgPyBiMCAqIHQgKiB0IDogdCA8IGIzID8gYjAgKiAodCAtPSBiMikgKiB0ICsgYjQgOiB0IDwgYjYgPyBiMCAqICh0IC09IGI1KSAqIHQgKyBiNyA6IGIwICogKHQgLT0gYjgpICogdCArIGI5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm91bmNlSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyAxIC0gYm91bmNlT3V0KDEgLSB0KSA6IGJvdW5jZU91dCh0IC0gMSkgKyAxKSAvIDI7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY2lyY2xlSW4odCkge1xuICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gdCAqIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2lyY2xlT3V0KHQpIHtcbiAgcmV0dXJuIE1hdGguc3FydCgxIC0gLS10ICogdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaXJjbGVJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IDEgLSBNYXRoLnNxcnQoMSAtIHQgKiB0KSA6IE1hdGguc3FydCgxIC0gKHQgLT0gMikgKiB0KSArIDEpIC8gMjtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIiwidmFyIHRhdSA9IDIgKiBNYXRoLlBJLFxuICAgIGFtcGxpdHVkZSA9IDEsXG4gICAgcGVyaW9kID0gMC4zO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNJbiA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljSW4odCkge1xuICAgIHJldHVybiBhICogTWF0aC5wb3coMiwgMTAgKiAtLXQpICogTWF0aC5zaW4oKHMgLSB0KSAvIHApO1xuICB9XG5cbiAgZWxhc3RpY0luLmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY0luLnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY0luO1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKGEsIHApIHtcbiAgdmFyIHMgPSBNYXRoLmFzaW4oMSAvIChhID0gTWF0aC5tYXgoMSwgYSkpKSAqIChwIC89IHRhdSk7XG5cbiAgZnVuY3Rpb24gZWxhc3RpY091dCh0KSB7XG4gICAgcmV0dXJuIDEgLSBhICogTWF0aC5wb3coMiwgLTEwICogKHQgPSArdCkpICogTWF0aC5zaW4oKHQgKyBzKSAvIHApO1xuICB9XG5cbiAgZWxhc3RpY091dC5hbXBsaXR1ZGUgPSBmdW5jdGlvbihhKSB7IHJldHVybiBjdXN0b20oYSwgcCAqIHRhdSk7IH07XG4gIGVsYXN0aWNPdXQucGVyaW9kID0gZnVuY3Rpb24ocCkgeyByZXR1cm4gY3VzdG9tKGEsIHApOyB9O1xuXG4gIHJldHVybiBlbGFzdGljT3V0O1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNJbk91dCA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljSW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgPSB0ICogMiAtIDEpIDwgMFxuICAgICAgICA/IGEgKiBNYXRoLnBvdygyLCAxMCAqIHQpICogTWF0aC5zaW4oKHMgLSB0KSAvIHApXG4gICAgICAgIDogMiAtIGEgKiBNYXRoLnBvdygyLCAtMTAgKiB0KSAqIE1hdGguc2luKChzICsgdCkgLyBwKSkgLyAyO1xuICB9XG5cbiAgZWxhc3RpY0luT3V0LmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY0luT3V0LnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY0luT3V0O1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGV4cEluKHQpIHtcbiAgcmV0dXJuIE1hdGgucG93KDIsIDEwICogdCAtIDEwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cE91dCh0KSB7XG4gIHJldHVybiAxIC0gTWF0aC5wb3coMiwgLTEwICogdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IE1hdGgucG93KDIsIDEwICogdCAtIDEwKSA6IDIgLSBNYXRoLnBvdygyLCAxMCAtIDEwICogdCkpIC8gMjtcbn1cbiIsImV4cG9ydCB7XG4gIGxpbmVhciBhcyBlYXNlTGluZWFyXG59IGZyb20gXCIuL2xpbmVhclwiO1xuXG5leHBvcnQge1xuICBxdWFkSW5PdXQgYXMgZWFzZVF1YWQsXG4gIHF1YWRJbiBhcyBlYXNlUXVhZEluLFxuICBxdWFkT3V0IGFzIGVhc2VRdWFkT3V0LFxuICBxdWFkSW5PdXQgYXMgZWFzZVF1YWRJbk91dFxufSBmcm9tIFwiLi9xdWFkXCI7XG5cbmV4cG9ydCB7XG4gIGN1YmljSW5PdXQgYXMgZWFzZUN1YmljLFxuICBjdWJpY0luIGFzIGVhc2VDdWJpY0luLFxuICBjdWJpY091dCBhcyBlYXNlQ3ViaWNPdXQsXG4gIGN1YmljSW5PdXQgYXMgZWFzZUN1YmljSW5PdXRcbn0gZnJvbSBcIi4vY3ViaWNcIjtcblxuZXhwb3J0IHtcbiAgcG9seUluT3V0IGFzIGVhc2VQb2x5LFxuICBwb2x5SW4gYXMgZWFzZVBvbHlJbixcbiAgcG9seU91dCBhcyBlYXNlUG9seU91dCxcbiAgcG9seUluT3V0IGFzIGVhc2VQb2x5SW5PdXRcbn0gZnJvbSBcIi4vcG9seVwiO1xuXG5leHBvcnQge1xuICBzaW5Jbk91dCBhcyBlYXNlU2luLFxuICBzaW5JbiBhcyBlYXNlU2luSW4sXG4gIHNpbk91dCBhcyBlYXNlU2luT3V0LFxuICBzaW5Jbk91dCBhcyBlYXNlU2luSW5PdXRcbn0gZnJvbSBcIi4vc2luXCI7XG5cbmV4cG9ydCB7XG4gIGV4cEluT3V0IGFzIGVhc2VFeHAsXG4gIGV4cEluIGFzIGVhc2VFeHBJbixcbiAgZXhwT3V0IGFzIGVhc2VFeHBPdXQsXG4gIGV4cEluT3V0IGFzIGVhc2VFeHBJbk91dFxufSBmcm9tIFwiLi9leHBcIjtcblxuZXhwb3J0IHtcbiAgY2lyY2xlSW5PdXQgYXMgZWFzZUNpcmNsZSxcbiAgY2lyY2xlSW4gYXMgZWFzZUNpcmNsZUluLFxuICBjaXJjbGVPdXQgYXMgZWFzZUNpcmNsZU91dCxcbiAgY2lyY2xlSW5PdXQgYXMgZWFzZUNpcmNsZUluT3V0XG59IGZyb20gXCIuL2NpcmNsZVwiO1xuXG5leHBvcnQge1xuICBib3VuY2VPdXQgYXMgZWFzZUJvdW5jZSxcbiAgYm91bmNlSW4gYXMgZWFzZUJvdW5jZUluLFxuICBib3VuY2VPdXQgYXMgZWFzZUJvdW5jZU91dCxcbiAgYm91bmNlSW5PdXQgYXMgZWFzZUJvdW5jZUluT3V0XG59IGZyb20gXCIuL2JvdW5jZVwiO1xuXG5leHBvcnQge1xuICBiYWNrSW5PdXQgYXMgZWFzZUJhY2ssXG4gIGJhY2tJbiBhcyBlYXNlQmFja0luLFxuICBiYWNrT3V0IGFzIGVhc2VCYWNrT3V0LFxuICBiYWNrSW5PdXQgYXMgZWFzZUJhY2tJbk91dFxufSBmcm9tIFwiLi9iYWNrXCI7XG5cbmV4cG9ydCB7XG4gIGVsYXN0aWNPdXQgYXMgZWFzZUVsYXN0aWMsXG4gIGVsYXN0aWNJbiBhcyBlYXNlRWxhc3RpY0luLFxuICBlbGFzdGljT3V0IGFzIGVhc2VFbGFzdGljT3V0LFxuICBlbGFzdGljSW5PdXQgYXMgZWFzZUVsYXN0aWNJbk91dFxufSBmcm9tIFwiLi9lbGFzdGljXCI7XG4iLCJleHBvcnQgZnVuY3Rpb24gbGluZWFyKHQpIHtcbiAgcmV0dXJuICt0O1xufVxuIiwidmFyIGV4cG9uZW50ID0gMztcblxuZXhwb3J0IHZhciBwb2x5SW4gPSAoZnVuY3Rpb24gY3VzdG9tKGUpIHtcbiAgZSA9ICtlO1xuXG4gIGZ1bmN0aW9uIHBvbHlJbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KHQsIGUpO1xuICB9XG5cbiAgcG9seUluLmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5SW47XG59KShleHBvbmVudCk7XG5cbmV4cG9ydCB2YXIgcG9seU91dCA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seU91dCh0KSB7XG4gICAgcmV0dXJuIDEgLSBNYXRoLnBvdygxIC0gdCwgZSk7XG4gIH1cblxuICBwb2x5T3V0LmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5T3V0O1xufSkoZXhwb25lbnQpO1xuXG5leHBvcnQgdmFyIHBvbHlJbk91dCA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seUluT3V0KHQpIHtcbiAgICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyBNYXRoLnBvdyh0LCBlKSA6IDIgLSBNYXRoLnBvdygyIC0gdCwgZSkpIC8gMjtcbiAgfVxuXG4gIHBvbHlJbk91dC5leHBvbmVudCA9IGN1c3RvbTtcblxuICByZXR1cm4gcG9seUluT3V0O1xufSkoZXhwb25lbnQpO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIHF1YWRJbih0KSB7XG4gIHJldHVybiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YWRPdXQodCkge1xuICByZXR1cm4gdCAqICgyIC0gdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWFkSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCA6IC0tdCAqICgyIC0gdCkgKyAxKSAvIDI7XG59XG4iLCJ2YXIgcGkgPSBNYXRoLlBJLFxuICAgIGhhbGZQaSA9IHBpIC8gMjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNpbkluKHQpIHtcbiAgcmV0dXJuIDEgLSBNYXRoLmNvcyh0ICogaGFsZlBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbk91dCh0KSB7XG4gIHJldHVybiBNYXRoLnNpbih0ICogaGFsZlBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbkluT3V0KHQpIHtcbiAgcmV0dXJuICgxIC0gTWF0aC5jb3MocGkgKiB0KSkgLyAyO1xufVxuIiwiZnVuY3Rpb24gcmVzcG9uc2VCbG9iKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICByZXR1cm4gcmVzcG9uc2UuYmxvYigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGluaXQpLnRoZW4ocmVzcG9uc2VCbG9iKTtcbn1cbiIsImZ1bmN0aW9uIHJlc3BvbnNlQXJyYXlCdWZmZXIocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1cyArIFwiIFwiICsgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGluaXQpLnRoZW4ocmVzcG9uc2VBcnJheUJ1ZmZlcik7XG59XG4iLCJpbXBvcnQge2NzdlBhcnNlLCBkc3ZGb3JtYXQsIHRzdlBhcnNlfSBmcm9tIFwiZDMtZHN2XCI7XG5pbXBvcnQgdGV4dCBmcm9tIFwiLi90ZXh0XCI7XG5cbmZ1bmN0aW9uIGRzdlBhcnNlKHBhcnNlKSB7XG4gIHJldHVybiBmdW5jdGlvbihpbnB1dCwgaW5pdCwgcm93KSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIGluaXQgPT09IFwiZnVuY3Rpb25cIikgcm93ID0gaW5pdCwgaW5pdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGV4dChpbnB1dCwgaW5pdCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHBhcnNlKHJlc3BvbnNlLCByb3cpO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkc3YoZGVsaW1pdGVyLCBpbnB1dCwgaW5pdCwgcm93KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBpbml0ID09PSBcImZ1bmN0aW9uXCIpIHJvdyA9IGluaXQsIGluaXQgPSB1bmRlZmluZWQ7XG4gIHZhciBmb3JtYXQgPSBkc3ZGb3JtYXQoZGVsaW1pdGVyKTtcbiAgcmV0dXJuIHRleHQoaW5wdXQsIGluaXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZm9ybWF0LnBhcnNlKHJlc3BvbnNlLCByb3cpO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciBjc3YgPSBkc3ZQYXJzZShjc3ZQYXJzZSk7XG5leHBvcnQgdmFyIHRzdiA9IGRzdlBhcnNlKHRzdlBhcnNlKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2U7XG4gICAgZm9yICh2YXIga2V5IGluIGluaXQpIGltYWdlW2tleV0gPSBpbml0W2tleV07XG4gICAgaW1hZ2Uub25lcnJvciA9IHJlamVjdDtcbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsgcmVzb2x2ZShpbWFnZSk7IH07XG4gICAgaW1hZ2Uuc3JjID0gaW5wdXQ7XG4gIH0pO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGJsb2J9IGZyb20gXCIuL2Jsb2JcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBidWZmZXJ9IGZyb20gXCIuL2J1ZmZlclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGRzdiwgY3N2LCB0c3Z9IGZyb20gXCIuL2RzdlwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGltYWdlfSBmcm9tIFwiLi9pbWFnZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGpzb259IGZyb20gXCIuL2pzb25cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0ZXh0fSBmcm9tIFwiLi90ZXh0XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgeG1sLCBodG1sLCBzdmd9IGZyb20gXCIuL3htbFwiO1xuIiwiZnVuY3Rpb24gcmVzcG9uc2VKc29uKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGluaXQpLnRoZW4ocmVzcG9uc2VKc29uKTtcbn1cbiIsImZ1bmN0aW9uIHJlc3BvbnNlVGV4dChyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzICsgXCIgXCIgKyByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBpbml0KS50aGVuKHJlc3BvbnNlVGV4dCk7XG59XG4iLCJpbXBvcnQgdGV4dCBmcm9tIFwiLi90ZXh0XCI7XG5cbmZ1bmN0aW9uIHBhcnNlcih0eXBlKSB7XG4gIHJldHVybiBmdW5jdGlvbihpbnB1dCwgaW5pdCkgIHtcbiAgICByZXR1cm4gdGV4dChpbnB1dCwgaW5pdCkudGhlbihmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0ZXh0LCB0eXBlKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VyKFwiYXBwbGljYXRpb24veG1sXCIpO1xuXG5leHBvcnQgdmFyIGh0bWwgPSBwYXJzZXIoXCJ0ZXh0L2h0bWxcIik7XG5cbmV4cG9ydCB2YXIgc3ZnID0gcGFyc2VyKFwiaW1hZ2Uvc3ZnK3htbFwiKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHkpIHtcbiAgdmFyIG5vZGVzO1xuXG4gIGlmICh4ID09IG51bGwpIHggPSAwO1xuICBpZiAoeSA9PSBudWxsKSB5ID0gMDtcblxuICBmdW5jdGlvbiBmb3JjZSgpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgc3ggPSAwLFxuICAgICAgICBzeSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIHN4ICs9IG5vZGUueCwgc3kgKz0gbm9kZS55O1xuICAgIH1cblxuICAgIGZvciAoc3ggPSBzeCAvIG4gLSB4LCBzeSA9IHN5IC8gbiAtIHksIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueCAtPSBzeCwgbm9kZS55IC09IHN5O1xuICAgIH1cbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgbm9kZXMgPSBfO1xuICB9O1xuXG4gIGZvcmNlLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9ICtfLCBmb3JjZSkgOiB4O1xuICB9O1xuXG4gIGZvcmNlLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9ICtfLCBmb3JjZSkgOiB5O1xuICB9O1xuXG4gIHJldHVybiBmb3JjZTtcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGppZ2dsZSBmcm9tIFwiLi9qaWdnbGVcIjtcbmltcG9ydCB7cXVhZHRyZWV9IGZyb20gXCJkMy1xdWFkdHJlZVwiO1xuXG5mdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGQueCArIGQudng7XG59XG5cbmZ1bmN0aW9uIHkoZCkge1xuICByZXR1cm4gZC55ICsgZC52eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmFkaXVzKSB7XG4gIHZhciBub2RlcyxcbiAgICAgIHJhZGlpLFxuICAgICAgc3RyZW5ndGggPSAxLFxuICAgICAgaXRlcmF0aW9ucyA9IDE7XG5cbiAgaWYgKHR5cGVvZiByYWRpdXMgIT09IFwiZnVuY3Rpb25cIikgcmFkaXVzID0gY29uc3RhbnQocmFkaXVzID09IG51bGwgPyAxIDogK3JhZGl1cyk7XG5cbiAgZnVuY3Rpb24gZm9yY2UoKSB7XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIHRyZWUsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIHhpLFxuICAgICAgICB5aSxcbiAgICAgICAgcmksXG4gICAgICAgIHJpMjtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaXRlcmF0aW9uczsgKytrKSB7XG4gICAgICB0cmVlID0gcXVhZHRyZWUobm9kZXMsIHgsIHkpLnZpc2l0QWZ0ZXIocHJlcGFyZSk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgcmkgPSByYWRpaVtub2RlLmluZGV4XSwgcmkyID0gcmkgKiByaTtcbiAgICAgICAgeGkgPSBub2RlLnggKyBub2RlLnZ4O1xuICAgICAgICB5aSA9IG5vZGUueSArIG5vZGUudnk7XG4gICAgICAgIHRyZWUudmlzaXQoYXBwbHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5KHF1YWQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgICB2YXIgZGF0YSA9IHF1YWQuZGF0YSwgcmogPSBxdWFkLnIsIHIgPSByaSArIHJqO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEuaW5kZXggPiBub2RlLmluZGV4KSB7XG4gICAgICAgICAgdmFyIHggPSB4aSAtIGRhdGEueCAtIGRhdGEudngsXG4gICAgICAgICAgICAgIHkgPSB5aSAtIGRhdGEueSAtIGRhdGEudnksXG4gICAgICAgICAgICAgIGwgPSB4ICogeCArIHkgKiB5O1xuICAgICAgICAgIGlmIChsIDwgciAqIHIpIHtcbiAgICAgICAgICAgIGlmICh4ID09PSAwKSB4ID0gamlnZ2xlKCksIGwgKz0geCAqIHg7XG4gICAgICAgICAgICBpZiAoeSA9PT0gMCkgeSA9IGppZ2dsZSgpLCBsICs9IHkgKiB5O1xuICAgICAgICAgICAgbCA9IChyIC0gKGwgPSBNYXRoLnNxcnQobCkpKSAvIGwgKiBzdHJlbmd0aDtcbiAgICAgICAgICAgIG5vZGUudnggKz0gKHggKj0gbCkgKiAociA9IChyaiAqPSByaikgLyAocmkyICsgcmopKTtcbiAgICAgICAgICAgIG5vZGUudnkgKz0gKHkgKj0gbCkgKiByO1xuICAgICAgICAgICAgZGF0YS52eCAtPSB4ICogKHIgPSAxIC0gcik7XG4gICAgICAgICAgICBkYXRhLnZ5IC09IHkgKiByO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4geDAgPiB4aSArIHIgfHwgeDEgPCB4aSAtIHIgfHwgeTAgPiB5aSArIHIgfHwgeTEgPCB5aSAtIHI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZShxdWFkKSB7XG4gICAgaWYgKHF1YWQuZGF0YSkgcmV0dXJuIHF1YWQuciA9IHJhZGlpW3F1YWQuZGF0YS5pbmRleF07XG4gICAgZm9yICh2YXIgaSA9IHF1YWQuciA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgIGlmIChxdWFkW2ldICYmIHF1YWRbaV0uciA+IHF1YWQucikge1xuICAgICAgICBxdWFkLnIgPSBxdWFkW2ldLnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG4gICAgcmFkaWkgPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgbm9kZSA9IG5vZGVzW2ldLCByYWRpaVtub2RlLmluZGV4XSA9ICtyYWRpdXMobm9kZSwgaSwgbm9kZXMpO1xuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLml0ZXJhdGlvbnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaXRlcmF0aW9ucyA9ICtfLCBmb3JjZSkgOiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gK18sIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLnJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiByYWRpdXM7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgZm9yY2VDZW50ZXJ9IGZyb20gXCIuL2NlbnRlclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlQ29sbGlkZX0gZnJvbSBcIi4vY29sbGlkZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlTGlua30gZnJvbSBcIi4vbGlua1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlTWFueUJvZHl9IGZyb20gXCIuL21hbnlCb2R5XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VSYWRpYWx9IGZyb20gXCIuL3JhZGlhbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlU2ltdWxhdGlvbn0gZnJvbSBcIi4vc2ltdWxhdGlvblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlWH0gZnJvbSBcIi4veFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlWX0gZnJvbSBcIi4veVwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiAxZS02O1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgamlnZ2xlIGZyb20gXCIuL2ppZ2dsZVwiO1xuaW1wb3J0IHttYXB9IGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIGluZGV4KGQpIHtcbiAgcmV0dXJuIGQuaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGZpbmQobm9kZUJ5SWQsIG5vZGVJZCkge1xuICB2YXIgbm9kZSA9IG5vZGVCeUlkLmdldChub2RlSWQpO1xuICBpZiAoIW5vZGUpIHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmc6IFwiICsgbm9kZUlkKTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxpbmtzKSB7XG4gIHZhciBpZCA9IGluZGV4LFxuICAgICAgc3RyZW5ndGggPSBkZWZhdWx0U3RyZW5ndGgsXG4gICAgICBzdHJlbmd0aHMsXG4gICAgICBkaXN0YW5jZSA9IGNvbnN0YW50KDMwKSxcbiAgICAgIGRpc3RhbmNlcyxcbiAgICAgIG5vZGVzLFxuICAgICAgY291bnQsXG4gICAgICBiaWFzLFxuICAgICAgaXRlcmF0aW9ucyA9IDE7XG5cbiAgaWYgKGxpbmtzID09IG51bGwpIGxpbmtzID0gW107XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFN0cmVuZ3RoKGxpbmspIHtcbiAgICByZXR1cm4gMSAvIE1hdGgubWluKGNvdW50W2xpbmsuc291cmNlLmluZGV4XSwgY291bnRbbGluay50YXJnZXQuaW5kZXhdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgayA9IDAsIG4gPSBsaW5rcy5sZW5ndGg7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsaW5rLCBzb3VyY2UsIHRhcmdldCwgeCwgeSwgbCwgYjsgaSA8IG47ICsraSkge1xuICAgICAgICBsaW5rID0gbGlua3NbaV0sIHNvdXJjZSA9IGxpbmsuc291cmNlLCB0YXJnZXQgPSBsaW5rLnRhcmdldDtcbiAgICAgICAgeCA9IHRhcmdldC54ICsgdGFyZ2V0LnZ4IC0gc291cmNlLnggLSBzb3VyY2UudnggfHwgamlnZ2xlKCk7XG4gICAgICAgIHkgPSB0YXJnZXQueSArIHRhcmdldC52eSAtIHNvdXJjZS55IC0gc291cmNlLnZ5IHx8IGppZ2dsZSgpO1xuICAgICAgICBsID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgICAgICBsID0gKGwgLSBkaXN0YW5jZXNbaV0pIC8gbCAqIGFscGhhICogc3RyZW5ndGhzW2ldO1xuICAgICAgICB4ICo9IGwsIHkgKj0gbDtcbiAgICAgICAgdGFyZ2V0LnZ4IC09IHggKiAoYiA9IGJpYXNbaV0pO1xuICAgICAgICB0YXJnZXQudnkgLT0geSAqIGI7XG4gICAgICAgIHNvdXJjZS52eCArPSB4ICogKGIgPSAxIC0gYik7XG4gICAgICAgIHNvdXJjZS52eSArPSB5ICogYjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcblxuICAgIHZhciBpLFxuICAgICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBtID0gbGlua3MubGVuZ3RoLFxuICAgICAgICBub2RlQnlJZCA9IG1hcChub2RlcywgaWQpLFxuICAgICAgICBsaW5rO1xuXG4gICAgZm9yIChpID0gMCwgY291bnQgPSBuZXcgQXJyYXkobik7IGkgPCBtOyArK2kpIHtcbiAgICAgIGxpbmsgPSBsaW5rc1tpXSwgbGluay5pbmRleCA9IGk7XG4gICAgICBpZiAodHlwZW9mIGxpbmsuc291cmNlICE9PSBcIm9iamVjdFwiKSBsaW5rLnNvdXJjZSA9IGZpbmQobm9kZUJ5SWQsIGxpbmsuc291cmNlKTtcbiAgICAgIGlmICh0eXBlb2YgbGluay50YXJnZXQgIT09IFwib2JqZWN0XCIpIGxpbmsudGFyZ2V0ID0gZmluZChub2RlQnlJZCwgbGluay50YXJnZXQpO1xuICAgICAgY291bnRbbGluay5zb3VyY2UuaW5kZXhdID0gKGNvdW50W2xpbmsuc291cmNlLmluZGV4XSB8fCAwKSArIDE7XG4gICAgICBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0gPSAoY291bnRbbGluay50YXJnZXQuaW5kZXhdIHx8IDApICsgMTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBiaWFzID0gbmV3IEFycmF5KG0pOyBpIDwgbTsgKytpKSB7XG4gICAgICBsaW5rID0gbGlua3NbaV0sIGJpYXNbaV0gPSBjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gLyAoY291bnRbbGluay5zb3VyY2UuaW5kZXhdICsgY291bnRbbGluay50YXJnZXQuaW5kZXhdKTtcbiAgICB9XG5cbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobSksIGluaXRpYWxpemVTdHJlbmd0aCgpO1xuICAgIGRpc3RhbmNlcyA9IG5ldyBBcnJheShtKSwgaW5pdGlhbGl6ZURpc3RhbmNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplU3RyZW5ndGgoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBsaW5rcy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9ICtzdHJlbmd0aChsaW5rc1tpXSwgaSwgbGlua3MpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVEaXN0YW5jZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgZGlzdGFuY2VzW2ldID0gK2Rpc3RhbmNlKGxpbmtzW2ldLCBpLCBsaW5rcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLmxpbmtzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGxpbmtzID0gXywgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiBsaW5rcztcbiAgfTtcblxuICBmb3JjZS5pZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpZCA9IF8sIGZvcmNlKSA6IGlkO1xuICB9O1xuXG4gIGZvcmNlLml0ZXJhdGlvbnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaXRlcmF0aW9ucyA9ICtfLCBmb3JjZSkgOiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemVTdHJlbmd0aCgpLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS5kaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkaXN0YW5jZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplRGlzdGFuY2UoKSwgZm9yY2UpIDogZGlzdGFuY2U7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgamlnZ2xlIGZyb20gXCIuL2ppZ2dsZVwiO1xuaW1wb3J0IHtxdWFkdHJlZX0gZnJvbSBcImQzLXF1YWR0cmVlXCI7XG5pbXBvcnQge3gsIHl9IGZyb20gXCIuL3NpbXVsYXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlcyxcbiAgICAgIG5vZGUsXG4gICAgICBhbHBoYSxcbiAgICAgIHN0cmVuZ3RoID0gY29uc3RhbnQoLTMwKSxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIGRpc3RhbmNlTWluMiA9IDEsXG4gICAgICBkaXN0YW5jZU1heDIgPSBJbmZpbml0eSxcbiAgICAgIHRoZXRhMiA9IDAuODE7XG5cbiAgZnVuY3Rpb24gZm9yY2UoXykge1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLCB0cmVlID0gcXVhZHRyZWUobm9kZXMsIHgsIHkpLnZpc2l0QWZ0ZXIoYWNjdW11bGF0ZSk7XG4gICAgZm9yIChhbHBoYSA9IF8sIGkgPSAwOyBpIDwgbjsgKytpKSBub2RlID0gbm9kZXNbaV0sIHRyZWUudmlzaXQoYXBwbHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG4gICAgc3RyZW5ndGhzID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIG5vZGUgPSBub2Rlc1tpXSwgc3RyZW5ndGhzW25vZGUuaW5kZXhdID0gK3N0cmVuZ3RoKG5vZGUsIGksIG5vZGVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjY3VtdWxhdGUocXVhZCkge1xuICAgIHZhciBzdHJlbmd0aCA9IDAsIHEsIGMsIHdlaWdodCA9IDAsIHgsIHksIGk7XG5cbiAgICAvLyBGb3IgaW50ZXJuYWwgbm9kZXMsIGFjY3VtdWxhdGUgZm9yY2VzIGZyb20gY2hpbGQgcXVhZHJhbnRzLlxuICAgIGlmIChxdWFkLmxlbmd0aCkge1xuICAgICAgZm9yICh4ID0geSA9IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgIGlmICgocSA9IHF1YWRbaV0pICYmIChjID0gTWF0aC5hYnMocS52YWx1ZSkpKSB7XG4gICAgICAgICAgc3RyZW5ndGggKz0gcS52YWx1ZSwgd2VpZ2h0ICs9IGMsIHggKz0gYyAqIHEueCwgeSArPSBjICogcS55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWFkLnggPSB4IC8gd2VpZ2h0O1xuICAgICAgcXVhZC55ID0geSAvIHdlaWdodDtcbiAgICB9XG5cbiAgICAvLyBGb3IgbGVhZiBub2RlcywgYWNjdW11bGF0ZSBmb3JjZXMgZnJvbSBjb2luY2lkZW50IHF1YWRyYW50cy5cbiAgICBlbHNlIHtcbiAgICAgIHEgPSBxdWFkO1xuICAgICAgcS54ID0gcS5kYXRhLng7XG4gICAgICBxLnkgPSBxLmRhdGEueTtcbiAgICAgIGRvIHN0cmVuZ3RoICs9IHN0cmVuZ3Roc1txLmRhdGEuaW5kZXhdO1xuICAgICAgd2hpbGUgKHEgPSBxLm5leHQpO1xuICAgIH1cblxuICAgIHF1YWQudmFsdWUgPSBzdHJlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5KHF1YWQsIHgxLCBfLCB4Mikge1xuICAgIGlmICghcXVhZC52YWx1ZSkgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgeCA9IHF1YWQueCAtIG5vZGUueCxcbiAgICAgICAgeSA9IHF1YWQueSAtIG5vZGUueSxcbiAgICAgICAgdyA9IHgyIC0geDEsXG4gICAgICAgIGwgPSB4ICogeCArIHkgKiB5O1xuXG4gICAgLy8gQXBwbHkgdGhlIEJhcm5lcy1IdXQgYXBwcm94aW1hdGlvbiBpZiBwb3NzaWJsZS5cbiAgICAvLyBMaW1pdCBmb3JjZXMgZm9yIHZlcnkgY2xvc2Ugbm9kZXM7IHJhbmRvbWl6ZSBkaXJlY3Rpb24gaWYgY29pbmNpZGVudC5cbiAgICBpZiAodyAqIHcgLyB0aGV0YTIgPCBsKSB7XG4gICAgICBpZiAobCA8IGRpc3RhbmNlTWF4Mikge1xuICAgICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZSgpLCBsICs9IHggKiB4O1xuICAgICAgICBpZiAoeSA9PT0gMCkgeSA9IGppZ2dsZSgpLCBsICs9IHkgKiB5O1xuICAgICAgICBpZiAobCA8IGRpc3RhbmNlTWluMikgbCA9IE1hdGguc3FydChkaXN0YW5jZU1pbjIgKiBsKTtcbiAgICAgICAgbm9kZS52eCArPSB4ICogcXVhZC52YWx1ZSAqIGFscGhhIC8gbDtcbiAgICAgICAgbm9kZS52eSArPSB5ICogcXVhZC52YWx1ZSAqIGFscGhhIC8gbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgcHJvY2VzcyBwb2ludHMgZGlyZWN0bHkuXG4gICAgZWxzZSBpZiAocXVhZC5sZW5ndGggfHwgbCA+PSBkaXN0YW5jZU1heDIpIHJldHVybjtcblxuICAgIC8vIExpbWl0IGZvcmNlcyBmb3IgdmVyeSBjbG9zZSBub2RlczsgcmFuZG9taXplIGRpcmVjdGlvbiBpZiBjb2luY2lkZW50LlxuICAgIGlmIChxdWFkLmRhdGEgIT09IG5vZGUgfHwgcXVhZC5uZXh0KSB7XG4gICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZSgpLCBsICs9IHggKiB4O1xuICAgICAgaWYgKHkgPT09IDApIHkgPSBqaWdnbGUoKSwgbCArPSB5ICogeTtcbiAgICAgIGlmIChsIDwgZGlzdGFuY2VNaW4yKSBsID0gTWF0aC5zcXJ0KGRpc3RhbmNlTWluMiAqIGwpO1xuICAgIH1cblxuICAgIGRvIGlmIChxdWFkLmRhdGEgIT09IG5vZGUpIHtcbiAgICAgIHcgPSBzdHJlbmd0aHNbcXVhZC5kYXRhLmluZGV4XSAqIGFscGhhIC8gbDtcbiAgICAgIG5vZGUudnggKz0geCAqIHc7XG4gICAgICBub2RlLnZ5ICs9IHkgKiB3O1xuICAgIH0gd2hpbGUgKHF1YWQgPSBxdWFkLm5leHQpO1xuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UuZGlzdGFuY2VNaW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGlzdGFuY2VNaW4yID0gXyAqIF8sIGZvcmNlKSA6IE1hdGguc3FydChkaXN0YW5jZU1pbjIpO1xuICB9O1xuXG4gIGZvcmNlLmRpc3RhbmNlTWF4ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRpc3RhbmNlTWF4MiA9IF8gKiBfLCBmb3JjZSkgOiBNYXRoLnNxcnQoZGlzdGFuY2VNYXgyKTtcbiAgfTtcblxuICBmb3JjZS50aGV0YSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGV0YTIgPSBfICogXywgZm9yY2UpIDogTWF0aC5zcXJ0KHRoZXRhMik7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJhZGl1cywgeCwgeSkge1xuICB2YXIgbm9kZXMsXG4gICAgICBzdHJlbmd0aCA9IGNvbnN0YW50KDAuMSksXG4gICAgICBzdHJlbmd0aHMsXG4gICAgICByYWRpdXNlcztcblxuICBpZiAodHlwZW9mIHJhZGl1cyAhPT0gXCJmdW5jdGlvblwiKSByYWRpdXMgPSBjb25zdGFudCgrcmFkaXVzKTtcbiAgaWYgKHggPT0gbnVsbCkgeCA9IDA7XG4gIGlmICh5ID09IG51bGwpIHkgPSAwO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV0sXG4gICAgICAgICAgZHggPSBub2RlLnggLSB4IHx8IDFlLTYsXG4gICAgICAgICAgZHkgPSBub2RlLnkgLSB5IHx8IDFlLTYsXG4gICAgICAgICAgciA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSksXG4gICAgICAgICAgayA9IChyYWRpdXNlc1tpXSAtIHIpICogc3RyZW5ndGhzW2ldICogYWxwaGEgLyByO1xuICAgICAgbm9kZS52eCArPSBkeCAqIGs7XG4gICAgICBub2RlLnZ5ICs9IGR5ICogaztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aDtcbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobik7XG4gICAgcmFkaXVzZXMgPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgcmFkaXVzZXNbaV0gPSArcmFkaXVzKG5vZGVzW2ldLCBpLCBub2Rlcyk7XG4gICAgICBzdHJlbmd0aHNbaV0gPSBpc05hTihyYWRpdXNlc1tpXSkgPyAwIDogK3N0cmVuZ3RoKG5vZGVzW2ldLCBpLCBub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF8sIGluaXRpYWxpemUoKTtcbiAgfTtcblxuICBmb3JjZS5zdHJlbmd0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdHJlbmd0aCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLnJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiByYWRpdXM7XG4gIH07XG5cbiAgZm9yY2UueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gK18sIGZvcmNlKSA6IHg7XG4gIH07XG5cbiAgZm9yY2UueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gK18sIGZvcmNlKSA6IHk7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcbmltcG9ydCB7dGltZXJ9IGZyb20gXCJkMy10aW1lclwiO1xuXG5leHBvcnQgZnVuY3Rpb24geChkKSB7XG4gIHJldHVybiBkLng7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KGQpIHtcbiAgcmV0dXJuIGQueTtcbn1cblxudmFyIGluaXRpYWxSYWRpdXMgPSAxMCxcbiAgICBpbml0aWFsQW5nbGUgPSBNYXRoLlBJICogKDMgLSBNYXRoLnNxcnQoNSkpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2Rlcykge1xuICB2YXIgc2ltdWxhdGlvbixcbiAgICAgIGFscGhhID0gMSxcbiAgICAgIGFscGhhTWluID0gMC4wMDEsXG4gICAgICBhbHBoYURlY2F5ID0gMSAtIE1hdGgucG93KGFscGhhTWluLCAxIC8gMzAwKSxcbiAgICAgIGFscGhhVGFyZ2V0ID0gMCxcbiAgICAgIHZlbG9jaXR5RGVjYXkgPSAwLjYsXG4gICAgICBmb3JjZXMgPSBtYXAoKSxcbiAgICAgIHN0ZXBwZXIgPSB0aW1lcihzdGVwKSxcbiAgICAgIGV2ZW50ID0gZGlzcGF0Y2goXCJ0aWNrXCIsIFwiZW5kXCIpO1xuXG4gIGlmIChub2RlcyA9PSBudWxsKSBub2RlcyA9IFtdO1xuXG4gIGZ1bmN0aW9uIHN0ZXAoKSB7XG4gICAgdGljaygpO1xuICAgIGV2ZW50LmNhbGwoXCJ0aWNrXCIsIHNpbXVsYXRpb24pO1xuICAgIGlmIChhbHBoYSA8IGFscGhhTWluKSB7XG4gICAgICBzdGVwcGVyLnN0b3AoKTtcbiAgICAgIGV2ZW50LmNhbGwoXCJlbmRcIiwgc2ltdWxhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGljayhpdGVyYXRpb25zKSB7XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG5cbiAgICBpZiAoaXRlcmF0aW9ucyA9PT0gdW5kZWZpbmVkKSBpdGVyYXRpb25zID0gMTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaXRlcmF0aW9uczsgKytrKSB7XG4gICAgICBhbHBoYSArPSAoYWxwaGFUYXJnZXQgLSBhbHBoYSkgKiBhbHBoYURlY2F5O1xuXG4gICAgICBmb3JjZXMuZWFjaChmdW5jdGlvbiAoZm9yY2UpIHtcbiAgICAgICAgZm9yY2UoYWxwaGEpO1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5meCA9PSBudWxsKSBub2RlLnggKz0gbm9kZS52eCAqPSB2ZWxvY2l0eURlY2F5O1xuICAgICAgICBlbHNlIG5vZGUueCA9IG5vZGUuZngsIG5vZGUudnggPSAwO1xuICAgICAgICBpZiAobm9kZS5meSA9PSBudWxsKSBub2RlLnkgKz0gbm9kZS52eSAqPSB2ZWxvY2l0eURlY2F5O1xuICAgICAgICBlbHNlIG5vZGUueSA9IG5vZGUuZnksIG5vZGUudnkgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaW11bGF0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZU5vZGVzKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbm9kZXMubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUuaW5kZXggPSBpO1xuICAgICAgaWYgKG5vZGUuZnggIT0gbnVsbCkgbm9kZS54ID0gbm9kZS5meDtcbiAgICAgIGlmIChub2RlLmZ5ICE9IG51bGwpIG5vZGUueSA9IG5vZGUuZnk7XG4gICAgICBpZiAoaXNOYU4obm9kZS54KSB8fCBpc05hTihub2RlLnkpKSB7XG4gICAgICAgIHZhciByYWRpdXMgPSBpbml0aWFsUmFkaXVzICogTWF0aC5zcXJ0KGkpLCBhbmdsZSA9IGkgKiBpbml0aWFsQW5nbGU7XG4gICAgICAgIG5vZGUueCA9IHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgbm9kZS55ID0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmFOKG5vZGUudngpIHx8IGlzTmFOKG5vZGUudnkpKSB7XG4gICAgICAgIG5vZGUudnggPSBub2RlLnZ5ID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplRm9yY2UoZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UuaW5pdGlhbGl6ZSkgZm9yY2UuaW5pdGlhbGl6ZShub2Rlcyk7XG4gICAgcmV0dXJuIGZvcmNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZU5vZGVzKCk7XG5cbiAgcmV0dXJuIHNpbXVsYXRpb24gPSB7XG4gICAgdGljazogdGljayxcblxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0ZXBwZXIucmVzdGFydChzdGVwKSwgc2ltdWxhdGlvbjtcbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3RlcHBlci5zdG9wKCksIHNpbXVsYXRpb247XG4gICAgfSxcblxuICAgIG5vZGVzOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlcyA9IF8sIGluaXRpYWxpemVOb2RlcygpLCBmb3JjZXMuZWFjaChpbml0aWFsaXplRm9yY2UpLCBzaW11bGF0aW9uKSA6IG5vZGVzO1xuICAgIH0sXG5cbiAgICBhbHBoYTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYTtcbiAgICB9LFxuXG4gICAgYWxwaGFNaW46IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhTWluID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFNaW47XG4gICAgfSxcblxuICAgIGFscGhhRGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhRGVjYXkgPSArXywgc2ltdWxhdGlvbikgOiArYWxwaGFEZWNheTtcbiAgICB9LFxuXG4gICAgYWxwaGFUYXJnZXQ6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhVGFyZ2V0ID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFUYXJnZXQ7XG4gICAgfSxcblxuICAgIHZlbG9jaXR5RGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZlbG9jaXR5RGVjYXkgPSAxIC0gXywgc2ltdWxhdGlvbikgOiAxIC0gdmVsb2NpdHlEZWNheTtcbiAgICB9LFxuXG4gICAgZm9yY2U6IGZ1bmN0aW9uKG5hbWUsIF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMSA/ICgoXyA9PSBudWxsID8gZm9yY2VzLnJlbW92ZShuYW1lKSA6IGZvcmNlcy5zZXQobmFtZSwgaW5pdGlhbGl6ZUZvcmNlKF8pKSksIHNpbXVsYXRpb24pIDogZm9yY2VzLmdldChuYW1lKTtcbiAgICB9LFxuXG4gICAgZmluZDogZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBkeCxcbiAgICAgICAgICBkeSxcbiAgICAgICAgICBkMixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIGNsb3Nlc3Q7XG5cbiAgICAgIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gICAgICBlbHNlIHJhZGl1cyAqPSByYWRpdXM7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBkeCA9IHggLSBub2RlLng7XG4gICAgICAgIGR5ID0geSAtIG5vZGUueTtcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICAgICAgaWYgKGQyIDwgcmFkaXVzKSBjbG9zZXN0ID0gbm9kZSwgcmFkaXVzID0gZDI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbG9zZXN0O1xuICAgIH0sXG5cbiAgICBvbjogZnVuY3Rpb24obmFtZSwgXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gKGV2ZW50Lm9uKG5hbWUsIF8pLCBzaW11bGF0aW9uKSA6IGV2ZW50Lm9uKG5hbWUpO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHZhciBzdHJlbmd0aCA9IGNvbnN0YW50KDAuMSksXG4gICAgICBub2RlcyxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIHh6O1xuXG4gIGlmICh0eXBlb2YgeCAhPT0gXCJmdW5jdGlvblwiKSB4ID0gY29uc3RhbnQoeCA9PSBudWxsID8gMCA6ICt4KTtcblxuICBmdW5jdGlvbiBmb3JjZShhbHBoYSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbm9kZXMubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUudnggKz0gKHh6W2ldIC0gbm9kZS54KSAqIHN0cmVuZ3Roc1tpXSAqIGFscGhhO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoO1xuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShuKTtcbiAgICB4eiA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBzdHJlbmd0aHNbaV0gPSBpc05hTih4eltpXSA9ICt4KG5vZGVzW2ldLCBpLCBub2RlcykpID8gMCA6ICtzdHJlbmd0aChub2Rlc1tpXSwgaSwgbm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgbm9kZXMgPSBfO1xuICAgIGluaXRpYWxpemUoKTtcbiAgfTtcblxuICBmb3JjZS5zdHJlbmd0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdHJlbmd0aCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHg7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHkpIHtcbiAgdmFyIHN0cmVuZ3RoID0gY29uc3RhbnQoMC4xKSxcbiAgICAgIG5vZGVzLFxuICAgICAgc3RyZW5ndGhzLFxuICAgICAgeXo7XG5cbiAgaWYgKHR5cGVvZiB5ICE9PSBcImZ1bmN0aW9uXCIpIHkgPSBjb25zdGFudCh5ID09IG51bGwgPyAwIDogK3kpO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS52eSArPSAoeXpbaV0gLSBub2RlLnkpICogc3RyZW5ndGhzW2ldICogYWxwaGE7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGg7XG4gICAgc3RyZW5ndGhzID0gbmV3IEFycmF5KG4pO1xuICAgIHl6ID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9IGlzTmFOKHl6W2ldID0gK3kobm9kZXNbaV0sIGksIG5vZGVzKSkgPyAwIDogK3N0cmVuZ3RoKG5vZGVzW2ldLCBpLCBub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogeTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZVwiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciBmb3JtYXQ7XG5leHBvcnQgdmFyIGZvcm1hdFByZWZpeDtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRlY2ltYWw6IFwiLlwiLFxuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsKE1hdGguYWJzKHgpKSwgeCA/IHhbMV0gOiBOYU47XG59XG4iLCIvLyBDb21wdXRlcyB0aGUgZGVjaW1hbCBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQgb2YgdGhlIHNwZWNpZmllZCBudW1iZXIgeCB3aXRoXG4vLyBzaWduaWZpY2FudCBkaWdpdHMgcCwgd2hlcmUgeCBpcyBwb3NpdGl2ZSBhbmQgcCBpcyBpbiBbMSwgMjFdIG9yIHVuZGVmaW5lZC5cbi8vIEZvciBleGFtcGxlLCBmb3JtYXREZWNpbWFsKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcbiAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRvRXhwb25lbnRpYWwgZWl0aGVyIGhhcyB0aGUgZm9ybSBcXGRcXC5cXGQrZVstK11cXGQrXG4gIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXG4gIHJldHVybiBbXG4gICAgY29lZmZpY2llbnQubGVuZ3RoID4gMSA/IGNvZWZmaWNpZW50WzBdICsgY29lZmZpY2llbnQuc2xpY2UoMikgOiBjb2VmZmljaWVudCxcbiAgICAreC5zbGljZShpICsgMSlcbiAgXTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGdyb3VwaW5nLCB0aG91c2FuZHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCB3aWR0aCkge1xuICAgIHZhciBpID0gdmFsdWUubGVuZ3RoLFxuICAgICAgICB0ID0gW10sXG4gICAgICAgIGogPSAwLFxuICAgICAgICBnID0gZ3JvdXBpbmdbMF0sXG4gICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICB3aGlsZSAoaSA+IDAgJiYgZyA+IDApIHtcbiAgICAgIGlmIChsZW5ndGggKyBnICsgMSA+IHdpZHRoKSBnID0gTWF0aC5tYXgoMSwgd2lkdGggLSBsZW5ndGgpO1xuICAgICAgdC5wdXNoKHZhbHVlLnN1YnN0cmluZyhpIC09IGcsIGkgKyBnKSk7XG4gICAgICBpZiAoKGxlbmd0aCArPSBnICsgMSkgPiB3aWR0aCkgYnJlYWs7XG4gICAgICBnID0gZ3JvdXBpbmdbaiA9IChqICsgMSkgJSBncm91cGluZy5sZW5ndGhdO1xuICAgIH1cblxuICAgIHJldHVybiB0LnJldmVyc2UoKS5qb2luKHRob3VzYW5kcyk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihudW1lcmFscykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWzAtOV0vZywgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIG51bWVyYWxzWytpXTtcbiAgICB9KTtcbiAgfTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWwoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgdGhpcy5maWxsID0gbWF0Y2hbMV0gfHwgXCIgXCI7XG4gIHRoaXMuYWxpZ24gPSBtYXRjaFsyXSB8fCBcIj5cIjtcbiAgdGhpcy5zaWduID0gbWF0Y2hbM10gfHwgXCItXCI7XG4gIHRoaXMuc3ltYm9sID0gbWF0Y2hbNF0gfHwgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFtYXRjaFs1XTtcbiAgdGhpcy53aWR0aCA9IG1hdGNoWzZdICYmICttYXRjaFs2XTtcbiAgdGhpcy5jb21tYSA9ICEhbWF0Y2hbN107XG4gIHRoaXMucHJlY2lzaW9uID0gbWF0Y2hbOF0gJiYgK21hdGNoWzhdLnNsaWNlKDEpO1xuICB0aGlzLnRyaW0gPSAhIW1hdGNoWzldO1xuICB0aGlzLnR5cGUgPSBtYXRjaFsxMF0gfHwgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09IG51bGwgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09IG51bGwgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKGkwID4gMCkgeyBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGkwID0gMDsgfSBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGkwID4gMCA/IHMuc2xpY2UoMCwgaTApICsgcy5zbGljZShpMSArIDEpIDogcztcbn1cbiIsImltcG9ydCBmb3JtYXRQcmVmaXhBdXRvIGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG9cIjtcbmltcG9ydCBmb3JtYXRSb3VuZGVkIGZyb20gXCIuL2Zvcm1hdFJvdW5kZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBcIiVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gKHggKiAxMDApLnRvRml4ZWQocCk7IH0sXG4gIFwiYlwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpOyB9LFxuICBcImNcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4geCArIFwiXCI7IH0sXG4gIFwiZFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDEwKTsgfSxcbiAgXCJlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9FeHBvbmVudGlhbChwKTsgfSxcbiAgXCJmXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9GaXhlZChwKTsgfSxcbiAgXCJnXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9QcmVjaXNpb24ocCk7IH0sXG4gIFwib1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpOyB9LFxuICBcInBcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKTsgfSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsgfSxcbiAgXCJ4XCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpOyB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JtYXREZWZhdWx0TG9jYWxlLCBmb3JtYXQsIGZvcm1hdFByZWZpeH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcm1hdExvY2FsZX0gZnJvbSBcIi4vbG9jYWxlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9ybWF0U3BlY2lmaWVyfSBmcm9tIFwiLi9mb3JtYXRTcGVjaWZpZXJcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25GaXhlZH0gZnJvbSBcIi4vcHJlY2lzaW9uRml4ZWRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25QcmVmaXh9IGZyb20gXCIuL3ByZWNpc2lvblByZWZpeFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiLi9wcmVjaXNpb25Sb3VuZFwiO1xuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5pbXBvcnQgZm9ybWF0R3JvdXAgZnJvbSBcIi4vZm9ybWF0R3JvdXBcIjtcbmltcG9ydCBmb3JtYXROdW1lcmFscyBmcm9tIFwiLi9mb3JtYXROdW1lcmFsc1wiO1xuaW1wb3J0IGZvcm1hdFNwZWNpZmllciBmcm9tIFwiLi9mb3JtYXRTcGVjaWZpZXJcIjtcbmltcG9ydCBmb3JtYXRUcmltIGZyb20gXCIuL2Zvcm1hdFRyaW1cIjtcbmltcG9ydCBmb3JtYXRUeXBlcyBmcm9tIFwiLi9mb3JtYXRUeXBlc1wiO1xuaW1wb3J0IHtwcmVmaXhFeHBvbmVudH0gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0b1wiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5XCI7XG5cbnZhciBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxvY2FsZSkge1xuICB2YXIgZ3JvdXAgPSBsb2NhbGUuZ3JvdXBpbmcgJiYgbG9jYWxlLnRob3VzYW5kcyA/IGZvcm1hdEdyb3VwKGxvY2FsZS5ncm91cGluZywgbG9jYWxlLnRob3VzYW5kcykgOiBpZGVudGl0eSxcbiAgICAgIGN1cnJlbmN5ID0gbG9jYWxlLmN1cnJlbmN5LFxuICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsLFxuICAgICAgbnVtZXJhbHMgPSBsb2NhbGUubnVtZXJhbHMgPyBmb3JtYXROdW1lcmFscyhsb2NhbGUubnVtZXJhbHMpIDogaWRlbnRpdHksXG4gICAgICBwZXJjZW50ID0gbG9jYWxlLnBlcmNlbnQgfHwgXCIlXCI7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcbiAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcbiAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXG4gICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gVGhlIFwiXCIgdHlwZSwgYW5kIGFueSBpbnZhbGlkIHR5cGUsIGlzIGFuIGFsaWFzIGZvciBcIi4xMn5nXCIuXG4gICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT0gbnVsbCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXG4gICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5WzBdIDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lbMV0gOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cbiAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXG4gICAgICAgIG1heWJlU3VmZml4ID0gL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PSBudWxsID8gNlxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgICB2YWx1ZSA9IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgaWYgKHRyaW0pIHZhbHVlID0gZm9ybWF0VHJpbSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgYSBuZWdhdGl2ZSB2YWx1ZSByb3VuZHMgdG8gemVybyBkdXJpbmcgZm9ybWF0dGluZywgdHJlYXQgYXMgcG9zaXRpdmUuXG4gICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCkgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IFwiLVwiKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArIHZhbHVlU3VmZml4ICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgIC8vIEJyZWFrIHRoZSBmb3JtYXR0ZWQgdmFsdWUgaW50byB0aGUgaW50ZWdlciDigJx2YWx1ZeKAnSBwYXJ0IHRoYXQgY2FuIGJlXG4gICAgICAgIC8vIGdyb3VwZWQsIGFuZCBmcmFjdGlvbmFsIG9yIGV4cG9uZW50aWFsIOKAnHN1ZmZpeOKAnSBwYXJ0IHRoYXQgaXMgbm90LlxuICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICBpID0gLTEsIG4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IChjID09PSA0NiA/IGRlY2ltYWwgKyB2YWx1ZS5zbGljZShpICsgMSkgOiB2YWx1ZS5zbGljZShpKSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBub3QgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcGFkZGluZy5cbiAgICAgIHZhciBsZW5ndGggPSB2YWx1ZVByZWZpeC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyB2YWx1ZVN1ZmZpeC5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBhZnRlciBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmIHplcm8pIHZhbHVlID0gZ3JvdXAocGFkZGluZyArIHZhbHVlLCBwYWRkaW5nLmxlbmd0aCA/IHdpZHRoIC0gdmFsdWVTdWZmaXgubGVuZ3RoIDogSW5maW5pdHkpLCBwYWRkaW5nID0gXCJcIjtcblxuICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICAgIGNhc2UgXCI8XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZzsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCI9XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJeXCI6IHZhbHVlID0gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHZhbHVlID0gcGFkZGluZyArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW1lcmFscyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3BlY2lmaWVyICsgXCJcIjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKSB7XG4gICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgZSA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzLFxuICAgICAgICBrID0gTWF0aC5wb3coMTAsIC1lKSxcbiAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmKGsgKiB2YWx1ZSkgKyBwcmVmaXg7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgZm9ybWF0UHJlZml4OiBmb3JtYXRQcmVmaXhcbiAgfTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIG1heCkge1xuICBzdGVwID0gTWF0aC5hYnMoc3RlcCksIG1heCA9IE1hdGguYWJzKG1heCkgLSBzdGVwO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgZXhwb25lbnQobWF4KSAtIGV4cG9uZW50KHN0ZXApKSArIDE7XG59XG4iLCIvLyBBZGRzIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgd2l0aCB0d2ljZSB0aGUgbm9ybWFsIHByZWNpc2lvbi5cbi8vIFJlZmVyZW5jZTogSi4gUi4gU2hld2NodWssIEFkYXB0aXZlIFByZWNpc2lvbiBGbG9hdGluZy1Qb2ludCBBcml0aG1ldGljIGFuZFxuLy8gRmFzdCBSb2J1c3QgR2VvbWV0cmljIFByZWRpY2F0ZXMsIERpc2NyZXRlICYgQ29tcHV0YXRpb25hbCBHZW9tZXRyeSAxOCgzKVxuLy8gMzA14oCTMzYzICgxOTk3KS5cbi8vIENvZGUgYWRhcHRlZCBmcm9tIEdlb2dyYXBoaWNMaWIgYnkgQ2hhcmxlcyBGLiBGLiBLYXJuZXksXG4vLyBodHRwOi8vZ2VvZ3JhcGhpY2xpYi5zb3VyY2Vmb3JnZS5uZXQvXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IEFkZGVyO1xufVxuXG5mdW5jdGlvbiBBZGRlcigpIHtcbiAgdGhpcy5yZXNldCgpO1xufVxuXG5BZGRlci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBBZGRlcixcbiAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucyA9IC8vIHJvdW5kZWQgdmFsdWVcbiAgICB0aGlzLnQgPSAwOyAvLyBleGFjdCBlcnJvclxuICB9LFxuICBhZGQ6IGZ1bmN0aW9uKHkpIHtcbiAgICBhZGQodGVtcCwgeSwgdGhpcy50KTtcbiAgICBhZGQodGhpcywgdGVtcC5zLCB0aGlzLnMpO1xuICAgIGlmICh0aGlzLnMpIHRoaXMudCArPSB0ZW1wLnQ7XG4gICAgZWxzZSB0aGlzLnMgPSB0ZW1wLnQ7XG4gIH0sXG4gIHZhbHVlT2Y6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnM7XG4gIH1cbn07XG5cbnZhciB0ZW1wID0gbmV3IEFkZGVyO1xuXG5mdW5jdGlvbiBhZGQoYWRkZXIsIGEsIGIpIHtcbiAgdmFyIHggPSBhZGRlci5zID0gYSArIGIsXG4gICAgICBidiA9IHggLSBhLFxuICAgICAgYXYgPSB4IC0gYnY7XG4gIGFkZGVyLnQgPSAoYSAtIGF2KSArIChiIC0gYnYpO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2F0YW4yLCBjb3MsIHF1YXJ0ZXJQaSwgcmFkaWFucywgc2luLCB0YXV9IGZyb20gXCIuL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuL25vb3BcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4vc3RyZWFtXCI7XG5cbmV4cG9ydCB2YXIgYXJlYVJpbmdTdW0gPSBhZGRlcigpO1xuXG52YXIgYXJlYVN1bSA9IGFkZGVyKCksXG4gICAgbGFtYmRhMDAsXG4gICAgcGhpMDAsXG4gICAgbGFtYmRhMCxcbiAgICBjb3NQaGkwLFxuICAgIHNpblBoaTA7XG5cbmV4cG9ydCB2YXIgYXJlYVN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogbm9vcCxcbiAgbGluZUVuZDogbm9vcCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBhcmVhUmluZ1N1bS5yZXNldCgpO1xuICAgIGFyZWFTdHJlYW0ubGluZVN0YXJ0ID0gYXJlYVJpbmdTdGFydDtcbiAgICBhcmVhU3RyZWFtLmxpbmVFbmQgPSBhcmVhUmluZ0VuZDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWFSaW5nID0gK2FyZWFSaW5nU3VtO1xuICAgIGFyZWFTdW0uYWRkKGFyZWFSaW5nIDwgMCA/IHRhdSArIGFyZWFSaW5nIDogYXJlYVJpbmcpO1xuICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5saW5lRW5kID0gdGhpcy5wb2ludCA9IG5vb3A7XG4gIH0sXG4gIHNwaGVyZTogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN1bS5hZGQodGF1KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXJlYVJpbmdTdGFydCgpIHtcbiAgYXJlYVN0cmVhbS5wb2ludCA9IGFyZWFQb2ludEZpcnN0O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludEZpcnN0KGxhbWJkYSwgcGhpKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnQ7XG4gIGxhbWJkYTAwID0gbGFtYmRhLCBwaGkwMCA9IHBoaTtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICBsYW1iZGEwID0gbGFtYmRhLCBjb3NQaGkwID0gY29zKHBoaSA9IHBoaSAvIDIgKyBxdWFydGVyUGkpLCBzaW5QaGkwID0gc2luKHBoaSk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHBoaSA9IHBoaSAvIDIgKyBxdWFydGVyUGk7IC8vIGhhbGYgdGhlIGFuZ3VsYXIgZGlzdGFuY2UgZnJvbSBzb3V0aCBwb2xlXG5cbiAgLy8gU3BoZXJpY2FsIGV4Y2VzcyBFIGZvciBhIHNwaGVyaWNhbCB0cmlhbmdsZSB3aXRoIHZlcnRpY2VzOiBzb3V0aCBwb2xlLFxuICAvLyBwcmV2aW91cyBwb2ludCwgY3VycmVudCBwb2ludC4gIFVzZXMgYSBmb3JtdWxhIGRlcml2ZWQgZnJvbSBDYWdub2xp4oCZc1xuICAvLyB0aGVvcmVtLiAgU2VlIFRvZGh1bnRlciwgU3BoZXJpY2FsIFRyaWcuICgxODcxKSwgU2VjLiAxMDMsIEVxLiAoMikuXG4gIHZhciBkTGFtYmRhID0gbGFtYmRhIC0gbGFtYmRhMCxcbiAgICAgIHNkTGFtYmRhID0gZExhbWJkYSA+PSAwID8gMSA6IC0xLFxuICAgICAgYWRMYW1iZGEgPSBzZExhbWJkYSAqIGRMYW1iZGEsXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIHNpblBoaSA9IHNpbihwaGkpLFxuICAgICAgayA9IHNpblBoaTAgKiBzaW5QaGksXG4gICAgICB1ID0gY29zUGhpMCAqIGNvc1BoaSArIGsgKiBjb3MoYWRMYW1iZGEpLFxuICAgICAgdiA9IGsgKiBzZExhbWJkYSAqIHNpbihhZExhbWJkYSk7XG4gIGFyZWFSaW5nU3VtLmFkZChhdGFuMih2LCB1KSk7XG5cbiAgLy8gQWR2YW5jZSB0aGUgcHJldmlvdXMgcG9pbnRzLlxuICBsYW1iZGEwID0gbGFtYmRhLCBjb3NQaGkwID0gY29zUGhpLCBzaW5QaGkwID0gc2luUGhpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcbiAgYXJlYVN1bS5yZXNldCgpO1xuICBzdHJlYW0ob2JqZWN0LCBhcmVhU3RyZWFtKTtcbiAgcmV0dXJuIGFyZWFTdW0gKiAyO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2FyZWFTdHJlYW0sIGFyZWFSaW5nU3VtfSBmcm9tIFwiLi9hcmVhXCI7XG5pbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UsIHNwaGVyaWNhbH0gZnJvbSBcIi4vY2FydGVzaWFuXCI7XG5pbXBvcnQge2FicywgZGVncmVlcywgZXBzaWxvbiwgcmFkaWFuc30gZnJvbSBcIi4vbWF0aFwiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi9zdHJlYW1cIjtcblxudmFyIGxhbWJkYTAsIHBoaTAsIGxhbWJkYTEsIHBoaTEsIC8vIGJvdW5kc1xuICAgIGxhbWJkYTIsIC8vIHByZXZpb3VzIGxhbWJkYS1jb29yZGluYXRlXG4gICAgbGFtYmRhMDAsIHBoaTAwLCAvLyBmaXJzdCBwb2ludFxuICAgIHAwLCAvLyBwcmV2aW91cyAzRCBwb2ludFxuICAgIGRlbHRhU3VtID0gYWRkZXIoKSxcbiAgICByYW5nZXMsXG4gICAgcmFuZ2U7XG5cbnZhciBib3VuZHNTdHJlYW0gPSB7XG4gIHBvaW50OiBib3VuZHNQb2ludCxcbiAgbGluZVN0YXJ0OiBib3VuZHNMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IGJvdW5kc0xpbmVFbmQsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUmluZ1BvaW50O1xuICAgIGJvdW5kc1N0cmVhbS5saW5lU3RhcnQgPSBib3VuZHNSaW5nU3RhcnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVFbmQgPSBib3VuZHNSaW5nRW5kO1xuICAgIGRlbHRhU3VtLnJlc2V0KCk7XG4gICAgYXJlYVN0cmVhbS5wb2x5Z29uU3RhcnQoKTtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5wb2x5Z29uRW5kKCk7XG4gICAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUG9pbnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVTdGFydCA9IGJvdW5kc0xpbmVTdGFydDtcbiAgICBib3VuZHNTdHJlYW0ubGluZUVuZCA9IGJvdW5kc0xpbmVFbmQ7XG4gICAgaWYgKGFyZWFSaW5nU3VtIDwgMCkgbGFtYmRhMCA9IC0obGFtYmRhMSA9IDE4MCksIHBoaTAgPSAtKHBoaTEgPSA5MCk7XG4gICAgZWxzZSBpZiAoZGVsdGFTdW0gPiBlcHNpbG9uKSBwaGkxID0gOTA7XG4gICAgZWxzZSBpZiAoZGVsdGFTdW0gPCAtZXBzaWxvbikgcGhpMCA9IC05MDtcbiAgICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYm91bmRzUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgcmFuZ2VzLnB1c2gocmFuZ2UgPSBbbGFtYmRhMCA9IGxhbWJkYSwgbGFtYmRhMSA9IGxhbWJkYV0pO1xuICBpZiAocGhpIDwgcGhpMCkgcGhpMCA9IHBoaTtcbiAgaWYgKHBoaSA+IHBoaTEpIHBoaTEgPSBwaGk7XG59XG5cbmZ1bmN0aW9uIGxpbmVQb2ludChsYW1iZGEsIHBoaSkge1xuICB2YXIgcCA9IGNhcnRlc2lhbihbbGFtYmRhICogcmFkaWFucywgcGhpICogcmFkaWFuc10pO1xuICBpZiAocDApIHtcbiAgICB2YXIgbm9ybWFsID0gY2FydGVzaWFuQ3Jvc3MocDAsIHApLFxuICAgICAgICBlcXVhdG9yaWFsID0gW25vcm1hbFsxXSwgLW5vcm1hbFswXSwgMF0sXG4gICAgICAgIGluZmxlY3Rpb24gPSBjYXJ0ZXNpYW5Dcm9zcyhlcXVhdG9yaWFsLCBub3JtYWwpO1xuICAgIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoaW5mbGVjdGlvbik7XG4gICAgaW5mbGVjdGlvbiA9IHNwaGVyaWNhbChpbmZsZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBsYW1iZGEgLSBsYW1iZGEyLFxuICAgICAgICBzaWduID0gZGVsdGEgPiAwID8gMSA6IC0xLFxuICAgICAgICBsYW1iZGFpID0gaW5mbGVjdGlvblswXSAqIGRlZ3JlZXMgKiBzaWduLFxuICAgICAgICBwaGlpLFxuICAgICAgICBhbnRpbWVyaWRpYW4gPSBhYnMoZGVsdGEpID4gMTgwO1xuICAgIGlmIChhbnRpbWVyaWRpYW4gXiAoc2lnbiAqIGxhbWJkYTIgPCBsYW1iZGFpICYmIGxhbWJkYWkgPCBzaWduICogbGFtYmRhKSkge1xuICAgICAgcGhpaSA9IGluZmxlY3Rpb25bMV0gKiBkZWdyZWVzO1xuICAgICAgaWYgKHBoaWkgPiBwaGkxKSBwaGkxID0gcGhpaTtcbiAgICB9IGVsc2UgaWYgKGxhbWJkYWkgPSAobGFtYmRhaSArIDM2MCkgJSAzNjAgLSAxODAsIGFudGltZXJpZGlhbiBeIChzaWduICogbGFtYmRhMiA8IGxhbWJkYWkgJiYgbGFtYmRhaSA8IHNpZ24gKiBsYW1iZGEpKSB7XG4gICAgICBwaGlpID0gLWluZmxlY3Rpb25bMV0gKiBkZWdyZWVzO1xuICAgICAgaWYgKHBoaWkgPCBwaGkwKSBwaGkwID0gcGhpaTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBoaSA8IHBoaTApIHBoaTAgPSBwaGk7XG4gICAgICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbiAgICB9XG4gICAgaWYgKGFudGltZXJpZGlhbikge1xuICAgICAgaWYgKGxhbWJkYSA8IGxhbWJkYTIpIHtcbiAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYTAsIGxhbWJkYSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMSA9IGxhbWJkYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbmdsZShsYW1iZGEsIGxhbWJkYTEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsYW1iZGExID49IGxhbWJkYTApIHtcbiAgICAgICAgaWYgKGxhbWJkYSA8IGxhbWJkYTApIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICAgIGlmIChsYW1iZGEgPiBsYW1iZGExKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxhbWJkYSA+IGxhbWJkYTIpIHtcbiAgICAgICAgICBpZiAoYW5nbGUobGFtYmRhMCwgbGFtYmRhKSA+IGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChhbmdsZShsYW1iZGEsIGxhbWJkYTEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFuZ2VzLnB1c2gocmFuZ2UgPSBbbGFtYmRhMCA9IGxhbWJkYSwgbGFtYmRhMSA9IGxhbWJkYV0pO1xuICB9XG4gIGlmIChwaGkgPCBwaGkwKSBwaGkwID0gcGhpO1xuICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbiAgcDAgPSBwLCBsYW1iZGEyID0gbGFtYmRhO1xufVxuXG5mdW5jdGlvbiBib3VuZHNMaW5lU3RhcnQoKSB7XG4gIGJvdW5kc1N0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbn1cblxuZnVuY3Rpb24gYm91bmRzTGluZUVuZCgpIHtcbiAgcmFuZ2VbMF0gPSBsYW1iZGEwLCByYW5nZVsxXSA9IGxhbWJkYTE7XG4gIGJvdW5kc1N0cmVhbS5wb2ludCA9IGJvdW5kc1BvaW50O1xuICBwMCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdQb2ludChsYW1iZGEsIHBoaSkge1xuICBpZiAocDApIHtcbiAgICB2YXIgZGVsdGEgPSBsYW1iZGEgLSBsYW1iZGEyO1xuICAgIGRlbHRhU3VtLmFkZChhYnMoZGVsdGEpID4gMTgwID8gZGVsdGEgKyAoZGVsdGEgPiAwID8gMzYwIDogLTM2MCkgOiBkZWx0YSk7XG4gIH0gZWxzZSB7XG4gICAgbGFtYmRhMDAgPSBsYW1iZGEsIHBoaTAwID0gcGhpO1xuICB9XG4gIGFyZWFTdHJlYW0ucG9pbnQobGFtYmRhLCBwaGkpO1xuICBsaW5lUG9pbnQobGFtYmRhLCBwaGkpO1xufVxuXG5mdW5jdGlvbiBib3VuZHNSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ubGluZVN0YXJ0KCk7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdFbmQoKSB7XG4gIGJvdW5kc1JpbmdQb2ludChsYW1iZGEwMCwgcGhpMDApO1xuICBhcmVhU3RyZWFtLmxpbmVFbmQoKTtcbiAgaWYgKGFicyhkZWx0YVN1bSkgPiBlcHNpbG9uKSBsYW1iZGEwID0gLShsYW1iZGExID0gMTgwKTtcbiAgcmFuZ2VbMF0gPSBsYW1iZGEwLCByYW5nZVsxXSA9IGxhbWJkYTE7XG4gIHAwID0gbnVsbDtcbn1cblxuLy8gRmluZHMgdGhlIGxlZnQtcmlnaHQgZGlzdGFuY2UgYmV0d2VlbiB0d28gbG9uZ2l0dWRlcy5cbi8vIFRoaXMgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIChsYW1iZGExIC0gbGFtYmRhMCArIDM2MMKwKSAlIDM2MMKwLCBleGNlcHQgdGhhdCB3ZSB3YW50XG4vLyB0aGUgZGlzdGFuY2UgYmV0d2VlbiDCsTE4MMKwIHRvIGJlIDM2MMKwLlxuZnVuY3Rpb24gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkge1xuICByZXR1cm4gKGxhbWJkYTEgLT0gbGFtYmRhMCkgPCAwID8gbGFtYmRhMSArIDM2MCA6IGxhbWJkYTE7XG59XG5cbmZ1bmN0aW9uIHJhbmdlQ29tcGFyZShhLCBiKSB7XG4gIHJldHVybiBhWzBdIC0gYlswXTtcbn1cblxuZnVuY3Rpb24gcmFuZ2VDb250YWlucyhyYW5nZSwgeCkge1xuICByZXR1cm4gcmFuZ2VbMF0gPD0gcmFuZ2VbMV0gPyByYW5nZVswXSA8PSB4ICYmIHggPD0gcmFuZ2VbMV0gOiB4IDwgcmFuZ2VbMF0gfHwgcmFuZ2VbMV0gPCB4O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihmZWF0dXJlKSB7XG4gIHZhciBpLCBuLCBhLCBiLCBtZXJnZWQsIGRlbHRhTWF4LCBkZWx0YTtcblxuICBwaGkxID0gbGFtYmRhMSA9IC0obGFtYmRhMCA9IHBoaTAgPSBJbmZpbml0eSk7XG4gIHJhbmdlcyA9IFtdO1xuICBzdHJlYW0oZmVhdHVyZSwgYm91bmRzU3RyZWFtKTtcblxuICAvLyBGaXJzdCwgc29ydCByYW5nZXMgYnkgdGhlaXIgbWluaW11bSBsb25naXR1ZGVzLlxuICBpZiAobiA9IHJhbmdlcy5sZW5ndGgpIHtcbiAgICByYW5nZXMuc29ydChyYW5nZUNvbXBhcmUpO1xuXG4gICAgLy8gVGhlbiwgbWVyZ2UgYW55IHJhbmdlcyB0aGF0IG92ZXJsYXAuXG4gICAgZm9yIChpID0gMSwgYSA9IHJhbmdlc1swXSwgbWVyZ2VkID0gW2FdOyBpIDwgbjsgKytpKSB7XG4gICAgICBiID0gcmFuZ2VzW2ldO1xuICAgICAgaWYgKHJhbmdlQ29udGFpbnMoYSwgYlswXSkgfHwgcmFuZ2VDb250YWlucyhhLCBiWzFdKSkge1xuICAgICAgICBpZiAoYW5nbGUoYVswXSwgYlsxXSkgPiBhbmdsZShhWzBdLCBhWzFdKSkgYVsxXSA9IGJbMV07XG4gICAgICAgIGlmIChhbmdsZShiWzBdLCBhWzFdKSA+IGFuZ2xlKGFbMF0sIGFbMV0pKSBhWzBdID0gYlswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlZC5wdXNoKGEgPSBiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaW5hbGx5LCBmaW5kIHRoZSBsYXJnZXN0IGdhcCBiZXR3ZWVuIHRoZSBtZXJnZWQgcmFuZ2VzLlxuICAgIC8vIFRoZSBmaW5hbCBib3VuZGluZyBib3ggd2lsbCBiZSB0aGUgaW52ZXJzZSBvZiB0aGlzIGdhcC5cbiAgICBmb3IgKGRlbHRhTWF4ID0gLUluZmluaXR5LCBuID0gbWVyZ2VkLmxlbmd0aCAtIDEsIGkgPSAwLCBhID0gbWVyZ2VkW25dOyBpIDw9IG47IGEgPSBiLCArK2kpIHtcbiAgICAgIGIgPSBtZXJnZWRbaV07XG4gICAgICBpZiAoKGRlbHRhID0gYW5nbGUoYVsxXSwgYlswXSkpID4gZGVsdGFNYXgpIGRlbHRhTWF4ID0gZGVsdGEsIGxhbWJkYTAgPSBiWzBdLCBsYW1iZGExID0gYVsxXTtcbiAgICB9XG4gIH1cblxuICByYW5nZXMgPSByYW5nZSA9IG51bGw7XG5cbiAgcmV0dXJuIGxhbWJkYTAgPT09IEluZmluaXR5IHx8IHBoaTAgPT09IEluZmluaXR5XG4gICAgICA/IFtbTmFOLCBOYU5dLCBbTmFOLCBOYU5dXVxuICAgICAgOiBbW2xhbWJkYTAsIHBoaTBdLCBbbGFtYmRhMSwgcGhpMV1dO1xufVxuIiwiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBzaW4sIHNxcnR9IGZyb20gXCIuL21hdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNwaGVyaWNhbChjYXJ0ZXNpYW4pIHtcbiAgcmV0dXJuIFthdGFuMihjYXJ0ZXNpYW5bMV0sIGNhcnRlc2lhblswXSksIGFzaW4oY2FydGVzaWFuWzJdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW4oc3BoZXJpY2FsKSB7XG4gIHZhciBsYW1iZGEgPSBzcGhlcmljYWxbMF0sIHBoaSA9IHNwaGVyaWNhbFsxXSwgY29zUGhpID0gY29zKHBoaSk7XG4gIHJldHVybiBbY29zUGhpICogY29zKGxhbWJkYSksIGNvc1BoaSAqIHNpbihsYW1iZGEpLCBzaW4ocGhpKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5Eb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuQ3Jvc3MoYSwgYikge1xuICByZXR1cm4gW2FbMV0gKiBiWzJdIC0gYVsyXSAqIGJbMV0sIGFbMl0gKiBiWzBdIC0gYVswXSAqIGJbMl0sIGFbMF0gKiBiWzFdIC0gYVsxXSAqIGJbMF1dO1xufVxuXG4vLyBUT0RPIHJldHVybiBhXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuQWRkSW5QbGFjZShhLCBiKSB7XG4gIGFbMF0gKz0gYlswXSwgYVsxXSArPSBiWzFdLCBhWzJdICs9IGJbMl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5TY2FsZSh2ZWN0b3IsIGspIHtcbiAgcmV0dXJuIFt2ZWN0b3JbMF0gKiBrLCB2ZWN0b3JbMV0gKiBrLCB2ZWN0b3JbMl0gKiBrXTtcbn1cblxuLy8gVE9ETyByZXR1cm4gZFxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoZCkge1xuICB2YXIgbCA9IHNxcnQoZFswXSAqIGRbMF0gKyBkWzFdICogZFsxXSArIGRbMl0gKiBkWzJdKTtcbiAgZFswXSAvPSBsLCBkWzFdIC89IGwsIGRbMl0gLz0gbDtcbn1cbiIsImltcG9ydCB7YXNpbiwgYXRhbjIsIGNvcywgZGVncmVlcywgZXBzaWxvbiwgZXBzaWxvbjIsIHJhZGlhbnMsIHNpbiwgc3FydH0gZnJvbSBcIi4vbWF0aFwiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4vbm9vcFwiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi9zdHJlYW1cIjtcblxudmFyIFcwLCBXMSxcbiAgICBYMCwgWTAsIFowLFxuICAgIFgxLCBZMSwgWjEsXG4gICAgWDIsIFkyLCBaMixcbiAgICBsYW1iZGEwMCwgcGhpMDAsIC8vIGZpcnN0IHBvaW50XG4gICAgeDAsIHkwLCB6MDsgLy8gcHJldmlvdXMgcG9pbnRcblxudmFyIGNlbnRyb2lkU3RyZWFtID0ge1xuICBzcGhlcmU6IG5vb3AsXG4gIHBvaW50OiBjZW50cm9pZFBvaW50LFxuICBsaW5lU3RhcnQ6IGNlbnRyb2lkTGluZVN0YXJ0LFxuICBsaW5lRW5kOiBjZW50cm9pZExpbmVFbmQsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgY2VudHJvaWRTdHJlYW0ubGluZVN0YXJ0ID0gY2VudHJvaWRSaW5nU3RhcnQ7XG4gICAgY2VudHJvaWRTdHJlYW0ubGluZUVuZCA9IGNlbnRyb2lkUmluZ0VuZDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgY2VudHJvaWRTdHJlYW0ubGluZVN0YXJ0ID0gY2VudHJvaWRMaW5lU3RhcnQ7XG4gICAgY2VudHJvaWRTdHJlYW0ubGluZUVuZCA9IGNlbnRyb2lkTGluZUVuZDtcbiAgfVxufTtcblxuLy8gQXJpdGhtZXRpYyBtZWFuIG9mIENhcnRlc2lhbiB2ZWN0b3JzLlxuZnVuY3Rpb24gY2VudHJvaWRQb2ludChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHZhciBjb3NQaGkgPSBjb3MocGhpKTtcbiAgY2VudHJvaWRQb2ludENhcnRlc2lhbihjb3NQaGkgKiBjb3MobGFtYmRhKSwgY29zUGhpICogc2luKGxhbWJkYSksIHNpbihwaGkpKTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRQb2ludENhcnRlc2lhbih4LCB5LCB6KSB7XG4gICsrVzA7XG4gIFgwICs9ICh4IC0gWDApIC8gVzA7XG4gIFkwICs9ICh5IC0gWTApIC8gVzA7XG4gIFowICs9ICh6IC0gWjApIC8gVzA7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkTGluZVN0YXJ0KCkge1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkTGluZVBvaW50Rmlyc3Q7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkTGluZVBvaW50Rmlyc3QobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgY29zUGhpID0gY29zKHBoaSk7XG4gIHgwID0gY29zUGhpICogY29zKGxhbWJkYSk7XG4gIHkwID0gY29zUGhpICogc2luKGxhbWJkYSk7XG4gIHowID0gc2luKHBoaSk7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRMaW5lUG9pbnQ7XG4gIGNlbnRyb2lkUG9pbnRDYXJ0ZXNpYW4oeDAsIHkwLCB6MCk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkTGluZVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpLFxuICAgICAgeCA9IGNvc1BoaSAqIGNvcyhsYW1iZGEpLFxuICAgICAgeSA9IGNvc1BoaSAqIHNpbihsYW1iZGEpLFxuICAgICAgeiA9IHNpbihwaGkpLFxuICAgICAgdyA9IGF0YW4yKHNxcnQoKHcgPSB5MCAqIHogLSB6MCAqIHkpICogdyArICh3ID0gejAgKiB4IC0geDAgKiB6KSAqIHcgKyAodyA9IHgwICogeSAtIHkwICogeCkgKiB3KSwgeDAgKiB4ICsgeTAgKiB5ICsgejAgKiB6KTtcbiAgVzEgKz0gdztcbiAgWDEgKz0gdyAqICh4MCArICh4MCA9IHgpKTtcbiAgWTEgKz0gdyAqICh5MCArICh5MCA9IHkpKTtcbiAgWjEgKz0gdyAqICh6MCArICh6MCA9IHopKTtcbiAgY2VudHJvaWRQb2ludENhcnRlc2lhbih4MCwgeTAsIHowKTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lRW5kKCkge1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUG9pbnQ7XG59XG5cbi8vIFNlZSBKLiBFLiBCcm9jaywgVGhlIEluZXJ0aWEgVGVuc29yIGZvciBhIFNwaGVyaWNhbCBUcmlhbmdsZSxcbi8vIEouIEFwcGxpZWQgTWVjaGFuaWNzIDQyLCAyMzkgKDE5NzUpLlxuZnVuY3Rpb24gY2VudHJvaWRSaW5nU3RhcnQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRSaW5nUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRSaW5nRW5kKCkge1xuICBjZW50cm9pZFJpbmdQb2ludChsYW1iZGEwMCwgcGhpMDApO1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUG9pbnQ7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUmluZ1BvaW50Rmlyc3QobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhMDAgPSBsYW1iZGEsIHBoaTAwID0gcGhpO1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRSaW5nUG9pbnQ7XG4gIHZhciBjb3NQaGkgPSBjb3MocGhpKTtcbiAgeDAgPSBjb3NQaGkgKiBjb3MobGFtYmRhKTtcbiAgeTAgPSBjb3NQaGkgKiBzaW4obGFtYmRhKTtcbiAgejAgPSBzaW4ocGhpKTtcbiAgY2VudHJvaWRQb2ludENhcnRlc2lhbih4MCwgeTAsIHowKTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRSaW5nUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgY29zUGhpID0gY29zKHBoaSksXG4gICAgICB4ID0gY29zUGhpICogY29zKGxhbWJkYSksXG4gICAgICB5ID0gY29zUGhpICogc2luKGxhbWJkYSksXG4gICAgICB6ID0gc2luKHBoaSksXG4gICAgICBjeCA9IHkwICogeiAtIHowICogeSxcbiAgICAgIGN5ID0gejAgKiB4IC0geDAgKiB6LFxuICAgICAgY3ogPSB4MCAqIHkgLSB5MCAqIHgsXG4gICAgICBtID0gc3FydChjeCAqIGN4ICsgY3kgKiBjeSArIGN6ICogY3opLFxuICAgICAgdyA9IGFzaW4obSksIC8vIGxpbmUgd2VpZ2h0ID0gYW5nbGVcbiAgICAgIHYgPSBtICYmIC13IC8gbTsgLy8gYXJlYSB3ZWlnaHQgbXVsdGlwbGllclxuICBYMiArPSB2ICogY3g7XG4gIFkyICs9IHYgKiBjeTtcbiAgWjIgKz0gdiAqIGN6O1xuICBXMSArPSB3O1xuICBYMSArPSB3ICogKHgwICsgKHgwID0geCkpO1xuICBZMSArPSB3ICogKHkwICsgKHkwID0geSkpO1xuICBaMSArPSB3ICogKHowICsgKHowID0geikpO1xuICBjZW50cm9pZFBvaW50Q2FydGVzaWFuKHgwLCB5MCwgejApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcbiAgVzAgPSBXMSA9XG4gIFgwID0gWTAgPSBaMCA9XG4gIFgxID0gWTEgPSBaMSA9XG4gIFgyID0gWTIgPSBaMiA9IDA7XG4gIHN0cmVhbShvYmplY3QsIGNlbnRyb2lkU3RyZWFtKTtcblxuICB2YXIgeCA9IFgyLFxuICAgICAgeSA9IFkyLFxuICAgICAgeiA9IFoyLFxuICAgICAgbSA9IHggKiB4ICsgeSAqIHkgKyB6ICogejtcblxuICAvLyBJZiB0aGUgYXJlYS13ZWlnaHRlZCBjY2VudHJvaWQgaXMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbGVuZ3RoLXdlaWdodGVkIGNjZW50cm9pZC5cbiAgaWYgKG0gPCBlcHNpbG9uMikge1xuICAgIHggPSBYMSwgeSA9IFkxLCB6ID0gWjE7XG4gICAgLy8gSWYgdGhlIGZlYXR1cmUgaGFzIHplcm8gbGVuZ3RoLCBmYWxsIGJhY2sgdG8gYXJpdGhtZXRpYyBtZWFuIG9mIHBvaW50IHZlY3RvcnMuXG4gICAgaWYgKFcxIDwgZXBzaWxvbikgeCA9IFgwLCB5ID0gWTAsIHogPSBaMDtcbiAgICBtID0geCAqIHggKyB5ICogeSArIHogKiB6O1xuICAgIC8vIElmIHRoZSBmZWF0dXJlIHN0aWxsIGhhcyBhbiB1bmRlZmluZWQgY2NlbnRyb2lkLCB0aGVuIHJldHVybi5cbiAgICBpZiAobSA8IGVwc2lsb24yKSByZXR1cm4gW05hTiwgTmFOXTtcbiAgfVxuXG4gIHJldHVybiBbYXRhbjIoeSwgeCkgKiBkZWdyZWVzLCBhc2luKHogLyBzcXJ0KG0pKSAqIGRlZ3JlZXNdO1xufVxuIiwiaW1wb3J0IHtjYXJ0ZXNpYW4sIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UsIHNwaGVyaWNhbH0gZnJvbSBcIi4vY2FydGVzaWFuXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCB7YWNvcywgY29zLCBkZWdyZWVzLCBlcHNpbG9uLCByYWRpYW5zLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuaW1wb3J0IHtyb3RhdGVSYWRpYW5zfSBmcm9tIFwiLi9yb3RhdGlvblwiO1xuXG4vLyBHZW5lcmF0ZXMgYSBjaXJjbGUgY2VudGVyZWQgYXQgWzDCsCwgMMKwXSwgd2l0aCBhIGdpdmVuIHJhZGl1cyBhbmQgcHJlY2lzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGNpcmNsZVN0cmVhbShzdHJlYW0sIHJhZGl1cywgZGVsdGEsIGRpcmVjdGlvbiwgdDAsIHQxKSB7XG4gIGlmICghZGVsdGEpIHJldHVybjtcbiAgdmFyIGNvc1JhZGl1cyA9IGNvcyhyYWRpdXMpLFxuICAgICAgc2luUmFkaXVzID0gc2luKHJhZGl1cyksXG4gICAgICBzdGVwID0gZGlyZWN0aW9uICogZGVsdGE7XG4gIGlmICh0MCA9PSBudWxsKSB7XG4gICAgdDAgPSByYWRpdXMgKyBkaXJlY3Rpb24gKiB0YXU7XG4gICAgdDEgPSByYWRpdXMgLSBzdGVwIC8gMjtcbiAgfSBlbHNlIHtcbiAgICB0MCA9IGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHQwKTtcbiAgICB0MSA9IGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHQxKTtcbiAgICBpZiAoZGlyZWN0aW9uID4gMCA/IHQwIDwgdDEgOiB0MCA+IHQxKSB0MCArPSBkaXJlY3Rpb24gKiB0YXU7XG4gIH1cbiAgZm9yICh2YXIgcG9pbnQsIHQgPSB0MDsgZGlyZWN0aW9uID4gMCA/IHQgPiB0MSA6IHQgPCB0MTsgdCAtPSBzdGVwKSB7XG4gICAgcG9pbnQgPSBzcGhlcmljYWwoW2Nvc1JhZGl1cywgLXNpblJhZGl1cyAqIGNvcyh0KSwgLXNpblJhZGl1cyAqIHNpbih0KV0pO1xuICAgIHN0cmVhbS5wb2ludChwb2ludFswXSwgcG9pbnRbMV0pO1xuICB9XG59XG5cbi8vIFJldHVybnMgdGhlIHNpZ25lZCBhbmdsZSBvZiBhIGNhcnRlc2lhbiBwb2ludCByZWxhdGl2ZSB0byBbY29zUmFkaXVzLCAwLCAwXS5cbmZ1bmN0aW9uIGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHBvaW50KSB7XG4gIHBvaW50ID0gY2FydGVzaWFuKHBvaW50KSwgcG9pbnRbMF0gLT0gY29zUmFkaXVzO1xuICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKHBvaW50KTtcbiAgdmFyIHJhZGl1cyA9IGFjb3MoLXBvaW50WzFdKTtcbiAgcmV0dXJuICgoLXBvaW50WzJdIDwgMCA/IC1yYWRpdXMgOiByYWRpdXMpICsgdGF1IC0gZXBzaWxvbikgJSB0YXU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY2VudGVyID0gY29uc3RhbnQoWzAsIDBdKSxcbiAgICAgIHJhZGl1cyA9IGNvbnN0YW50KDkwKSxcbiAgICAgIHByZWNpc2lvbiA9IGNvbnN0YW50KDYpLFxuICAgICAgcmluZyxcbiAgICAgIHJvdGF0ZSxcbiAgICAgIHN0cmVhbSA9IHtwb2ludDogcG9pbnR9O1xuXG4gIGZ1bmN0aW9uIHBvaW50KHgsIHkpIHtcbiAgICByaW5nLnB1c2goeCA9IHJvdGF0ZSh4LCB5KSk7XG4gICAgeFswXSAqPSBkZWdyZWVzLCB4WzFdICo9IGRlZ3JlZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjaXJjbGUoKSB7XG4gICAgdmFyIGMgPSBjZW50ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgciA9IHJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpICogcmFkaWFucyxcbiAgICAgICAgcCA9IHByZWNpc2lvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpICogcmFkaWFucztcbiAgICByaW5nID0gW107XG4gICAgcm90YXRlID0gcm90YXRlUmFkaWFucygtY1swXSAqIHJhZGlhbnMsIC1jWzFdICogcmFkaWFucywgMCkuaW52ZXJ0O1xuICAgIGNpcmNsZVN0cmVhbShzdHJlYW0sIHIsIHAsIDEpO1xuICAgIGMgPSB7dHlwZTogXCJQb2x5Z29uXCIsIGNvb3JkaW5hdGVzOiBbcmluZ119O1xuICAgIHJpbmcgPSByb3RhdGUgPSBudWxsO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgY2lyY2xlLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjZW50ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFsrX1swXSwgK19bMV1dKSwgY2lyY2xlKSA6IGNlbnRlcjtcbiAgfTtcblxuICBjaXJjbGUucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBjaXJjbGUpIDogcmFkaXVzO1xuICB9O1xuXG4gIGNpcmNsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJlY2lzaW9uID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGNpcmNsZSkgOiBwcmVjaXNpb247XG4gIH07XG5cbiAgcmV0dXJuIGNpcmNsZTtcbn1cbiIsImltcG9ydCBjbGlwIGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQge2FicywgYXRhbiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIHBpLCBzaW59IGZyb20gXCIuLi9tYXRoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsaXAoXG4gIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgY2xpcEFudGltZXJpZGlhbkxpbmUsXG4gIGNsaXBBbnRpbWVyaWRpYW5JbnRlcnBvbGF0ZSxcbiAgWy1waSwgLWhhbGZQaV1cbik7XG5cbi8vIFRha2VzIGEgbGluZSBhbmQgY3V0cyBpbnRvIHZpc2libGUgc2VnbWVudHMuIFJldHVybiB2YWx1ZXM6IDAgLSB0aGVyZSB3ZXJlXG4vLyBpbnRlcnNlY3Rpb25zIG9yIHRoZSBsaW5lIHdhcyBlbXB0eTsgMSAtIG5vIGludGVyc2VjdGlvbnM7IDIgLSB0aGVyZSB3ZXJlXG4vLyBpbnRlcnNlY3Rpb25zLCBhbmQgdGhlIGZpcnN0IGFuZCBsYXN0IHNlZ21lbnRzIHNob3VsZCBiZSByZWpvaW5lZC5cbmZ1bmN0aW9uIGNsaXBBbnRpbWVyaWRpYW5MaW5lKHN0cmVhbSkge1xuICB2YXIgbGFtYmRhMCA9IE5hTixcbiAgICAgIHBoaTAgPSBOYU4sXG4gICAgICBzaWduMCA9IE5hTixcbiAgICAgIGNsZWFuOyAvLyBubyBpbnRlcnNlY3Rpb25zXG5cbiAgcmV0dXJuIHtcbiAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgY2xlYW4gPSAxO1xuICAgIH0sXG4gICAgcG9pbnQ6IGZ1bmN0aW9uKGxhbWJkYTEsIHBoaTEpIHtcbiAgICAgIHZhciBzaWduMSA9IGxhbWJkYTEgPiAwID8gcGkgOiAtcGksXG4gICAgICAgICAgZGVsdGEgPSBhYnMobGFtYmRhMSAtIGxhbWJkYTApO1xuICAgICAgaWYgKGFicyhkZWx0YSAtIHBpKSA8IGVwc2lsb24pIHsgLy8gbGluZSBjcm9zc2VzIGEgcG9sZVxuICAgICAgICBzdHJlYW0ucG9pbnQobGFtYmRhMCwgcGhpMCA9IChwaGkwICsgcGhpMSkgLyAyID4gMCA/IGhhbGZQaSA6IC1oYWxmUGkpO1xuICAgICAgICBzdHJlYW0ucG9pbnQoc2lnbjAsIHBoaTApO1xuICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgIHN0cmVhbS5wb2ludChzaWduMSwgcGhpMCk7XG4gICAgICAgIHN0cmVhbS5wb2ludChsYW1iZGExLCBwaGkwKTtcbiAgICAgICAgY2xlYW4gPSAwO1xuICAgICAgfSBlbHNlIGlmIChzaWduMCAhPT0gc2lnbjEgJiYgZGVsdGEgPj0gcGkpIHsgLy8gbGluZSBjcm9zc2VzIGFudGltZXJpZGlhblxuICAgICAgICBpZiAoYWJzKGxhbWJkYTAgLSBzaWduMCkgPCBlcHNpbG9uKSBsYW1iZGEwIC09IHNpZ24wICogZXBzaWxvbjsgLy8gaGFuZGxlIGRlZ2VuZXJhY2llc1xuICAgICAgICBpZiAoYWJzKGxhbWJkYTEgLSBzaWduMSkgPCBlcHNpbG9uKSBsYW1iZGExIC09IHNpZ24xICogZXBzaWxvbjtcbiAgICAgICAgcGhpMCA9IGNsaXBBbnRpbWVyaWRpYW5JbnRlcnNlY3QobGFtYmRhMCwgcGhpMCwgbGFtYmRhMSwgcGhpMSk7XG4gICAgICAgIHN0cmVhbS5wb2ludChzaWduMCwgcGhpMCk7XG4gICAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHNpZ24xLCBwaGkwKTtcbiAgICAgICAgY2xlYW4gPSAwO1xuICAgICAgfVxuICAgICAgc3RyZWFtLnBvaW50KGxhbWJkYTAgPSBsYW1iZGExLCBwaGkwID0gcGhpMSk7XG4gICAgICBzaWduMCA9IHNpZ24xO1xuICAgIH0sXG4gICAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgbGFtYmRhMCA9IHBoaTAgPSBOYU47XG4gICAgfSxcbiAgICBjbGVhbjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gMiAtIGNsZWFuOyAvLyBpZiBpbnRlcnNlY3Rpb25zLCByZWpvaW4gZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHNcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsaXBBbnRpbWVyaWRpYW5JbnRlcnNlY3QobGFtYmRhMCwgcGhpMCwgbGFtYmRhMSwgcGhpMSkge1xuICB2YXIgY29zUGhpMCxcbiAgICAgIGNvc1BoaTEsXG4gICAgICBzaW5MYW1iZGEwTGFtYmRhMSA9IHNpbihsYW1iZGEwIC0gbGFtYmRhMSk7XG4gIHJldHVybiBhYnMoc2luTGFtYmRhMExhbWJkYTEpID4gZXBzaWxvblxuICAgICAgPyBhdGFuKChzaW4ocGhpMCkgKiAoY29zUGhpMSA9IGNvcyhwaGkxKSkgKiBzaW4obGFtYmRhMSlcbiAgICAgICAgICAtIHNpbihwaGkxKSAqIChjb3NQaGkwID0gY29zKHBoaTApKSAqIHNpbihsYW1iZGEwKSlcbiAgICAgICAgICAvIChjb3NQaGkwICogY29zUGhpMSAqIHNpbkxhbWJkYTBMYW1iZGExKSlcbiAgICAgIDogKHBoaTAgKyBwaGkxKSAvIDI7XG59XG5cbmZ1bmN0aW9uIGNsaXBBbnRpbWVyaWRpYW5JbnRlcnBvbGF0ZShmcm9tLCB0bywgZGlyZWN0aW9uLCBzdHJlYW0pIHtcbiAgdmFyIHBoaTtcbiAgaWYgKGZyb20gPT0gbnVsbCkge1xuICAgIHBoaSA9IGRpcmVjdGlvbiAqIGhhbGZQaTtcbiAgICBzdHJlYW0ucG9pbnQoLXBpLCBwaGkpO1xuICAgIHN0cmVhbS5wb2ludCgwLCBwaGkpO1xuICAgIHN0cmVhbS5wb2ludChwaSwgcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQocGksIDApO1xuICAgIHN0cmVhbS5wb2ludChwaSwgLXBoaSk7XG4gICAgc3RyZWFtLnBvaW50KDAsIC1waGkpO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIC1waGkpO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIDApO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIHBoaSk7XG4gIH0gZWxzZSBpZiAoYWJzKGZyb21bMF0gLSB0b1swXSkgPiBlcHNpbG9uKSB7XG4gICAgdmFyIGxhbWJkYSA9IGZyb21bMF0gPCB0b1swXSA/IHBpIDogLXBpO1xuICAgIHBoaSA9IGRpcmVjdGlvbiAqIGxhbWJkYSAvIDI7XG4gICAgc3RyZWFtLnBvaW50KC1sYW1iZGEsIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KDAsIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KGxhbWJkYSwgcGhpKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJlYW0ucG9pbnQodG9bMF0sIHRvWzFdKTtcbiAgfVxufVxuIiwiaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3BcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBsaW5lcyA9IFtdLFxuICAgICAgbGluZTtcbiAgcmV0dXJuIHtcbiAgICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgbGluZS5wdXNoKFt4LCB5XSk7XG4gICAgfSxcbiAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgbGluZXMucHVzaChsaW5lID0gW10pO1xuICAgIH0sXG4gICAgbGluZUVuZDogbm9vcCxcbiAgICByZWpvaW46IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIGxpbmVzLnB1c2gobGluZXMucG9wKCkuY29uY2F0KGxpbmVzLnNoaWZ0KCkpKTtcbiAgICB9LFxuICAgIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbGluZXM7XG4gICAgICBsaW5lcyA9IFtdO1xuICAgICAgbGluZSA9IG51bGw7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCB7Y2FydGVzaWFuLCBjYXJ0ZXNpYW5BZGRJblBsYWNlLCBjYXJ0ZXNpYW5Dcm9zcywgY2FydGVzaWFuRG90LCBjYXJ0ZXNpYW5TY2FsZSwgc3BoZXJpY2FsfSBmcm9tIFwiLi4vY2FydGVzaWFuXCI7XG5pbXBvcnQge2NpcmNsZVN0cmVhbX0gZnJvbSBcIi4uL2NpcmNsZVwiO1xuaW1wb3J0IHthYnMsIGNvcywgZXBzaWxvbiwgcGksIHJhZGlhbnMsIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQgcG9pbnRFcXVhbCBmcm9tIFwiLi4vcG9pbnRFcXVhbFwiO1xuaW1wb3J0IGNsaXAgZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmFkaXVzKSB7XG4gIHZhciBjciA9IGNvcyhyYWRpdXMpLFxuICAgICAgZGVsdGEgPSA2ICogcmFkaWFucyxcbiAgICAgIHNtYWxsUmFkaXVzID0gY3IgPiAwLFxuICAgICAgbm90SGVtaXNwaGVyZSA9IGFicyhjcikgPiBlcHNpbG9uOyAvLyBUT0RPIG9wdGltaXNlIGZvciB0aGlzIGNvbW1vbiBjYXNlXG5cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGUoZnJvbSwgdG8sIGRpcmVjdGlvbiwgc3RyZWFtKSB7XG4gICAgY2lyY2xlU3RyZWFtKHN0cmVhbSwgcmFkaXVzLCBkZWx0YSwgZGlyZWN0aW9uLCBmcm9tLCB0byk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpYmxlKGxhbWJkYSwgcGhpKSB7XG4gICAgcmV0dXJuIGNvcyhsYW1iZGEpICogY29zKHBoaSkgPiBjcjtcbiAgfVxuXG4gIC8vIFRha2VzIGEgbGluZSBhbmQgY3V0cyBpbnRvIHZpc2libGUgc2VnbWVudHMuIFJldHVybiB2YWx1ZXMgdXNlZCBmb3IgcG9seWdvblxuICAvLyBjbGlwcGluZzogMCAtIHRoZXJlIHdlcmUgaW50ZXJzZWN0aW9ucyBvciB0aGUgbGluZSB3YXMgZW1wdHk7IDEgLSBub1xuICAvLyBpbnRlcnNlY3Rpb25zIDIgLSB0aGVyZSB3ZXJlIGludGVyc2VjdGlvbnMsIGFuZCB0aGUgZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHNcbiAgLy8gc2hvdWxkIGJlIHJlam9pbmVkLlxuICBmdW5jdGlvbiBjbGlwTGluZShzdHJlYW0pIHtcbiAgICB2YXIgcG9pbnQwLCAvLyBwcmV2aW91cyBwb2ludFxuICAgICAgICBjMCwgLy8gY29kZSBmb3IgcHJldmlvdXMgcG9pbnRcbiAgICAgICAgdjAsIC8vIHZpc2liaWxpdHkgb2YgcHJldmlvdXMgcG9pbnRcbiAgICAgICAgdjAwLCAvLyB2aXNpYmlsaXR5IG9mIGZpcnN0IHBvaW50XG4gICAgICAgIGNsZWFuOyAvLyBubyBpbnRlcnNlY3Rpb25zXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHYwMCA9IHYwID0gZmFsc2U7XG4gICAgICAgIGNsZWFuID0gMTtcbiAgICAgIH0sXG4gICAgICBwb2ludDogZnVuY3Rpb24obGFtYmRhLCBwaGkpIHtcbiAgICAgICAgdmFyIHBvaW50MSA9IFtsYW1iZGEsIHBoaV0sXG4gICAgICAgICAgICBwb2ludDIsXG4gICAgICAgICAgICB2ID0gdmlzaWJsZShsYW1iZGEsIHBoaSksXG4gICAgICAgICAgICBjID0gc21hbGxSYWRpdXNcbiAgICAgICAgICAgICAgPyB2ID8gMCA6IGNvZGUobGFtYmRhLCBwaGkpXG4gICAgICAgICAgICAgIDogdiA/IGNvZGUobGFtYmRhICsgKGxhbWJkYSA8IDAgPyBwaSA6IC1waSksIHBoaSkgOiAwO1xuICAgICAgICBpZiAoIXBvaW50MCAmJiAodjAwID0gdjAgPSB2KSkgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAvLyBIYW5kbGUgZGVnZW5lcmFjaWVzLlxuICAgICAgICAvLyBUT0RPIGlnbm9yZSBpZiBub3QgY2xpcHBpbmcgcG9seWdvbnMuXG4gICAgICAgIGlmICh2ICE9PSB2MCkge1xuICAgICAgICAgIHBvaW50MiA9IGludGVyc2VjdChwb2ludDAsIHBvaW50MSk7XG4gICAgICAgICAgaWYgKCFwb2ludDIgfHwgcG9pbnRFcXVhbChwb2ludDAsIHBvaW50MikgfHwgcG9pbnRFcXVhbChwb2ludDEsIHBvaW50MikpIHtcbiAgICAgICAgICAgIHBvaW50MVswXSArPSBlcHNpbG9uO1xuICAgICAgICAgICAgcG9pbnQxWzFdICs9IGVwc2lsb247XG4gICAgICAgICAgICB2ID0gdmlzaWJsZShwb2ludDFbMF0sIHBvaW50MVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh2ICE9PSB2MCkge1xuICAgICAgICAgIGNsZWFuID0gMDtcbiAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBnb2luZyBpblxuICAgICAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgICAgcG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MSwgcG9pbnQwKTtcbiAgICAgICAgICAgIHN0cmVhbS5wb2ludChwb2ludDJbMF0sIHBvaW50MlsxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluc2lkZSBnb2luZyBvdXRcbiAgICAgICAgICAgIHBvaW50MiA9IGludGVyc2VjdChwb2ludDAsIHBvaW50MSk7XG4gICAgICAgICAgICBzdHJlYW0ucG9pbnQocG9pbnQyWzBdLCBwb2ludDJbMV0pO1xuICAgICAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcG9pbnQwID0gcG9pbnQyO1xuICAgICAgICB9IGVsc2UgaWYgKG5vdEhlbWlzcGhlcmUgJiYgcG9pbnQwICYmIHNtYWxsUmFkaXVzIF4gdikge1xuICAgICAgICAgIHZhciB0O1xuICAgICAgICAgIC8vIElmIHRoZSBjb2RlcyBmb3IgdHdvIHBvaW50cyBhcmUgZGlmZmVyZW50LCBvciBhcmUgYm90aCB6ZXJvLFxuICAgICAgICAgIC8vIGFuZCB0aGVyZSB0aGlzIHNlZ21lbnQgaW50ZXJzZWN0cyB3aXRoIHRoZSBzbWFsbCBjaXJjbGUuXG4gICAgICAgICAgaWYgKCEoYyAmIGMwKSAmJiAodCA9IGludGVyc2VjdChwb2ludDEsIHBvaW50MCwgdHJ1ZSkpKSB7XG4gICAgICAgICAgICBjbGVhbiA9IDA7XG4gICAgICAgICAgICBpZiAoc21hbGxSYWRpdXMpIHtcbiAgICAgICAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgICAgICBzdHJlYW0ucG9pbnQodFswXVswXSwgdFswXVsxXSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5wb2ludCh0WzFdWzBdLCB0WzFdWzFdKTtcbiAgICAgICAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmVhbS5wb2ludCh0WzFdWzBdLCB0WzFdWzFdKTtcbiAgICAgICAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgICAgICBzdHJlYW0ucG9pbnQodFswXVswXSwgdFswXVsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh2ICYmICghcG9pbnQwIHx8ICFwb2ludEVxdWFsKHBvaW50MCwgcG9pbnQxKSkpIHtcbiAgICAgICAgICBzdHJlYW0ucG9pbnQocG9pbnQxWzBdLCBwb2ludDFbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50MCA9IHBvaW50MSwgdjAgPSB2LCBjMCA9IGM7XG4gICAgICB9LFxuICAgICAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh2MCkgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgcG9pbnQwID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICAvLyBSZWpvaW4gZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHMgaWYgdGhlcmUgd2VyZSBpbnRlcnNlY3Rpb25zIGFuZCB0aGUgZmlyc3RcbiAgICAgIC8vIGFuZCBsYXN0IHBvaW50cyB3ZXJlIHZpc2libGUuXG4gICAgICBjbGVhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjbGVhbiB8ICgodjAwICYmIHYwKSA8PCAxKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJzZWN0cyB0aGUgZ3JlYXQgY2lyY2xlIGJldHdlZW4gYSBhbmQgYiB3aXRoIHRoZSBjbGlwIGNpcmNsZS5cbiAgZnVuY3Rpb24gaW50ZXJzZWN0KGEsIGIsIHR3bykge1xuICAgIHZhciBwYSA9IGNhcnRlc2lhbihhKSxcbiAgICAgICAgcGIgPSBjYXJ0ZXNpYW4oYik7XG5cbiAgICAvLyBXZSBoYXZlIHR3byBwbGFuZXMsIG4xLnAgPSBkMSBhbmQgbjIucCA9IGQyLlxuICAgIC8vIEZpbmQgaW50ZXJzZWN0aW9uIGxpbmUgcCh0KSA9IGMxIG4xICsgYzIgbjIgKyB0IChuMSDiqK8gbjIpLlxuICAgIHZhciBuMSA9IFsxLCAwLCAwXSwgLy8gbm9ybWFsXG4gICAgICAgIG4yID0gY2FydGVzaWFuQ3Jvc3MocGEsIHBiKSxcbiAgICAgICAgbjJuMiA9IGNhcnRlc2lhbkRvdChuMiwgbjIpLFxuICAgICAgICBuMW4yID0gbjJbMF0sIC8vIGNhcnRlc2lhbkRvdChuMSwgbjIpLFxuICAgICAgICBkZXRlcm1pbmFudCA9IG4ybjIgLSBuMW4yICogbjFuMjtcblxuICAgIC8vIFR3byBwb2xhciBwb2ludHMuXG4gICAgaWYgKCFkZXRlcm1pbmFudCkgcmV0dXJuICF0d28gJiYgYTtcblxuICAgIHZhciBjMSA9ICBjciAqIG4ybjIgLyBkZXRlcm1pbmFudCxcbiAgICAgICAgYzIgPSAtY3IgKiBuMW4yIC8gZGV0ZXJtaW5hbnQsXG4gICAgICAgIG4xeG4yID0gY2FydGVzaWFuQ3Jvc3MobjEsIG4yKSxcbiAgICAgICAgQSA9IGNhcnRlc2lhblNjYWxlKG4xLCBjMSksXG4gICAgICAgIEIgPSBjYXJ0ZXNpYW5TY2FsZShuMiwgYzIpO1xuICAgIGNhcnRlc2lhbkFkZEluUGxhY2UoQSwgQik7XG5cbiAgICAvLyBTb2x2ZSB8cCh0KXxeMiA9IDEuXG4gICAgdmFyIHUgPSBuMXhuMixcbiAgICAgICAgdyA9IGNhcnRlc2lhbkRvdChBLCB1KSxcbiAgICAgICAgdXUgPSBjYXJ0ZXNpYW5Eb3QodSwgdSksXG4gICAgICAgIHQyID0gdyAqIHcgLSB1dSAqIChjYXJ0ZXNpYW5Eb3QoQSwgQSkgLSAxKTtcblxuICAgIGlmICh0MiA8IDApIHJldHVybjtcblxuICAgIHZhciB0ID0gc3FydCh0MiksXG4gICAgICAgIHEgPSBjYXJ0ZXNpYW5TY2FsZSh1LCAoLXcgLSB0KSAvIHV1KTtcbiAgICBjYXJ0ZXNpYW5BZGRJblBsYWNlKHEsIEEpO1xuICAgIHEgPSBzcGhlcmljYWwocSk7XG5cbiAgICBpZiAoIXR3bykgcmV0dXJuIHE7XG5cbiAgICAvLyBUd28gaW50ZXJzZWN0aW9uIHBvaW50cy5cbiAgICB2YXIgbGFtYmRhMCA9IGFbMF0sXG4gICAgICAgIGxhbWJkYTEgPSBiWzBdLFxuICAgICAgICBwaGkwID0gYVsxXSxcbiAgICAgICAgcGhpMSA9IGJbMV0sXG4gICAgICAgIHo7XG5cbiAgICBpZiAobGFtYmRhMSA8IGxhbWJkYTApIHogPSBsYW1iZGEwLCBsYW1iZGEwID0gbGFtYmRhMSwgbGFtYmRhMSA9IHo7XG5cbiAgICB2YXIgZGVsdGEgPSBsYW1iZGExIC0gbGFtYmRhMCxcbiAgICAgICAgcG9sYXIgPSBhYnMoZGVsdGEgLSBwaSkgPCBlcHNpbG9uLFxuICAgICAgICBtZXJpZGlhbiA9IHBvbGFyIHx8IGRlbHRhIDwgZXBzaWxvbjtcblxuICAgIGlmICghcG9sYXIgJiYgcGhpMSA8IHBoaTApIHogPSBwaGkwLCBwaGkwID0gcGhpMSwgcGhpMSA9IHo7XG5cbiAgICAvLyBDaGVjayB0aGF0IHRoZSBmaXJzdCBwb2ludCBpcyBiZXR3ZWVuIGEgYW5kIGIuXG4gICAgaWYgKG1lcmlkaWFuXG4gICAgICAgID8gcG9sYXJcbiAgICAgICAgICA/IHBoaTAgKyBwaGkxID4gMCBeIHFbMV0gPCAoYWJzKHFbMF0gLSBsYW1iZGEwKSA8IGVwc2lsb24gPyBwaGkwIDogcGhpMSlcbiAgICAgICAgICA6IHBoaTAgPD0gcVsxXSAmJiBxWzFdIDw9IHBoaTFcbiAgICAgICAgOiBkZWx0YSA+IHBpIF4gKGxhbWJkYTAgPD0gcVswXSAmJiBxWzBdIDw9IGxhbWJkYTEpKSB7XG4gICAgICB2YXIgcTEgPSBjYXJ0ZXNpYW5TY2FsZSh1LCAoLXcgKyB0KSAvIHV1KTtcbiAgICAgIGNhcnRlc2lhbkFkZEluUGxhY2UocTEsIEEpO1xuICAgICAgcmV0dXJuIFtxLCBzcGhlcmljYWwocTEpXTtcbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmF0ZXMgYSA0LWJpdCB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiBvZiBhIHBvaW50IHJlbGF0aXZlIHRvXG4gIC8vIHRoZSBzbWFsbCBjaXJjbGUncyBib3VuZGluZyBib3guXG4gIGZ1bmN0aW9uIGNvZGUobGFtYmRhLCBwaGkpIHtcbiAgICB2YXIgciA9IHNtYWxsUmFkaXVzID8gcmFkaXVzIDogcGkgLSByYWRpdXMsXG4gICAgICAgIGNvZGUgPSAwO1xuICAgIGlmIChsYW1iZGEgPCAtcikgY29kZSB8PSAxOyAvLyBsZWZ0XG4gICAgZWxzZSBpZiAobGFtYmRhID4gcikgY29kZSB8PSAyOyAvLyByaWdodFxuICAgIGlmIChwaGkgPCAtcikgY29kZSB8PSA0OyAvLyBiZWxvd1xuICAgIGVsc2UgaWYgKHBoaSA+IHIpIGNvZGUgfD0gODsgLy8gYWJvdmVcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIHJldHVybiBjbGlwKHZpc2libGUsIGNsaXBMaW5lLCBpbnRlcnBvbGF0ZSwgc21hbGxSYWRpdXMgPyBbMCwgLXJhZGl1c10gOiBbLXBpLCByYWRpdXMgLSBwaV0pO1xufVxuIiwiaW1wb3J0IGNsaXBSZWN0YW5nbGUgZnJvbSBcIi4vcmVjdGFuZ2xlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeTAgPSAwLFxuICAgICAgeDEgPSA5NjAsXG4gICAgICB5MSA9IDUwMCxcbiAgICAgIGNhY2hlLFxuICAgICAgY2FjaGVTdHJlYW0sXG4gICAgICBjbGlwO1xuXG4gIHJldHVybiBjbGlwID0ge1xuICAgIHN0cmVhbTogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSBjbGlwUmVjdGFuZ2xlKHgwLCB5MCwgeDEsIHkxKShjYWNoZVN0cmVhbSA9IHN0cmVhbSk7XG4gICAgfSxcbiAgICBleHRlbnQ6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gK19bMF1bMF0sIHkwID0gK19bMF1bMV0sIHgxID0gK19bMV1bMF0sIHkxID0gK19bMV1bMV0sIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsLCBjbGlwKSA6IFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBjbGlwQnVmZmVyIGZyb20gXCIuL2J1ZmZlclwiO1xuaW1wb3J0IGNsaXBSZWpvaW4gZnJvbSBcIi4vcmVqb2luXCI7XG5pbXBvcnQge2Vwc2lsb24sIGhhbGZQaX0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCBwb2x5Z29uQ29udGFpbnMgZnJvbSBcIi4uL3BvbHlnb25Db250YWluc1wiO1xuaW1wb3J0IHttZXJnZX0gZnJvbSBcImQzLWFycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvaW50VmlzaWJsZSwgY2xpcExpbmUsIGludGVycG9sYXRlLCBzdGFydCkge1xuICByZXR1cm4gZnVuY3Rpb24oc2luaykge1xuICAgIHZhciBsaW5lID0gY2xpcExpbmUoc2luayksXG4gICAgICAgIHJpbmdCdWZmZXIgPSBjbGlwQnVmZmVyKCksXG4gICAgICAgIHJpbmdTaW5rID0gY2xpcExpbmUocmluZ0J1ZmZlciksXG4gICAgICAgIHBvbHlnb25TdGFydGVkID0gZmFsc2UsXG4gICAgICAgIHBvbHlnb24sXG4gICAgICAgIHNlZ21lbnRzLFxuICAgICAgICByaW5nO1xuXG4gICAgdmFyIGNsaXAgPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnRSaW5nO1xuICAgICAgICBjbGlwLmxpbmVTdGFydCA9IHJpbmdTdGFydDtcbiAgICAgICAgY2xpcC5saW5lRW5kID0gcmluZ0VuZDtcbiAgICAgICAgc2VnbWVudHMgPSBbXTtcbiAgICAgICAgcG9seWdvbiA9IFtdO1xuICAgICAgfSxcbiAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnQ7XG4gICAgICAgIGNsaXAubGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgICAgICBjbGlwLmxpbmVFbmQgPSBsaW5lRW5kO1xuICAgICAgICBzZWdtZW50cyA9IG1lcmdlKHNlZ21lbnRzKTtcbiAgICAgICAgdmFyIHN0YXJ0SW5zaWRlID0gcG9seWdvbkNvbnRhaW5zKHBvbHlnb24sIHN0YXJ0KTtcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBjbGlwUmVqb2luKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHNpbmspO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5zaWRlKSB7XG4gICAgICAgICAgaWYgKCFwb2x5Z29uU3RhcnRlZCkgc2luay5wb2x5Z29uU3RhcnQoKSwgcG9seWdvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgIHNpbmsubGluZVN0YXJ0KCk7XG4gICAgICAgICAgaW50ZXJwb2xhdGUobnVsbCwgbnVsbCwgMSwgc2luayk7XG4gICAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvbHlnb25TdGFydGVkKSBzaW5rLnBvbHlnb25FbmQoKSwgcG9seWdvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgc2VnbWVudHMgPSBwb2x5Z29uID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICBzcGhlcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzaW5rLnBvbHlnb25TdGFydCgpO1xuICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICBpbnRlcnBvbGF0ZShudWxsLCBudWxsLCAxLCBzaW5rKTtcbiAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIHNpbmsucG9seWdvbkVuZCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludChsYW1iZGEsIHBoaSkge1xuICAgICAgaWYgKHBvaW50VmlzaWJsZShsYW1iZGEsIHBoaSkpIHNpbmsucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50TGluZShsYW1iZGEsIHBoaSkge1xuICAgICAgbGluZS5wb2ludChsYW1iZGEsIHBoaSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgY2xpcC5wb2ludCA9IHBvaW50TGluZTtcbiAgICAgIGxpbmUubGluZVN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUVuZCgpIHtcbiAgICAgIGNsaXAucG9pbnQgPSBwb2ludDtcbiAgICAgIGxpbmUubGluZUVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50UmluZyhsYW1iZGEsIHBoaSkge1xuICAgICAgcmluZy5wdXNoKFtsYW1iZGEsIHBoaV0pO1xuICAgICAgcmluZ1NpbmsucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdTdGFydCgpIHtcbiAgICAgIHJpbmdTaW5rLmxpbmVTdGFydCgpO1xuICAgICAgcmluZyA9IFtdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7XG4gICAgICBwb2ludFJpbmcocmluZ1swXVswXSwgcmluZ1swXVsxXSk7XG4gICAgICByaW5nU2luay5saW5lRW5kKCk7XG5cbiAgICAgIHZhciBjbGVhbiA9IHJpbmdTaW5rLmNsZWFuKCksXG4gICAgICAgICAgcmluZ1NlZ21lbnRzID0gcmluZ0J1ZmZlci5yZXN1bHQoKSxcbiAgICAgICAgICBpLCBuID0gcmluZ1NlZ21lbnRzLmxlbmd0aCwgbSxcbiAgICAgICAgICBzZWdtZW50LFxuICAgICAgICAgIHBvaW50O1xuXG4gICAgICByaW5nLnBvcCgpO1xuICAgICAgcG9seWdvbi5wdXNoKHJpbmcpO1xuICAgICAgcmluZyA9IG51bGw7XG5cbiAgICAgIGlmICghbikgcmV0dXJuO1xuXG4gICAgICAvLyBObyBpbnRlcnNlY3Rpb25zLlxuICAgICAgaWYgKGNsZWFuICYgMSkge1xuICAgICAgICBzZWdtZW50ID0gcmluZ1NlZ21lbnRzWzBdO1xuICAgICAgICBpZiAoKG0gPSBzZWdtZW50Lmxlbmd0aCAtIDEpID4gMCkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHNpbmsucG9pbnQoKHBvaW50ID0gc2VnbWVudFtpXSlbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgICBzaW5rLmxpbmVFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlam9pbiBjb25uZWN0ZWQgc2VnbWVudHMuXG4gICAgICAvLyBUT0RPIHJldXNlIHJpbmdCdWZmZXIucmVqb2luKCk/XG4gICAgICBpZiAobiA+IDEgJiYgY2xlYW4gJiAyKSByaW5nU2VnbWVudHMucHVzaChyaW5nU2VnbWVudHMucG9wKCkuY29uY2F0KHJpbmdTZWdtZW50cy5zaGlmdCgpKSk7XG5cbiAgICAgIHNlZ21lbnRzLnB1c2gocmluZ1NlZ21lbnRzLmZpbHRlcih2YWxpZFNlZ21lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRTZWdtZW50KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQubGVuZ3RoID4gMTtcbn1cblxuLy8gSW50ZXJzZWN0aW9ucyBhcmUgc29ydGVkIGFsb25nIHRoZSBjbGlwIGVkZ2UuIEZvciBib3RoIGFudGltZXJpZGlhbiBjdXR0aW5nXG4vLyBhbmQgY2lyY2xlIGNsaXBwaW5nLCB0aGUgc2FtZSBjb21wYXJpc29uIGlzIHVzZWQuXG5mdW5jdGlvbiBjb21wYXJlSW50ZXJzZWN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuICgoYSA9IGEueClbMF0gPCAwID8gYVsxXSAtIGhhbGZQaSAtIGVwc2lsb24gOiBoYWxmUGkgLSBhWzFdKVxuICAgICAgIC0gKChiID0gYi54KVswXSA8IDAgPyBiWzFdIC0gaGFsZlBpIC0gZXBzaWxvbiA6IGhhbGZQaSAtIGJbMV0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYiwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIHQwID0gMCxcbiAgICAgIHQxID0gMSxcbiAgICAgIGR4ID0gYnggLSBheCxcbiAgICAgIGR5ID0gYnkgLSBheSxcbiAgICAgIHI7XG5cbiAgciA9IHgwIC0gYXg7XG4gIGlmICghZHggJiYgciA+IDApIHJldHVybjtcbiAgciAvPSBkeDtcbiAgaWYgKGR4IDwgMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH0gZWxzZSBpZiAoZHggPiAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfVxuXG4gIHIgPSB4MSAtIGF4O1xuICBpZiAoIWR4ICYmIHIgPCAwKSByZXR1cm47XG4gIHIgLz0gZHg7XG4gIGlmIChkeCA8IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9IGVsc2UgaWYgKGR4ID4gMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH1cblxuICByID0geTAgLSBheTtcbiAgaWYgKCFkeSAmJiByID4gMCkgcmV0dXJuO1xuICByIC89IGR5O1xuICBpZiAoZHkgPCAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfSBlbHNlIGlmIChkeSA+IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9XG5cbiAgciA9IHkxIC0gYXk7XG4gIGlmICghZHkgJiYgciA8IDApIHJldHVybjtcbiAgciAvPSBkeTtcbiAgaWYgKGR5IDwgMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH0gZWxzZSBpZiAoZHkgPiAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfVxuXG4gIGlmICh0MCA+IDApIGFbMF0gPSBheCArIHQwICogZHgsIGFbMV0gPSBheSArIHQwICogZHk7XG4gIGlmICh0MSA8IDEpIGJbMF0gPSBheCArIHQxICogZHgsIGJbMV0gPSBheSArIHQxICogZHk7XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IHthYnMsIGVwc2lsb259IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQgY2xpcEJ1ZmZlciBmcm9tIFwiLi9idWZmZXJcIjtcbmltcG9ydCBjbGlwTGluZSBmcm9tIFwiLi9saW5lXCI7XG5pbXBvcnQgY2xpcFJlam9pbiBmcm9tIFwiLi9yZWpvaW5cIjtcbmltcG9ydCB7bWVyZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuXG52YXIgY2xpcE1heCA9IDFlOSwgY2xpcE1pbiA9IC1jbGlwTWF4O1xuXG4vLyBUT0RPIFVzZSBkMy1wb2x5Z29u4oCZcyBwb2x5Z29uQ29udGFpbnMgaGVyZSBmb3IgdGhlIHJpbmcgY2hlY2s/XG4vLyBUT0RPIEVsaW1pbmF0ZSBkdXBsaWNhdGUgYnVmZmVyaW5nIGluIGNsaXBCdWZmZXIgYW5kIHBvbHlnb24ucHVzaD9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xpcFJlY3RhbmdsZSh4MCwgeTAsIHgxLCB5MSkge1xuXG4gIGZ1bmN0aW9uIHZpc2libGUoeCwgeSkge1xuICAgIHJldHVybiB4MCA8PSB4ICYmIHggPD0geDEgJiYgeTAgPD0geSAmJiB5IDw9IHkxO1xuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGUoZnJvbSwgdG8sIGRpcmVjdGlvbiwgc3RyZWFtKSB7XG4gICAgdmFyIGEgPSAwLCBhMSA9IDA7XG4gICAgaWYgKGZyb20gPT0gbnVsbFxuICAgICAgICB8fCAoYSA9IGNvcm5lcihmcm9tLCBkaXJlY3Rpb24pKSAhPT0gKGExID0gY29ybmVyKHRvLCBkaXJlY3Rpb24pKVxuICAgICAgICB8fCBjb21wYXJlUG9pbnQoZnJvbSwgdG8pIDwgMCBeIGRpcmVjdGlvbiA+IDApIHtcbiAgICAgIGRvIHN0cmVhbS5wb2ludChhID09PSAwIHx8IGEgPT09IDMgPyB4MCA6IHgxLCBhID4gMSA/IHkxIDogeTApO1xuICAgICAgd2hpbGUgKChhID0gKGEgKyBkaXJlY3Rpb24gKyA0KSAlIDQpICE9PSBhMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5wb2ludCh0b1swXSwgdG9bMV0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcm5lcihwLCBkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gYWJzKHBbMF0gLSB4MCkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDAgOiAzXG4gICAgICAgIDogYWJzKHBbMF0gLSB4MSkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDIgOiAxXG4gICAgICAgIDogYWJzKHBbMV0gLSB5MCkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDEgOiAwXG4gICAgICAgIDogZGlyZWN0aW9uID4gMCA/IDMgOiAyOyAvLyBhYnMocFsxXSAtIHkxKSA8IGVwc2lsb25cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVJbnRlcnNlY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBjb21wYXJlUG9pbnQoYS54LCBiLngpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGFyZVBvaW50KGEsIGIpIHtcbiAgICB2YXIgY2EgPSBjb3JuZXIoYSwgMSksXG4gICAgICAgIGNiID0gY29ybmVyKGIsIDEpO1xuICAgIHJldHVybiBjYSAhPT0gY2IgPyBjYSAtIGNiXG4gICAgICAgIDogY2EgPT09IDAgPyBiWzFdIC0gYVsxXVxuICAgICAgICA6IGNhID09PSAxID8gYVswXSAtIGJbMF1cbiAgICAgICAgOiBjYSA9PT0gMiA/IGFbMV0gLSBiWzFdXG4gICAgICAgIDogYlswXSAtIGFbMF07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGFjdGl2ZVN0cmVhbSA9IHN0cmVhbSxcbiAgICAgICAgYnVmZmVyU3RyZWFtID0gY2xpcEJ1ZmZlcigpLFxuICAgICAgICBzZWdtZW50cyxcbiAgICAgICAgcG9seWdvbixcbiAgICAgICAgcmluZyxcbiAgICAgICAgeF9fLCB5X18sIHZfXywgLy8gZmlyc3QgcG9pbnRcbiAgICAgICAgeF8sIHlfLCB2XywgLy8gcHJldmlvdXMgcG9pbnRcbiAgICAgICAgZmlyc3QsXG4gICAgICAgIGNsZWFuO1xuXG4gICAgdmFyIGNsaXBTdHJlYW0gPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IHBvbHlnb25TdGFydCxcbiAgICAgIHBvbHlnb25FbmQ6IHBvbHlnb25FbmRcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQoeCwgeSkge1xuICAgICAgaWYgKHZpc2libGUoeCwgeSkpIGFjdGl2ZVN0cmVhbS5wb2ludCh4LCB5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2x5Z29uSW5zaWRlKCkge1xuICAgICAgdmFyIHdpbmRpbmcgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb24ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIHJpbmcgPSBwb2x5Z29uW2ldLCBqID0gMSwgbSA9IHJpbmcubGVuZ3RoLCBwb2ludCA9IHJpbmdbMF0sIGEwLCBhMSwgYjAgPSBwb2ludFswXSwgYjEgPSBwb2ludFsxXTsgaiA8IG07ICsraikge1xuICAgICAgICAgIGEwID0gYjAsIGExID0gYjEsIHBvaW50ID0gcmluZ1tqXSwgYjAgPSBwb2ludFswXSwgYjEgPSBwb2ludFsxXTtcbiAgICAgICAgICBpZiAoYTEgPD0geTEpIHsgaWYgKGIxID4geTEgJiYgKGIwIC0gYTApICogKHkxIC0gYTEpID4gKGIxIC0gYTEpICogKHgwIC0gYTApKSArK3dpbmRpbmc7IH1cbiAgICAgICAgICBlbHNlIHsgaWYgKGIxIDw9IHkxICYmIChiMCAtIGEwKSAqICh5MSAtIGExKSA8IChiMSAtIGExKSAqICh4MCAtIGEwKSkgLS13aW5kaW5nOyB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdpbmRpbmc7XG4gICAgfVxuXG4gICAgLy8gQnVmZmVyIGdlb21ldHJ5IHdpdGhpbiBhIHBvbHlnb24gYW5kIHRoZW4gY2xpcCBpdCBlbiBtYXNzZS5cbiAgICBmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKSB7XG4gICAgICBhY3RpdmVTdHJlYW0gPSBidWZmZXJTdHJlYW0sIHNlZ21lbnRzID0gW10sIHBvbHlnb24gPSBbXSwgY2xlYW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvbHlnb25FbmQoKSB7XG4gICAgICB2YXIgc3RhcnRJbnNpZGUgPSBwb2x5Z29uSW5zaWRlKCksXG4gICAgICAgICAgY2xlYW5JbnNpZGUgPSBjbGVhbiAmJiBzdGFydEluc2lkZSxcbiAgICAgICAgICB2aXNpYmxlID0gKHNlZ21lbnRzID0gbWVyZ2Uoc2VnbWVudHMpKS5sZW5ndGg7XG4gICAgICBpZiAoY2xlYW5JbnNpZGUgfHwgdmlzaWJsZSkge1xuICAgICAgICBzdHJlYW0ucG9seWdvblN0YXJ0KCk7XG4gICAgICAgIGlmIChjbGVhbkluc2lkZSkge1xuICAgICAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICBpbnRlcnBvbGF0ZShudWxsLCBudWxsLCAxLCBzdHJlYW0pO1xuICAgICAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICBjbGlwUmVqb2luKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLnBvbHlnb25FbmQoKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVN0cmVhbSA9IHN0cmVhbSwgc2VnbWVudHMgPSBwb2x5Z29uID0gcmluZyA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgY2xpcFN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICAgIGlmIChwb2x5Z29uKSBwb2x5Z29uLnB1c2gocmluZyA9IFtdKTtcbiAgICAgIGZpcnN0ID0gdHJ1ZTtcbiAgICAgIHZfID0gZmFsc2U7XG4gICAgICB4XyA9IHlfID0gTmFOO1xuICAgIH1cblxuICAgIC8vIFRPRE8gcmF0aGVyIHRoYW4gc3BlY2lhbC1jYXNlIHBvbHlnb25zLCBzaW1wbHkgaGFuZGxlIHRoZW0gc2VwYXJhdGVseS5cbiAgICAvLyBJZGVhbGx5LCBjb2luY2lkZW50IGludGVyc2VjdGlvbiBwb2ludHMgc2hvdWxkIGJlIGppdHRlcmVkIHRvIGF2b2lkXG4gICAgLy8gY2xpcHBpbmcgaXNzdWVzLlxuICAgIGZ1bmN0aW9uIGxpbmVFbmQoKSB7XG4gICAgICBpZiAoc2VnbWVudHMpIHtcbiAgICAgICAgbGluZVBvaW50KHhfXywgeV9fKTtcbiAgICAgICAgaWYgKHZfXyAmJiB2XykgYnVmZmVyU3RyZWFtLnJlam9pbigpO1xuICAgICAgICBzZWdtZW50cy5wdXNoKGJ1ZmZlclN0cmVhbS5yZXN1bHQoKSk7XG4gICAgICB9XG4gICAgICBjbGlwU3RyZWFtLnBvaW50ID0gcG9pbnQ7XG4gICAgICBpZiAodl8pIGFjdGl2ZVN0cmVhbS5saW5lRW5kKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVBvaW50KHgsIHkpIHtcbiAgICAgIHZhciB2ID0gdmlzaWJsZSh4LCB5KTtcbiAgICAgIGlmIChwb2x5Z29uKSByaW5nLnB1c2goW3gsIHldKTtcbiAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICB4X18gPSB4LCB5X18gPSB5LCB2X18gPSB2O1xuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICBhY3RpdmVTdHJlYW0ucG9pbnQoeCwgeSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2ICYmIHZfKSBhY3RpdmVTdHJlYW0ucG9pbnQoeCwgeSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBhID0gW3hfID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeF8pKSwgeV8gPSBNYXRoLm1heChjbGlwTWluLCBNYXRoLm1pbihjbGlwTWF4LCB5XykpXSxcbiAgICAgICAgICAgICAgYiA9IFt4ID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeCkpLCB5ID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeSkpXTtcbiAgICAgICAgICBpZiAoY2xpcExpbmUoYSwgYiwgeDAsIHkwLCB4MSwgeTEpKSB7XG4gICAgICAgICAgICBpZiAoIXZfKSB7XG4gICAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICAgICAgYWN0aXZlU3RyZWFtLnBvaW50KGFbMF0sIGFbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aXZlU3RyZWFtLnBvaW50KGJbMF0sIGJbMV0pO1xuICAgICAgICAgICAgaWYgKCF2KSBhY3RpdmVTdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgICAgY2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHYpIHtcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5wb2ludCh4LCB5KTtcbiAgICAgICAgICAgIGNsZWFuID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB4XyA9IHgsIHlfID0geSwgdl8gPSB2O1xuICAgIH1cblxuICAgIHJldHVybiBjbGlwU3RyZWFtO1xuICB9O1xufVxuIiwiaW1wb3J0IHBvaW50RXF1YWwgZnJvbSBcIi4uL3BvaW50RXF1YWxcIjtcblxuZnVuY3Rpb24gSW50ZXJzZWN0aW9uKHBvaW50LCBwb2ludHMsIG90aGVyLCBlbnRyeSkge1xuICB0aGlzLnggPSBwb2ludDtcbiAgdGhpcy56ID0gcG9pbnRzO1xuICB0aGlzLm8gPSBvdGhlcjsgLy8gYW5vdGhlciBpbnRlcnNlY3Rpb25cbiAgdGhpcy5lID0gZW50cnk7IC8vIGlzIGFuIGVudHJ5P1xuICB0aGlzLnYgPSBmYWxzZTsgLy8gdmlzaXRlZFxuICB0aGlzLm4gPSB0aGlzLnAgPSBudWxsOyAvLyBuZXh0ICYgcHJldmlvdXNcbn1cblxuLy8gQSBnZW5lcmFsaXplZCBwb2x5Z29uIGNsaXBwaW5nIGFsZ29yaXRobTogZ2l2ZW4gYSBwb2x5Z29uIHRoYXQgaGFzIGJlZW4gY3V0XG4vLyBpbnRvIGl0cyB2aXNpYmxlIGxpbmUgc2VnbWVudHMsIGFuZCByZWpvaW5zIHRoZSBzZWdtZW50cyBieSBpbnRlcnBvbGF0aW5nXG4vLyBhbG9uZyB0aGUgY2xpcCBlZGdlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VnbWVudHMsIGNvbXBhcmVJbnRlcnNlY3Rpb24sIHN0YXJ0SW5zaWRlLCBpbnRlcnBvbGF0ZSwgc3RyZWFtKSB7XG4gIHZhciBzdWJqZWN0ID0gW10sXG4gICAgICBjbGlwID0gW10sXG4gICAgICBpLFxuICAgICAgbjtcblxuICBzZWdtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHNlZ21lbnQpIHtcbiAgICBpZiAoKG4gPSBzZWdtZW50Lmxlbmd0aCAtIDEpIDw9IDApIHJldHVybjtcbiAgICB2YXIgbiwgcDAgPSBzZWdtZW50WzBdLCBwMSA9IHNlZ21lbnRbbl0sIHg7XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnRzIG9mIGEgc2VnbWVudCBhcmUgY29pbmNpZGVudCwgdGhlbiB0cmVhdCBhcyBhXG4gICAgLy8gY2xvc2VkIHJpbmcuIFRPRE8gaWYgYWxsIHJpbmdzIGFyZSBjbG9zZWQsIHRoZW4gdGhlIHdpbmRpbmcgb3JkZXIgb2YgdGhlXG4gICAgLy8gZXh0ZXJpb3IgcmluZyBzaG91bGQgYmUgY2hlY2tlZC5cbiAgICBpZiAocG9pbnRFcXVhbChwMCwgcDEpKSB7XG4gICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBzdHJlYW0ucG9pbnQoKHAwID0gc2VnbWVudFtpXSlbMF0sIHAwWzFdKTtcbiAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3ViamVjdC5wdXNoKHggPSBuZXcgSW50ZXJzZWN0aW9uKHAwLCBzZWdtZW50LCBudWxsLCB0cnVlKSk7XG4gICAgY2xpcC5wdXNoKHgubyA9IG5ldyBJbnRlcnNlY3Rpb24ocDAsIG51bGwsIHgsIGZhbHNlKSk7XG4gICAgc3ViamVjdC5wdXNoKHggPSBuZXcgSW50ZXJzZWN0aW9uKHAxLCBzZWdtZW50LCBudWxsLCBmYWxzZSkpO1xuICAgIGNsaXAucHVzaCh4Lm8gPSBuZXcgSW50ZXJzZWN0aW9uKHAxLCBudWxsLCB4LCB0cnVlKSk7XG4gIH0pO1xuXG4gIGlmICghc3ViamVjdC5sZW5ndGgpIHJldHVybjtcblxuICBjbGlwLnNvcnQoY29tcGFyZUludGVyc2VjdGlvbik7XG4gIGxpbmsoc3ViamVjdCk7XG4gIGxpbmsoY2xpcCk7XG5cbiAgZm9yIChpID0gMCwgbiA9IGNsaXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgY2xpcFtpXS5lID0gc3RhcnRJbnNpZGUgPSAhc3RhcnRJbnNpZGU7XG4gIH1cblxuICB2YXIgc3RhcnQgPSBzdWJqZWN0WzBdLFxuICAgICAgcG9pbnRzLFxuICAgICAgcG9pbnQ7XG5cbiAgd2hpbGUgKDEpIHtcbiAgICAvLyBGaW5kIGZpcnN0IHVudmlzaXRlZCBpbnRlcnNlY3Rpb24uXG4gICAgdmFyIGN1cnJlbnQgPSBzdGFydCxcbiAgICAgICAgaXNTdWJqZWN0ID0gdHJ1ZTtcbiAgICB3aGlsZSAoY3VycmVudC52KSBpZiAoKGN1cnJlbnQgPSBjdXJyZW50Lm4pID09PSBzdGFydCkgcmV0dXJuO1xuICAgIHBvaW50cyA9IGN1cnJlbnQuejtcbiAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgZG8ge1xuICAgICAgY3VycmVudC52ID0gY3VycmVudC5vLnYgPSB0cnVlO1xuICAgICAgaWYgKGN1cnJlbnQuZSkge1xuICAgICAgICBpZiAoaXNTdWJqZWN0KSB7XG4gICAgICAgICAgZm9yIChpID0gMCwgbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBuOyArK2kpIHN0cmVhbS5wb2ludCgocG9pbnQgPSBwb2ludHNbaV0pWzBdLCBwb2ludFsxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJwb2xhdGUoY3VycmVudC54LCBjdXJyZW50Lm4ueCwgMSwgc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzU3ViamVjdCkge1xuICAgICAgICAgIHBvaW50cyA9IGN1cnJlbnQucC56O1xuICAgICAgICAgIGZvciAoaSA9IHBvaW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgc3RyZWFtLnBvaW50KChwb2ludCA9IHBvaW50c1tpXSlbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnRlcnBvbGF0ZShjdXJyZW50LngsIGN1cnJlbnQucC54LCAtMSwgc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wO1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubztcbiAgICAgIHBvaW50cyA9IGN1cnJlbnQuejtcbiAgICAgIGlzU3ViamVjdCA9ICFpc1N1YmplY3Q7XG4gICAgfSB3aGlsZSAoIWN1cnJlbnQudik7XG4gICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsaW5rKGFycmF5KSB7XG4gIGlmICghKG4gPSBhcnJheS5sZW5ndGgpKSByZXR1cm47XG4gIHZhciBuLFxuICAgICAgaSA9IDAsXG4gICAgICBhID0gYXJyYXlbMF0sXG4gICAgICBiO1xuICB3aGlsZSAoKytpIDwgbikge1xuICAgIGEubiA9IGIgPSBhcnJheVtpXTtcbiAgICBiLnAgPSBhO1xuICAgIGEgPSBiO1xuICB9XG4gIGEubiA9IGIgPSBhcnJheVswXTtcbiAgYi5wID0gYTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcblxuICBmdW5jdGlvbiBjb21wb3NlKHgsIHkpIHtcbiAgICByZXR1cm4geCA9IGEoeCwgeSksIGIoeFswXSwgeFsxXSk7XG4gIH1cblxuICBpZiAoYS5pbnZlcnQgJiYgYi5pbnZlcnQpIGNvbXBvc2UuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiB4ID0gYi5pbnZlcnQoeCwgeSksIHggJiYgYS5pbnZlcnQoeFswXSwgeFsxXSk7XG4gIH07XG5cbiAgcmV0dXJuIGNvbXBvc2U7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7ZGVmYXVsdCBhcyBwb2x5Z29uQ29udGFpbnN9IGZyb20gXCIuL3BvbHlnb25Db250YWluc1wiO1xuaW1wb3J0IHtkZWZhdWx0IGFzIGRpc3RhbmNlfSBmcm9tIFwiLi9kaXN0YW5jZVwiO1xuaW1wb3J0IHtlcHNpbG9uLCByYWRpYW5zfSBmcm9tIFwiLi9tYXRoXCI7XG5cbnZhciBjb250YWluc09iamVjdFR5cGUgPSB7XG4gIEZlYXR1cmU6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICByZXR1cm4gY29udGFpbnNHZW9tZXRyeShvYmplY3QuZ2VvbWV0cnksIHBvaW50KTtcbiAgfSxcbiAgRmVhdHVyZUNvbGxlY3Rpb246IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBvYmplY3QuZmVhdHVyZXMsIGkgPSAtMSwgbiA9IGZlYXR1cmVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zR2VvbWV0cnkoZmVhdHVyZXNbaV0uZ2VvbWV0cnksIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgY29udGFpbnNHZW9tZXRyeVR5cGUgPSB7XG4gIFNwaGVyZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIFBvaW50OiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zUG9pbnQob2JqZWN0LmNvb3JkaW5hdGVzLCBwb2ludCk7XG4gIH0sXG4gIE11bHRpUG9pbnQ6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zUG9pbnQoY29vcmRpbmF0ZXNbaV0sIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBMaW5lU3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTGluZShvYmplY3QuY29vcmRpbmF0ZXMsIHBvaW50KTtcbiAgfSxcbiAgTXVsdGlMaW5lU3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgdmFyIGNvb3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmIChjb250YWluc0xpbmUoY29vcmRpbmF0ZXNbaV0sIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBQb2x5Z29uOiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zUG9seWdvbihvYmplY3QuY29vcmRpbmF0ZXMsIHBvaW50KTtcbiAgfSxcbiAgTXVsdGlQb2x5Z29uOiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgdmFyIGNvb3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmIChjb250YWluc1BvbHlnb24oY29vcmRpbmF0ZXNbaV0sIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBHZW9tZXRyeUNvbGxlY3Rpb246IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgZ2VvbWV0cmllcyA9IG9iamVjdC5nZW9tZXRyaWVzLCBpID0gLTEsIG4gPSBnZW9tZXRyaWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zR2VvbWV0cnkoZ2VvbWV0cmllc1tpXSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbnRhaW5zR2VvbWV0cnkoZ2VvbWV0cnksIHBvaW50KSB7XG4gIHJldHVybiBnZW9tZXRyeSAmJiBjb250YWluc0dlb21ldHJ5VHlwZS5oYXNPd25Qcm9wZXJ0eShnZW9tZXRyeS50eXBlKVxuICAgICAgPyBjb250YWluc0dlb21ldHJ5VHlwZVtnZW9tZXRyeS50eXBlXShnZW9tZXRyeSwgcG9pbnQpXG4gICAgICA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb250YWluc1BvaW50KGNvb3JkaW5hdGVzLCBwb2ludCkge1xuICByZXR1cm4gZGlzdGFuY2UoY29vcmRpbmF0ZXMsIHBvaW50KSA9PT0gMDtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNMaW5lKGNvb3JkaW5hdGVzLCBwb2ludCkge1xuICB2YXIgYWIgPSBkaXN0YW5jZShjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pLFxuICAgICAgYW8gPSBkaXN0YW5jZShjb29yZGluYXRlc1swXSwgcG9pbnQpLFxuICAgICAgb2IgPSBkaXN0YW5jZShwb2ludCwgY29vcmRpbmF0ZXNbMV0pO1xuICByZXR1cm4gYW8gKyBvYiA8PSBhYiArIGVwc2lsb247XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zUG9seWdvbihjb29yZGluYXRlcywgcG9pbnQpIHtcbiAgcmV0dXJuICEhcG9seWdvbkNvbnRhaW5zKGNvb3JkaW5hdGVzLm1hcChyaW5nUmFkaWFucyksIHBvaW50UmFkaWFucyhwb2ludCkpO1xufVxuXG5mdW5jdGlvbiByaW5nUmFkaWFucyhyaW5nKSB7XG4gIHJldHVybiByaW5nID0gcmluZy5tYXAocG9pbnRSYWRpYW5zKSwgcmluZy5wb3AoKSwgcmluZztcbn1cblxuZnVuY3Rpb24gcG9pbnRSYWRpYW5zKHBvaW50KSB7XG4gIHJldHVybiBbcG9pbnRbMF0gKiByYWRpYW5zLCBwb2ludFsxXSAqIHJhZGlhbnNdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gIHJldHVybiAob2JqZWN0ICYmIGNvbnRhaW5zT2JqZWN0VHlwZS5oYXNPd25Qcm9wZXJ0eShvYmplY3QudHlwZSlcbiAgICAgID8gY29udGFpbnNPYmplY3RUeXBlW29iamVjdC50eXBlXVxuICAgICAgOiBjb250YWluc0dlb21ldHJ5KShvYmplY3QsIHBvaW50KTtcbn1cbiIsImltcG9ydCBsZW5ndGggZnJvbSBcIi4vbGVuZ3RoXCI7XG5cbnZhciBjb29yZGluYXRlcyA9IFtudWxsLCBudWxsXSxcbiAgICBvYmplY3QgPSB7dHlwZTogXCJMaW5lU3RyaW5nXCIsIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc307XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgY29vcmRpbmF0ZXNbMF0gPSBhO1xuICBjb29yZGluYXRlc1sxXSA9IGI7XG4gIHJldHVybiBsZW5ndGgob2JqZWN0KTtcbn1cbiIsImltcG9ydCB7cmFuZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHthYnMsIGNlaWwsIGVwc2lsb259IGZyb20gXCIuL21hdGhcIjtcblxuZnVuY3Rpb24gZ3JhdGljdWxlWCh5MCwgeTEsIGR5KSB7XG4gIHZhciB5ID0gcmFuZ2UoeTAsIHkxIC0gZXBzaWxvbiwgZHkpLmNvbmNhdCh5MSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiB5Lm1hcChmdW5jdGlvbih5KSB7IHJldHVybiBbeCwgeV07IH0pOyB9O1xufVxuXG5mdW5jdGlvbiBncmF0aWN1bGVZKHgwLCB4MSwgZHgpIHtcbiAgdmFyIHggPSByYW5nZSh4MCwgeDEgLSBlcHNpbG9uLCBkeCkuY29uY2F0KHgxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHkpIHsgcmV0dXJuIHgubWFwKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIFt4LCB5XTsgfSk7IH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdyYXRpY3VsZSgpIHtcbiAgdmFyIHgxLCB4MCwgWDEsIFgwLFxuICAgICAgeTEsIHkwLCBZMSwgWTAsXG4gICAgICBkeCA9IDEwLCBkeSA9IGR4LCBEWCA9IDkwLCBEWSA9IDM2MCxcbiAgICAgIHgsIHksIFgsIFksXG4gICAgICBwcmVjaXNpb24gPSAyLjU7XG5cbiAgZnVuY3Rpb24gZ3JhdGljdWxlKCkge1xuICAgIHJldHVybiB7dHlwZTogXCJNdWx0aUxpbmVTdHJpbmdcIiwgY29vcmRpbmF0ZXM6IGxpbmVzKCl9O1xuICB9XG5cbiAgZnVuY3Rpb24gbGluZXMoKSB7XG4gICAgcmV0dXJuIHJhbmdlKGNlaWwoWDAgLyBEWCkgKiBEWCwgWDEsIERYKS5tYXAoWClcbiAgICAgICAgLmNvbmNhdChyYW5nZShjZWlsKFkwIC8gRFkpICogRFksIFkxLCBEWSkubWFwKFkpKVxuICAgICAgICAuY29uY2F0KHJhbmdlKGNlaWwoeDAgLyBkeCkgKiBkeCwgeDEsIGR4KS5maWx0ZXIoZnVuY3Rpb24oeCkgeyByZXR1cm4gYWJzKHggJSBEWCkgPiBlcHNpbG9uOyB9KS5tYXAoeCkpXG4gICAgICAgIC5jb25jYXQocmFuZ2UoY2VpbCh5MCAvIGR5KSAqIGR5LCB5MSwgZHkpLmZpbHRlcihmdW5jdGlvbih5KSB7IHJldHVybiBhYnMoeSAlIERZKSA+IGVwc2lsb247IH0pLm1hcCh5KSk7XG4gIH1cblxuICBncmF0aWN1bGUubGluZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbGluZXMoKS5tYXAoZnVuY3Rpb24oY29vcmRpbmF0ZXMpIHsgcmV0dXJuIHt0eXBlOiBcIkxpbmVTdHJpbmdcIiwgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzfTsgfSk7XG4gIH07XG5cbiAgZ3JhdGljdWxlLm91dGxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJQb2x5Z29uXCIsXG4gICAgICBjb29yZGluYXRlczogW1xuICAgICAgICBYKFgwKS5jb25jYXQoXG4gICAgICAgIFkoWTEpLnNsaWNlKDEpLFxuICAgICAgICBYKFgxKS5yZXZlcnNlKCkuc2xpY2UoMSksXG4gICAgICAgIFkoWTApLnJldmVyc2UoKS5zbGljZSgxKSlcbiAgICAgIF1cbiAgICB9O1xuICB9O1xuXG4gIGdyYXRpY3VsZS5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZ3JhdGljdWxlLmV4dGVudE1pbm9yKCk7XG4gICAgcmV0dXJuIGdyYXRpY3VsZS5leHRlbnRNYWpvcihfKS5leHRlbnRNaW5vcihfKTtcbiAgfTtcblxuICBncmF0aWN1bGUuZXh0ZW50TWFqb3IgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW1tYMCwgWTBdLCBbWDEsIFkxXV07XG4gICAgWDAgPSArX1swXVswXSwgWDEgPSArX1sxXVswXTtcbiAgICBZMCA9ICtfWzBdWzFdLCBZMSA9ICtfWzFdWzFdO1xuICAgIGlmIChYMCA+IFgxKSBfID0gWDAsIFgwID0gWDEsIFgxID0gXztcbiAgICBpZiAoWTAgPiBZMSkgXyA9IFkwLCBZMCA9IFkxLCBZMSA9IF87XG4gICAgcmV0dXJuIGdyYXRpY3VsZS5wcmVjaXNpb24ocHJlY2lzaW9uKTtcbiAgfTtcblxuICBncmF0aWN1bGUuZXh0ZW50TWlub3IgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gICAgeDAgPSArX1swXVswXSwgeDEgPSArX1sxXVswXTtcbiAgICB5MCA9ICtfWzBdWzFdLCB5MSA9ICtfWzFdWzFdO1xuICAgIGlmICh4MCA+IHgxKSBfID0geDAsIHgwID0geDEsIHgxID0gXztcbiAgICBpZiAoeTAgPiB5MSkgXyA9IHkwLCB5MCA9IHkxLCB5MSA9IF87XG4gICAgcmV0dXJuIGdyYXRpY3VsZS5wcmVjaXNpb24ocHJlY2lzaW9uKTtcbiAgfTtcblxuICBncmF0aWN1bGUuc3RlcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBncmF0aWN1bGUuc3RlcE1pbm9yKCk7XG4gICAgcmV0dXJuIGdyYXRpY3VsZS5zdGVwTWFqb3IoXykuc3RlcE1pbm9yKF8pO1xuICB9O1xuXG4gIGdyYXRpY3VsZS5zdGVwTWFqb3IgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW0RYLCBEWV07XG4gICAgRFggPSArX1swXSwgRFkgPSArX1sxXTtcbiAgICByZXR1cm4gZ3JhdGljdWxlO1xuICB9O1xuXG4gIGdyYXRpY3VsZS5zdGVwTWlub3IgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW2R4LCBkeV07XG4gICAgZHggPSArX1swXSwgZHkgPSArX1sxXTtcbiAgICByZXR1cm4gZ3JhdGljdWxlO1xuICB9O1xuXG4gIGdyYXRpY3VsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcHJlY2lzaW9uO1xuICAgIHByZWNpc2lvbiA9ICtfO1xuICAgIHggPSBncmF0aWN1bGVYKHkwLCB5MSwgOTApO1xuICAgIHkgPSBncmF0aWN1bGVZKHgwLCB4MSwgcHJlY2lzaW9uKTtcbiAgICBYID0gZ3JhdGljdWxlWChZMCwgWTEsIDkwKTtcbiAgICBZID0gZ3JhdGljdWxlWShYMCwgWDEsIHByZWNpc2lvbik7XG4gICAgcmV0dXJuIGdyYXRpY3VsZTtcbiAgfTtcblxuICByZXR1cm4gZ3JhdGljdWxlXG4gICAgICAuZXh0ZW50TWFqb3IoW1stMTgwLCAtOTAgKyBlcHNpbG9uXSwgWzE4MCwgOTAgLSBlcHNpbG9uXV0pXG4gICAgICAuZXh0ZW50TWlub3IoW1stMTgwLCAtODAgLSBlcHNpbG9uXSwgWzE4MCwgODAgKyBlcHNpbG9uXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JhdGljdWxlMTAoKSB7XG4gIHJldHVybiBncmF0aWN1bGUoKSgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9BcmVhfSBmcm9tIFwiLi9hcmVhXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQm91bmRzfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9DZW50cm9pZH0gZnJvbSBcIi4vY2VudHJvaWRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9DaXJjbGV9IGZyb20gXCIuL2NpcmNsZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0NsaXBBbnRpbWVyaWRpYW59IGZyb20gXCIuL2NsaXAvYW50aW1lcmlkaWFuXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2xpcENpcmNsZX0gZnJvbSBcIi4vY2xpcC9jaXJjbGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9DbGlwRXh0ZW50fSBmcm9tIFwiLi9jbGlwL2V4dGVudFwiOyAvLyBERVBSRUNBVEVEISBVc2UgZDMuZ2VvSWRlbnRpdHkoKS5jbGlwRXh0ZW50KOKApikuXG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2xpcFJlY3RhbmdsZX0gZnJvbSBcIi4vY2xpcC9yZWN0YW5nbGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Db250YWluc30gZnJvbSBcIi4vY29udGFpbnNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9EaXN0YW5jZX0gZnJvbSBcIi4vZGlzdGFuY2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9HcmF0aWN1bGUsIGdyYXRpY3VsZTEwIGFzIGdlb0dyYXRpY3VsZTEwfSBmcm9tIFwiLi9ncmF0aWN1bGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9JbnRlcnBvbGF0ZX0gZnJvbSBcIi4vaW50ZXJwb2xhdGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9MZW5ndGh9IGZyb20gXCIuL2xlbmd0aFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb1BhdGh9IGZyb20gXCIuL3BhdGgvaW5kZXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9BbGJlcnN9IGZyb20gXCIuL3Byb2plY3Rpb24vYWxiZXJzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQWxiZXJzVXNhfSBmcm9tIFwiLi9wcm9qZWN0aW9uL2FsYmVyc1VzYVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0F6aW11dGhhbEVxdWFsQXJlYSwgYXppbXV0aGFsRXF1YWxBcmVhUmF3IGFzIGdlb0F6aW11dGhhbEVxdWFsQXJlYVJhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9hemltdXRoYWxFcXVhbEFyZWFcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9BemltdXRoYWxFcXVpZGlzdGFudCwgYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcgYXMgZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1aWRpc3RhbnRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Db25pY0NvbmZvcm1hbCwgY29uaWNDb25mb3JtYWxSYXcgYXMgZ2VvQ29uaWNDb25mb3JtYWxSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vY29uaWNDb25mb3JtYWxcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Db25pY0VxdWFsQXJlYSwgY29uaWNFcXVhbEFyZWFSYXcgYXMgZ2VvQ29uaWNFcXVhbEFyZWFSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vY29uaWNFcXVhbEFyZWFcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Db25pY0VxdWlkaXN0YW50LCBjb25pY0VxdWlkaXN0YW50UmF3IGFzIGdlb0NvbmljRXF1aWRpc3RhbnRSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vY29uaWNFcXVpZGlzdGFudFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0VxdWFsRWFydGgsIGVxdWFsRWFydGhSYXcgYXMgZ2VvRXF1YWxFYXJ0aFJhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9lcXVhbEVhcnRoXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvRXF1aXJlY3Rhbmd1bGFyLCBlcXVpcmVjdGFuZ3VsYXJSYXcgYXMgZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2VxdWlyZWN0YW5ndWxhclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0dub21vbmljLCBnbm9tb25pY1JhdyBhcyBnZW9Hbm9tb25pY1Jhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9nbm9tb25pY1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0lkZW50aXR5fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2lkZW50aXR5XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvUHJvamVjdGlvbiwgcHJvamVjdGlvbk11dGF0b3IgYXMgZ2VvUHJvamVjdGlvbk11dGF0b3J9IGZyb20gXCIuL3Byb2plY3Rpb24vaW5kZXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9NZXJjYXRvciwgbWVyY2F0b3JSYXcgYXMgZ2VvTWVyY2F0b3JSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vbWVyY2F0b3JcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9OYXR1cmFsRWFydGgxLCBuYXR1cmFsRWFydGgxUmF3IGFzIGdlb05hdHVyYWxFYXJ0aDFSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vbmF0dXJhbEVhcnRoMVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb09ydGhvZ3JhcGhpYywgb3J0aG9ncmFwaGljUmF3IGFzIGdlb09ydGhvZ3JhcGhpY1Jhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9vcnRob2dyYXBoaWNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9TdGVyZW9ncmFwaGljLCBzdGVyZW9ncmFwaGljUmF3IGFzIGdlb1N0ZXJlb2dyYXBoaWNSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vc3RlcmVvZ3JhcGhpY1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb1RyYW5zdmVyc2VNZXJjYXRvciwgdHJhbnN2ZXJzZU1lcmNhdG9yUmF3IGFzIGdlb1RyYW5zdmVyc2VNZXJjYXRvclJhd30gZnJvbSBcIi4vcHJvamVjdGlvbi90cmFuc3ZlcnNlTWVyY2F0b3JcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Sb3RhdGlvbn0gZnJvbSBcIi4vcm90YXRpb25cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9TdHJlYW19IGZyb20gXCIuL3N0cmVhbVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb1RyYW5zZm9ybX0gZnJvbSBcIi4vdHJhbnNmb3JtXCI7XG4iLCJpbXBvcnQge2FzaW4sIGF0YW4yLCBjb3MsIGRlZ3JlZXMsIGhhdmVyc2luLCByYWRpYW5zLCBzaW4sIHNxcnR9IGZyb20gXCIuL21hdGhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgeDAgPSBhWzBdICogcmFkaWFucyxcbiAgICAgIHkwID0gYVsxXSAqIHJhZGlhbnMsXG4gICAgICB4MSA9IGJbMF0gKiByYWRpYW5zLFxuICAgICAgeTEgPSBiWzFdICogcmFkaWFucyxcbiAgICAgIGN5MCA9IGNvcyh5MCksXG4gICAgICBzeTAgPSBzaW4oeTApLFxuICAgICAgY3kxID0gY29zKHkxKSxcbiAgICAgIHN5MSA9IHNpbih5MSksXG4gICAgICBreDAgPSBjeTAgKiBjb3MoeDApLFxuICAgICAga3kwID0gY3kwICogc2luKHgwKSxcbiAgICAgIGt4MSA9IGN5MSAqIGNvcyh4MSksXG4gICAgICBreTEgPSBjeTEgKiBzaW4oeDEpLFxuICAgICAgZCA9IDIgKiBhc2luKHNxcnQoaGF2ZXJzaW4oeTEgLSB5MCkgKyBjeTAgKiBjeTEgKiBoYXZlcnNpbih4MSAtIHgwKSkpLFxuICAgICAgayA9IHNpbihkKTtcblxuICB2YXIgaW50ZXJwb2xhdGUgPSBkID8gZnVuY3Rpb24odCkge1xuICAgIHZhciBCID0gc2luKHQgKj0gZCkgLyBrLFxuICAgICAgICBBID0gc2luKGQgLSB0KSAvIGssXG4gICAgICAgIHggPSBBICoga3gwICsgQiAqIGt4MSxcbiAgICAgICAgeSA9IEEgKiBreTAgKyBCICoga3kxLFxuICAgICAgICB6ID0gQSAqIHN5MCArIEIgKiBzeTE7XG4gICAgcmV0dXJuIFtcbiAgICAgIGF0YW4yKHksIHgpICogZGVncmVlcyxcbiAgICAgIGF0YW4yKHosIHNxcnQoeCAqIHggKyB5ICogeSkpICogZGVncmVlc1xuICAgIF07XG4gIH0gOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW3gwICogZGVncmVlcywgeTAgKiBkZWdyZWVzXTtcbiAgfTtcblxuICBpbnRlcnBvbGF0ZS5kaXN0YW5jZSA9IGQ7XG5cbiAgcmV0dXJuIGludGVycG9sYXRlO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2FicywgYXRhbjIsIGNvcywgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbVwiO1xuXG52YXIgbGVuZ3RoU3VtID0gYWRkZXIoKSxcbiAgICBsYW1iZGEwLFxuICAgIHNpblBoaTAsXG4gICAgY29zUGhpMDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgc3BoZXJlOiBub29wLFxuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBsZW5ndGhMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogbm9vcCxcbiAgcG9seWdvbkVuZDogbm9vcFxufTtcblxuZnVuY3Rpb24gbGVuZ3RoTGluZVN0YXJ0KCkge1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludEZpcnN0O1xuICBsZW5ndGhTdHJlYW0ubGluZUVuZCA9IGxlbmd0aExpbmVFbmQ7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aExpbmVFbmQoKSB7XG4gIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFN0cmVhbS5saW5lRW5kID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW4ocGhpKSwgY29zUGhpMCA9IGNvcyhwaGkpO1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIGRlbHRhID0gYWJzKGxhbWJkYSAtIGxhbWJkYTApLFxuICAgICAgY29zRGVsdGEgPSBjb3MoZGVsdGEpLFxuICAgICAgc2luRGVsdGEgPSBzaW4oZGVsdGEpLFxuICAgICAgeCA9IGNvc1BoaSAqIHNpbkRlbHRhLFxuICAgICAgeSA9IGNvc1BoaTAgKiBzaW5QaGkgLSBzaW5QaGkwICogY29zUGhpICogY29zRGVsdGEsXG4gICAgICB6ID0gc2luUGhpMCAqIHNpblBoaSArIGNvc1BoaTAgKiBjb3NQaGkgKiBjb3NEZWx0YTtcbiAgbGVuZ3RoU3VtLmFkZChhdGFuMihzcXJ0KHggKiB4ICsgeSAqIHkpLCB6KSk7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW5QaGksIGNvc1BoaTAgPSBjb3NQaGk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9iamVjdCkge1xuICBsZW5ndGhTdW0ucmVzZXQoKTtcbiAgc3RyZWFtKG9iamVjdCwgbGVuZ3RoU3RyZWFtKTtcbiAgcmV0dXJuICtsZW5ndGhTdW07XG59XG4iLCJleHBvcnQgdmFyIGVwc2lsb24gPSAxZS02O1xuZXhwb3J0IHZhciBlcHNpbG9uMiA9IDFlLTEyO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgcXVhcnRlclBpID0gcGkgLyA0O1xuZXhwb3J0IHZhciB0YXUgPSBwaSAqIDI7XG5cbmV4cG9ydCB2YXIgZGVncmVlcyA9IDE4MCAvIHBpO1xuZXhwb3J0IHZhciByYWRpYW5zID0gcGkgLyAxODA7XG5cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnM7XG5leHBvcnQgdmFyIGF0YW4gPSBNYXRoLmF0YW47XG5leHBvcnQgdmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbmV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIGNlaWwgPSBNYXRoLmNlaWw7XG5leHBvcnQgdmFyIGV4cCA9IE1hdGguZXhwO1xuZXhwb3J0IHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5leHBvcnQgdmFyIGxvZyA9IE1hdGgubG9nO1xuZXhwb3J0IHZhciBwb3cgPSBNYXRoLnBvdztcbmV4cG9ydCB2YXIgc2luID0gTWF0aC5zaW47XG5leHBvcnQgdmFyIHNpZ24gPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24oeCkgeyByZXR1cm4geCA+IDAgPyAxIDogeCA8IDAgPyAtMSA6IDA7IH07XG5leHBvcnQgdmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG5leHBvcnQgdmFyIHRhbiA9IE1hdGgudGFuO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNvcyh4KSB7XG4gIHJldHVybiB4ID4gMSA/IDAgOiB4IDwgLTEgPyBwaSA6IE1hdGguYWNvcyh4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzaW4oeCkge1xuICByZXR1cm4geCA+IDEgPyBoYWxmUGkgOiB4IDwgLTEgPyAtaGFsZlBpIDogTWF0aC5hc2luKHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGF2ZXJzaW4oeCkge1xuICByZXR1cm4gKHggPSBzaW4oeCAvIDIpKSAqIHg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub29wKCkge31cbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi4vYWRkZXJcIjtcbmltcG9ydCB7YWJzfSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3BcIjtcblxudmFyIGFyZWFTdW0gPSBhZGRlcigpLFxuICAgIGFyZWFSaW5nU3VtID0gYWRkZXIoKSxcbiAgICB4MDAsXG4gICAgeTAwLFxuICAgIHgwLFxuICAgIHkwO1xuXG52YXIgYXJlYVN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogbm9vcCxcbiAgbGluZUVuZDogbm9vcCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLmxpbmVTdGFydCA9IGFyZWFSaW5nU3RhcnQ7XG4gICAgYXJlYVN0cmVhbS5saW5lRW5kID0gYXJlYVJpbmdFbmQ7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGFyZWFTdHJlYW0ubGluZVN0YXJ0ID0gYXJlYVN0cmVhbS5saW5lRW5kID0gYXJlYVN0cmVhbS5wb2ludCA9IG5vb3A7XG4gICAgYXJlYVN1bS5hZGQoYWJzKGFyZWFSaW5nU3VtKSk7XG4gICAgYXJlYVJpbmdTdW0ucmVzZXQoKTtcbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJlYSA9IGFyZWFTdW0gLyAyO1xuICAgIGFyZWFTdW0ucmVzZXQoKTtcbiAgICByZXR1cm4gYXJlYTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXJlYVJpbmdTdGFydCgpIHtcbiAgYXJlYVN0cmVhbS5wb2ludCA9IGFyZWFQb2ludEZpcnN0O1xufVxuXG5mdW5jdGlvbiBhcmVhUG9pbnRGaXJzdCh4LCB5KSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnQ7XG4gIHgwMCA9IHgwID0geCwgeTAwID0geTAgPSB5O1xufVxuXG5mdW5jdGlvbiBhcmVhUG9pbnQoeCwgeSkge1xuICBhcmVhUmluZ1N1bS5hZGQoeTAgKiB4IC0geDAgKiB5KTtcbiAgeDAgPSB4LCB5MCA9IHk7XG59XG5cbmZ1bmN0aW9uIGFyZWFSaW5nRW5kKCkge1xuICBhcmVhUG9pbnQoeDAwLCB5MDApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcmVhU3RyZWFtO1xuIiwiaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3BcIjtcblxudmFyIHgwID0gSW5maW5pdHksXG4gICAgeTAgPSB4MCxcbiAgICB4MSA9IC14MCxcbiAgICB5MSA9IHgxO1xuXG52YXIgYm91bmRzU3RyZWFtID0ge1xuICBwb2ludDogYm91bmRzUG9pbnQsXG4gIGxpbmVTdGFydDogbm9vcCxcbiAgbGluZUVuZDogbm9vcCxcbiAgcG9seWdvblN0YXJ0OiBub29wLFxuICBwb2x5Z29uRW5kOiBub29wLFxuICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBib3VuZHMgPSBbW3gwLCB5MF0sIFt4MSwgeTFdXTtcbiAgICB4MSA9IHkxID0gLSh5MCA9IHgwID0gSW5maW5pdHkpO1xuICAgIHJldHVybiBib3VuZHM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJvdW5kc1BvaW50KHgsIHkpIHtcbiAgaWYgKHggPCB4MCkgeDAgPSB4O1xuICBpZiAoeCA+IHgxKSB4MSA9IHg7XG4gIGlmICh5IDwgeTApIHkwID0geTtcbiAgaWYgKHkgPiB5MSkgeTEgPSB5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBib3VuZHNTdHJlYW07XG4iLCJpbXBvcnQge3NxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5cbi8vIFRPRE8gRW5mb3JjZSBwb3NpdGl2ZSBhcmVhIGZvciBleHRlcmlvciwgbmVnYXRpdmUgYXJlYSBmb3IgaW50ZXJpb3I/XG5cbnZhciBYMCA9IDAsXG4gICAgWTAgPSAwLFxuICAgIFowID0gMCxcbiAgICBYMSA9IDAsXG4gICAgWTEgPSAwLFxuICAgIFoxID0gMCxcbiAgICBYMiA9IDAsXG4gICAgWTIgPSAwLFxuICAgIFoyID0gMCxcbiAgICB4MDAsXG4gICAgeTAwLFxuICAgIHgwLFxuICAgIHkwO1xuXG52YXIgY2VudHJvaWRTdHJlYW0gPSB7XG4gIHBvaW50OiBjZW50cm9pZFBvaW50LFxuICBsaW5lU3RhcnQ6IGNlbnRyb2lkTGluZVN0YXJ0LFxuICBsaW5lRW5kOiBjZW50cm9pZExpbmVFbmQsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgY2VudHJvaWRTdHJlYW0ubGluZVN0YXJ0ID0gY2VudHJvaWRSaW5nU3RhcnQ7XG4gICAgY2VudHJvaWRTdHJlYW0ubGluZUVuZCA9IGNlbnRyb2lkUmluZ0VuZDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50O1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVTdGFydCA9IGNlbnRyb2lkTGluZVN0YXJ0O1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVFbmQgPSBjZW50cm9pZExpbmVFbmQ7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNlbnRyb2lkID0gWjIgPyBbWDIgLyBaMiwgWTIgLyBaMl1cbiAgICAgICAgOiBaMSA/IFtYMSAvIFoxLCBZMSAvIFoxXVxuICAgICAgICA6IFowID8gW1gwIC8gWjAsIFkwIC8gWjBdXG4gICAgICAgIDogW05hTiwgTmFOXTtcbiAgICBYMCA9IFkwID0gWjAgPVxuICAgIFgxID0gWTEgPSBaMSA9XG4gICAgWDIgPSBZMiA9IFoyID0gMDtcbiAgICByZXR1cm4gY2VudHJvaWQ7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUG9pbnQoeCwgeSkge1xuICBYMCArPSB4O1xuICBZMCArPSB5O1xuICArK1owO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZExpbmVTdGFydCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50Rmlyc3RMaW5lO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50Rmlyc3RMaW5lKHgsIHkpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50TGluZTtcbiAgY2VudHJvaWRQb2ludCh4MCA9IHgsIHkwID0geSk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUG9pbnRMaW5lKHgsIHkpIHtcbiAgdmFyIGR4ID0geCAtIHgwLCBkeSA9IHkgLSB5MCwgeiA9IHNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICBYMSArPSB6ICogKHgwICsgeCkgLyAyO1xuICBZMSArPSB6ICogKHkwICsgeSkgLyAyO1xuICBaMSArPSB6O1xuICBjZW50cm9pZFBvaW50KHgwID0geCwgeTAgPSB5KTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lRW5kKCkge1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUG9pbnQ7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUmluZ1N0YXJ0KCkge1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUG9pbnRGaXJzdFJpbmc7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUmluZ0VuZCgpIHtcbiAgY2VudHJvaWRQb2ludFJpbmcoeDAwLCB5MDApO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50Rmlyc3RSaW5nKHgsIHkpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50UmluZztcbiAgY2VudHJvaWRQb2ludCh4MDAgPSB4MCA9IHgsIHkwMCA9IHkwID0geSk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUG9pbnRSaW5nKHgsIHkpIHtcbiAgdmFyIGR4ID0geCAtIHgwLFxuICAgICAgZHkgPSB5IC0geTAsXG4gICAgICB6ID0gc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgWDEgKz0geiAqICh4MCArIHgpIC8gMjtcbiAgWTEgKz0geiAqICh5MCArIHkpIC8gMjtcbiAgWjEgKz0gejtcblxuICB6ID0geTAgKiB4IC0geDAgKiB5O1xuICBYMiArPSB6ICogKHgwICsgeCk7XG4gIFkyICs9IHogKiAoeTAgKyB5KTtcbiAgWjIgKz0geiAqIDM7XG4gIGNlbnRyb2lkUG9pbnQoeDAgPSB4LCB5MCA9IHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjZW50cm9pZFN0cmVhbTtcbiIsImltcG9ydCB7dGF1fSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3BcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGF0aENvbnRleHQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUGF0aENvbnRleHQucHJvdG90eXBlID0ge1xuICBfcmFkaXVzOiA0LjUsXG4gIHBvaW50UmFkaXVzOiBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JhZGl1cyA9IF8sIHRoaXM7XG4gIH0sXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSA9PT0gMCkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9wb2ludCA9IE5hTjtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgIHRoaXMuX3BvaW50ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4ICsgdGhpcy5fcmFkaXVzLCB5KTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5hcmMoeCwgeSwgdGhpcy5fcmFkaXVzLCAwLCB0YXUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlc3VsdDogbm9vcFxufTtcbiIsImltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHlcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4uL3N0cmVhbVwiO1xuaW1wb3J0IHBhdGhBcmVhIGZyb20gXCIuL2FyZWFcIjtcbmltcG9ydCBwYXRoQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IHBhdGhDZW50cm9pZCBmcm9tIFwiLi9jZW50cm9pZFwiO1xuaW1wb3J0IFBhdGhDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCBwYXRoTWVhc3VyZSBmcm9tIFwiLi9tZWFzdXJlXCI7XG5pbXBvcnQgUGF0aFN0cmluZyBmcm9tIFwiLi9zdHJpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocHJvamVjdGlvbiwgY29udGV4dCkge1xuICB2YXIgcG9pbnRSYWRpdXMgPSA0LjUsXG4gICAgICBwcm9qZWN0aW9uU3RyZWFtLFxuICAgICAgY29udGV4dFN0cmVhbTtcblxuICBmdW5jdGlvbiBwYXRoKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QpIHtcbiAgICAgIGlmICh0eXBlb2YgcG9pbnRSYWRpdXMgPT09IFwiZnVuY3Rpb25cIikgY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygrcG9pbnRSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKGNvbnRleHRTdHJlYW0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHRTdHJlYW0ucmVzdWx0KCk7XG4gIH1cblxuICBwYXRoLmFyZWEgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKHBhdGhBcmVhKSk7XG4gICAgcmV0dXJuIHBhdGhBcmVhLnJlc3VsdCgpO1xuICB9O1xuXG4gIHBhdGgubWVhc3VyZSA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHN0cmVhbShvYmplY3QsIHByb2plY3Rpb25TdHJlYW0ocGF0aE1lYXN1cmUpKTtcbiAgICByZXR1cm4gcGF0aE1lYXN1cmUucmVzdWx0KCk7XG4gIH07XG5cbiAgcGF0aC5ib3VuZHMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKHBhdGhCb3VuZHMpKTtcbiAgICByZXR1cm4gcGF0aEJvdW5kcy5yZXN1bHQoKTtcbiAgfTtcblxuICBwYXRoLmNlbnRyb2lkID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgc3RyZWFtKG9iamVjdCwgcHJvamVjdGlvblN0cmVhbShwYXRoQ2VudHJvaWQpKTtcbiAgICByZXR1cm4gcGF0aENlbnRyb2lkLnJlc3VsdCgpO1xuICB9O1xuXG4gIHBhdGgucHJvamVjdGlvbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwcm9qZWN0aW9uU3RyZWFtID0gXyA9PSBudWxsID8gKHByb2plY3Rpb24gPSBudWxsLCBpZGVudGl0eSkgOiAocHJvamVjdGlvbiA9IF8pLnN0cmVhbSwgcGF0aCkgOiBwcm9qZWN0aW9uO1xuICB9O1xuXG4gIHBhdGguY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjb250ZXh0O1xuICAgIGNvbnRleHRTdHJlYW0gPSBfID09IG51bGwgPyAoY29udGV4dCA9IG51bGwsIG5ldyBQYXRoU3RyaW5nKSA6IG5ldyBQYXRoQ29udGV4dChjb250ZXh0ID0gXyk7XG4gICAgaWYgKHR5cGVvZiBwb2ludFJhZGl1cyAhPT0gXCJmdW5jdGlvblwiKSBjb250ZXh0U3RyZWFtLnBvaW50UmFkaXVzKHBvaW50UmFkaXVzKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcblxuICBwYXRoLnBvaW50UmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHBvaW50UmFkaXVzO1xuICAgIHBvaW50UmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiAoY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygrXyksICtfKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcblxuICByZXR1cm4gcGF0aC5wcm9qZWN0aW9uKHByb2plY3Rpb24pLmNvbnRleHQoY29udGV4dCk7XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4uL2FkZGVyXCI7XG5pbXBvcnQge3NxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcFwiO1xuXG52YXIgbGVuZ3RoU3VtID0gYWRkZXIoKSxcbiAgICBsZW5ndGhSaW5nLFxuICAgIHgwMCxcbiAgICB5MDAsXG4gICAgeDAsXG4gICAgeTA7XG5cbnZhciBsZW5ndGhTdHJlYW0gPSB7XG4gIHBvaW50OiBub29wLFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFBvaW50Rmlyc3Q7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChsZW5ndGhSaW5nKSBsZW5ndGhQb2ludCh4MDAsIHkwMCk7XG4gICAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbm9vcDtcbiAgfSxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBsZW5ndGhSaW5nID0gdHJ1ZTtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgbGVuZ3RoUmluZyA9IG51bGw7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlbmd0aCA9ICtsZW5ndGhTdW07XG4gICAgbGVuZ3RoU3VtLnJlc2V0KCk7XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxufTtcblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnRGaXJzdCh4LCB5KSB7XG4gIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFBvaW50O1xuICB4MDAgPSB4MCA9IHgsIHkwMCA9IHkwID0geTtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnQoeCwgeSkge1xuICB4MCAtPSB4LCB5MCAtPSB5O1xuICBsZW5ndGhTdW0uYWRkKHNxcnQoeDAgKiB4MCArIHkwICogeTApKTtcbiAgeDAgPSB4LCB5MCA9IHk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxlbmd0aFN0cmVhbTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhdGhTdHJpbmcoKSB7XG4gIHRoaXMuX3N0cmluZyA9IFtdO1xufVxuXG5QYXRoU3RyaW5nLnByb3RvdHlwZSA9IHtcbiAgX3JhZGl1czogNC41LFxuICBfY2lyY2xlOiBjaXJjbGUoNC41KSxcbiAgcG9pbnRSYWRpdXM6IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoKF8gPSArXykgIT09IHRoaXMuX3JhZGl1cykgdGhpcy5fcmFkaXVzID0gXywgdGhpcy5fY2lyY2xlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lID09PSAwKSB0aGlzLl9zdHJpbmcucHVzaChcIlpcIik7XG4gICAgdGhpcy5fcG9pbnQgPSBOYU47XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHRoaXMuX3N0cmluZy5wdXNoKFwiTVwiLCB4LCBcIixcIiwgeSk7XG4gICAgICAgIHRoaXMuX3BvaW50ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fc3RyaW5nLnB1c2goXCJMXCIsIHgsIFwiLFwiLCB5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmICh0aGlzLl9jaXJjbGUgPT0gbnVsbCkgdGhpcy5fY2lyY2xlID0gY2lyY2xlKHRoaXMuX3JhZGl1cyk7XG4gICAgICAgIHRoaXMuX3N0cmluZy5wdXNoKFwiTVwiLCB4LCBcIixcIiwgeSwgdGhpcy5fY2lyY2xlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9zdHJpbmcubGVuZ3RoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fc3RyaW5nLmpvaW4oXCJcIik7XG4gICAgICB0aGlzLl9zdHJpbmcgPSBbXTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gY2lyY2xlKHJhZGl1cykge1xuICByZXR1cm4gXCJtMCxcIiArIHJhZGl1c1xuICAgICAgKyBcImFcIiArIHJhZGl1cyArIFwiLFwiICsgcmFkaXVzICsgXCIgMCAxLDEgMCxcIiArIC0yICogcmFkaXVzXG4gICAgICArIFwiYVwiICsgcmFkaXVzICsgXCIsXCIgKyByYWRpdXMgKyBcIiAwIDEsMSAwLFwiICsgMiAqIHJhZGl1c1xuICAgICAgKyBcInpcIjtcbn1cbiIsImltcG9ydCB7YWJzLCBlcHNpbG9ufSBmcm9tIFwiLi9tYXRoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGFicyhhWzBdIC0gYlswXSkgPCBlcHNpbG9uICYmIGFicyhhWzFdIC0gYlsxXSkgPCBlcHNpbG9uO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2V9IGZyb20gXCIuL2NhcnRlc2lhblwiO1xuaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIHBpLCBxdWFydGVyUGksIHNpbiwgdGF1fSBmcm9tIFwiLi9tYXRoXCI7XG5cbnZhciBzdW0gPSBhZGRlcigpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uLCBwb2ludCkge1xuICB2YXIgbGFtYmRhID0gcG9pbnRbMF0sXG4gICAgICBwaGkgPSBwb2ludFsxXSxcbiAgICAgIHNpblBoaSA9IHNpbihwaGkpLFxuICAgICAgbm9ybWFsID0gW3NpbihsYW1iZGEpLCAtY29zKGxhbWJkYSksIDBdLFxuICAgICAgYW5nbGUgPSAwLFxuICAgICAgd2luZGluZyA9IDA7XG5cbiAgc3VtLnJlc2V0KCk7XG5cbiAgaWYgKHNpblBoaSA9PT0gMSkgcGhpID0gaGFsZlBpICsgZXBzaWxvbjtcbiAgZWxzZSBpZiAoc2luUGhpID09PSAtMSkgcGhpID0gLWhhbGZQaSAtIGVwc2lsb247XG5cbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBwb2x5Z29uLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKG0gPSAocmluZyA9IHBvbHlnb25baV0pLmxlbmd0aCkpIGNvbnRpbnVlO1xuICAgIHZhciByaW5nLFxuICAgICAgICBtLFxuICAgICAgICBwb2ludDAgPSByaW5nW20gLSAxXSxcbiAgICAgICAgbGFtYmRhMCA9IHBvaW50MFswXSxcbiAgICAgICAgcGhpMCA9IHBvaW50MFsxXSAvIDIgKyBxdWFydGVyUGksXG4gICAgICAgIHNpblBoaTAgPSBzaW4ocGhpMCksXG4gICAgICAgIGNvc1BoaTAgPSBjb3MocGhpMCk7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG07ICsraiwgbGFtYmRhMCA9IGxhbWJkYTEsIHNpblBoaTAgPSBzaW5QaGkxLCBjb3NQaGkwID0gY29zUGhpMSwgcG9pbnQwID0gcG9pbnQxKSB7XG4gICAgICB2YXIgcG9pbnQxID0gcmluZ1tqXSxcbiAgICAgICAgICBsYW1iZGExID0gcG9pbnQxWzBdLFxuICAgICAgICAgIHBoaTEgPSBwb2ludDFbMV0gLyAyICsgcXVhcnRlclBpLFxuICAgICAgICAgIHNpblBoaTEgPSBzaW4ocGhpMSksXG4gICAgICAgICAgY29zUGhpMSA9IGNvcyhwaGkxKSxcbiAgICAgICAgICBkZWx0YSA9IGxhbWJkYTEgLSBsYW1iZGEwLFxuICAgICAgICAgIHNpZ24gPSBkZWx0YSA+PSAwID8gMSA6IC0xLFxuICAgICAgICAgIGFic0RlbHRhID0gc2lnbiAqIGRlbHRhLFxuICAgICAgICAgIGFudGltZXJpZGlhbiA9IGFic0RlbHRhID4gcGksXG4gICAgICAgICAgayA9IHNpblBoaTAgKiBzaW5QaGkxO1xuXG4gICAgICBzdW0uYWRkKGF0YW4yKGsgKiBzaWduICogc2luKGFic0RlbHRhKSwgY29zUGhpMCAqIGNvc1BoaTEgKyBrICogY29zKGFic0RlbHRhKSkpO1xuICAgICAgYW5nbGUgKz0gYW50aW1lcmlkaWFuID8gZGVsdGEgKyBzaWduICogdGF1IDogZGVsdGE7XG5cbiAgICAgIC8vIEFyZSB0aGUgbG9uZ2l0dWRlcyBlaXRoZXIgc2lkZSBvZiB0aGUgcG9pbnTigJlzIG1lcmlkaWFuIChsYW1iZGEpLFxuICAgICAgLy8gYW5kIGFyZSB0aGUgbGF0aXR1ZGVzIHNtYWxsZXIgdGhhbiB0aGUgcGFyYWxsZWwgKHBoaSk/XG4gICAgICBpZiAoYW50aW1lcmlkaWFuIF4gbGFtYmRhMCA+PSBsYW1iZGEgXiBsYW1iZGExID49IGxhbWJkYSkge1xuICAgICAgICB2YXIgYXJjID0gY2FydGVzaWFuQ3Jvc3MoY2FydGVzaWFuKHBvaW50MCksIGNhcnRlc2lhbihwb2ludDEpKTtcbiAgICAgICAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShhcmMpO1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uID0gY2FydGVzaWFuQ3Jvc3Mobm9ybWFsLCBhcmMpO1xuICAgICAgICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKGludGVyc2VjdGlvbik7XG4gICAgICAgIHZhciBwaGlBcmMgPSAoYW50aW1lcmlkaWFuIF4gZGVsdGEgPj0gMCA/IC0xIDogMSkgKiBhc2luKGludGVyc2VjdGlvblsyXSk7XG4gICAgICAgIGlmIChwaGkgPiBwaGlBcmMgfHwgcGhpID09PSBwaGlBcmMgJiYgKGFyY1swXSB8fCBhcmNbMV0pKSB7XG4gICAgICAgICAgd2luZGluZyArPSBhbnRpbWVyaWRpYW4gXiBkZWx0YSA+PSAwID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmlyc3QsIGRldGVybWluZSB3aGV0aGVyIHRoZSBTb3V0aCBwb2xlIGlzIGluc2lkZSBvciBvdXRzaWRlOlxuICAvL1xuICAvLyBJdCBpcyBpbnNpZGUgaWY6XG4gIC8vICogdGhlIHBvbHlnb24gd2luZHMgYXJvdW5kIGl0IGluIGEgY2xvY2t3aXNlIGRpcmVjdGlvbi5cbiAgLy8gKiB0aGUgcG9seWdvbiBkb2VzIG5vdCAoY3VtdWxhdGl2ZWx5KSB3aW5kIGFyb3VuZCBpdCwgYnV0IGhhcyBhIG5lZ2F0aXZlXG4gIC8vICAgKGNvdW50ZXItY2xvY2t3aXNlKSBhcmVhLlxuICAvL1xuICAvLyBTZWNvbmQsIGNvdW50IHRoZSAoc2lnbmVkKSBudW1iZXIgb2YgdGltZXMgYSBzZWdtZW50IGNyb3NzZXMgYSBsYW1iZGFcbiAgLy8gZnJvbSB0aGUgcG9pbnQgdG8gdGhlIFNvdXRoIHBvbGUuICBJZiBpdCBpcyB6ZXJvLCB0aGVuIHRoZSBwb2ludCBpcyB0aGVcbiAgLy8gc2FtZSBzaWRlIGFzIHRoZSBTb3V0aCBwb2xlLlxuXG4gIHJldHVybiAoYW5nbGUgPCAtZXBzaWxvbiB8fCBhbmdsZSA8IGVwc2lsb24gJiYgc3VtIDwgLWVwc2lsb24pIF4gKHdpbmRpbmcgJiAxKTtcbn1cbiIsImltcG9ydCBjb25pY0VxdWFsQXJlYSBmcm9tIFwiLi9jb25pY0VxdWFsQXJlYVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljRXF1YWxBcmVhKClcbiAgICAgIC5wYXJhbGxlbHMoWzI5LjUsIDQ1LjVdKVxuICAgICAgLnNjYWxlKDEwNzApXG4gICAgICAudHJhbnNsYXRlKFs0ODAsIDI1MF0pXG4gICAgICAucm90YXRlKFs5NiwgMF0pXG4gICAgICAuY2VudGVyKFstMC42LCAzOC43XSk7XG59XG4iLCJpbXBvcnQge2Vwc2lsb259IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQgYWxiZXJzIGZyb20gXCIuL2FsYmVyc1wiO1xuaW1wb3J0IGNvbmljRXF1YWxBcmVhIGZyb20gXCIuL2NvbmljRXF1YWxBcmVhXCI7XG5pbXBvcnQge2ZpdEV4dGVudCwgZml0U2l6ZSwgZml0V2lkdGgsIGZpdEhlaWdodH0gZnJvbSBcIi4vZml0XCI7XG5cbi8vIFRoZSBwcm9qZWN0aW9ucyBtdXN0IGhhdmUgbXV0dWFsbHkgZXhjbHVzaXZlIGNsaXAgcmVnaW9ucyBvbiB0aGUgc3BoZXJlLFxuLy8gYXMgdGhpcyB3aWxsIGF2b2lkIGVtaXR0aW5nIGludGVybGVhdmluZyBsaW5lcyBhbmQgcG9seWdvbnMuXG5mdW5jdGlvbiBtdWx0aXBsZXgoc3RyZWFtcykge1xuICB2YXIgbiA9IHN0cmVhbXMubGVuZ3RoO1xuICByZXR1cm4ge1xuICAgIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLnBvaW50KHgsIHkpOyB9LFxuICAgIHNwaGVyZTogZnVuY3Rpb24oKSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLnNwaGVyZSgpOyB9LFxuICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLmxpbmVTdGFydCgpOyB9LFxuICAgIGxpbmVFbmQ6IGZ1bmN0aW9uKCkgeyB2YXIgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikgc3RyZWFtc1tpXS5saW5lRW5kKCk7IH0sXG4gICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsgdmFyIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHN0cmVhbXNbaV0ucG9seWdvblN0YXJ0KCk7IH0sXG4gICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLnBvbHlnb25FbmQoKTsgfVxuICB9O1xufVxuXG4vLyBBIGNvbXBvc2l0ZSBwcm9qZWN0aW9uIGZvciB0aGUgVW5pdGVkIFN0YXRlcywgY29uZmlndXJlZCBieSBkZWZhdWx0IGZvclxuLy8gOTYww5c1MDAuIFRoZSBwcm9qZWN0aW9uIGFsc28gd29ya3MgcXVpdGUgd2VsbCBhdCA5NjDDlzYwMCBpZiB5b3UgY2hhbmdlIHRoZVxuLy8gc2NhbGUgdG8gMTI4NSBhbmQgYWRqdXN0IHRoZSB0cmFuc2xhdGUgYWNjb3JkaW5nbHkuIFRoZSBzZXQgb2Ygc3RhbmRhcmRcbi8vIHBhcmFsbGVscyBmb3IgZWFjaCByZWdpb24gY29tZXMgZnJvbSBVU0dTLCB3aGljaCBpcyBwdWJsaXNoZWQgaGVyZTpcbi8vIGh0dHA6Ly9lZ3NjLnVzZ3MuZ292L2lzYi9wdWJzL01hcFByb2plY3Rpb25zL3Byb2plY3Rpb25zLmh0bWwjYWxiZXJzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhY2hlLFxuICAgICAgY2FjaGVTdHJlYW0sXG4gICAgICBsb3dlcjQ4ID0gYWxiZXJzKCksIGxvd2VyNDhQb2ludCxcbiAgICAgIGFsYXNrYSA9IGNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsIDBdKS5jZW50ZXIoWy0yLCA1OC41XSkucGFyYWxsZWxzKFs1NSwgNjVdKSwgYWxhc2thUG9pbnQsIC8vIEVQU0c6MzMzOFxuICAgICAgaGF3YWlpID0gY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NywgMF0pLmNlbnRlcihbLTMsIDE5LjldKS5wYXJhbGxlbHMoWzgsIDE4XSksIGhhd2FpaVBvaW50LCAvLyBFU1JJOjEwMjAwN1xuICAgICAgcG9pbnQsIHBvaW50U3RyZWFtID0ge3BvaW50OiBmdW5jdGlvbih4LCB5KSB7IHBvaW50ID0gW3gsIHldOyB9fTtcblxuICBmdW5jdGlvbiBhbGJlcnNVc2EoY29vcmRpbmF0ZXMpIHtcbiAgICB2YXIgeCA9IGNvb3JkaW5hdGVzWzBdLCB5ID0gY29vcmRpbmF0ZXNbMV07XG4gICAgcmV0dXJuIHBvaW50ID0gbnVsbCxcbiAgICAgICAgKGxvd2VyNDhQb2ludC5wb2ludCh4LCB5KSwgcG9pbnQpXG4gICAgICAgIHx8IChhbGFza2FQb2ludC5wb2ludCh4LCB5KSwgcG9pbnQpXG4gICAgICAgIHx8IChoYXdhaWlQb2ludC5wb2ludCh4LCB5KSwgcG9pbnQpO1xuICB9XG5cbiAgYWxiZXJzVXNhLmludmVydCA9IGZ1bmN0aW9uKGNvb3JkaW5hdGVzKSB7XG4gICAgdmFyIGsgPSBsb3dlcjQ4LnNjYWxlKCksXG4gICAgICAgIHQgPSBsb3dlcjQ4LnRyYW5zbGF0ZSgpLFxuICAgICAgICB4ID0gKGNvb3JkaW5hdGVzWzBdIC0gdFswXSkgLyBrLFxuICAgICAgICB5ID0gKGNvb3JkaW5hdGVzWzFdIC0gdFsxXSkgLyBrO1xuICAgIHJldHVybiAoeSA+PSAwLjEyMCAmJiB5IDwgMC4yMzQgJiYgeCA+PSAtMC40MjUgJiYgeCA8IC0wLjIxNCA/IGFsYXNrYVxuICAgICAgICA6IHkgPj0gMC4xNjYgJiYgeSA8IDAuMjM0ICYmIHggPj0gLTAuMjE0ICYmIHggPCAtMC4xMTUgPyBoYXdhaWlcbiAgICAgICAgOiBsb3dlcjQ4KS5pbnZlcnQoY29vcmRpbmF0ZXMpO1xuICB9O1xuXG4gIGFsYmVyc1VzYS5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSBtdWx0aXBsZXgoW2xvd2VyNDguc3RyZWFtKGNhY2hlU3RyZWFtID0gc3RyZWFtKSwgYWxhc2thLnN0cmVhbShzdHJlYW0pLCBoYXdhaWkuc3RyZWFtKHN0cmVhbSldKTtcbiAgfTtcblxuICBhbGJlcnNVc2EucHJlY2lzaW9uID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxvd2VyNDgucHJlY2lzaW9uKCk7XG4gICAgbG93ZXI0OC5wcmVjaXNpb24oXyksIGFsYXNrYS5wcmVjaXNpb24oXyksIGhhd2FpaS5wcmVjaXNpb24oXyk7XG4gICAgcmV0dXJuIHJlc2V0KCk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxvd2VyNDguc2NhbGUoKTtcbiAgICBsb3dlcjQ4LnNjYWxlKF8pLCBhbGFza2Euc2NhbGUoXyAqIDAuMzUpLCBoYXdhaWkuc2NhbGUoXyk7XG4gICAgcmV0dXJuIGFsYmVyc1VzYS50cmFuc2xhdGUobG93ZXI0OC50cmFuc2xhdGUoKSk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb3dlcjQ4LnRyYW5zbGF0ZSgpO1xuICAgIHZhciBrID0gbG93ZXI0OC5zY2FsZSgpLCB4ID0gK19bMF0sIHkgPSArX1sxXTtcblxuICAgIGxvd2VyNDhQb2ludCA9IGxvd2VyNDhcbiAgICAgICAgLnRyYW5zbGF0ZShfKVxuICAgICAgICAuY2xpcEV4dGVudChbW3ggLSAwLjQ1NSAqIGssIHkgLSAwLjIzOCAqIGtdLCBbeCArIDAuNDU1ICogaywgeSArIDAuMjM4ICoga11dKVxuICAgICAgICAuc3RyZWFtKHBvaW50U3RyZWFtKTtcblxuICAgIGFsYXNrYVBvaW50ID0gYWxhc2thXG4gICAgICAgIC50cmFuc2xhdGUoW3ggLSAwLjMwNyAqIGssIHkgKyAwLjIwMSAqIGtdKVxuICAgICAgICAuY2xpcEV4dGVudChbW3ggLSAwLjQyNSAqIGsgKyBlcHNpbG9uLCB5ICsgMC4xMjAgKiBrICsgZXBzaWxvbl0sIFt4IC0gMC4yMTQgKiBrIC0gZXBzaWxvbiwgeSArIDAuMjM0ICogayAtIGVwc2lsb25dXSlcbiAgICAgICAgLnN0cmVhbShwb2ludFN0cmVhbSk7XG5cbiAgICBoYXdhaWlQb2ludCA9IGhhd2FpaVxuICAgICAgICAudHJhbnNsYXRlKFt4IC0gMC4yMDUgKiBrLCB5ICsgMC4yMTIgKiBrXSlcbiAgICAgICAgLmNsaXBFeHRlbnQoW1t4IC0gMC4yMTQgKiBrICsgZXBzaWxvbiwgeSArIDAuMTY2ICogayArIGVwc2lsb25dLCBbeCAtIDAuMTE1ICogayAtIGVwc2lsb24sIHkgKyAwLjIzNCAqIGsgLSBlcHNpbG9uXV0pXG4gICAgICAgIC5zdHJlYW0ocG9pbnRTdHJlYW0pO1xuXG4gICAgcmV0dXJuIHJlc2V0KCk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLmZpdEV4dGVudCA9IGZ1bmN0aW9uKGV4dGVudCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEV4dGVudChhbGJlcnNVc2EsIGV4dGVudCwgb2JqZWN0KTtcbiAgfTtcblxuICBhbGJlcnNVc2EuZml0U2l6ZSA9IGZ1bmN0aW9uKHNpemUsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRTaXplKGFsYmVyc1VzYSwgc2l6ZSwgb2JqZWN0KTtcbiAgfTtcblxuICBhbGJlcnNVc2EuZml0V2lkdGggPSBmdW5jdGlvbih3aWR0aCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdFdpZHRoKGFsYmVyc1VzYSwgd2lkdGgsIG9iamVjdCk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLmZpdEhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEhlaWdodChhbGJlcnNVc2EsIGhlaWdodCwgb2JqZWN0KTtcbiAgfTtcblxuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjYWNoZSA9IGNhY2hlU3RyZWFtID0gbnVsbDtcbiAgICByZXR1cm4gYWxiZXJzVXNhO1xuICB9XG5cbiAgcmV0dXJuIGFsYmVyc1VzYS5zY2FsZSgxMDcwKTtcbn1cbiIsImltcG9ydCB7YXNpbiwgYXRhbjIsIGNvcywgc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXppbXV0aGFsUmF3KHNjYWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIGN4ID0gY29zKHgpLFxuICAgICAgICBjeSA9IGNvcyh5KSxcbiAgICAgICAgayA9IHNjYWxlKGN4ICogY3kpO1xuICAgIHJldHVybiBbXG4gICAgICBrICogY3kgKiBzaW4oeCksXG4gICAgICBrICogc2luKHkpXG4gICAgXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXppbXV0aGFsSW52ZXJ0KGFuZ2xlKSB7XG4gIHJldHVybiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIHogPSBzcXJ0KHggKiB4ICsgeSAqIHkpLFxuICAgICAgICBjID0gYW5nbGUoeiksXG4gICAgICAgIHNjID0gc2luKGMpLFxuICAgICAgICBjYyA9IGNvcyhjKTtcbiAgICByZXR1cm4gW1xuICAgICAgYXRhbjIoeCAqIHNjLCB6ICogY2MpLFxuICAgICAgYXNpbih6ICYmIHkgKiBzYyAvIHopXG4gICAgXTtcbiAgfVxufVxuIiwiaW1wb3J0IHthc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHthemltdXRoYWxSYXcsIGF6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgdmFyIGF6aW11dGhhbEVxdWFsQXJlYVJhdyA9IGF6aW11dGhhbFJhdyhmdW5jdGlvbihjeGN5KSB7XG4gIHJldHVybiBzcXJ0KDIgLyAoMSArIGN4Y3kpKTtcbn0pO1xuXG5hemltdXRoYWxFcXVhbEFyZWFSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGZ1bmN0aW9uKHopIHtcbiAgcmV0dXJuIDIgKiBhc2luKHogLyAyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oYXppbXV0aGFsRXF1YWxBcmVhUmF3KVxuICAgICAgLnNjYWxlKDEyNC43NSlcbiAgICAgIC5jbGlwQW5nbGUoMTgwIC0gMWUtMyk7XG59XG4iLCJpbXBvcnQge2Fjb3MsIHNpbn0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7YXppbXV0aGFsUmF3LCBhemltdXRoYWxJbnZlcnR9IGZyb20gXCIuL2F6aW11dGhhbFwiO1xuaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IHZhciBhemltdXRoYWxFcXVpZGlzdGFudFJhdyA9IGF6aW11dGhhbFJhdyhmdW5jdGlvbihjKSB7XG4gIHJldHVybiAoYyA9IGFjb3MoYykpICYmIGMgLyBzaW4oYyk7XG59KTtcblxuYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGZ1bmN0aW9uKHopIHtcbiAgcmV0dXJuIHo7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGF6aW11dGhhbEVxdWlkaXN0YW50UmF3KVxuICAgICAgLnNjYWxlKDc5LjQxODgpXG4gICAgICAuY2xpcEFuZ2xlKDE4MCAtIDFlLTMpO1xufVxuIiwiaW1wb3J0IHtkZWdyZWVzLCBwaSwgcmFkaWFuc30gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7cHJvamVjdGlvbk11dGF0b3J9IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY1Byb2plY3Rpb24ocHJvamVjdEF0KSB7XG4gIHZhciBwaGkwID0gMCxcbiAgICAgIHBoaTEgPSBwaSAvIDMsXG4gICAgICBtID0gcHJvamVjdGlvbk11dGF0b3IocHJvamVjdEF0KSxcbiAgICAgIHAgPSBtKHBoaTAsIHBoaTEpO1xuXG4gIHAucGFyYWxsZWxzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gbShwaGkwID0gX1swXSAqIHJhZGlhbnMsIHBoaTEgPSBfWzFdICogcmFkaWFucykgOiBbcGhpMCAqIGRlZ3JlZXMsIHBoaTEgKiBkZWdyZWVzXTtcbiAgfTtcblxuICByZXR1cm4gcDtcbn1cbiIsImltcG9ydCB7YWJzLCBhdGFuLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIGxvZywgcG93LCBzaWduLCBzaW4sIHNxcnQsIHRhbn0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7Y29uaWNQcm9qZWN0aW9ufSBmcm9tIFwiLi9jb25pY1wiO1xuaW1wb3J0IHttZXJjYXRvclJhd30gZnJvbSBcIi4vbWVyY2F0b3JcIjtcblxuZnVuY3Rpb24gdGFueSh5KSB7XG4gIHJldHVybiB0YW4oKGhhbGZQaSArIHkpIC8gMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY0NvbmZvcm1hbFJhdyh5MCwgeTEpIHtcbiAgdmFyIGN5MCA9IGNvcyh5MCksXG4gICAgICBuID0geTAgPT09IHkxID8gc2luKHkwKSA6IGxvZyhjeTAgLyBjb3MoeTEpKSAvIGxvZyh0YW55KHkxKSAvIHRhbnkoeTApKSxcbiAgICAgIGYgPSBjeTAgKiBwb3codGFueSh5MCksIG4pIC8gbjtcblxuICBpZiAoIW4pIHJldHVybiBtZXJjYXRvclJhdztcblxuICBmdW5jdGlvbiBwcm9qZWN0KHgsIHkpIHtcbiAgICBpZiAoZiA+IDApIHsgaWYgKHkgPCAtaGFsZlBpICsgZXBzaWxvbikgeSA9IC1oYWxmUGkgKyBlcHNpbG9uOyB9XG4gICAgZWxzZSB7IGlmICh5ID4gaGFsZlBpIC0gZXBzaWxvbikgeSA9IGhhbGZQaSAtIGVwc2lsb247IH1cbiAgICB2YXIgciA9IGYgLyBwb3codGFueSh5KSwgbik7XG4gICAgcmV0dXJuIFtyICogc2luKG4gKiB4KSwgZiAtIHIgKiBjb3MobiAqIHgpXTtcbiAgfVxuXG4gIHByb2plY3QuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciBmeSA9IGYgLSB5LCByID0gc2lnbihuKSAqIHNxcnQoeCAqIHggKyBmeSAqIGZ5KTtcbiAgICByZXR1cm4gW2F0YW4yKHgsIGFicyhmeSkpIC8gbiAqIHNpZ24oZnkpLCAyICogYXRhbihwb3coZiAvIHIsIDEgLyBuKSkgLSBoYWxmUGldO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljUHJvamVjdGlvbihjb25pY0NvbmZvcm1hbFJhdylcbiAgICAgIC5zY2FsZSgxMDkuNSlcbiAgICAgIC5wYXJhbGxlbHMoWzMwLCAzMF0pO1xufVxuIiwiaW1wb3J0IHthYnMsIGFzaW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIHNpZ24sIHNpbiwgc3FydH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7Y29uaWNQcm9qZWN0aW9ufSBmcm9tIFwiLi9jb25pY1wiO1xuaW1wb3J0IHtjeWxpbmRyaWNhbEVxdWFsQXJlYVJhd30gZnJvbSBcIi4vY3lsaW5kcmljYWxFcXVhbEFyZWFcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmljRXF1YWxBcmVhUmF3KHkwLCB5MSkge1xuICB2YXIgc3kwID0gc2luKHkwKSwgbiA9IChzeTAgKyBzaW4oeTEpKSAvIDI7XG5cbiAgLy8gQXJlIHRoZSBwYXJhbGxlbHMgc3ltbWV0cmljYWwgYXJvdW5kIHRoZSBFcXVhdG9yP1xuICBpZiAoYWJzKG4pIDwgZXBzaWxvbikgcmV0dXJuIGN5bGluZHJpY2FsRXF1YWxBcmVhUmF3KHkwKTtcblxuICB2YXIgYyA9IDEgKyBzeTAgKiAoMiAqIG4gLSBzeTApLCByMCA9IHNxcnQoYykgLyBuO1xuXG4gIGZ1bmN0aW9uIHByb2plY3QoeCwgeSkge1xuICAgIHZhciByID0gc3FydChjIC0gMiAqIG4gKiBzaW4oeSkpIC8gbjtcbiAgICByZXR1cm4gW3IgKiBzaW4oeCAqPSBuKSwgcjAgLSByICogY29zKHgpXTtcbiAgfVxuXG4gIHByb2plY3QuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciByMHkgPSByMCAtIHk7XG4gICAgcmV0dXJuIFthdGFuMih4LCBhYnMocjB5KSkgLyBuICogc2lnbihyMHkpLCBhc2luKChjIC0gKHggKiB4ICsgcjB5ICogcjB5KSAqIG4gKiBuKSAvICgyICogbikpXTtcbiAgfTtcblxuICByZXR1cm4gcHJvamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjb25pY1Byb2plY3Rpb24oY29uaWNFcXVhbEFyZWFSYXcpXG4gICAgICAuc2NhbGUoMTU1LjQyNClcbiAgICAgIC5jZW50ZXIoWzAsIDMzLjY0NDJdKTtcbn1cbiIsImltcG9ydCB7YWJzLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBzaWduLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge2NvbmljUHJvamVjdGlvbn0gZnJvbSBcIi4vY29uaWNcIjtcbmltcG9ydCB7ZXF1aXJlY3Rhbmd1bGFyUmF3fSBmcm9tIFwiLi9lcXVpcmVjdGFuZ3VsYXJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmljRXF1aWRpc3RhbnRSYXcoeTAsIHkxKSB7XG4gIHZhciBjeTAgPSBjb3MoeTApLFxuICAgICAgbiA9IHkwID09PSB5MSA/IHNpbih5MCkgOiAoY3kwIC0gY29zKHkxKSkgLyAoeTEgLSB5MCksXG4gICAgICBnID0gY3kwIC8gbiArIHkwO1xuXG4gIGlmIChhYnMobikgPCBlcHNpbG9uKSByZXR1cm4gZXF1aXJlY3Rhbmd1bGFyUmF3O1xuXG4gIGZ1bmN0aW9uIHByb2plY3QoeCwgeSkge1xuICAgIHZhciBneSA9IGcgLSB5LCBueCA9IG4gKiB4O1xuICAgIHJldHVybiBbZ3kgKiBzaW4obngpLCBnIC0gZ3kgKiBjb3MobngpXTtcbiAgfVxuXG4gIHByb2plY3QuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciBneSA9IGcgLSB5O1xuICAgIHJldHVybiBbYXRhbjIoeCwgYWJzKGd5KSkgLyBuICogc2lnbihneSksIGcgLSBzaWduKG4pICogc3FydCh4ICogeCArIGd5ICogZ3kpXTtcbiAgfTtcblxuICByZXR1cm4gcHJvamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjb25pY1Byb2plY3Rpb24oY29uaWNFcXVpZGlzdGFudFJhdylcbiAgICAgIC5zY2FsZSgxMzEuMTU0KVxuICAgICAgLmNlbnRlcihbMCwgMTMuOTM4OV0pO1xufVxuIiwiaW1wb3J0IHthc2luLCBjb3MsIHNpbn0gZnJvbSBcIi4uL21hdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGN5bGluZHJpY2FsRXF1YWxBcmVhUmF3KHBoaTApIHtcbiAgdmFyIGNvc1BoaTAgPSBjb3MocGhpMCk7XG5cbiAgZnVuY3Rpb24gZm9yd2FyZChsYW1iZGEsIHBoaSkge1xuICAgIHJldHVybiBbbGFtYmRhICogY29zUGhpMCwgc2luKHBoaSkgLyBjb3NQaGkwXTtcbiAgfVxuXG4gIGZvcndhcmQuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiBbeCAvIGNvc1BoaTAsIGFzaW4oeSAqIGNvc1BoaTApXTtcbiAgfTtcblxuICByZXR1cm4gZm9yd2FyZDtcbn1cbiIsImltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge2FicywgYXNpbiwgY29zLCBlcHNpbG9uMiwgc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG52YXIgQTEgPSAxLjM0MDI2NCxcbiAgICBBMiA9IC0wLjA4MTEwNixcbiAgICBBMyA9IDAuMDAwODkzLFxuICAgIEE0ID0gMC4wMDM3OTYsXG4gICAgTSA9IHNxcnQoMykgLyAyLFxuICAgIGl0ZXJhdGlvbnMgPSAxMjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsRWFydGhSYXcobGFtYmRhLCBwaGkpIHtcbiAgdmFyIGwgPSBhc2luKE0gKiBzaW4ocGhpKSksIGwyID0gbCAqIGwsIGw2ID0gbDIgKiBsMiAqIGwyO1xuICByZXR1cm4gW1xuICAgIGxhbWJkYSAqIGNvcyhsKSAvIChNICogKEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMikpKSxcbiAgICBsICogKEExICsgQTIgKiBsMiArIGw2ICogKEEzICsgQTQgKiBsMikpXG4gIF07XG59XG5cbmVxdWFsRWFydGhSYXcuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICB2YXIgbCA9IHksIGwyID0gbCAqIGwsIGw2ID0gbDIgKiBsMiAqIGwyO1xuICBmb3IgKHZhciBpID0gMCwgZGVsdGEsIGZ5LCBmcHk7IGkgPCBpdGVyYXRpb25zOyArK2kpIHtcbiAgICBmeSA9IGwgKiAoQTEgKyBBMiAqIGwyICsgbDYgKiAoQTMgKyBBNCAqIGwyKSkgLSB5O1xuICAgIGZweSA9IEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMik7XG4gICAgbCAtPSBkZWx0YSA9IGZ5IC8gZnB5LCBsMiA9IGwgKiBsLCBsNiA9IGwyICogbDIgKiBsMjtcbiAgICBpZiAoYWJzKGRlbHRhKSA8IGVwc2lsb24yKSBicmVhaztcbiAgfVxuICByZXR1cm4gW1xuICAgIE0gKiB4ICogKEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMikpIC8gY29zKGwpLFxuICAgIGFzaW4oc2luKGwpIC8gTSlcbiAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihlcXVhbEVhcnRoUmF3KVxuICAgICAgLnNjYWxlKDE3Ny4xNTgpO1xufVxuIiwiaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWlyZWN0YW5ndWxhclJhdyhsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2xhbWJkYSwgcGhpXTtcbn1cblxuZXF1aXJlY3Rhbmd1bGFyUmF3LmludmVydCA9IGVxdWlyZWN0YW5ndWxhclJhdztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGVxdWlyZWN0YW5ndWxhclJhdylcbiAgICAgIC5zY2FsZSgxNTIuNjMpO1xufVxuIiwiaW1wb3J0IHtkZWZhdWx0IGFzIGdlb1N0cmVhbX0gZnJvbSBcIi4uL3N0cmVhbVwiO1xuaW1wb3J0IGJvdW5kc1N0cmVhbSBmcm9tIFwiLi4vcGF0aC9ib3VuZHNcIjtcblxuZnVuY3Rpb24gZml0KHByb2plY3Rpb24sIGZpdEJvdW5kcywgb2JqZWN0KSB7XG4gIHZhciBjbGlwID0gcHJvamVjdGlvbi5jbGlwRXh0ZW50ICYmIHByb2plY3Rpb24uY2xpcEV4dGVudCgpO1xuICBwcm9qZWN0aW9uLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLCAwXSk7XG4gIGlmIChjbGlwICE9IG51bGwpIHByb2plY3Rpb24uY2xpcEV4dGVudChudWxsKTtcbiAgZ2VvU3RyZWFtKG9iamVjdCwgcHJvamVjdGlvbi5zdHJlYW0oYm91bmRzU3RyZWFtKSk7XG4gIGZpdEJvdW5kcyhib3VuZHNTdHJlYW0ucmVzdWx0KCkpO1xuICBpZiAoY2xpcCAhPSBudWxsKSBwcm9qZWN0aW9uLmNsaXBFeHRlbnQoY2xpcCk7XG4gIHJldHVybiBwcm9qZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0RXh0ZW50KHByb2plY3Rpb24sIGV4dGVudCwgb2JqZWN0KSB7XG4gIHJldHVybiBmaXQocHJvamVjdGlvbiwgZnVuY3Rpb24oYikge1xuICAgIHZhciB3ID0gZXh0ZW50WzFdWzBdIC0gZXh0ZW50WzBdWzBdLFxuICAgICAgICBoID0gZXh0ZW50WzFdWzFdIC0gZXh0ZW50WzBdWzFdLFxuICAgICAgICBrID0gTWF0aC5taW4odyAvIChiWzFdWzBdIC0gYlswXVswXSksIGggLyAoYlsxXVsxXSAtIGJbMF1bMV0pKSxcbiAgICAgICAgeCA9ICtleHRlbnRbMF1bMF0gKyAodyAtIGsgKiAoYlsxXVswXSArIGJbMF1bMF0pKSAvIDIsXG4gICAgICAgIHkgPSArZXh0ZW50WzBdWzFdICsgKGggLSBrICogKGJbMV1bMV0gKyBiWzBdWzFdKSkgLyAyO1xuICAgIHByb2plY3Rpb24uc2NhbGUoMTUwICogaykudHJhbnNsYXRlKFt4LCB5XSk7XG4gIH0sIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRTaXplKHByb2plY3Rpb24sIHNpemUsIG9iamVjdCkge1xuICByZXR1cm4gZml0RXh0ZW50KHByb2plY3Rpb24sIFtbMCwgMF0sIHNpemVdLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0V2lkdGgocHJvamVjdGlvbiwgd2lkdGgsIG9iamVjdCkge1xuICByZXR1cm4gZml0KHByb2plY3Rpb24sIGZ1bmN0aW9uKGIpIHtcbiAgICB2YXIgdyA9ICt3aWR0aCxcbiAgICAgICAgayA9IHcgLyAoYlsxXVswXSAtIGJbMF1bMF0pLFxuICAgICAgICB4ID0gKHcgLSBrICogKGJbMV1bMF0gKyBiWzBdWzBdKSkgLyAyLFxuICAgICAgICB5ID0gLWsgKiBiWzBdWzFdO1xuICAgIHByb2plY3Rpb24uc2NhbGUoMTUwICogaykudHJhbnNsYXRlKFt4LCB5XSk7XG4gIH0sIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpIHtcbiAgcmV0dXJuIGZpdChwcm9qZWN0aW9uLCBmdW5jdGlvbihiKSB7XG4gICAgdmFyIGggPSAraGVpZ2h0LFxuICAgICAgICBrID0gaCAvIChiWzFdWzFdIC0gYlswXVsxXSksXG4gICAgICAgIHggPSAtayAqIGJbMF1bMF0sXG4gICAgICAgIHkgPSAoaCAtIGsgKiAoYlsxXVsxXSArIGJbMF1bMV0pKSAvIDI7XG4gICAgcHJvamVjdGlvbi5zY2FsZSgxNTAgKiBrKS50cmFuc2xhdGUoW3gsIHldKTtcbiAgfSwgb2JqZWN0KTtcbn1cbiIsImltcG9ydCB7YXRhbiwgY29zLCBzaW59IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge2F6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ25vbW9uaWNSYXcoeCwgeSkge1xuICB2YXIgY3kgPSBjb3MoeSksIGsgPSBjb3MoeCkgKiBjeTtcbiAgcmV0dXJuIFtjeSAqIHNpbih4KSAvIGssIHNpbih5KSAvIGtdO1xufVxuXG5nbm9tb25pY1Jhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoYXRhbik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihnbm9tb25pY1JhdylcbiAgICAgIC5zY2FsZSgxNDQuMDQ5KVxuICAgICAgLmNsaXBBbmdsZSg2MCk7XG59XG4iLCJpbXBvcnQgY2xpcFJlY3RhbmdsZSBmcm9tIFwiLi4vY2xpcC9yZWN0YW5nbGVcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHlcIjtcbmltcG9ydCB7dHJhbnNmb3JtZXJ9IGZyb20gXCIuLi90cmFuc2Zvcm1cIjtcbmltcG9ydCB7Zml0RXh0ZW50LCBmaXRTaXplLCBmaXRXaWR0aCwgZml0SGVpZ2h0fSBmcm9tIFwiLi9maXRcIjtcblxuZnVuY3Rpb24gc2NhbGVUcmFuc2xhdGUoa3gsIGt5LCB0eCwgdHkpIHtcbiAgcmV0dXJuIGt4ID09PSAxICYmIGt5ID09PSAxICYmIHR4ID09PSAwICYmIHR5ID09PSAwID8gaWRlbnRpdHkgOiB0cmFuc2Zvcm1lcih7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHRoaXMuc3RyZWFtLnBvaW50KHggKiBreCArIHR4LCB5ICoga3kgKyB0eSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBrID0gMSwgdHggPSAwLCB0eSA9IDAsIHN4ID0gMSwgc3kgPSAxLCB0cmFuc2Zvcm0gPSBpZGVudGl0eSwgLy8gc2NhbGUsIHRyYW5zbGF0ZSBhbmQgcmVmbGVjdFxuICAgICAgeDAgPSBudWxsLCB5MCwgeDEsIHkxLCAvLyBjbGlwIGV4dGVudFxuICAgICAgcG9zdGNsaXAgPSBpZGVudGl0eSxcbiAgICAgIGNhY2hlLFxuICAgICAgY2FjaGVTdHJlYW0sXG4gICAgICBwcm9qZWN0aW9uO1xuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsO1xuICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHByb2plY3Rpb24gPSB7XG4gICAgc3RyZWFtOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgIHJldHVybiBjYWNoZSAmJiBjYWNoZVN0cmVhbSA9PT0gc3RyZWFtID8gY2FjaGUgOiBjYWNoZSA9IHRyYW5zZm9ybShwb3N0Y2xpcChjYWNoZVN0cmVhbSA9IHN0cmVhbSkpO1xuICAgIH0sXG4gICAgcG9zdGNsaXA6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBvc3RjbGlwID0gXywgeDAgPSB5MCA9IHgxID0geTEgPSBudWxsLCByZXNldCgpKSA6IHBvc3RjbGlwO1xuICAgIH0sXG4gICAgY2xpcEV4dGVudDogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocG9zdGNsaXAgPSBfID09IG51bGwgPyAoeDAgPSB5MCA9IHgxID0geTEgPSBudWxsLCBpZGVudGl0eSkgOiBjbGlwUmVjdGFuZ2xlKHgwID0gK19bMF1bMF0sIHkwID0gK19bMF1bMV0sIHgxID0gK19bMV1bMF0sIHkxID0gK19bMV1bMV0pLCByZXNldCgpKSA6IHgwID09IG51bGwgPyBudWxsIDogW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gICAgfSxcbiAgICBzY2FsZTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodHJhbnNmb3JtID0gc2NhbGVUcmFuc2xhdGUoKGsgPSArXykgKiBzeCwgayAqIHN5LCB0eCwgdHkpLCByZXNldCgpKSA6IGs7XG4gICAgfSxcbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRyYW5zZm9ybSA9IHNjYWxlVHJhbnNsYXRlKGsgKiBzeCwgayAqIHN5LCB0eCA9ICtfWzBdLCB0eSA9ICtfWzFdKSwgcmVzZXQoKSkgOiBbdHgsIHR5XTtcbiAgICB9LFxuICAgIHJlZmxlY3RYOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0cmFuc2Zvcm0gPSBzY2FsZVRyYW5zbGF0ZShrICogKHN4ID0gXyA/IC0xIDogMSksIGsgKiBzeSwgdHgsIHR5KSwgcmVzZXQoKSkgOiBzeCA8IDA7XG4gICAgfSxcbiAgICByZWZsZWN0WTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodHJhbnNmb3JtID0gc2NhbGVUcmFuc2xhdGUoayAqIHN4LCBrICogKHN5ID0gXyA/IC0xIDogMSksIHR4LCB0eSksIHJlc2V0KCkpIDogc3kgPCAwO1xuICAgIH0sXG4gICAgZml0RXh0ZW50OiBmdW5jdGlvbihleHRlbnQsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGZpdEV4dGVudChwcm9qZWN0aW9uLCBleHRlbnQsIG9iamVjdCk7XG4gICAgfSxcbiAgICBmaXRTaXplOiBmdW5jdGlvbihzaXplLCBvYmplY3QpIHtcbiAgICAgIHJldHVybiBmaXRTaXplKHByb2plY3Rpb24sIHNpemUsIG9iamVjdCk7XG4gICAgfSxcbiAgICBmaXRXaWR0aDogZnVuY3Rpb24od2lkdGgsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGZpdFdpZHRoKHByb2plY3Rpb24sIHdpZHRoLCBvYmplY3QpO1xuICAgIH0sXG4gICAgZml0SGVpZ2h0OiBmdW5jdGlvbihoZWlnaHQsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGZpdEhlaWdodChwcm9qZWN0aW9uLCBoZWlnaHQsIG9iamVjdCk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IGNsaXBBbnRpbWVyaWRpYW4gZnJvbSBcIi4uL2NsaXAvYW50aW1lcmlkaWFuXCI7XG5pbXBvcnQgY2xpcENpcmNsZSBmcm9tIFwiLi4vY2xpcC9jaXJjbGVcIjtcbmltcG9ydCBjbGlwUmVjdGFuZ2xlIGZyb20gXCIuLi9jbGlwL3JlY3RhbmdsZVwiO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSBcIi4uL2NvbXBvc2VcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHlcIjtcbmltcG9ydCB7Y29zLCBkZWdyZWVzLCByYWRpYW5zLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge3JvdGF0ZVJhZGlhbnN9IGZyb20gXCIuLi9yb3RhdGlvblwiO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcn0gZnJvbSBcIi4uL3RyYW5zZm9ybVwiO1xuaW1wb3J0IHtmaXRFeHRlbnQsIGZpdFNpemUsIGZpdFdpZHRoLCBmaXRIZWlnaHR9IGZyb20gXCIuL2ZpdFwiO1xuaW1wb3J0IHJlc2FtcGxlIGZyb20gXCIuL3Jlc2FtcGxlXCI7XG5cbnZhciB0cmFuc2Zvcm1SYWRpYW5zID0gdHJhbnNmb3JtZXIoe1xuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuc3RyZWFtLnBvaW50KHggKiByYWRpYW5zLCB5ICogcmFkaWFucyk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Sb3RhdGUocm90YXRlKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcih7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHZhciByID0gcm90YXRlKHgsIHkpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sIHJbMV0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNjYWxlVHJhbnNsYXRlKGssIGR4LCBkeSkge1xuICBmdW5jdGlvbiB0cmFuc2Zvcm0oeCwgeSkge1xuICAgIHJldHVybiBbZHggKyBrICogeCwgZHkgLSBrICogeV07XG4gIH1cbiAgdHJhbnNmb3JtLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4gWyh4IC0gZHgpIC8gaywgKGR5IC0geSkgLyBrXTtcbiAgfTtcbiAgcmV0dXJuIHRyYW5zZm9ybTtcbn1cblxuZnVuY3Rpb24gc2NhbGVUcmFuc2xhdGVSb3RhdGUoaywgZHgsIGR5LCBhbHBoYSkge1xuICB2YXIgY29zQWxwaGEgPSBjb3MoYWxwaGEpLFxuICAgICAgc2luQWxwaGEgPSBzaW4oYWxwaGEpLFxuICAgICAgYSA9IGNvc0FscGhhICogayxcbiAgICAgIGIgPSBzaW5BbHBoYSAqIGssXG4gICAgICBhaSA9IGNvc0FscGhhIC8gayxcbiAgICAgIGJpID0gc2luQWxwaGEgLyBrLFxuICAgICAgY2kgPSAoc2luQWxwaGEgKiBkeSAtIGNvc0FscGhhICogZHgpIC8gayxcbiAgICAgIGZpID0gKHNpbkFscGhhICogZHggKyBjb3NBbHBoYSAqIGR5KSAvIGs7XG4gIGZ1bmN0aW9uIHRyYW5zZm9ybSh4LCB5KSB7XG4gICAgcmV0dXJuIFthICogeCAtIGIgKiB5ICsgZHgsIGR5IC0gYiAqIHggLSBhICogeV07XG4gIH1cbiAgdHJhbnNmb3JtLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4gW2FpICogeCAtIGJpICogeSArIGNpLCBmaSAtIGJpICogeCAtIGFpICogeV07XG4gIH07XG4gIHJldHVybiB0cmFuc2Zvcm07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByb2plY3Rpb24ocHJvamVjdCkge1xuICByZXR1cm4gcHJvamVjdGlvbk11dGF0b3IoZnVuY3Rpb24oKSB7IHJldHVybiBwcm9qZWN0OyB9KSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdGlvbk11dGF0b3IocHJvamVjdEF0KSB7XG4gIHZhciBwcm9qZWN0LFxuICAgICAgayA9IDE1MCwgLy8gc2NhbGVcbiAgICAgIHggPSA0ODAsIHkgPSAyNTAsIC8vIHRyYW5zbGF0ZVxuICAgICAgbGFtYmRhID0gMCwgcGhpID0gMCwgLy8gY2VudGVyXG4gICAgICBkZWx0YUxhbWJkYSA9IDAsIGRlbHRhUGhpID0gMCwgZGVsdGFHYW1tYSA9IDAsIHJvdGF0ZSwgLy8gcHJlLXJvdGF0ZVxuICAgICAgYWxwaGEgPSAwLCAvLyBwb3N0LXJvdGF0ZVxuICAgICAgdGhldGEgPSBudWxsLCBwcmVjbGlwID0gY2xpcEFudGltZXJpZGlhbiwgLy8gcHJlLWNsaXAgYW5nbGVcbiAgICAgIHgwID0gbnVsbCwgeTAsIHgxLCB5MSwgcG9zdGNsaXAgPSBpZGVudGl0eSwgLy8gcG9zdC1jbGlwIGV4dGVudFxuICAgICAgZGVsdGEyID0gMC41LCAvLyBwcmVjaXNpb25cbiAgICAgIHByb2plY3RSZXNhbXBsZSxcbiAgICAgIHByb2plY3RUcmFuc2Zvcm0sXG4gICAgICBwcm9qZWN0Um90YXRlVHJhbnNmb3JtLFxuICAgICAgY2FjaGUsXG4gICAgICBjYWNoZVN0cmVhbTtcblxuICBmdW5jdGlvbiBwcm9qZWN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIHByb2plY3RSb3RhdGVUcmFuc2Zvcm0ocG9pbnRbMF0gKiByYWRpYW5zLCBwb2ludFsxXSAqIHJhZGlhbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52ZXJ0KHBvaW50KSB7XG4gICAgcG9pbnQgPSBwcm9qZWN0Um90YXRlVHJhbnNmb3JtLmludmVydChwb2ludFswXSwgcG9pbnRbMV0pO1xuICAgIHJldHVybiBwb2ludCAmJiBbcG9pbnRbMF0gKiBkZWdyZWVzLCBwb2ludFsxXSAqIGRlZ3JlZXNdO1xuICB9XG5cbiAgcHJvamVjdGlvbi5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSB0cmFuc2Zvcm1SYWRpYW5zKHRyYW5zZm9ybVJvdGF0ZShyb3RhdGUpKHByZWNsaXAocHJvamVjdFJlc2FtcGxlKHBvc3RjbGlwKGNhY2hlU3RyZWFtID0gc3RyZWFtKSkpKSk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5wcmVjbGlwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHByZWNsaXAgPSBfLCB0aGV0YSA9IHVuZGVmaW5lZCwgcmVzZXQoKSkgOiBwcmVjbGlwO1xuICB9O1xuXG4gIHByb2plY3Rpb24ucG9zdGNsaXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocG9zdGNsaXAgPSBfLCB4MCA9IHkwID0geDEgPSB5MSA9IG51bGwsIHJlc2V0KCkpIDogcG9zdGNsaXA7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5jbGlwQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJlY2xpcCA9ICtfID8gY2xpcENpcmNsZSh0aGV0YSA9IF8gKiByYWRpYW5zKSA6ICh0aGV0YSA9IG51bGwsIGNsaXBBbnRpbWVyaWRpYW4pLCByZXNldCgpKSA6IHRoZXRhICogZGVncmVlcztcbiAgfTtcblxuICBwcm9qZWN0aW9uLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocG9zdGNsaXAgPSBfID09IG51bGwgPyAoeDAgPSB5MCA9IHgxID0geTEgPSBudWxsLCBpZGVudGl0eSkgOiBjbGlwUmVjdGFuZ2xlKHgwID0gK19bMF1bMF0sIHkwID0gK19bMF1bMV0sIHgxID0gK19bMV1bMF0sIHkxID0gK19bMV1bMV0pLCByZXNldCgpKSA6IHgwID09IG51bGwgPyBudWxsIDogW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gIH07XG5cbiAgcHJvamVjdGlvbi5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChrID0gK18sIHJlY2VudGVyKCkpIDogaztcbiAgfTtcblxuICBwcm9qZWN0aW9uLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gK19bMF0sIHkgPSArX1sxXSwgcmVjZW50ZXIoKSkgOiBbeCwgeV07XG4gIH07XG5cbiAgcHJvamVjdGlvbi5jZW50ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobGFtYmRhID0gX1swXSAlIDM2MCAqIHJhZGlhbnMsIHBoaSA9IF9bMV0gJSAzNjAgKiByYWRpYW5zLCByZWNlbnRlcigpKSA6IFtsYW1iZGEgKiBkZWdyZWVzLCBwaGkgKiBkZWdyZWVzXTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkZWx0YUxhbWJkYSA9IF9bMF0gJSAzNjAgKiByYWRpYW5zLCBkZWx0YVBoaSA9IF9bMV0gJSAzNjAgKiByYWRpYW5zLCBkZWx0YUdhbW1hID0gXy5sZW5ndGggPiAyID8gX1syXSAlIDM2MCAqIHJhZGlhbnMgOiAwLCByZWNlbnRlcigpKSA6IFtkZWx0YUxhbWJkYSAqIGRlZ3JlZXMsIGRlbHRhUGhpICogZGVncmVlcywgZGVsdGFHYW1tYSAqIGRlZ3JlZXNdO1xuICB9O1xuXG4gIHByb2plY3Rpb24uYW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSBfICUgMzYwICogcmFkaWFucywgcmVjZW50ZXIoKSkgOiBhbHBoYSAqIGRlZ3JlZXM7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJvamVjdFJlc2FtcGxlID0gcmVzYW1wbGUocHJvamVjdFRyYW5zZm9ybSwgZGVsdGEyID0gXyAqIF8pLCByZXNldCgpKSA6IHNxcnQoZGVsdGEyKTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdEV4dGVudCA9IGZ1bmN0aW9uKGV4dGVudCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEV4dGVudChwcm9qZWN0aW9uLCBleHRlbnQsIG9iamVjdCk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRTaXplID0gZnVuY3Rpb24oc2l6ZSwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdFNpemUocHJvamVjdGlvbiwgc2l6ZSwgb2JqZWN0KTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdFdpZHRoID0gZnVuY3Rpb24od2lkdGgsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRXaWR0aChwcm9qZWN0aW9uLCB3aWR0aCwgb2JqZWN0KTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdEhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEhlaWdodChwcm9qZWN0aW9uLCBoZWlnaHQsIG9iamVjdCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjZW50ZXIoKSB7XG4gICAgdmFyIGNlbnRlciA9IHNjYWxlVHJhbnNsYXRlUm90YXRlKGssIDAsIDAsIGFscGhhKS5hcHBseShudWxsLCBwcm9qZWN0KGxhbWJkYSwgcGhpKSksXG4gICAgICAgIHRyYW5zZm9ybSA9IChhbHBoYSA/IHNjYWxlVHJhbnNsYXRlUm90YXRlIDogc2NhbGVUcmFuc2xhdGUpKGssIHggLSBjZW50ZXJbMF0sIHkgLSBjZW50ZXJbMV0sIGFscGhhKTtcbiAgICByb3RhdGUgPSByb3RhdGVSYWRpYW5zKGRlbHRhTGFtYmRhLCBkZWx0YVBoaSwgZGVsdGFHYW1tYSk7XG4gICAgcHJvamVjdFRyYW5zZm9ybSA9IGNvbXBvc2UocHJvamVjdCwgdHJhbnNmb3JtKTtcbiAgICBwcm9qZWN0Um90YXRlVHJhbnNmb3JtID0gY29tcG9zZShyb3RhdGUsIHByb2plY3RUcmFuc2Zvcm0pO1xuICAgIHByb2plY3RSZXNhbXBsZSA9IHJlc2FtcGxlKHByb2plY3RUcmFuc2Zvcm0sIGRlbHRhMik7XG4gICAgcmV0dXJuIHJlc2V0KCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjYWNoZSA9IGNhY2hlU3RyZWFtID0gbnVsbDtcbiAgICByZXR1cm4gcHJvamVjdGlvbjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBwcm9qZWN0ID0gcHJvamVjdEF0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcHJvamVjdGlvbi5pbnZlcnQgPSBwcm9qZWN0LmludmVydCAmJiBpbnZlcnQ7XG4gICAgcmV0dXJuIHJlY2VudGVyKCk7XG4gIH07XG59XG4iLCJpbXBvcnQge2F0YW4sIGV4cCwgaGFsZlBpLCBsb2csIHBpLCB0YW4sIHRhdX0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCByb3RhdGlvbiBmcm9tIFwiLi4vcm90YXRpb25cIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclJhdyhsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2xhbWJkYSwgbG9nKHRhbigoaGFsZlBpICsgcGhpKSAvIDIpKV07XG59XG5cbm1lcmNhdG9yUmF3LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgcmV0dXJuIFt4LCAyICogYXRhbihleHAoeSkpIC0gaGFsZlBpXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbWVyY2F0b3JQcm9qZWN0aW9uKG1lcmNhdG9yUmF3KVxuICAgICAgLnNjYWxlKDk2MSAvIHRhdSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclByb2plY3Rpb24ocHJvamVjdCkge1xuICB2YXIgbSA9IHByb2plY3Rpb24ocHJvamVjdCksXG4gICAgICBjZW50ZXIgPSBtLmNlbnRlcixcbiAgICAgIHNjYWxlID0gbS5zY2FsZSxcbiAgICAgIHRyYW5zbGF0ZSA9IG0udHJhbnNsYXRlLFxuICAgICAgY2xpcEV4dGVudCA9IG0uY2xpcEV4dGVudCxcbiAgICAgIHgwID0gbnVsbCwgeTAsIHgxLCB5MTsgLy8gY2xpcCBleHRlbnRcblxuICBtLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlKF8pLCByZWNsaXAoKSkgOiBzY2FsZSgpO1xuICB9O1xuXG4gIG0udHJhbnNsYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRyYW5zbGF0ZShfKSwgcmVjbGlwKCkpIDogdHJhbnNsYXRlKCk7XG4gIH07XG5cbiAgbS5jZW50ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2VudGVyKF8pLCByZWNsaXAoKSkgOiBjZW50ZXIoKTtcbiAgfTtcblxuICBtLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKF8gPT0gbnVsbCA/IHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCA6ICh4MCA9ICtfWzBdWzBdLCB5MCA9ICtfWzBdWzFdLCB4MSA9ICtfWzFdWzBdLCB5MSA9ICtfWzFdWzFdKSksIHJlY2xpcCgpKSA6IHgwID09IG51bGwgPyBudWxsIDogW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjbGlwKCkge1xuICAgIHZhciBrID0gcGkgKiBzY2FsZSgpLFxuICAgICAgICB0ID0gbShyb3RhdGlvbihtLnJvdGF0ZSgpKS5pbnZlcnQoWzAsIDBdKSk7XG4gICAgcmV0dXJuIGNsaXBFeHRlbnQoeDAgPT0gbnVsbFxuICAgICAgICA/IFtbdFswXSAtIGssIHRbMV0gLSBrXSwgW3RbMF0gKyBrLCB0WzFdICsga11dIDogcHJvamVjdCA9PT0gbWVyY2F0b3JSYXdcbiAgICAgICAgPyBbW01hdGgubWF4KHRbMF0gLSBrLCB4MCksIHkwXSwgW01hdGgubWluKHRbMF0gKyBrLCB4MSksIHkxXV1cbiAgICAgICAgOiBbW3gwLCBNYXRoLm1heCh0WzFdIC0gaywgeTApXSwgW3gxLCBNYXRoLm1pbih0WzFdICsgaywgeTEpXV0pO1xuICB9XG5cbiAgcmV0dXJuIHJlY2xpcCgpO1xufVxuIiwiaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCB7YWJzLCBlcHNpbG9ufSBmcm9tIFwiLi4vbWF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbmF0dXJhbEVhcnRoMVJhdyhsYW1iZGEsIHBoaSkge1xuICB2YXIgcGhpMiA9IHBoaSAqIHBoaSwgcGhpNCA9IHBoaTIgKiBwaGkyO1xuICByZXR1cm4gW1xuICAgIGxhbWJkYSAqICgwLjg3MDcgLSAwLjEzMTk3OSAqIHBoaTIgKyBwaGk0ICogKC0wLjAxMzc5MSArIHBoaTQgKiAoMC4wMDM5NzEgKiBwaGkyIC0gMC4wMDE1MjkgKiBwaGk0KSkpLFxuICAgIHBoaSAqICgxLjAwNzIyNiArIHBoaTIgKiAoMC4wMTUwODUgKyBwaGk0ICogKC0wLjA0NDQ3NSArIDAuMDI4ODc0ICogcGhpMiAtIDAuMDA1OTE2ICogcGhpNCkpKVxuICBdO1xufVxuXG5uYXR1cmFsRWFydGgxUmF3LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgdmFyIHBoaSA9IHksIGkgPSAyNSwgZGVsdGE7XG4gIGRvIHtcbiAgICB2YXIgcGhpMiA9IHBoaSAqIHBoaSwgcGhpNCA9IHBoaTIgKiBwaGkyO1xuICAgIHBoaSAtPSBkZWx0YSA9IChwaGkgKiAoMS4wMDcyMjYgKyBwaGkyICogKDAuMDE1MDg1ICsgcGhpNCAqICgtMC4wNDQ0NzUgKyAwLjAyODg3NCAqIHBoaTIgLSAwLjAwNTkxNiAqIHBoaTQpKSkgLSB5KSAvXG4gICAgICAgICgxLjAwNzIyNiArIHBoaTIgKiAoMC4wMTUwODUgKiAzICsgcGhpNCAqICgtMC4wNDQ0NzUgKiA3ICsgMC4wMjg4NzQgKiA5ICogcGhpMiAtIDAuMDA1OTE2ICogMTEgKiBwaGk0KSkpO1xuICB9IHdoaWxlIChhYnMoZGVsdGEpID4gZXBzaWxvbiAmJiAtLWkgPiAwKTtcbiAgcmV0dXJuIFtcbiAgICB4IC8gKDAuODcwNyArIChwaGkyID0gcGhpICogcGhpKSAqICgtMC4xMzE5NzkgKyBwaGkyICogKC0wLjAxMzc5MSArIHBoaTIgKiBwaGkyICogcGhpMiAqICgwLjAwMzk3MSAtIDAuMDAxNTI5ICogcGhpMikpKSksXG4gICAgcGhpXG4gIF07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24obmF0dXJhbEVhcnRoMVJhdylcbiAgICAgIC5zY2FsZSgxNzUuMjk1KTtcbn1cbiIsImltcG9ydCB7YXNpbiwgY29zLCBlcHNpbG9uLCBzaW59IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge2F6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3J0aG9ncmFwaGljUmF3KHgsIHkpIHtcbiAgcmV0dXJuIFtjb3MoeSkgKiBzaW4oeCksIHNpbih5KV07XG59XG5cbm9ydGhvZ3JhcGhpY1Jhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoYXNpbik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihvcnRob2dyYXBoaWNSYXcpXG4gICAgICAuc2NhbGUoMjQ5LjUpXG4gICAgICAuY2xpcEFuZ2xlKDkwICsgZXBzaWxvbik7XG59XG4iLCJpbXBvcnQge2NhcnRlc2lhbn0gZnJvbSBcIi4uL2NhcnRlc2lhblwiO1xuaW1wb3J0IHthYnMsIGFzaW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIHJhZGlhbnMsIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge3RyYW5zZm9ybWVyfSBmcm9tIFwiLi4vdHJhbnNmb3JtXCI7XG5cbnZhciBtYXhEZXB0aCA9IDE2LCAvLyBtYXhpbXVtIGRlcHRoIG9mIHN1YmRpdmlzaW9uXG4gICAgY29zTWluRGlzdGFuY2UgPSBjb3MoMzAgKiByYWRpYW5zKTsgLy8gY29zKG1pbmltdW0gYW5ndWxhciBkaXN0YW5jZSlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocHJvamVjdCwgZGVsdGEyKSB7XG4gIHJldHVybiArZGVsdGEyID8gcmVzYW1wbGUocHJvamVjdCwgZGVsdGEyKSA6IHJlc2FtcGxlTm9uZShwcm9qZWN0KTtcbn1cblxuZnVuY3Rpb24gcmVzYW1wbGVOb25lKHByb2plY3QpIHtcbiAgcmV0dXJuIHRyYW5zZm9ybWVyKHtcbiAgICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgeCA9IHByb2plY3QoeCwgeSk7XG4gICAgICB0aGlzLnN0cmVhbS5wb2ludCh4WzBdLCB4WzFdKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXNhbXBsZShwcm9qZWN0LCBkZWx0YTIpIHtcblxuICBmdW5jdGlvbiByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgxLCB5MSwgbGFtYmRhMSwgYTEsIGIxLCBjMSwgZGVwdGgsIHN0cmVhbSkge1xuICAgIHZhciBkeCA9IHgxIC0geDAsXG4gICAgICAgIGR5ID0geTEgLSB5MCxcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICBpZiAoZDIgPiA0ICogZGVsdGEyICYmIGRlcHRoLS0pIHtcbiAgICAgIHZhciBhID0gYTAgKyBhMSxcbiAgICAgICAgICBiID0gYjAgKyBiMSxcbiAgICAgICAgICBjID0gYzAgKyBjMSxcbiAgICAgICAgICBtID0gc3FydChhICogYSArIGIgKiBiICsgYyAqIGMpLFxuICAgICAgICAgIHBoaTIgPSBhc2luKGMgLz0gbSksXG4gICAgICAgICAgbGFtYmRhMiA9IGFicyhhYnMoYykgLSAxKSA8IGVwc2lsb24gfHwgYWJzKGxhbWJkYTAgLSBsYW1iZGExKSA8IGVwc2lsb24gPyAobGFtYmRhMCArIGxhbWJkYTEpIC8gMiA6IGF0YW4yKGIsIGEpLFxuICAgICAgICAgIHAgPSBwcm9qZWN0KGxhbWJkYTIsIHBoaTIpLFxuICAgICAgICAgIHgyID0gcFswXSxcbiAgICAgICAgICB5MiA9IHBbMV0sXG4gICAgICAgICAgZHgyID0geDIgLSB4MCxcbiAgICAgICAgICBkeTIgPSB5MiAtIHkwLFxuICAgICAgICAgIGR6ID0gZHkgKiBkeDIgLSBkeCAqIGR5MjtcbiAgICAgIGlmIChkeiAqIGR6IC8gZDIgPiBkZWx0YTIgLy8gcGVycGVuZGljdWxhciBwcm9qZWN0ZWQgZGlzdGFuY2VcbiAgICAgICAgICB8fCBhYnMoKGR4ICogZHgyICsgZHkgKiBkeTIpIC8gZDIgLSAwLjUpID4gMC4zIC8vIG1pZHBvaW50IGNsb3NlIHRvIGFuIGVuZFxuICAgICAgICAgIHx8IGEwICogYTEgKyBiMCAqIGIxICsgYzAgKiBjMSA8IGNvc01pbkRpc3RhbmNlKSB7IC8vIGFuZ3VsYXIgZGlzdGFuY2VcbiAgICAgICAgcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MiwgeTIsIGxhbWJkYTIsIGEgLz0gbSwgYiAvPSBtLCBjLCBkZXB0aCwgc3RyZWFtKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHgyLCB5Mik7XG4gICAgICAgIHJlc2FtcGxlTGluZVRvKHgyLCB5MiwgbGFtYmRhMiwgYSwgYiwgYywgeDEsIHkxLCBsYW1iZGExLCBhMSwgYjEsIGMxLCBkZXB0aCwgc3RyZWFtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBsYW1iZGEwMCwgeDAwLCB5MDAsIGEwMCwgYjAwLCBjMDAsIC8vIGZpcnN0IHBvaW50XG4gICAgICAgIGxhbWJkYTAsIHgwLCB5MCwgYTAsIGIwLCBjMDsgLy8gcHJldmlvdXMgcG9pbnRcblxuICAgIHZhciByZXNhbXBsZVN0cmVhbSA9IHtcbiAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgbGluZUVuZDogbGluZUVuZCxcbiAgICAgIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7IHN0cmVhbS5wb2x5Z29uU3RhcnQoKTsgcmVzYW1wbGVTdHJlYW0ubGluZVN0YXJ0ID0gcmluZ1N0YXJ0OyB9LFxuICAgICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7IHN0cmVhbS5wb2x5Z29uRW5kKCk7IHJlc2FtcGxlU3RyZWFtLmxpbmVTdGFydCA9IGxpbmVTdGFydDsgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludCh4LCB5KSB7XG4gICAgICB4ID0gcHJvamVjdCh4LCB5KTtcbiAgICAgIHN0cmVhbS5wb2ludCh4WzBdLCB4WzFdKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lU3RhcnQoKSB7XG4gICAgICB4MCA9IE5hTjtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLnBvaW50ID0gbGluZVBvaW50O1xuICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVQb2ludChsYW1iZGEsIHBoaSkge1xuICAgICAgdmFyIGMgPSBjYXJ0ZXNpYW4oW2xhbWJkYSwgcGhpXSksIHAgPSBwcm9qZWN0KGxhbWJkYSwgcGhpKTtcbiAgICAgIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgbGFtYmRhMCwgYTAsIGIwLCBjMCwgeDAgPSBwWzBdLCB5MCA9IHBbMV0sIGxhbWJkYTAgPSBsYW1iZGEsIGEwID0gY1swXSwgYjAgPSBjWzFdLCBjMCA9IGNbMl0sIG1heERlcHRoLCBzdHJlYW0pO1xuICAgICAgc3RyZWFtLnBvaW50KHgwLCB5MCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUVuZCgpIHtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLnBvaW50ID0gcG9pbnQ7XG4gICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdTdGFydCgpIHtcbiAgICAgIGxpbmVTdGFydCgpO1xuICAgICAgcmVzYW1wbGVTdHJlYW0ucG9pbnQgPSByaW5nUG9pbnQ7XG4gICAgICByZXNhbXBsZVN0cmVhbS5saW5lRW5kID0gcmluZ0VuZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgICAgIGxpbmVQb2ludChsYW1iZGEwMCA9IGxhbWJkYSwgcGhpKSwgeDAwID0geDAsIHkwMCA9IHkwLCBhMDAgPSBhMCwgYjAwID0gYjAsIGMwMCA9IGMwO1xuICAgICAgcmVzYW1wbGVTdHJlYW0ucG9pbnQgPSBsaW5lUG9pbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmluZ0VuZCgpIHtcbiAgICAgIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgbGFtYmRhMCwgYTAsIGIwLCBjMCwgeDAwLCB5MDAsIGxhbWJkYTAwLCBhMDAsIGIwMCwgYzAwLCBtYXhEZXB0aCwgc3RyZWFtKTtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLmxpbmVFbmQgPSBsaW5lRW5kO1xuICAgICAgbGluZUVuZCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNhbXBsZVN0cmVhbTtcbiAgfTtcbn1cbiIsImltcG9ydCB7YXRhbiwgY29zLCBzaW59IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge2F6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RlcmVvZ3JhcGhpY1Jhdyh4LCB5KSB7XG4gIHZhciBjeSA9IGNvcyh5KSwgayA9IDEgKyBjb3MoeCkgKiBjeTtcbiAgcmV0dXJuIFtjeSAqIHNpbih4KSAvIGssIHNpbih5KSAvIGtdO1xufVxuXG5zdGVyZW9ncmFwaGljUmF3LmludmVydCA9IGF6aW11dGhhbEludmVydChmdW5jdGlvbih6KSB7XG4gIHJldHVybiAyICogYXRhbih6KTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oc3RlcmVvZ3JhcGhpY1JhdylcbiAgICAgIC5zY2FsZSgyNTApXG4gICAgICAuY2xpcEFuZ2xlKDE0Mik7XG59XG4iLCJpbXBvcnQge2F0YW4sIGV4cCwgaGFsZlBpLCBsb2csIHRhbn0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7bWVyY2F0b3JQcm9qZWN0aW9ufSBmcm9tIFwiLi9tZXJjYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnN2ZXJzZU1lcmNhdG9yUmF3KGxhbWJkYSwgcGhpKSB7XG4gIHJldHVybiBbbG9nKHRhbigoaGFsZlBpICsgcGhpKSAvIDIpKSwgLWxhbWJkYV07XG59XG5cbnRyYW5zdmVyc2VNZXJjYXRvclJhdy5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gIHJldHVybiBbLXksIDIgKiBhdGFuKGV4cCh4KSkgLSBoYWxmUGldO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBtID0gbWVyY2F0b3JQcm9qZWN0aW9uKHRyYW5zdmVyc2VNZXJjYXRvclJhdyksXG4gICAgICBjZW50ZXIgPSBtLmNlbnRlcixcbiAgICAgIHJvdGF0ZSA9IG0ucm90YXRlO1xuXG4gIG0uY2VudGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gY2VudGVyKFstX1sxXSwgX1swXV0pIDogKF8gPSBjZW50ZXIoKSwgW19bMV0sIC1fWzBdXSk7XG4gIH07XG5cbiAgbS5yb3RhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyByb3RhdGUoW19bMF0sIF9bMV0sIF8ubGVuZ3RoID4gMiA/IF9bMl0gKyA5MCA6IDkwXSkgOiAoXyA9IHJvdGF0ZSgpLCBbX1swXSwgX1sxXSwgX1syXSAtIDkwXSk7XG4gIH07XG5cbiAgcmV0dXJuIHJvdGF0ZShbMCwgMCwgOTBdKVxuICAgICAgLnNjYWxlKDE1OS4xNTUpO1xufVxuIiwiaW1wb3J0IGNvbXBvc2UgZnJvbSBcIi4vY29tcG9zZVwiO1xuaW1wb3J0IHthYnMsIGFzaW4sIGF0YW4yLCBjb3MsIGRlZ3JlZXMsIHBpLCByYWRpYW5zLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuXG5mdW5jdGlvbiByb3RhdGlvbklkZW50aXR5KGxhbWJkYSwgcGhpKSB7XG4gIHJldHVybiBbYWJzKGxhbWJkYSkgPiBwaSA/IGxhbWJkYSArIE1hdGgucm91bmQoLWxhbWJkYSAvIHRhdSkgKiB0YXUgOiBsYW1iZGEsIHBoaV07XG59XG5cbnJvdGF0aW9uSWRlbnRpdHkuaW52ZXJ0ID0gcm90YXRpb25JZGVudGl0eTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVJhZGlhbnMoZGVsdGFMYW1iZGEsIGRlbHRhUGhpLCBkZWx0YUdhbW1hKSB7XG4gIHJldHVybiAoZGVsdGFMYW1iZGEgJT0gdGF1KSA/IChkZWx0YVBoaSB8fCBkZWx0YUdhbW1hID8gY29tcG9zZShyb3RhdGlvbkxhbWJkYShkZWx0YUxhbWJkYSksIHJvdGF0aW9uUGhpR2FtbWEoZGVsdGFQaGksIGRlbHRhR2FtbWEpKVxuICAgIDogcm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpKVxuICAgIDogKGRlbHRhUGhpIHx8IGRlbHRhR2FtbWEgPyByb3RhdGlvblBoaUdhbW1hKGRlbHRhUGhpLCBkZWx0YUdhbW1hKVxuICAgIDogcm90YXRpb25JZGVudGl0eSk7XG59XG5cbmZ1bmN0aW9uIGZvcndhcmRSb3RhdGlvbkxhbWJkYShkZWx0YUxhbWJkYSkge1xuICByZXR1cm4gZnVuY3Rpb24obGFtYmRhLCBwaGkpIHtcbiAgICByZXR1cm4gbGFtYmRhICs9IGRlbHRhTGFtYmRhLCBbbGFtYmRhID4gcGkgPyBsYW1iZGEgLSB0YXUgOiBsYW1iZGEgPCAtcGkgPyBsYW1iZGEgKyB0YXUgOiBsYW1iZGEsIHBoaV07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJvdGF0aW9uTGFtYmRhKGRlbHRhTGFtYmRhKSB7XG4gIHZhciByb3RhdGlvbiA9IGZvcndhcmRSb3RhdGlvbkxhbWJkYShkZWx0YUxhbWJkYSk7XG4gIHJvdGF0aW9uLmludmVydCA9IGZvcndhcmRSb3RhdGlvbkxhbWJkYSgtZGVsdGFMYW1iZGEpO1xuICByZXR1cm4gcm90YXRpb247XG59XG5cbmZ1bmN0aW9uIHJvdGF0aW9uUGhpR2FtbWEoZGVsdGFQaGksIGRlbHRhR2FtbWEpIHtcbiAgdmFyIGNvc0RlbHRhUGhpID0gY29zKGRlbHRhUGhpKSxcbiAgICAgIHNpbkRlbHRhUGhpID0gc2luKGRlbHRhUGhpKSxcbiAgICAgIGNvc0RlbHRhR2FtbWEgPSBjb3MoZGVsdGFHYW1tYSksXG4gICAgICBzaW5EZWx0YUdhbW1hID0gc2luKGRlbHRhR2FtbWEpO1xuXG4gIGZ1bmN0aW9uIHJvdGF0aW9uKGxhbWJkYSwgcGhpKSB7XG4gICAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpLFxuICAgICAgICB4ID0gY29zKGxhbWJkYSkgKiBjb3NQaGksXG4gICAgICAgIHkgPSBzaW4obGFtYmRhKSAqIGNvc1BoaSxcbiAgICAgICAgeiA9IHNpbihwaGkpLFxuICAgICAgICBrID0geiAqIGNvc0RlbHRhUGhpICsgeCAqIHNpbkRlbHRhUGhpO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih5ICogY29zRGVsdGFHYW1tYSAtIGsgKiBzaW5EZWx0YUdhbW1hLCB4ICogY29zRGVsdGFQaGkgLSB6ICogc2luRGVsdGFQaGkpLFxuICAgICAgYXNpbihrICogY29zRGVsdGFHYW1tYSArIHkgKiBzaW5EZWx0YUdhbW1hKVxuICAgIF07XG4gIH1cblxuICByb3RhdGlvbi5pbnZlcnQgPSBmdW5jdGlvbihsYW1iZGEsIHBoaSkge1xuICAgIHZhciBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgICAgeCA9IGNvcyhsYW1iZGEpICogY29zUGhpLFxuICAgICAgICB5ID0gc2luKGxhbWJkYSkgKiBjb3NQaGksXG4gICAgICAgIHogPSBzaW4ocGhpKSxcbiAgICAgICAgayA9IHogKiBjb3NEZWx0YUdhbW1hIC0geSAqIHNpbkRlbHRhR2FtbWE7XG4gICAgcmV0dXJuIFtcbiAgICAgIGF0YW4yKHkgKiBjb3NEZWx0YUdhbW1hICsgeiAqIHNpbkRlbHRhR2FtbWEsIHggKiBjb3NEZWx0YVBoaSArIGsgKiBzaW5EZWx0YVBoaSksXG4gICAgICBhc2luKGsgKiBjb3NEZWx0YVBoaSAtIHggKiBzaW5EZWx0YVBoaSlcbiAgICBdO1xuICB9O1xuXG4gIHJldHVybiByb3RhdGlvbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocm90YXRlKSB7XG4gIHJvdGF0ZSA9IHJvdGF0ZVJhZGlhbnMocm90YXRlWzBdICogcmFkaWFucywgcm90YXRlWzFdICogcmFkaWFucywgcm90YXRlLmxlbmd0aCA+IDIgPyByb3RhdGVbMl0gKiByYWRpYW5zIDogMCk7XG5cbiAgZnVuY3Rpb24gZm9yd2FyZChjb29yZGluYXRlcykge1xuICAgIGNvb3JkaW5hdGVzID0gcm90YXRlKGNvb3JkaW5hdGVzWzBdICogcmFkaWFucywgY29vcmRpbmF0ZXNbMV0gKiByYWRpYW5zKTtcbiAgICByZXR1cm4gY29vcmRpbmF0ZXNbMF0gKj0gZGVncmVlcywgY29vcmRpbmF0ZXNbMV0gKj0gZGVncmVlcywgY29vcmRpbmF0ZXM7XG4gIH1cblxuICBmb3J3YXJkLmludmVydCA9IGZ1bmN0aW9uKGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXMgPSByb3RhdGUuaW52ZXJ0KGNvb3JkaW5hdGVzWzBdICogcmFkaWFucywgY29vcmRpbmF0ZXNbMV0gKiByYWRpYW5zKTtcbiAgICByZXR1cm4gY29vcmRpbmF0ZXNbMF0gKj0gZGVncmVlcywgY29vcmRpbmF0ZXNbMV0gKj0gZGVncmVlcywgY29vcmRpbmF0ZXM7XG4gIH07XG5cbiAgcmV0dXJuIGZvcndhcmQ7XG59XG4iLCJmdW5jdGlvbiBzdHJlYW1HZW9tZXRyeShnZW9tZXRyeSwgc3RyZWFtKSB7XG4gIGlmIChnZW9tZXRyeSAmJiBzdHJlYW1HZW9tZXRyeVR5cGUuaGFzT3duUHJvcGVydHkoZ2VvbWV0cnkudHlwZSkpIHtcbiAgICBzdHJlYW1HZW9tZXRyeVR5cGVbZ2VvbWV0cnkudHlwZV0oZ2VvbWV0cnksIHN0cmVhbSk7XG4gIH1cbn1cblxudmFyIHN0cmVhbU9iamVjdFR5cGUgPSB7XG4gIEZlYXR1cmU6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgc3RyZWFtR2VvbWV0cnkob2JqZWN0Lmdlb21ldHJ5LCBzdHJlYW0pO1xuICB9LFxuICBGZWF0dXJlQ29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBvYmplY3QuZmVhdHVyZXMsIGkgPSAtMSwgbiA9IGZlYXR1cmVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgc3RyZWFtR2VvbWV0cnkoZmVhdHVyZXNbaV0uZ2VvbWV0cnksIHN0cmVhbSk7XG4gIH1cbn07XG5cbnZhciBzdHJlYW1HZW9tZXRyeVR5cGUgPSB7XG4gIFNwaGVyZTogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICBzdHJlYW0uc3BoZXJlKCk7XG4gIH0sXG4gIFBvaW50OiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIG9iamVjdCA9IG9iamVjdC5jb29yZGluYXRlcztcbiAgICBzdHJlYW0ucG9pbnQob2JqZWN0WzBdLCBvYmplY3RbMV0sIG9iamVjdFsyXSk7XG4gIH0sXG4gIE11bHRpUG9pbnQ6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgdmFyIGNvb3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIG9iamVjdCA9IGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0ucG9pbnQob2JqZWN0WzBdLCBvYmplY3RbMV0sIG9iamVjdFsyXSk7XG4gIH0sXG4gIExpbmVTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgc3RyZWFtTGluZShvYmplY3QuY29vcmRpbmF0ZXMsIHN0cmVhbSwgMCk7XG4gIH0sXG4gIE11bHRpTGluZVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSwgc3RyZWFtLCAwKTtcbiAgfSxcbiAgUG9seWdvbjogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICBzdHJlYW1Qb2x5Z29uKG9iamVjdC5jb29yZGluYXRlcywgc3RyZWFtKTtcbiAgfSxcbiAgTXVsdGlQb2x5Z29uOiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIHZhciBjb29yZGluYXRlcyA9IG9iamVjdC5jb29yZGluYXRlcywgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBzdHJlYW1Qb2x5Z29uKGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0pO1xuICB9LFxuICBHZW9tZXRyeUNvbGxlY3Rpb246IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgdmFyIGdlb21ldHJpZXMgPSBvYmplY3QuZ2VvbWV0cmllcywgaSA9IC0xLCBuID0gZ2VvbWV0cmllcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIHN0cmVhbUdlb21ldHJ5KGdlb21ldHJpZXNbaV0sIHN0cmVhbSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHN0cmVhbUxpbmUoY29vcmRpbmF0ZXMsIHN0cmVhbSwgY2xvc2VkKSB7XG4gIHZhciBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGggLSBjbG9zZWQsIGNvb3JkaW5hdGU7XG4gIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgd2hpbGUgKCsraSA8IG4pIGNvb3JkaW5hdGUgPSBjb29yZGluYXRlc1tpXSwgc3RyZWFtLnBvaW50KGNvb3JkaW5hdGVbMF0sIGNvb3JkaW5hdGVbMV0sIGNvb3JkaW5hdGVbMl0pO1xuICBzdHJlYW0ubGluZUVuZCgpO1xufVxuXG5mdW5jdGlvbiBzdHJlYW1Qb2x5Z29uKGNvb3JkaW5hdGVzLCBzdHJlYW0pIHtcbiAgdmFyIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgc3RyZWFtLnBvbHlnb25TdGFydCgpO1xuICB3aGlsZSAoKytpIDwgbikgc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSwgc3RyZWFtLCAxKTtcbiAgc3RyZWFtLnBvbHlnb25FbmQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgaWYgKG9iamVjdCAmJiBzdHJlYW1PYmplY3RUeXBlLmhhc093blByb3BlcnR5KG9iamVjdC50eXBlKSkge1xuICAgIHN0cmVhbU9iamVjdFR5cGVbb2JqZWN0LnR5cGVdKG9iamVjdCwgc3RyZWFtKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJlYW1HZW9tZXRyeShvYmplY3QsIHN0cmVhbSk7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1ldGhvZHMpIHtcbiAgcmV0dXJuIHtcbiAgICBzdHJlYW06IHRyYW5zZm9ybWVyKG1ldGhvZHMpXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1lcihtZXRob2RzKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgcyA9IG5ldyBUcmFuc2Zvcm1TdHJlYW07XG4gICAgZm9yICh2YXIga2V5IGluIG1ldGhvZHMpIHNba2V5XSA9IG1ldGhvZHNba2V5XTtcbiAgICBzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICByZXR1cm4gcztcbiAgfTtcbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtKCkge31cblxuVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zZm9ybVN0cmVhbSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHsgdGhpcy5zdHJlYW0ucG9pbnQoeCwgeSk7IH0sXG4gIHNwaGVyZTogZnVuY3Rpb24oKSB7IHRoaXMuc3RyZWFtLnNwaGVyZSgpOyB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkgeyB0aGlzLnN0cmVhbS5saW5lU3RhcnQoKTsgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7IHRoaXMuc3RyZWFtLmxpbmVFbmQoKTsgfSxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCk7IH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgeyB0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCk7IH1cbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gb3B0aW9uYWwoZikge1xuICByZXR1cm4gZiA9PSBudWxsID8gbnVsbCA6IHJlcXVpcmVkKGYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWQoZikge1xuICBpZiAodHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZjtcbn1cbiIsImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlKGFycmF5KSB7XG4gIHZhciBtID0gYXJyYXkubGVuZ3RoLFxuICAgICAgdCxcbiAgICAgIGk7XG5cbiAgd2hpbGUgKG0pIHtcbiAgICBpID0gTWF0aC5yYW5kb20oKSAqIG0tLSB8IDA7XG4gICAgdCA9IGFycmF5W21dO1xuICAgIGFycmF5W21dID0gYXJyYXlbaV07XG4gICAgYXJyYXlbaV0gPSB0O1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuIiwiZnVuY3Rpb24gZGVmYXVsdFNlcGFyYXRpb24oYSwgYikge1xuICByZXR1cm4gYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMSA6IDI7XG59XG5cbmZ1bmN0aW9uIG1lYW5YKGNoaWxkcmVuKSB7XG4gIHJldHVybiBjaGlsZHJlbi5yZWR1Y2UobWVhblhSZWR1Y2UsIDApIC8gY2hpbGRyZW4ubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBtZWFuWFJlZHVjZSh4LCBjKSB7XG4gIHJldHVybiB4ICsgYy54O1xufVxuXG5mdW5jdGlvbiBtYXhZKGNoaWxkcmVuKSB7XG4gIHJldHVybiAxICsgY2hpbGRyZW4ucmVkdWNlKG1heFlSZWR1Y2UsIDApO1xufVxuXG5mdW5jdGlvbiBtYXhZUmVkdWNlKHksIGMpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHksIGMueSk7XG59XG5cbmZ1bmN0aW9uIGxlYWZMZWZ0KG5vZGUpIHtcbiAgdmFyIGNoaWxkcmVuO1xuICB3aGlsZSAoY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKSBub2RlID0gY2hpbGRyZW5bMF07XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBsZWFmUmlnaHQobm9kZSkge1xuICB2YXIgY2hpbGRyZW47XG4gIHdoaWxlIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIG5vZGUgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VwYXJhdGlvbiA9IGRlZmF1bHRTZXBhcmF0aW9uLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgbm9kZVNpemUgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBjbHVzdGVyKHJvb3QpIHtcbiAgICB2YXIgcHJldmlvdXNOb2RlLFxuICAgICAgICB4ID0gMDtcblxuICAgIC8vIEZpcnN0IHdhbGssIGNvbXB1dGluZyB0aGUgaW5pdGlhbCB4ICYgeSB2YWx1ZXMuXG4gICAgcm9vdC5lYWNoQWZ0ZXIoZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICBub2RlLnggPSBtZWFuWChjaGlsZHJlbik7XG4gICAgICAgIG5vZGUueSA9IG1heFkoY2hpbGRyZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS54ID0gcHJldmlvdXNOb2RlID8geCArPSBzZXBhcmF0aW9uKG5vZGUsIHByZXZpb3VzTm9kZSkgOiAwO1xuICAgICAgICBub2RlLnkgPSAwO1xuICAgICAgICBwcmV2aW91c05vZGUgPSBub2RlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGxlZnQgPSBsZWFmTGVmdChyb290KSxcbiAgICAgICAgcmlnaHQgPSBsZWFmUmlnaHQocm9vdCksXG4gICAgICAgIHgwID0gbGVmdC54IC0gc2VwYXJhdGlvbihsZWZ0LCByaWdodCkgLyAyLFxuICAgICAgICB4MSA9IHJpZ2h0LnggKyBzZXBhcmF0aW9uKHJpZ2h0LCBsZWZ0KSAvIDI7XG5cbiAgICAvLyBTZWNvbmQgd2Fsaywgbm9ybWFsaXppbmcgeCAmIHkgdG8gdGhlIGRlc2lyZWQgc2l6ZS5cbiAgICByZXR1cm4gcm9vdC5lYWNoQWZ0ZXIobm9kZVNpemUgPyBmdW5jdGlvbihub2RlKSB7XG4gICAgICBub2RlLnggPSAobm9kZS54IC0gcm9vdC54KSAqIGR4O1xuICAgICAgbm9kZS55ID0gKHJvb3QueSAtIG5vZGUueSkgKiBkeTtcbiAgICB9IDogZnVuY3Rpb24obm9kZSkge1xuICAgICAgbm9kZS54ID0gKG5vZGUueCAtIHgwKSAvICh4MSAtIHgwKSAqIGR4O1xuICAgICAgbm9kZS55ID0gKDEgLSAocm9vdC55ID8gbm9kZS55IC8gcm9vdC55IDogMSkpICogZHk7XG4gICAgfSk7XG4gIH1cblxuICBjbHVzdGVyLnNlcGFyYXRpb24gPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2VwYXJhdGlvbiA9IHgsIGNsdXN0ZXIpIDogc2VwYXJhdGlvbjtcbiAgfTtcblxuICBjbHVzdGVyLnNpemUgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobm9kZVNpemUgPSBmYWxzZSwgZHggPSAreFswXSwgZHkgPSAreFsxXSwgY2x1c3RlcikgOiAobm9kZVNpemUgPyBudWxsIDogW2R4LCBkeV0pO1xuICB9O1xuXG4gIGNsdXN0ZXIubm9kZVNpemUgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobm9kZVNpemUgPSB0cnVlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCBjbHVzdGVyKSA6IChub2RlU2l6ZSA/IFtkeCwgZHldIDogbnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIGNsdXN0ZXI7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY29uc3RhbnRaZXJvKCkge1xuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXTtcbiAgd2hpbGUgKG5vZGUgPSBub2RlLnBhcmVudCkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZnVuY3Rpb24gY291bnQobm9kZSkge1xuICB2YXIgc3VtID0gMCxcbiAgICAgIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbixcbiAgICAgIGkgPSBjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGg7XG4gIGlmICghaSkgc3VtID0gMTtcbiAgZWxzZSB3aGlsZSAoLS1pID49IDApIHN1bSArPSBjaGlsZHJlbltpXS52YWx1ZTtcbiAgbm9kZS52YWx1ZSA9IHN1bTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2hBZnRlcihjb3VudCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzID0gW107XG4gIHRoaXMuZWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgbm9kZXMucHVzaChub2RlKTtcbiAgfSk7XG4gIHJldHVybiBub2Rlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBub2RlID0gdGhpcywgY3VycmVudCwgbmV4dCA9IFtub2RlXSwgY2hpbGRyZW4sIGksIG47XG4gIGRvIHtcbiAgICBjdXJyZW50ID0gbmV4dC5yZXZlcnNlKCksIG5leHQgPSBbXTtcbiAgICB3aGlsZSAobm9kZSA9IGN1cnJlbnQucG9wKCkpIHtcbiAgICAgIGNhbGxiYWNrKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICBpZiAoY2hpbGRyZW4pIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbmV4dC5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKG5leHQubGVuZ3RoKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdLCBuZXh0ID0gW10sIGNoaWxkcmVuLCBpLCBuO1xuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgbmV4dC5wdXNoKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2Rlcy5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKG5vZGUgPSBuZXh0LnBvcCgpKSB7XG4gICAgY2FsbGJhY2sobm9kZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdLCBjaGlsZHJlbiwgaTtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IG5vZGVfY291bnQgZnJvbSBcIi4vY291bnRcIjtcbmltcG9ydCBub2RlX2VhY2ggZnJvbSBcIi4vZWFjaFwiO1xuaW1wb3J0IG5vZGVfZWFjaEJlZm9yZSBmcm9tIFwiLi9lYWNoQmVmb3JlXCI7XG5pbXBvcnQgbm9kZV9lYWNoQWZ0ZXIgZnJvbSBcIi4vZWFjaEFmdGVyXCI7XG5pbXBvcnQgbm9kZV9zdW0gZnJvbSBcIi4vc3VtXCI7XG5pbXBvcnQgbm9kZV9zb3J0IGZyb20gXCIuL3NvcnRcIjtcbmltcG9ydCBub2RlX3BhdGggZnJvbSBcIi4vcGF0aFwiO1xuaW1wb3J0IG5vZGVfYW5jZXN0b3JzIGZyb20gXCIuL2FuY2VzdG9yc1wiO1xuaW1wb3J0IG5vZGVfZGVzY2VuZGFudHMgZnJvbSBcIi4vZGVzY2VuZGFudHNcIjtcbmltcG9ydCBub2RlX2xlYXZlcyBmcm9tIFwiLi9sZWF2ZXNcIjtcbmltcG9ydCBub2RlX2xpbmtzIGZyb20gXCIuL2xpbmtzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhpZXJhcmNoeShkYXRhLCBjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IG5ldyBOb2RlKGRhdGEpLFxuICAgICAgdmFsdWVkID0gK2RhdGEudmFsdWUgJiYgKHJvb3QudmFsdWUgPSBkYXRhLnZhbHVlKSxcbiAgICAgIG5vZGUsXG4gICAgICBub2RlcyA9IFtyb290XSxcbiAgICAgIGNoaWxkLFxuICAgICAgY2hpbGRzLFxuICAgICAgaSxcbiAgICAgIG47XG5cbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIGNoaWxkcmVuID0gZGVmYXVsdENoaWxkcmVuO1xuXG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBpZiAodmFsdWVkKSBub2RlLnZhbHVlID0gK25vZGUuZGF0YS52YWx1ZTtcbiAgICBpZiAoKGNoaWxkcyA9IGNoaWxkcmVuKG5vZGUuZGF0YSkpICYmIChuID0gY2hpbGRzLmxlbmd0aCkpIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBuZXcgQXJyYXkobik7XG4gICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV0gPSBuZXcgTm9kZShjaGlsZHNbaV0pKTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gbm9kZTtcbiAgICAgICAgY2hpbGQuZGVwdGggPSBub2RlLmRlcHRoICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdC5lYWNoQmVmb3JlKGNvbXB1dGVIZWlnaHQpO1xufVxuXG5mdW5jdGlvbiBub2RlX2NvcHkoKSB7XG4gIHJldHVybiBoaWVyYXJjaHkodGhpcykuZWFjaEJlZm9yZShjb3B5RGF0YSk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDaGlsZHJlbihkKSB7XG4gIHJldHVybiBkLmNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjb3B5RGF0YShub2RlKSB7XG4gIG5vZGUuZGF0YSA9IG5vZGUuZGF0YS5kYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUhlaWdodChub2RlKSB7XG4gIHZhciBoZWlnaHQgPSAwO1xuICBkbyBub2RlLmhlaWdodCA9IGhlaWdodDtcbiAgd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnQpICYmIChub2RlLmhlaWdodCA8ICsraGVpZ2h0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBOb2RlKGRhdGEpIHtcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5kZXB0aCA9XG4gIHRoaXMuaGVpZ2h0ID0gMDtcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xufVxuXG5Ob2RlLnByb3RvdHlwZSA9IGhpZXJhcmNoeS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBOb2RlLFxuICBjb3VudDogbm9kZV9jb3VudCxcbiAgZWFjaDogbm9kZV9lYWNoLFxuICBlYWNoQWZ0ZXI6IG5vZGVfZWFjaEFmdGVyLFxuICBlYWNoQmVmb3JlOiBub2RlX2VhY2hCZWZvcmUsXG4gIHN1bTogbm9kZV9zdW0sXG4gIHNvcnQ6IG5vZGVfc29ydCxcbiAgcGF0aDogbm9kZV9wYXRoLFxuICBhbmNlc3RvcnM6IG5vZGVfYW5jZXN0b3JzLFxuICBkZXNjZW5kYW50czogbm9kZV9kZXNjZW5kYW50cyxcbiAgbGVhdmVzOiBub2RlX2xlYXZlcyxcbiAgbGlua3M6IG5vZGVfbGlua3MsXG4gIGNvcHk6IG5vZGVfY29weVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbGVhdmVzID0gW107XG4gIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XG4gICAgICBsZWF2ZXMucHVzaChub2RlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGVhdmVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciByb290ID0gdGhpcywgbGlua3MgPSBbXTtcbiAgcm9vdC5lYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZSAhPT0gcm9vdCkgeyAvLyBEb27igJl0IGluY2x1ZGUgdGhlIHJvb3TigJlzIHBhcmVudCwgaWYgYW55LlxuICAgICAgbGlua3MucHVzaCh7c291cmNlOiBub2RlLnBhcmVudCwgdGFyZ2V0OiBub2RlfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxpbmtzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZW5kKSB7XG4gIHZhciBzdGFydCA9IHRoaXMsXG4gICAgICBhbmNlc3RvciA9IGxlYXN0Q29tbW9uQW5jZXN0b3Ioc3RhcnQsIGVuZCksXG4gICAgICBub2RlcyA9IFtzdGFydF07XG4gIHdoaWxlIChzdGFydCAhPT0gYW5jZXN0b3IpIHtcbiAgICBzdGFydCA9IHN0YXJ0LnBhcmVudDtcbiAgICBub2Rlcy5wdXNoKHN0YXJ0KTtcbiAgfVxuICB2YXIgayA9IG5vZGVzLmxlbmd0aDtcbiAgd2hpbGUgKGVuZCAhPT0gYW5jZXN0b3IpIHtcbiAgICBub2Rlcy5zcGxpY2UoaywgMCwgZW5kKTtcbiAgICBlbmQgPSBlbmQucGFyZW50O1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cblxuZnVuY3Rpb24gbGVhc3RDb21tb25BbmNlc3RvcihhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gYTtcbiAgdmFyIGFOb2RlcyA9IGEuYW5jZXN0b3JzKCksXG4gICAgICBiTm9kZXMgPSBiLmFuY2VzdG9ycygpLFxuICAgICAgYyA9IG51bGw7XG4gIGEgPSBhTm9kZXMucG9wKCk7XG4gIGIgPSBiTm9kZXMucG9wKCk7XG4gIHdoaWxlIChhID09PSBiKSB7XG4gICAgYyA9IGE7XG4gICAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgICBiID0gYk5vZGVzLnBvcCgpO1xuICB9XG4gIHJldHVybiBjO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KGNvbXBhcmUpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBzdW0gPSArdmFsdWUobm9kZS5kYXRhKSB8fCAwLFxuICAgICAgICBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4sXG4gICAgICAgIGkgPSBjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGg7XG4gICAgd2hpbGUgKC0taSA+PSAwKSBzdW0gKz0gY2hpbGRyZW5baV0udmFsdWU7XG4gICAgbm9kZS52YWx1ZSA9IHN1bTtcbiAgfSk7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgY2x1c3Rlcn0gZnJvbSBcIi4vY2x1c3RlclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGhpZXJhcmNoeX0gZnJvbSBcIi4vaGllcmFyY2h5L2luZGV4XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja30gZnJvbSBcIi4vcGFjay9pbmRleFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhY2tTaWJsaW5nc30gZnJvbSBcIi4vcGFjay9zaWJsaW5nc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhY2tFbmNsb3NlfSBmcm9tIFwiLi9wYWNrL2VuY2xvc2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYXJ0aXRpb259IGZyb20gXCIuL3BhcnRpdGlvblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0cmF0aWZ5fSBmcm9tIFwiLi9zdHJhdGlmeVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWV9IGZyb20gXCIuL3RyZWVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwfSBmcm9tIFwiLi90cmVlbWFwL2luZGV4XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZW1hcEJpbmFyeX0gZnJvbSBcIi4vdHJlZW1hcC9iaW5hcnlcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwRGljZX0gZnJvbSBcIi4vdHJlZW1hcC9kaWNlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZW1hcFNsaWNlfSBmcm9tIFwiLi90cmVlbWFwL3NsaWNlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZW1hcFNsaWNlRGljZX0gZnJvbSBcIi4vdHJlZW1hcC9zbGljZURpY2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU3F1YXJpZnl9IGZyb20gXCIuL3RyZWVtYXAvc3F1YXJpZnlcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwUmVzcXVhcmlmeX0gZnJvbSBcIi4vdHJlZW1hcC9yZXNxdWFyaWZ5XCI7XG4iLCJpbXBvcnQge3NodWZmbGUsIHNsaWNlfSBmcm9tIFwiLi4vYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2lyY2xlcykge1xuICB2YXIgaSA9IDAsIG4gPSAoY2lyY2xlcyA9IHNodWZmbGUoc2xpY2UuY2FsbChjaXJjbGVzKSkpLmxlbmd0aCwgQiA9IFtdLCBwLCBlO1xuXG4gIHdoaWxlIChpIDwgbikge1xuICAgIHAgPSBjaXJjbGVzW2ldO1xuICAgIGlmIChlICYmIGVuY2xvc2VzV2VhayhlLCBwKSkgKytpO1xuICAgIGVsc2UgZSA9IGVuY2xvc2VCYXNpcyhCID0gZXh0ZW5kQmFzaXMoQiwgcCkpLCBpID0gMDtcbiAgfVxuXG4gIHJldHVybiBlO1xufVxuXG5mdW5jdGlvbiBleHRlbmRCYXNpcyhCLCBwKSB7XG4gIHZhciBpLCBqO1xuXG4gIGlmIChlbmNsb3Nlc1dlYWtBbGwocCwgQikpIHJldHVybiBbcF07XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhlbiBCIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZWxlbWVudC5cbiAgZm9yIChpID0gMDsgaSA8IEIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoZW5jbG9zZXNOb3QocCwgQltpXSlcbiAgICAgICAgJiYgZW5jbG9zZXNXZWFrQWxsKGVuY2xvc2VCYXNpczIoQltpXSwgcCksIEIpKSB7XG4gICAgICByZXR1cm4gW0JbaV0sIHBdO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGdldCBoZXJlIHRoZW4gQiBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIGVsZW1lbnRzLlxuICBmb3IgKGkgPSAwOyBpIDwgQi5sZW5ndGggLSAxOyArK2kpIHtcbiAgICBmb3IgKGogPSBpICsgMTsgaiA8IEIubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChlbmNsb3Nlc05vdChlbmNsb3NlQmFzaXMyKEJbaV0sIEJbal0pLCBwKVxuICAgICAgICAgICYmIGVuY2xvc2VzTm90KGVuY2xvc2VCYXNpczIoQltpXSwgcCksIEJbal0pXG4gICAgICAgICAgJiYgZW5jbG9zZXNOb3QoZW5jbG9zZUJhc2lzMihCW2pdLCBwKSwgQltpXSlcbiAgICAgICAgICAmJiBlbmNsb3Nlc1dlYWtBbGwoZW5jbG9zZUJhc2lzMyhCW2ldLCBCW2pdLCBwKSwgQikpIHtcbiAgICAgICAgcmV0dXJuIFtCW2ldLCBCW2pdLCBwXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB3ZSBnZXQgaGVyZSB0aGVuIHNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nLlxuICB0aHJvdyBuZXcgRXJyb3I7XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VzTm90KGEsIGIpIHtcbiAgdmFyIGRyID0gYS5yIC0gYi5yLCBkeCA9IGIueCAtIGEueCwgZHkgPSBiLnkgLSBhLnk7XG4gIHJldHVybiBkciA8IDAgfHwgZHIgKiBkciA8IGR4ICogZHggKyBkeSAqIGR5O1xufVxuXG5mdW5jdGlvbiBlbmNsb3Nlc1dlYWsoYSwgYikge1xuICB2YXIgZHIgPSBhLnIgLSBiLnIgKyAxZS02LCBkeCA9IGIueCAtIGEueCwgZHkgPSBiLnkgLSBhLnk7XG4gIHJldHVybiBkciA+IDAgJiYgZHIgKiBkciA+IGR4ICogZHggKyBkeSAqIGR5O1xufVxuXG5mdW5jdGlvbiBlbmNsb3Nlc1dlYWtBbGwoYSwgQikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IEIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWVuY2xvc2VzV2VhayhhLCBCW2ldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzKEIpIHtcbiAgc3dpdGNoIChCLmxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGVuY2xvc2VCYXNpczEoQlswXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZW5jbG9zZUJhc2lzMihCWzBdLCBCWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBlbmNsb3NlQmFzaXMzKEJbMF0sIEJbMV0sIEJbMl0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VCYXNpczEoYSkge1xuICByZXR1cm4ge1xuICAgIHg6IGEueCxcbiAgICB5OiBhLnksXG4gICAgcjogYS5yXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VCYXNpczIoYSwgYikge1xuICB2YXIgeDEgPSBhLngsIHkxID0gYS55LCByMSA9IGEucixcbiAgICAgIHgyID0gYi54LCB5MiA9IGIueSwgcjIgPSBiLnIsXG4gICAgICB4MjEgPSB4MiAtIHgxLCB5MjEgPSB5MiAtIHkxLCByMjEgPSByMiAtIHIxLFxuICAgICAgbCA9IE1hdGguc3FydCh4MjEgKiB4MjEgKyB5MjEgKiB5MjEpO1xuICByZXR1cm4ge1xuICAgIHg6ICh4MSArIHgyICsgeDIxIC8gbCAqIHIyMSkgLyAyLFxuICAgIHk6ICh5MSArIHkyICsgeTIxIC8gbCAqIHIyMSkgLyAyLFxuICAgIHI6IChsICsgcjEgKyByMikgLyAyXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VCYXNpczMoYSwgYiwgYykge1xuICB2YXIgeDEgPSBhLngsIHkxID0gYS55LCByMSA9IGEucixcbiAgICAgIHgyID0gYi54LCB5MiA9IGIueSwgcjIgPSBiLnIsXG4gICAgICB4MyA9IGMueCwgeTMgPSBjLnksIHIzID0gYy5yLFxuICAgICAgYTIgPSB4MSAtIHgyLFxuICAgICAgYTMgPSB4MSAtIHgzLFxuICAgICAgYjIgPSB5MSAtIHkyLFxuICAgICAgYjMgPSB5MSAtIHkzLFxuICAgICAgYzIgPSByMiAtIHIxLFxuICAgICAgYzMgPSByMyAtIHIxLFxuICAgICAgZDEgPSB4MSAqIHgxICsgeTEgKiB5MSAtIHIxICogcjEsXG4gICAgICBkMiA9IGQxIC0geDIgKiB4MiAtIHkyICogeTIgKyByMiAqIHIyLFxuICAgICAgZDMgPSBkMSAtIHgzICogeDMgLSB5MyAqIHkzICsgcjMgKiByMyxcbiAgICAgIGFiID0gYTMgKiBiMiAtIGEyICogYjMsXG4gICAgICB4YSA9IChiMiAqIGQzIC0gYjMgKiBkMikgLyAoYWIgKiAyKSAtIHgxLFxuICAgICAgeGIgPSAoYjMgKiBjMiAtIGIyICogYzMpIC8gYWIsXG4gICAgICB5YSA9IChhMyAqIGQyIC0gYTIgKiBkMykgLyAoYWIgKiAyKSAtIHkxLFxuICAgICAgeWIgPSAoYTIgKiBjMyAtIGEzICogYzIpIC8gYWIsXG4gICAgICBBID0geGIgKiB4YiArIHliICogeWIgLSAxLFxuICAgICAgQiA9IDIgKiAocjEgKyB4YSAqIHhiICsgeWEgKiB5YiksXG4gICAgICBDID0geGEgKiB4YSArIHlhICogeWEgLSByMSAqIHIxLFxuICAgICAgciA9IC0oQSA/IChCICsgTWF0aC5zcXJ0KEIgKiBCIC0gNCAqIEEgKiBDKSkgLyAoMiAqIEEpIDogQyAvIEIpO1xuICByZXR1cm4ge1xuICAgIHg6IHgxICsgeGEgKyB4YiAqIHIsXG4gICAgeTogeTEgKyB5YSArIHliICogcixcbiAgICByOiByXG4gIH07XG59XG4iLCJpbXBvcnQge3BhY2tFbmNsb3NlfSBmcm9tIFwiLi9zaWJsaW5nc1wiO1xuaW1wb3J0IHtvcHRpb25hbH0gZnJvbSBcIi4uL2FjY2Vzc29yc1wiO1xuaW1wb3J0IGNvbnN0YW50LCB7Y29uc3RhbnRaZXJvfSBmcm9tIFwiLi4vY29uc3RhbnRcIjtcblxuZnVuY3Rpb24gZGVmYXVsdFJhZGl1cyhkKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoZC52YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgcmFkaXVzID0gbnVsbCxcbiAgICAgIGR4ID0gMSxcbiAgICAgIGR5ID0gMSxcbiAgICAgIHBhZGRpbmcgPSBjb25zdGFudFplcm87XG5cbiAgZnVuY3Rpb24gcGFjayhyb290KSB7XG4gICAgcm9vdC54ID0gZHggLyAyLCByb290LnkgPSBkeSAvIDI7XG4gICAgaWYgKHJhZGl1cykge1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKHJhZGl1c0xlYWYocmFkaXVzKSlcbiAgICAgICAgICAuZWFjaEFmdGVyKHBhY2tDaGlsZHJlbihwYWRkaW5nLCAwLjUpKVxuICAgICAgICAgIC5lYWNoQmVmb3JlKHRyYW5zbGF0ZUNoaWxkKDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKHJhZGl1c0xlYWYoZGVmYXVsdFJhZGl1cykpXG4gICAgICAgICAgLmVhY2hBZnRlcihwYWNrQ2hpbGRyZW4oY29uc3RhbnRaZXJvLCAxKSlcbiAgICAgICAgICAuZWFjaEFmdGVyKHBhY2tDaGlsZHJlbihwYWRkaW5nLCByb290LnIgLyBNYXRoLm1pbihkeCwgZHkpKSlcbiAgICAgICAgICAuZWFjaEJlZm9yZSh0cmFuc2xhdGVDaGlsZChNYXRoLm1pbihkeCwgZHkpIC8gKDIgKiByb290LnIpKSk7XG4gICAgfVxuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgcGFjay5yYWRpdXMgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFkaXVzID0gb3B0aW9uYWwoeCksIHBhY2spIDogcmFkaXVzO1xuICB9O1xuXG4gIHBhY2suc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCBwYWNrKSA6IFtkeCwgZHldO1xuICB9O1xuXG4gIHBhY2sucGFkZGluZyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiBjb25zdGFudCgreCksIHBhY2spIDogcGFkZGluZztcbiAgfTtcblxuICByZXR1cm4gcGFjaztcbn1cblxuZnVuY3Rpb24gcmFkaXVzTGVhZihyYWRpdXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuciA9IE1hdGgubWF4KDAsICtyYWRpdXMobm9kZSkgfHwgMCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYWNrQ2hpbGRyZW4ocGFkZGluZywgaykge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHZhciBjaGlsZHJlbixcbiAgICAgICAgICBpLFxuICAgICAgICAgIG4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgICAgciA9IHBhZGRpbmcobm9kZSkgKiBrIHx8IDAsXG4gICAgICAgICAgZTtcblxuICAgICAgaWYgKHIpIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNoaWxkcmVuW2ldLnIgKz0gcjtcbiAgICAgIGUgPSBwYWNrRW5jbG9zZShjaGlsZHJlbik7XG4gICAgICBpZiAocikgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY2hpbGRyZW5baV0uciAtPSByO1xuICAgICAgbm9kZS5yID0gZSArIHI7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVDaGlsZChrKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuICAgIG5vZGUuciAqPSBrO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIG5vZGUueCA9IHBhcmVudC54ICsgayAqIG5vZGUueDtcbiAgICAgIG5vZGUueSA9IHBhcmVudC55ICsgayAqIG5vZGUueTtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgZW5jbG9zZSBmcm9tIFwiLi9lbmNsb3NlXCI7XG5cbmZ1bmN0aW9uIHBsYWNlKGIsIGEsIGMpIHtcbiAgdmFyIGR4ID0gYi54IC0gYS54LCB4LCBhMixcbiAgICAgIGR5ID0gYi55IC0gYS55LCB5LCBiMixcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gIGlmIChkMikge1xuICAgIGEyID0gYS5yICsgYy5yLCBhMiAqPSBhMjtcbiAgICBiMiA9IGIuciArIGMuciwgYjIgKj0gYjI7XG4gICAgaWYgKGEyID4gYjIpIHtcbiAgICAgIHggPSAoZDIgKyBiMiAtIGEyKSAvICgyICogZDIpO1xuICAgICAgeSA9IE1hdGguc3FydChNYXRoLm1heCgwLCBiMiAvIGQyIC0geCAqIHgpKTtcbiAgICAgIGMueCA9IGIueCAtIHggKiBkeCAtIHkgKiBkeTtcbiAgICAgIGMueSA9IGIueSAtIHggKiBkeSArIHkgKiBkeDtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IChkMiArIGEyIC0gYjIpIC8gKDIgKiBkMik7XG4gICAgICB5ID0gTWF0aC5zcXJ0KE1hdGgubWF4KDAsIGEyIC8gZDIgLSB4ICogeCkpO1xuICAgICAgYy54ID0gYS54ICsgeCAqIGR4IC0geSAqIGR5O1xuICAgICAgYy55ID0gYS55ICsgeCAqIGR5ICsgeSAqIGR4O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjLnggPSBhLnggKyBjLnI7XG4gICAgYy55ID0gYS55O1xuICB9XG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdHMoYSwgYikge1xuICB2YXIgZHIgPSBhLnIgKyBiLnIgLSAxZS02LCBkeCA9IGIueCAtIGEueCwgZHkgPSBiLnkgLSBhLnk7XG4gIHJldHVybiBkciA+IDAgJiYgZHIgKiBkciA+IGR4ICogZHggKyBkeSAqIGR5O1xufVxuXG5mdW5jdGlvbiBzY29yZShub2RlKSB7XG4gIHZhciBhID0gbm9kZS5fLFxuICAgICAgYiA9IG5vZGUubmV4dC5fLFxuICAgICAgYWIgPSBhLnIgKyBiLnIsXG4gICAgICBkeCA9IChhLnggKiBiLnIgKyBiLnggKiBhLnIpIC8gYWIsXG4gICAgICBkeSA9IChhLnkgKiBiLnIgKyBiLnkgKiBhLnIpIC8gYWI7XG4gIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cblxuZnVuY3Rpb24gTm9kZShjaXJjbGUpIHtcbiAgdGhpcy5fID0gY2lyY2xlO1xuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLnByZXZpb3VzID0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tFbmNsb3NlKGNpcmNsZXMpIHtcbiAgaWYgKCEobiA9IGNpcmNsZXMubGVuZ3RoKSkgcmV0dXJuIDA7XG5cbiAgdmFyIGEsIGIsIGMsIG4sIGFhLCBjYSwgaSwgaiwgaywgc2osIHNrO1xuXG4gIC8vIFBsYWNlIHRoZSBmaXJzdCBjaXJjbGUuXG4gIGEgPSBjaXJjbGVzWzBdLCBhLnggPSAwLCBhLnkgPSAwO1xuICBpZiAoIShuID4gMSkpIHJldHVybiBhLnI7XG5cbiAgLy8gUGxhY2UgdGhlIHNlY29uZCBjaXJjbGUuXG4gIGIgPSBjaXJjbGVzWzFdLCBhLnggPSAtYi5yLCBiLnggPSBhLnIsIGIueSA9IDA7XG4gIGlmICghKG4gPiAyKSkgcmV0dXJuIGEuciArIGIucjtcblxuICAvLyBQbGFjZSB0aGUgdGhpcmQgY2lyY2xlLlxuICBwbGFjZShiLCBhLCBjID0gY2lyY2xlc1syXSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJvbnQtY2hhaW4gdXNpbmcgdGhlIGZpcnN0IHRocmVlIGNpcmNsZXMgYSwgYiBhbmQgYy5cbiAgYSA9IG5ldyBOb2RlKGEpLCBiID0gbmV3IE5vZGUoYiksIGMgPSBuZXcgTm9kZShjKTtcbiAgYS5uZXh0ID0gYy5wcmV2aW91cyA9IGI7XG4gIGIubmV4dCA9IGEucHJldmlvdXMgPSBjO1xuICBjLm5leHQgPSBiLnByZXZpb3VzID0gYTtcblxuICAvLyBBdHRlbXB0IHRvIHBsYWNlIGVhY2ggcmVtYWluaW5nIGNpcmNsZeKAplxuICBwYWNrOiBmb3IgKGkgPSAzOyBpIDwgbjsgKytpKSB7XG4gICAgcGxhY2UoYS5fLCBiLl8sIGMgPSBjaXJjbGVzW2ldKSwgYyA9IG5ldyBOb2RlKGMpO1xuXG4gICAgLy8gRmluZCB0aGUgY2xvc2VzdCBpbnRlcnNlY3RpbmcgY2lyY2xlIG9uIHRoZSBmcm9udC1jaGFpbiwgaWYgYW55LlxuICAgIC8vIOKAnENsb3NlbmVzc+KAnSBpcyBkZXRlcm1pbmVkIGJ5IGxpbmVhciBkaXN0YW5jZSBhbG9uZyB0aGUgZnJvbnQtY2hhaW4uXG4gICAgLy8g4oCcQWhlYWTigJ0gb3Ig4oCcYmVoaW5k4oCdIGlzIGxpa2V3aXNlIGRldGVybWluZWQgYnkgbGluZWFyIGRpc3RhbmNlLlxuICAgIGogPSBiLm5leHQsIGsgPSBhLnByZXZpb3VzLCBzaiA9IGIuXy5yLCBzayA9IGEuXy5yO1xuICAgIGRvIHtcbiAgICAgIGlmIChzaiA8PSBzaykge1xuICAgICAgICBpZiAoaW50ZXJzZWN0cyhqLl8sIGMuXykpIHtcbiAgICAgICAgICBiID0gaiwgYS5uZXh0ID0gYiwgYi5wcmV2aW91cyA9IGEsIC0taTtcbiAgICAgICAgICBjb250aW51ZSBwYWNrO1xuICAgICAgICB9XG4gICAgICAgIHNqICs9IGouXy5yLCBqID0gai5uZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGludGVyc2VjdHMoay5fLCBjLl8pKSB7XG4gICAgICAgICAgYSA9IGssIGEubmV4dCA9IGIsIGIucHJldmlvdXMgPSBhLCAtLWk7XG4gICAgICAgICAgY29udGludWUgcGFjaztcbiAgICAgICAgfVxuICAgICAgICBzayArPSBrLl8uciwgayA9IGsucHJldmlvdXM7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoaiAhPT0gay5uZXh0KTtcblxuICAgIC8vIFN1Y2Nlc3MhIEluc2VydCB0aGUgbmV3IGNpcmNsZSBjIGJldHdlZW4gYSBhbmQgYi5cbiAgICBjLnByZXZpb3VzID0gYSwgYy5uZXh0ID0gYiwgYS5uZXh0ID0gYi5wcmV2aW91cyA9IGIgPSBjO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgbmV3IGNsb3Nlc3QgY2lyY2xlIHBhaXIgdG8gdGhlIGNlbnRyb2lkLlxuICAgIGFhID0gc2NvcmUoYSk7XG4gICAgd2hpbGUgKChjID0gYy5uZXh0KSAhPT0gYikge1xuICAgICAgaWYgKChjYSA9IHNjb3JlKGMpKSA8IGFhKSB7XG4gICAgICAgIGEgPSBjLCBhYSA9IGNhO1xuICAgICAgfVxuICAgIH1cbiAgICBiID0gYS5uZXh0O1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgZW5jbG9zaW5nIGNpcmNsZSBvZiB0aGUgZnJvbnQgY2hhaW4uXG4gIGEgPSBbYi5fXSwgYyA9IGI7IHdoaWxlICgoYyA9IGMubmV4dCkgIT09IGIpIGEucHVzaChjLl8pOyBjID0gZW5jbG9zZShhKTtcblxuICAvLyBUcmFuc2xhdGUgdGhlIGNpcmNsZXMgdG8gcHV0IHRoZSBlbmNsb3NpbmcgY2lyY2xlIGFyb3VuZCB0aGUgb3JpZ2luLlxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBhID0gY2lyY2xlc1tpXSwgYS54IC09IGMueCwgYS55IC09IGMueTtcblxuICByZXR1cm4gYy5yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjaXJjbGVzKSB7XG4gIHBhY2tFbmNsb3NlKGNpcmNsZXMpO1xuICByZXR1cm4gY2lyY2xlcztcbn1cbiIsImltcG9ydCByb3VuZE5vZGUgZnJvbSBcIi4vdHJlZW1hcC9yb3VuZFwiO1xuaW1wb3J0IHRyZWVtYXBEaWNlIGZyb20gXCIuL3RyZWVtYXAvZGljZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGR4ID0gMSxcbiAgICAgIGR5ID0gMSxcbiAgICAgIHBhZGRpbmcgPSAwLFxuICAgICAgcm91bmQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBwYXJ0aXRpb24ocm9vdCkge1xuICAgIHZhciBuID0gcm9vdC5oZWlnaHQgKyAxO1xuICAgIHJvb3QueDAgPVxuICAgIHJvb3QueTAgPSBwYWRkaW5nO1xuICAgIHJvb3QueDEgPSBkeDtcbiAgICByb290LnkxID0gZHkgLyBuO1xuICAgIHJvb3QuZWFjaEJlZm9yZShwb3NpdGlvbk5vZGUoZHksIG4pKTtcbiAgICBpZiAocm91bmQpIHJvb3QuZWFjaEJlZm9yZShyb3VuZE5vZGUpO1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgZnVuY3Rpb24gcG9zaXRpb25Ob2RlKGR5LCBuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRyZWVtYXBEaWNlKG5vZGUsIG5vZGUueDAsIGR5ICogKG5vZGUuZGVwdGggKyAxKSAvIG4sIG5vZGUueDEsIGR5ICogKG5vZGUuZGVwdGggKyAyKSAvIG4pO1xuICAgICAgfVxuICAgICAgdmFyIHgwID0gbm9kZS54MCxcbiAgICAgICAgICB5MCA9IG5vZGUueTAsXG4gICAgICAgICAgeDEgPSBub2RlLngxIC0gcGFkZGluZyxcbiAgICAgICAgICB5MSA9IG5vZGUueTEgLSBwYWRkaW5nO1xuICAgICAgaWYgKHgxIDwgeDApIHgwID0geDEgPSAoeDAgKyB4MSkgLyAyO1xuICAgICAgaWYgKHkxIDwgeTApIHkwID0geTEgPSAoeTAgKyB5MSkgLyAyO1xuICAgICAgbm9kZS54MCA9IHgwO1xuICAgICAgbm9kZS55MCA9IHkwO1xuICAgICAgbm9kZS54MSA9IHgxO1xuICAgICAgbm9kZS55MSA9IHkxO1xuICAgIH07XG4gIH1cblxuICBwYXJ0aXRpb24ucm91bmQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIXgsIHBhcnRpdGlvbikgOiByb3VuZDtcbiAgfTtcblxuICBwYXJ0aXRpb24uc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCBwYXJ0aXRpb24pIDogW2R4LCBkeV07XG4gIH07XG5cbiAgcGFydGl0aW9uLnBhZGRpbmcgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZyA9ICt4LCBwYXJ0aXRpb24pIDogcGFkZGluZztcbiAgfTtcblxuICByZXR1cm4gcGFydGl0aW9uO1xufVxuIiwiaW1wb3J0IHtyZXF1aXJlZH0gZnJvbSBcIi4vYWNjZXNzb3JzXCI7XG5pbXBvcnQge05vZGUsIGNvbXB1dGVIZWlnaHR9IGZyb20gXCIuL2hpZXJhcmNoeS9pbmRleFwiO1xuXG52YXIga2V5UHJlZml4ID0gXCIkXCIsIC8vIFByb3RlY3QgYWdhaW5zdCBrZXlzIGxpa2Ug4oCcX19wcm90b19f4oCdLlxuICAgIHByZXJvb3QgPSB7ZGVwdGg6IC0xfSxcbiAgICBhbWJpZ3VvdXMgPSB7fTtcblxuZnVuY3Rpb24gZGVmYXVsdElkKGQpIHtcbiAgcmV0dXJuIGQuaWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQYXJlbnRJZChkKSB7XG4gIHJldHVybiBkLnBhcmVudElkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGlkID0gZGVmYXVsdElkLFxuICAgICAgcGFyZW50SWQgPSBkZWZhdWx0UGFyZW50SWQ7XG5cbiAgZnVuY3Rpb24gc3RyYXRpZnkoZGF0YSkge1xuICAgIHZhciBkLFxuICAgICAgICBpLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbm9kZXMgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIG5vZGVJZCxcbiAgICAgICAgbm9kZUtleSxcbiAgICAgICAgbm9kZUJ5S2V5ID0ge307XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBkID0gZGF0YVtpXSwgbm9kZSA9IG5vZGVzW2ldID0gbmV3IE5vZGUoZCk7XG4gICAgICBpZiAoKG5vZGVJZCA9IGlkKGQsIGksIGRhdGEpKSAhPSBudWxsICYmIChub2RlSWQgKz0gXCJcIikpIHtcbiAgICAgICAgbm9kZUtleSA9IGtleVByZWZpeCArIChub2RlLmlkID0gbm9kZUlkKTtcbiAgICAgICAgbm9kZUJ5S2V5W25vZGVLZXldID0gbm9kZUtleSBpbiBub2RlQnlLZXkgPyBhbWJpZ3VvdXMgOiBub2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZUlkID0gcGFyZW50SWQoZGF0YVtpXSwgaSwgZGF0YSk7XG4gICAgICBpZiAobm9kZUlkID09IG51bGwgfHwgIShub2RlSWQgKz0gXCJcIikpIHtcbiAgICAgICAgaWYgKHJvb3QpIHRocm93IG5ldyBFcnJvcihcIm11bHRpcGxlIHJvb3RzXCIpO1xuICAgICAgICByb290ID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudCA9IG5vZGVCeUtleVtrZXlQcmVmaXggKyBub2RlSWRdO1xuICAgICAgICBpZiAoIXBhcmVudCkgdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIgKyBub2RlSWQpO1xuICAgICAgICBpZiAocGFyZW50ID09PSBhbWJpZ3VvdXMpIHRocm93IG5ldyBFcnJvcihcImFtYmlndW91czogXCIgKyBub2RlSWQpO1xuICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgICAgZWxzZSBwYXJlbnQuY2hpbGRyZW4gPSBbbm9kZV07XG4gICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcm9vdCkgdGhyb3cgbmV3IEVycm9yKFwibm8gcm9vdFwiKTtcbiAgICByb290LnBhcmVudCA9IHByZXJvb3Q7XG4gICAgcm9vdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5kZXB0aCA9IG5vZGUucGFyZW50LmRlcHRoICsgMTsgLS1uOyB9KS5lYWNoQmVmb3JlKGNvbXB1dGVIZWlnaHQpO1xuICAgIHJvb3QucGFyZW50ID0gbnVsbDtcbiAgICBpZiAobiA+IDApIHRocm93IG5ldyBFcnJvcihcImN5Y2xlXCIpO1xuXG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBzdHJhdGlmeS5pZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpZCA9IHJlcXVpcmVkKHgpLCBzdHJhdGlmeSkgOiBpZDtcbiAgfTtcblxuICBzdHJhdGlmeS5wYXJlbnRJZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYXJlbnRJZCA9IHJlcXVpcmVkKHgpLCBzdHJhdGlmeSkgOiBwYXJlbnRJZDtcbiAgfTtcblxuICByZXR1cm4gc3RyYXRpZnk7XG59XG4iLCJpbXBvcnQge05vZGV9IGZyb20gXCIuL2hpZXJhcmNoeS9pbmRleFwiO1xuXG5mdW5jdGlvbiBkZWZhdWx0U2VwYXJhdGlvbihhLCBiKSB7XG4gIHJldHVybiBhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMjtcbn1cblxuLy8gZnVuY3Rpb24gcmFkaWFsU2VwYXJhdGlvbihhLCBiKSB7XG4vLyAgIHJldHVybiAoYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMSA6IDIpIC8gYS5kZXB0aDtcbi8vIH1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBsZWZ0IGNvbnRvdXIgb2YgYSBzdWJ0cmVlIChvclxuLy8gc3ViZm9yZXN0KS4gSXQgcmV0dXJucyB0aGUgc3VjY2Vzc29yIG9mIHYgb24gdGhpcyBjb250b3VyLiBUaGlzIHN1Y2Nlc3NvciBpc1xuLy8gZWl0aGVyIGdpdmVuIGJ5IHRoZSBsZWZ0bW9zdCBjaGlsZCBvZiB2IG9yIGJ5IHRoZSB0aHJlYWQgb2Ygdi4gVGhlIGZ1bmN0aW9uXG4vLyByZXR1cm5zIG51bGwgaWYgYW5kIG9ubHkgaWYgdiBpcyBvbiB0aGUgaGlnaGVzdCBsZXZlbCBvZiBpdHMgc3VidHJlZS5cbmZ1bmN0aW9uIG5leHRMZWZ0KHYpIHtcbiAgdmFyIGNoaWxkcmVuID0gdi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNoaWxkcmVuID8gY2hpbGRyZW5bMF0gOiB2LnQ7XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gd29ya3MgYW5hbG9nb3VzbHkgdG8gbmV4dExlZnQuXG5mdW5jdGlvbiBuZXh0UmlnaHQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSA6IHYudDtcbn1cblxuLy8gU2hpZnRzIHRoZSBjdXJyZW50IHN1YnRyZWUgcm9vdGVkIGF0IHcrLiBUaGlzIGlzIGRvbmUgYnkgaW5jcmVhc2luZ1xuLy8gcHJlbGltKHcrKSBhbmQgbW9kKHcrKSBieSBzaGlmdC5cbmZ1bmN0aW9uIG1vdmVTdWJ0cmVlKHdtLCB3cCwgc2hpZnQpIHtcbiAgdmFyIGNoYW5nZSA9IHNoaWZ0IC8gKHdwLmkgLSB3bS5pKTtcbiAgd3AuYyAtPSBjaGFuZ2U7XG4gIHdwLnMgKz0gc2hpZnQ7XG4gIHdtLmMgKz0gY2hhbmdlO1xuICB3cC56ICs9IHNoaWZ0O1xuICB3cC5tICs9IHNoaWZ0O1xufVxuXG4vLyBBbGwgb3RoZXIgc2hpZnRzLCBhcHBsaWVkIHRvIHRoZSBzbWFsbGVyIHN1YnRyZWVzIGJldHdlZW4gdy0gYW5kIHcrLCBhcmVcbi8vIHBlcmZvcm1lZCBieSB0aGlzIGZ1bmN0aW9uLiBUbyBwcmVwYXJlIHRoZSBzaGlmdHMsIHdlIGhhdmUgdG8gYWRqdXN0XG4vLyBjaGFuZ2UodyspLCBzaGlmdCh3KyksIGFuZCBjaGFuZ2Uody0pLlxuZnVuY3Rpb24gZXhlY3V0ZVNoaWZ0cyh2KSB7XG4gIHZhciBzaGlmdCA9IDAsXG4gICAgICBjaGFuZ2UgPSAwLFxuICAgICAgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgIHc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIHcgPSBjaGlsZHJlbltpXTtcbiAgICB3LnogKz0gc2hpZnQ7XG4gICAgdy5tICs9IHNoaWZ0O1xuICAgIHNoaWZ0ICs9IHcucyArIChjaGFuZ2UgKz0gdy5jKTtcbiAgfVxufVxuXG4vLyBJZiB2aS3igJlzIGFuY2VzdG9yIGlzIGEgc2libGluZyBvZiB2LCByZXR1cm5zIHZpLeKAmXMgYW5jZXN0b3IuIE90aGVyd2lzZSxcbi8vIHJldHVybnMgdGhlIHNwZWNpZmllZCAoZGVmYXVsdCkgYW5jZXN0b3IuXG5mdW5jdGlvbiBuZXh0QW5jZXN0b3IodmltLCB2LCBhbmNlc3Rvcikge1xuICByZXR1cm4gdmltLmEucGFyZW50ID09PSB2LnBhcmVudCA/IHZpbS5hIDogYW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIFRyZWVOb2RlKG5vZGUsIGkpIHtcbiAgdGhpcy5fID0gbm9kZTtcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5BID0gbnVsbDsgLy8gZGVmYXVsdCBhbmNlc3RvclxuICB0aGlzLmEgPSB0aGlzOyAvLyBhbmNlc3RvclxuICB0aGlzLnogPSAwOyAvLyBwcmVsaW1cbiAgdGhpcy5tID0gMDsgLy8gbW9kXG4gIHRoaXMuYyA9IDA7IC8vIGNoYW5nZVxuICB0aGlzLnMgPSAwOyAvLyBzaGlmdFxuICB0aGlzLnQgPSBudWxsOyAvLyB0aHJlYWRcbiAgdGhpcy5pID0gaTsgLy8gbnVtYmVyXG59XG5cblRyZWVOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpO1xuXG5mdW5jdGlvbiB0cmVlUm9vdChyb290KSB7XG4gIHZhciB0cmVlID0gbmV3IFRyZWVOb2RlKHJvb3QsIDApLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVzID0gW3RyZWVdLFxuICAgICAgY2hpbGQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBpZiAoY2hpbGRyZW4gPSBub2RlLl8uY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBuZXcgQXJyYXkobiA9IGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV0gPSBuZXcgVHJlZU5vZGUoY2hpbGRyZW5baV0sIGkpKTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAodHJlZS5wYXJlbnQgPSBuZXcgVHJlZU5vZGUobnVsbCwgMCkpLmNoaWxkcmVuID0gW3RyZWVdO1xuICByZXR1cm4gdHJlZTtcbn1cblxuLy8gTm9kZS1saW5rIHRyZWUgZGlhZ3JhbSB1c2luZyB0aGUgUmVpbmdvbGQtVGlsZm9yZCBcInRpZHlcIiBhbGdvcml0aG1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VwYXJhdGlvbiA9IGRlZmF1bHRTZXBhcmF0aW9uLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgbm9kZVNpemUgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRyZWUocm9vdCkge1xuICAgIHZhciB0ID0gdHJlZVJvb3Qocm9vdCk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBsYXlvdXQgdXNpbmcgQnVjaGhlaW0gZXQgYWwu4oCZcyBhbGdvcml0aG0uXG4gICAgdC5lYWNoQWZ0ZXIoZmlyc3RXYWxrKSwgdC5wYXJlbnQubSA9IC10Lno7XG4gICAgdC5lYWNoQmVmb3JlKHNlY29uZFdhbGspO1xuXG4gICAgLy8gSWYgYSBmaXhlZCBub2RlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5LlxuICAgIGlmIChub2RlU2l6ZSkgcm9vdC5lYWNoQmVmb3JlKHNpemVOb2RlKTtcblxuICAgIC8vIElmIGEgZml4ZWQgdHJlZSBzaXplIGlzIHNwZWNpZmllZCwgc2NhbGUgeCBhbmQgeSBiYXNlZCBvbiB0aGUgZXh0ZW50LlxuICAgIC8vIENvbXB1dGUgdGhlIGxlZnQtbW9zdCwgcmlnaHQtbW9zdCwgYW5kIGRlcHRoLW1vc3Qgbm9kZXMgZm9yIGV4dGVudHMuXG4gICAgZWxzZSB7XG4gICAgICB2YXIgbGVmdCA9IHJvb3QsXG4gICAgICAgICAgcmlnaHQgPSByb290LFxuICAgICAgICAgIGJvdHRvbSA9IHJvb3Q7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS54IDwgbGVmdC54KSBsZWZ0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUueCA+IHJpZ2h0LngpIHJpZ2h0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUuZGVwdGggPiBib3R0b20uZGVwdGgpIGJvdHRvbSA9IG5vZGU7XG4gICAgICB9KTtcbiAgICAgIHZhciBzID0gbGVmdCA9PT0gcmlnaHQgPyAxIDogc2VwYXJhdGlvbihsZWZ0LCByaWdodCkgLyAyLFxuICAgICAgICAgIHR4ID0gcyAtIGxlZnQueCxcbiAgICAgICAgICBreCA9IGR4IC8gKHJpZ2h0LnggKyBzICsgdHgpLFxuICAgICAgICAgIGt5ID0gZHkgLyAoYm90dG9tLmRlcHRoIHx8IDEpO1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgbm9kZS54ID0gKG5vZGUueCArIHR4KSAqIGt4O1xuICAgICAgICBub2RlLnkgPSBub2RlLmRlcHRoICoga3k7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGEgcHJlbGltaW5hcnkgeC1jb29yZGluYXRlIGZvciB2LiBCZWZvcmUgdGhhdCwgRklSU1QgV0FMSyBpc1xuICAvLyBhcHBsaWVkIHJlY3Vyc2l2ZWx5IHRvIHRoZSBjaGlsZHJlbiBvZiB2LCBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvblxuICAvLyBBUFBPUlRJT04uIEFmdGVyIHNwYWNpbmcgb3V0IHRoZSBjaGlsZHJlbiBieSBjYWxsaW5nIEVYRUNVVEUgU0hJRlRTLCB0aGVcbiAgLy8gbm9kZSB2IGlzIHBsYWNlZCB0byB0aGUgbWlkcG9pbnQgb2YgaXRzIG91dGVybW9zdCBjaGlsZHJlbi5cbiAgZnVuY3Rpb24gZmlyc3RXYWxrKHYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgICBzaWJsaW5ncyA9IHYucGFyZW50LmNoaWxkcmVuLFxuICAgICAgICB3ID0gdi5pID8gc2libGluZ3Nbdi5pIC0gMV0gOiBudWxsO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgZXhlY3V0ZVNoaWZ0cyh2KTtcbiAgICAgIHZhciBtaWRwb2ludCA9IChjaGlsZHJlblswXS56ICsgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0ueikgLyAyO1xuICAgICAgaWYgKHcpIHtcbiAgICAgICAgdi56ID0gdy56ICsgc2VwYXJhdGlvbih2Ll8sIHcuXyk7XG4gICAgICAgIHYubSA9IHYueiAtIG1pZHBvaW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdi56ID0gbWlkcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3KSB7XG4gICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICB9XG4gICAgdi5wYXJlbnQuQSA9IGFwcG9ydGlvbih2LCB3LCB2LnBhcmVudC5BIHx8IHNpYmxpbmdzWzBdKTtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGFsbCByZWFsIHgtY29vcmRpbmF0ZXMgYnkgc3VtbWluZyB1cCB0aGUgbW9kaWZpZXJzIHJlY3Vyc2l2ZWx5LlxuICBmdW5jdGlvbiBzZWNvbmRXYWxrKHYpIHtcbiAgICB2Ll8ueCA9IHYueiArIHYucGFyZW50Lm07XG4gICAgdi5tICs9IHYucGFyZW50Lm07XG4gIH1cblxuICAvLyBUaGUgY29yZSBvZiB0aGUgYWxnb3JpdGhtLiBIZXJlLCBhIG5ldyBzdWJ0cmVlIGlzIGNvbWJpbmVkIHdpdGggdGhlXG4gIC8vIHByZXZpb3VzIHN1YnRyZWVzLiBUaHJlYWRzIGFyZSB1c2VkIHRvIHRyYXZlcnNlIHRoZSBpbnNpZGUgYW5kIG91dHNpZGVcbiAgLy8gY29udG91cnMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWUgdXAgdG8gdGhlIGhpZ2hlc3QgY29tbW9uIGxldmVsLiBUaGVcbiAgLy8gdmVydGljZXMgdXNlZCBmb3IgdGhlIHRyYXZlcnNhbHMgYXJlIHZpKywgdmktLCB2by0sIGFuZCB2byssIHdoZXJlIHRoZVxuICAvLyBzdXBlcnNjcmlwdCBvIG1lYW5zIG91dHNpZGUgYW5kIGkgbWVhbnMgaW5zaWRlLCB0aGUgc3Vic2NyaXB0IC0gbWVhbnMgbGVmdFxuICAvLyBzdWJ0cmVlIGFuZCArIG1lYW5zIHJpZ2h0IHN1YnRyZWUuIEZvciBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgYWxvbmcgdGhlXG4gIC8vIGNvbnRvdXIsIHdlIHVzZSByZXNwZWN0aXZlIHZhcmlhYmxlcyBzaSssIHNpLSwgc28tLCBhbmQgc28rLiBXaGVuZXZlciB0d29cbiAgLy8gbm9kZXMgb2YgdGhlIGluc2lkZSBjb250b3VycyBjb25mbGljdCwgd2UgY29tcHV0ZSB0aGUgbGVmdCBvbmUgb2YgdGhlXG4gIC8vIGdyZWF0ZXN0IHVuY29tbW9uIGFuY2VzdG9ycyB1c2luZyB0aGUgZnVuY3Rpb24gQU5DRVNUT1IgYW5kIGNhbGwgTU9WRVxuICAvLyBTVUJUUkVFIHRvIHNoaWZ0IHRoZSBzdWJ0cmVlIGFuZCBwcmVwYXJlIHRoZSBzaGlmdHMgb2Ygc21hbGxlciBzdWJ0cmVlcy5cbiAgLy8gRmluYWxseSwgd2UgYWRkIGEgbmV3IHRocmVhZCAoaWYgbmVjZXNzYXJ5KS5cbiAgZnVuY3Rpb24gYXBwb3J0aW9uKHYsIHcsIGFuY2VzdG9yKSB7XG4gICAgaWYgKHcpIHtcbiAgICAgIHZhciB2aXAgPSB2LFxuICAgICAgICAgIHZvcCA9IHYsXG4gICAgICAgICAgdmltID0gdyxcbiAgICAgICAgICB2b20gPSB2aXAucGFyZW50LmNoaWxkcmVuWzBdLFxuICAgICAgICAgIHNpcCA9IHZpcC5tLFxuICAgICAgICAgIHNvcCA9IHZvcC5tLFxuICAgICAgICAgIHNpbSA9IHZpbS5tLFxuICAgICAgICAgIHNvbSA9IHZvbS5tLFxuICAgICAgICAgIHNoaWZ0O1xuICAgICAgd2hpbGUgKHZpbSA9IG5leHRSaWdodCh2aW0pLCB2aXAgPSBuZXh0TGVmdCh2aXApLCB2aW0gJiYgdmlwKSB7XG4gICAgICAgIHZvbSA9IG5leHRMZWZ0KHZvbSk7XG4gICAgICAgIHZvcCA9IG5leHRSaWdodCh2b3ApO1xuICAgICAgICB2b3AuYSA9IHY7XG4gICAgICAgIHNoaWZ0ID0gdmltLnogKyBzaW0gLSB2aXAueiAtIHNpcCArIHNlcGFyYXRpb24odmltLl8sIHZpcC5fKTtcbiAgICAgICAgaWYgKHNoaWZ0ID4gMCkge1xuICAgICAgICAgIG1vdmVTdWJ0cmVlKG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSwgdiwgc2hpZnQpO1xuICAgICAgICAgIHNpcCArPSBzaGlmdDtcbiAgICAgICAgICBzb3AgKz0gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgICAgc2ltICs9IHZpbS5tO1xuICAgICAgICBzaXAgKz0gdmlwLm07XG4gICAgICAgIHNvbSArPSB2b20ubTtcbiAgICAgICAgc29wICs9IHZvcC5tO1xuICAgICAgfVxuICAgICAgaWYgKHZpbSAmJiAhbmV4dFJpZ2h0KHZvcCkpIHtcbiAgICAgICAgdm9wLnQgPSB2aW07XG4gICAgICAgIHZvcC5tICs9IHNpbSAtIHNvcDtcbiAgICAgIH1cbiAgICAgIGlmICh2aXAgJiYgIW5leHRMZWZ0KHZvbSkpIHtcbiAgICAgICAgdm9tLnQgPSB2aXA7XG4gICAgICAgIHZvbS5tICs9IHNpcCAtIHNvbTtcbiAgICAgICAgYW5jZXN0b3IgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3I7XG4gIH1cblxuICBmdW5jdGlvbiBzaXplTm9kZShub2RlKSB7XG4gICAgbm9kZS54ICo9IGR4O1xuICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBkeTtcbiAgfVxuXG4gIHRyZWUuc2VwYXJhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzZXBhcmF0aW9uID0geCwgdHJlZSkgOiBzZXBhcmF0aW9uO1xuICB9O1xuXG4gIHRyZWUuc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IGZhbHNlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCB0cmVlKSA6IChub2RlU2l6ZSA/IG51bGwgOiBbZHgsIGR5XSk7XG4gIH07XG5cbiAgdHJlZS5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IHRydWUsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gW2R4LCBkeV0gOiBudWxsKTtcbiAgfTtcblxuICByZXR1cm4gdHJlZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIG5vZGVzID0gcGFyZW50LmNoaWxkcmVuLFxuICAgICAgaSwgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgIHN1bSwgc3VtcyA9IG5ldyBBcnJheShuICsgMSk7XG5cbiAgZm9yIChzdW1zWzBdID0gc3VtID0gaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBzdW1zW2kgKyAxXSA9IHN1bSArPSBub2Rlc1tpXS52YWx1ZTtcbiAgfVxuXG4gIHBhcnRpdGlvbigwLCBuLCBwYXJlbnQudmFsdWUsIHgwLCB5MCwgeDEsIHkxKTtcblxuICBmdW5jdGlvbiBwYXJ0aXRpb24oaSwgaiwgdmFsdWUsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgaWYgKGkgPj0gaiAtIDEpIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICBub2RlLngwID0geDAsIG5vZGUueTAgPSB5MDtcbiAgICAgIG5vZGUueDEgPSB4MSwgbm9kZS55MSA9IHkxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZU9mZnNldCA9IHN1bXNbaV0sXG4gICAgICAgIHZhbHVlVGFyZ2V0ID0gKHZhbHVlIC8gMikgKyB2YWx1ZU9mZnNldCxcbiAgICAgICAgayA9IGkgKyAxLFxuICAgICAgICBoaSA9IGogLSAxO1xuXG4gICAgd2hpbGUgKGsgPCBoaSkge1xuICAgICAgdmFyIG1pZCA9IGsgKyBoaSA+Pj4gMTtcbiAgICAgIGlmIChzdW1zW21pZF0gPCB2YWx1ZVRhcmdldCkgayA9IG1pZCArIDE7XG4gICAgICBlbHNlIGhpID0gbWlkO1xuICAgIH1cblxuICAgIGlmICgodmFsdWVUYXJnZXQgLSBzdW1zW2sgLSAxXSkgPCAoc3Vtc1trXSAtIHZhbHVlVGFyZ2V0KSAmJiBpICsgMSA8IGspIC0taztcblxuICAgIHZhciB2YWx1ZUxlZnQgPSBzdW1zW2tdIC0gdmFsdWVPZmZzZXQsXG4gICAgICAgIHZhbHVlUmlnaHQgPSB2YWx1ZSAtIHZhbHVlTGVmdDtcblxuICAgIGlmICgoeDEgLSB4MCkgPiAoeTEgLSB5MCkpIHtcbiAgICAgIHZhciB4ayA9ICh4MCAqIHZhbHVlUmlnaHQgKyB4MSAqIHZhbHVlTGVmdCkgLyB2YWx1ZTtcbiAgICAgIHBhcnRpdGlvbihpLCBrLCB2YWx1ZUxlZnQsIHgwLCB5MCwgeGssIHkxKTtcbiAgICAgIHBhcnRpdGlvbihrLCBqLCB2YWx1ZVJpZ2h0LCB4aywgeTAsIHgxLCB5MSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB5ayA9ICh5MCAqIHZhbHVlUmlnaHQgKyB5MSAqIHZhbHVlTGVmdCkgLyB2YWx1ZTtcbiAgICAgIHBhcnRpdGlvbihpLCBrLCB2YWx1ZUxlZnQsIHgwLCB5MCwgeDEsIHlrKTtcbiAgICAgIHBhcnRpdGlvbihrLCBqLCB2YWx1ZVJpZ2h0LCB4MCwgeWssIHgxLCB5MSk7XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBub2RlcyA9IHBhcmVudC5jaGlsZHJlbixcbiAgICAgIG5vZGUsXG4gICAgICBpID0gLTEsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgayA9IHBhcmVudC52YWx1ZSAmJiAoeDEgLSB4MCkgLyBwYXJlbnQudmFsdWU7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueTAgPSB5MCwgbm9kZS55MSA9IHkxO1xuICAgIG5vZGUueDAgPSB4MCwgbm9kZS54MSA9IHgwICs9IG5vZGUudmFsdWUgKiBrO1xuICB9XG59XG4iLCJpbXBvcnQgcm91bmROb2RlIGZyb20gXCIuL3JvdW5kXCI7XG5pbXBvcnQgc3F1YXJpZnkgZnJvbSBcIi4vc3F1YXJpZnlcIjtcbmltcG9ydCB7cmVxdWlyZWR9IGZyb20gXCIuLi9hY2Nlc3NvcnNcIjtcbmltcG9ydCBjb25zdGFudCwge2NvbnN0YW50WmVyb30gZnJvbSBcIi4uL2NvbnN0YW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdGlsZSA9IHNxdWFyaWZ5LFxuICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgIGR4ID0gMSxcbiAgICAgIGR5ID0gMSxcbiAgICAgIHBhZGRpbmdTdGFjayA9IFswXSxcbiAgICAgIHBhZGRpbmdJbm5lciA9IGNvbnN0YW50WmVybyxcbiAgICAgIHBhZGRpbmdUb3AgPSBjb25zdGFudFplcm8sXG4gICAgICBwYWRkaW5nUmlnaHQgPSBjb25zdGFudFplcm8sXG4gICAgICBwYWRkaW5nQm90dG9tID0gY29uc3RhbnRaZXJvLFxuICAgICAgcGFkZGluZ0xlZnQgPSBjb25zdGFudFplcm87XG5cbiAgZnVuY3Rpb24gdHJlZW1hcChyb290KSB7XG4gICAgcm9vdC54MCA9XG4gICAgcm9vdC55MCA9IDA7XG4gICAgcm9vdC54MSA9IGR4O1xuICAgIHJvb3QueTEgPSBkeTtcbiAgICByb290LmVhY2hCZWZvcmUocG9zaXRpb25Ob2RlKTtcbiAgICBwYWRkaW5nU3RhY2sgPSBbMF07XG4gICAgaWYgKHJvdW5kKSByb290LmVhY2hCZWZvcmUocm91bmROb2RlKTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvc2l0aW9uTm9kZShub2RlKSB7XG4gICAgdmFyIHAgPSBwYWRkaW5nU3RhY2tbbm9kZS5kZXB0aF0sXG4gICAgICAgIHgwID0gbm9kZS54MCArIHAsXG4gICAgICAgIHkwID0gbm9kZS55MCArIHAsXG4gICAgICAgIHgxID0gbm9kZS54MSAtIHAsXG4gICAgICAgIHkxID0gbm9kZS55MSAtIHA7XG4gICAgaWYgKHgxIDwgeDApIHgwID0geDEgPSAoeDAgKyB4MSkgLyAyO1xuICAgIGlmICh5MSA8IHkwKSB5MCA9IHkxID0gKHkwICsgeTEpIC8gMjtcbiAgICBub2RlLngwID0geDA7XG4gICAgbm9kZS55MCA9IHkwO1xuICAgIG5vZGUueDEgPSB4MTtcbiAgICBub2RlLnkxID0geTE7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHAgPSBwYWRkaW5nU3RhY2tbbm9kZS5kZXB0aCArIDFdID0gcGFkZGluZ0lubmVyKG5vZGUpIC8gMjtcbiAgICAgIHgwICs9IHBhZGRpbmdMZWZ0KG5vZGUpIC0gcDtcbiAgICAgIHkwICs9IHBhZGRpbmdUb3Aobm9kZSkgLSBwO1xuICAgICAgeDEgLT0gcGFkZGluZ1JpZ2h0KG5vZGUpIC0gcDtcbiAgICAgIHkxIC09IHBhZGRpbmdCb3R0b20obm9kZSkgLSBwO1xuICAgICAgaWYgKHgxIDwgeDApIHgwID0geDEgPSAoeDAgKyB4MSkgLyAyO1xuICAgICAgaWYgKHkxIDwgeTApIHkwID0geTEgPSAoeTAgKyB5MSkgLyAyO1xuICAgICAgdGlsZShub2RlLCB4MCwgeTAsIHgxLCB5MSk7XG4gICAgfVxuICB9XG5cbiAgdHJlZW1hcC5yb3VuZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyb3VuZCA9ICEheCwgdHJlZW1hcCkgOiByb3VuZDtcbiAgfTtcblxuICB0cmVlbWFwLnNpemUgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZHggPSAreFswXSwgZHkgPSAreFsxXSwgdHJlZW1hcCkgOiBbZHgsIGR5XTtcbiAgfTtcblxuICB0cmVlbWFwLnRpbGUgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlsZSA9IHJlcXVpcmVkKHgpLCB0cmVlbWFwKSA6IHRpbGU7XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdHJlZW1hcC5wYWRkaW5nSW5uZXIoeCkucGFkZGluZ091dGVyKHgpIDogdHJlZW1hcC5wYWRkaW5nSW5uZXIoKTtcbiAgfTtcblxuICB0cmVlbWFwLnBhZGRpbmdJbm5lciA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6IGNvbnN0YW50KCt4KSwgdHJlZW1hcCkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0cmVlbWFwLnBhZGRpbmdUb3AoeCkucGFkZGluZ1JpZ2h0KHgpLnBhZGRpbmdCb3R0b20oeCkucGFkZGluZ0xlZnQoeCkgOiB0cmVlbWFwLnBhZGRpbmdUb3AoKTtcbiAgfTtcblxuICB0cmVlbWFwLnBhZGRpbmdUb3AgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ1RvcCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCB0cmVlbWFwKSA6IHBhZGRpbmdUb3A7XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nUmlnaHQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ1JpZ2h0ID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiBjb25zdGFudCgreCksIHRyZWVtYXApIDogcGFkZGluZ1JpZ2h0O1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZ0JvdHRvbSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nQm90dG9tID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiBjb25zdGFudCgreCksIHRyZWVtYXApIDogcGFkZGluZ0JvdHRvbTtcbiAgfTtcblxuICB0cmVlbWFwLnBhZGRpbmdMZWZ0ID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdMZWZ0ID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiBjb25zdGFudCgreCksIHRyZWVtYXApIDogcGFkZGluZ0xlZnQ7XG4gIH07XG5cbiAgcmV0dXJuIHRyZWVtYXA7XG59XG4iLCJpbXBvcnQgdHJlZW1hcERpY2UgZnJvbSBcIi4vZGljZVwiO1xuaW1wb3J0IHRyZWVtYXBTbGljZSBmcm9tIFwiLi9zbGljZVwiO1xuaW1wb3J0IHtwaGksIHNxdWFyaWZ5UmF0aW99IGZyb20gXCIuL3NxdWFyaWZ5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20ocmF0aW8pIHtcblxuICBmdW5jdGlvbiByZXNxdWFyaWZ5KHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgICBpZiAoKHJvd3MgPSBwYXJlbnQuX3NxdWFyaWZ5KSAmJiAocm93cy5yYXRpbyA9PT0gcmF0aW8pKSB7XG4gICAgICB2YXIgcm93cyxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgbm9kZXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBqID0gLTEsXG4gICAgICAgICAgbixcbiAgICAgICAgICBtID0gcm93cy5sZW5ndGgsXG4gICAgICAgICAgdmFsdWUgPSBwYXJlbnQudmFsdWU7XG5cbiAgICAgIHdoaWxlICgrK2ogPCBtKSB7XG4gICAgICAgIHJvdyA9IHJvd3Nbal0sIG5vZGVzID0gcm93LmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGkgPSByb3cudmFsdWUgPSAwLCBuID0gbm9kZXMubGVuZ3RoOyBpIDwgbjsgKytpKSByb3cudmFsdWUgKz0gbm9kZXNbaV0udmFsdWU7XG4gICAgICAgIGlmIChyb3cuZGljZSkgdHJlZW1hcERpY2Uocm93LCB4MCwgeTAsIHgxLCB5MCArPSAoeTEgLSB5MCkgKiByb3cudmFsdWUgLyB2YWx1ZSk7XG4gICAgICAgIGVsc2UgdHJlZW1hcFNsaWNlKHJvdywgeDAsIHkwLCB4MCArPSAoeDEgLSB4MCkgKiByb3cudmFsdWUgLyB2YWx1ZSwgeTEpO1xuICAgICAgICB2YWx1ZSAtPSByb3cudmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudC5fc3F1YXJpZnkgPSByb3dzID0gc3F1YXJpZnlSYXRpbyhyYXRpbywgcGFyZW50LCB4MCwgeTAsIHgxLCB5MSk7XG4gICAgICByb3dzLnJhdGlvID0gcmF0aW87XG4gICAgfVxuICB9XG5cbiAgcmVzcXVhcmlmeS5yYXRpbyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gY3VzdG9tKCh4ID0gK3gpID4gMSA/IHggOiAxKTtcbiAgfTtcblxuICByZXR1cm4gcmVzcXVhcmlmeTtcbn0pKHBoaSk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIG5vZGUueDAgPSBNYXRoLnJvdW5kKG5vZGUueDApO1xuICBub2RlLnkwID0gTWF0aC5yb3VuZChub2RlLnkwKTtcbiAgbm9kZS54MSA9IE1hdGgucm91bmQobm9kZS54MSk7XG4gIG5vZGUueTEgPSBNYXRoLnJvdW5kKG5vZGUueTEpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICBub2RlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgIGsgPSBwYXJlbnQudmFsdWUgJiYgKHkxIC0geTApIC8gcGFyZW50LnZhbHVlO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLngwID0geDAsIG5vZGUueDEgPSB4MTtcbiAgICBub2RlLnkwID0geTAsIG5vZGUueTEgPSB5MCArPSBub2RlLnZhbHVlICogaztcbiAgfVxufVxuIiwiaW1wb3J0IGRpY2UgZnJvbSBcIi4vZGljZVwiO1xuaW1wb3J0IHNsaWNlIGZyb20gXCIuL3NsaWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgKHBhcmVudC5kZXB0aCAmIDEgPyBzbGljZSA6IGRpY2UpKHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpO1xufVxuIiwiaW1wb3J0IHRyZWVtYXBEaWNlIGZyb20gXCIuL2RpY2VcIjtcbmltcG9ydCB0cmVlbWFwU2xpY2UgZnJvbSBcIi4vc2xpY2VcIjtcblxuZXhwb3J0IHZhciBwaGkgPSAoMSArIE1hdGguc3FydCg1KSkgLyAyO1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJpZnlSYXRpbyhyYXRpbywgcGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgcm93cyA9IFtdLFxuICAgICAgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICByb3csXG4gICAgICBub2RlVmFsdWUsXG4gICAgICBpMCA9IDAsXG4gICAgICBpMSA9IDAsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgZHgsIGR5LFxuICAgICAgdmFsdWUgPSBwYXJlbnQudmFsdWUsXG4gICAgICBzdW1WYWx1ZSxcbiAgICAgIG1pblZhbHVlLFxuICAgICAgbWF4VmFsdWUsXG4gICAgICBuZXdSYXRpbyxcbiAgICAgIG1pblJhdGlvLFxuICAgICAgYWxwaGEsXG4gICAgICBiZXRhO1xuXG4gIHdoaWxlIChpMCA8IG4pIHtcbiAgICBkeCA9IHgxIC0geDAsIGR5ID0geTEgLSB5MDtcblxuICAgIC8vIEZpbmQgdGhlIG5leHQgbm9uLWVtcHR5IG5vZGUuXG4gICAgZG8gc3VtVmFsdWUgPSBub2Rlc1tpMSsrXS52YWx1ZTsgd2hpbGUgKCFzdW1WYWx1ZSAmJiBpMSA8IG4pO1xuICAgIG1pblZhbHVlID0gbWF4VmFsdWUgPSBzdW1WYWx1ZTtcbiAgICBhbHBoYSA9IE1hdGgubWF4KGR5IC8gZHgsIGR4IC8gZHkpIC8gKHZhbHVlICogcmF0aW8pO1xuICAgIGJldGEgPSBzdW1WYWx1ZSAqIHN1bVZhbHVlICogYWxwaGE7XG4gICAgbWluUmF0aW8gPSBNYXRoLm1heChtYXhWYWx1ZSAvIGJldGEsIGJldGEgLyBtaW5WYWx1ZSk7XG5cbiAgICAvLyBLZWVwIGFkZGluZyBub2RlcyB3aGlsZSB0aGUgYXNwZWN0IHJhdGlvIG1haW50YWlucyBvciBpbXByb3Zlcy5cbiAgICBmb3IgKDsgaTEgPCBuOyArK2kxKSB7XG4gICAgICBzdW1WYWx1ZSArPSBub2RlVmFsdWUgPSBub2Rlc1tpMV0udmFsdWU7XG4gICAgICBpZiAobm9kZVZhbHVlIDwgbWluVmFsdWUpIG1pblZhbHVlID0gbm9kZVZhbHVlO1xuICAgICAgaWYgKG5vZGVWYWx1ZSA+IG1heFZhbHVlKSBtYXhWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICAgIGJldGEgPSBzdW1WYWx1ZSAqIHN1bVZhbHVlICogYWxwaGE7XG4gICAgICBuZXdSYXRpbyA9IE1hdGgubWF4KG1heFZhbHVlIC8gYmV0YSwgYmV0YSAvIG1pblZhbHVlKTtcbiAgICAgIGlmIChuZXdSYXRpbyA+IG1pblJhdGlvKSB7IHN1bVZhbHVlIC09IG5vZGVWYWx1ZTsgYnJlYWs7IH1cbiAgICAgIG1pblJhdGlvID0gbmV3UmF0aW87XG4gICAgfVxuXG4gICAgLy8gUG9zaXRpb24gYW5kIHJlY29yZCB0aGUgcm93IG9yaWVudGF0aW9uLlxuICAgIHJvd3MucHVzaChyb3cgPSB7dmFsdWU6IHN1bVZhbHVlLCBkaWNlOiBkeCA8IGR5LCBjaGlsZHJlbjogbm9kZXMuc2xpY2UoaTAsIGkxKX0pO1xuICAgIGlmIChyb3cuZGljZSkgdHJlZW1hcERpY2Uocm93LCB4MCwgeTAsIHgxLCB2YWx1ZSA/IHkwICs9IGR5ICogc3VtVmFsdWUgLyB2YWx1ZSA6IHkxKTtcbiAgICBlbHNlIHRyZWVtYXBTbGljZShyb3csIHgwLCB5MCwgdmFsdWUgPyB4MCArPSBkeCAqIHN1bVZhbHVlIC8gdmFsdWUgOiB4MSwgeTEpO1xuICAgIHZhbHVlIC09IHN1bVZhbHVlLCBpMCA9IGkxO1xuICB9XG5cbiAgcmV0dXJuIHJvd3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20ocmF0aW8pIHtcblxuICBmdW5jdGlvbiBzcXVhcmlmeShwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgc3F1YXJpZnlSYXRpbyhyYXRpbywgcGFyZW50LCB4MCwgeTAsIHgxLCB5MSk7XG4gIH1cblxuICBzcXVhcmlmeS5yYXRpbyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gY3VzdG9tKCh4ID0gK3gpID4gMSA/IHggOiAxKTtcbiAgfTtcblxuICByZXR1cm4gc3F1YXJpZnk7XG59KShwaGkpO1xuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIG5iID0gYiA/IGIubGVuZ3RoIDogMCxcbiAgICAgIG5hID0gYSA/IE1hdGgubWluKG5iLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgeCA9IG5ldyBBcnJheShuYSksXG4gICAgICBjID0gbmV3IEFycmF5KG5iKSxcbiAgICAgIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIHhbaV0gPSB2YWx1ZShhW2ldLCBiW2ldKTtcbiAgZm9yICg7IGkgPCBuYjsgKytpKSBjW2ldID0gYltpXTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSBjW2ldID0geFtpXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJpbXBvcnQge2Jhc2lzfSBmcm9tIFwiLi9iYXNpc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gTWF0aC5mbG9vcigoKHQgJT0gMSkgPCAwID8gKyt0IDogdCkgKiBuKSxcbiAgICAgICAgdjAgPSB2YWx1ZXNbKGkgKyBuIC0gMSkgJSBuXSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaSAlIG5dLFxuICAgICAgICB2MiA9IHZhbHVlc1soaSArIDEpICUgbl0sXG4gICAgICAgIHYzID0gdmFsdWVzWyhpICsgMikgJSBuXTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdhbW1hKHkpIHtcbiAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtjdWJlaGVsaXggYXMgY29sb3JDdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvclwiO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXgoaHVlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gY3ViZWhlbGl4R2FtbWEoeSkge1xuICAgIHkgPSAreTtcblxuICAgIGZ1bmN0aW9uIGN1YmVoZWxpeChzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckN1YmVoZWxpeChzdGFydCkpLmgsIChlbmQgPSBjb2xvckN1YmVoZWxpeChlbmQpKS5oKSxcbiAgICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgICAgc3RhcnQubCA9IGwoTWF0aC5wb3codCwgeSkpO1xuICAgICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3ViZWhlbGl4LmdhbW1hID0gY3ViZWhlbGl4R2FtbWE7XG5cbiAgICByZXR1cm4gY3ViZWhlbGl4O1xuICB9KSgxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3ViZWhlbGl4KGh1ZSk7XG5leHBvcnQgdmFyIGN1YmVoZWxpeExvbmcgPSBjdWJlaGVsaXgoY29sb3IpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgZCA9IG5ldyBEYXRlO1xuICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZC5zZXRUaW1lKGEgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyYW5nZSkge1xuICB2YXIgbiA9IHJhbmdlLmxlbmd0aDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gcmFuZ2VbTWF0aC5tYXgoMCwgTWF0aC5taW4obiAtIDEsIE1hdGguZmxvb3IodCAqIG4pKSldO1xuICB9O1xufVxuIiwiaW1wb3J0IHtoY2wgYXMgY29sb3JIY2x9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvclwiO1xuXG5mdW5jdGlvbiBoY2woaHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgdmFyIGggPSBodWUoKHN0YXJ0ID0gY29sb3JIY2woc3RhcnQpKS5oLCAoZW5kID0gY29sb3JIY2woZW5kKSkuaCksXG4gICAgICAgIGMgPSBjb2xvcihzdGFydC5jLCBlbmQuYyksXG4gICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgc3RhcnQuYyA9IGModCk7XG4gICAgICBzdGFydC5sID0gbCh0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhjbChodWUpO1xuZXhwb3J0IHZhciBoY2xMb25nID0gaGNsKGNvbG9yKTtcbiIsImltcG9ydCB7aHNsIGFzIGNvbG9ySHNsfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBjb2xvciwge2h1ZX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZnVuY3Rpb24gaHNsKGh1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHZhciBoID0gaHVlKChzdGFydCA9IGNvbG9ySHNsKHN0YXJ0KSkuaCwgKGVuZCA9IGNvbG9ySHNsKGVuZCkpLmgpLFxuICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICBsID0gY29sb3Ioc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICBvcGFjaXR5ID0gY29sb3Ioc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgIHN0YXJ0LnMgPSBzKHQpO1xuICAgICAgc3RhcnQubCA9IGwodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBoc2woaHVlKTtcbmV4cG9ydCB2YXIgaHNsTG9uZyA9IGhzbChjb2xvcik7XG4iLCJpbXBvcnQge2h1ZX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgaSA9IGh1ZSgrYSwgK2IpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciB4ID0gaSh0KTtcbiAgICByZXR1cm4geCAtIDM2MCAqIE1hdGguZmxvb3IoeCAvIDM2MCk7XG4gIH07XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGV9IGZyb20gXCIuL3ZhbHVlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVBcnJheX0gZnJvbSBcIi4vYXJyYXlcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJhc2lzfSBmcm9tIFwiLi9iYXNpc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQmFzaXNDbG9zZWR9IGZyb20gXCIuL2Jhc2lzQ2xvc2VkXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVEYXRlfSBmcm9tIFwiLi9kYXRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVEaXNjcmV0ZX0gZnJvbSBcIi4vZGlzY3JldGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUh1ZX0gZnJvbSBcIi4vaHVlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVOdW1iZXJ9IGZyb20gXCIuL251bWJlclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlT2JqZWN0fSBmcm9tIFwiLi9vYmplY3RcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiLi9yb3VuZFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU3RyaW5nfSBmcm9tIFwiLi9zdHJpbmdcIjtcbmV4cG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MsIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnfSBmcm9tIFwiLi90cmFuc2Zvcm0vaW5kZXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVpvb219IGZyb20gXCIuL3pvb21cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJnYiwgcmdiQmFzaXMgYXMgaW50ZXJwb2xhdGVSZ2JCYXNpcywgcmdiQmFzaXNDbG9zZWQgYXMgaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vcmdiXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVIc2wsIGhzbExvbmcgYXMgaW50ZXJwb2xhdGVIc2xMb25nfSBmcm9tIFwiLi9oc2xcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUxhYn0gZnJvbSBcIi4vbGFiXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVIY2wsIGhjbExvbmcgYXMgaW50ZXJwb2xhdGVIY2xMb25nfSBmcm9tIFwiLi9oY2xcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeCwgY3ViZWhlbGl4TG9uZyBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCIuL2N1YmVoZWxpeFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBpZWNld2lzZX0gZnJvbSBcIi4vcGllY2V3aXNlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVhbnRpemV9IGZyb20gXCIuL3F1YW50aXplXCI7XG4iLCJpbXBvcnQge2xhYiBhcyBjb2xvckxhYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IgZnJvbSBcIi4vY29sb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGwgPSBjb2xvcigoc3RhcnQgPSBjb2xvckxhYihzdGFydCkpLmwsIChlbmQgPSBjb2xvckxhYihlbmQpKS5sKSxcbiAgICAgIGEgPSBjb2xvcihzdGFydC5hLCBlbmQuYSksXG4gICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBzdGFydC5sID0gbCh0KTtcbiAgICBzdGFydC5hID0gYSh0KTtcbiAgICBzdGFydC5iID0gYih0KTtcbiAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIGIgKiB0O1xuICB9O1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaWVjZXdpc2UoaW50ZXJwb2xhdGUsIHZhbHVlcykge1xuICB2YXIgaSA9IDAsIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMSwgdiA9IHZhbHVlc1swXSwgSSA9IG5ldyBBcnJheShuIDwgMCA/IDAgOiBuKTtcbiAgd2hpbGUgKGkgPCBuKSBJW2ldID0gaW50ZXJwb2xhdGUodiwgdiA9IHZhbHVlc1srK2ldKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IE1hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKj0gbikpKTtcbiAgICByZXR1cm4gSVtpXSh0IC0gaSk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnRlcnBvbGF0b3IsIG4pIHtcbiAgdmFyIHNhbXBsZXMgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBzYW1wbGVzW2ldID0gaW50ZXJwb2xhdG9yKGkgLyAobiAtIDEpKTtcbiAgcmV0dXJuIHNhbXBsZXM7XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZFwiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSArIGIgKiB0KTtcbiAgfTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbnZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXG4gICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbmZ1bmN0aW9uIHplcm8oYikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uZShiKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGIodCkgKyBcIlwiO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59XG4iLCJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlclwiO1xuaW1wb3J0IHtwYXJzZUNzcywgcGFyc2VTdmd9IGZyb20gXCIuL3BhcnNlXCI7XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlLCBweENvbW1hLCBweFBhcmVuLCBkZWdQYXJlbikge1xuXG4gIGZ1bmN0aW9uIHBvcChzKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID8gcy5wb3AoKSArIFwiIFwiIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChcInRyYW5zbGF0ZShcIiwgbnVsbCwgcHhDb21tYSwgbnVsbCwgcHhQYXJlbik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiIHx8IHliKSB7XG4gICAgICBzLnB1c2goXCJ0cmFuc2xhdGUoXCIgKyB4YiArIHB4Q29tbWEgKyB5YiArIHB4UGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvdGF0ZShhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhIC0gYiA+IDE4MCkgYiArPSAzNjA7IGVsc2UgaWYgKGIgLSBhID4gMTgwKSBhICs9IDM2MDsgLy8gc2hvcnRlc3QgcGF0aFxuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBza2V3WChhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIsIG51bGwsIFwiLFwiLCBudWxsLCBcIilcIik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiICE9PSAxIHx8IHliICE9PSAxKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiArIHhiICsgXCIsXCIgKyB5YiArIFwiKVwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG4gICAgYSA9IHBhcnNlKGEpLCBiID0gcGFyc2UoYik7XG4gICAgdHJhbnNsYXRlKGEudHJhbnNsYXRlWCwgYS50cmFuc2xhdGVZLCBiLnRyYW5zbGF0ZVgsIGIudHJhbnNsYXRlWSwgcywgcSk7XG4gICAgcm90YXRlKGEucm90YXRlLCBiLnJvdGF0ZSwgcywgcSk7XG4gICAgc2tld1goYS5za2V3WCwgYi5za2V3WCwgcywgcSk7XG4gICAgc2NhbGUoYS5zY2FsZVgsIGEuc2NhbGVZLCBiLnNjYWxlWCwgYi5zY2FsZVksIHMsIHEpO1xuICAgIGEgPSBiID0gbnVsbDsgLy8gZ2NcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IHEubGVuZ3RoLCBvO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlU3ZnLCBcIiwgXCIsIFwiKVwiLCBcIilcIik7XG4iLCJpbXBvcnQgZGVjb21wb3NlLCB7aWRlbnRpdHl9IGZyb20gXCIuL2RlY29tcG9zZVwiO1xuXG52YXIgY3NzTm9kZSxcbiAgICBjc3NSb290LFxuICAgIGNzc1ZpZXcsXG4gICAgc3ZnTm9kZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gXCJub25lXCIpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFjc3NOb2RlKSBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKSwgY3NzUm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgY3NzVmlldyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBjc3NOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IHZhbHVlO1xuICB2YWx1ZSA9IGNzc1ZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjc3NSb290LmFwcGVuZENoaWxkKGNzc05vZGUpLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwidHJhbnNmb3JtXCIpO1xuICBjc3NSb290LnJlbW92ZUNoaWxkKGNzc05vZGUpO1xuICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDcsIC0xKS5zcGxpdChcIixcIik7XG4gIHJldHVybiBkZWNvbXBvc2UoK3ZhbHVlWzBdLCArdmFsdWVbMV0sICt2YWx1ZVsyXSwgK3ZhbHVlWzNdLCArdmFsdWVbNF0sICt2YWx1ZVs1XSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYlwiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3RcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgdCA9IHR5cGVvZiBiLCBjO1xuICByZXR1cm4gYiA9PSBudWxsIHx8IHQgPT09IFwiYm9vbGVhblwiID8gY29uc3RhbnQoYilcbiAgICAgIDogKHQgPT09IFwibnVtYmVyXCIgPyBudW1iZXJcbiAgICAgIDogdCA9PT0gXCJzdHJpbmdcIiA/ICgoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgcmdiKSA6IHN0cmluZylcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gcmdiXG4gICAgICA6IGIgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVxuICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gYXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsInZhciByaG8gPSBNYXRoLlNRUlQyLFxuICAgIHJobzIgPSAyLFxuICAgIHJobzQgPSA0LFxuICAgIGVwc2lsb24yID0gMWUtMTI7XG5cbmZ1bmN0aW9uIGNvc2goeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpICsgMSAvIHgpIC8gMjtcbn1cblxuZnVuY3Rpb24gc2luaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgLSAxIC8geCkgLyAyO1xufVxuXG5mdW5jdGlvbiB0YW5oKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKDIgKiB4KSkgLSAxKSAvICh4ICsgMSk7XG59XG5cbi8vIHAwID0gW3V4MCwgdXkwLCB3MF1cbi8vIHAxID0gW3V4MSwgdXkxLCB3MV1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHAwLCBwMSkge1xuICB2YXIgdXgwID0gcDBbMF0sIHV5MCA9IHAwWzFdLCB3MCA9IHAwWzJdLFxuICAgICAgdXgxID0gcDFbMF0sIHV5MSA9IHAxWzFdLCB3MSA9IHAxWzJdLFxuICAgICAgZHggPSB1eDEgLSB1eDAsXG4gICAgICBkeSA9IHV5MSAtIHV5MCxcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICBpLFxuICAgICAgUztcblxuICAvLyBTcGVjaWFsIGNhc2UgZm9yIHUwIOKJhSB1MS5cbiAgaWYgKGQyIDwgZXBzaWxvbjIpIHtcbiAgICBTID0gTWF0aC5sb2codzEgLyB3MCkgLyByaG87XG4gICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHV4MCArIHQgKiBkeCxcbiAgICAgICAgdXkwICsgdCAqIGR5LFxuICAgICAgICB3MCAqIE1hdGguZXhwKHJobyAqIHQgKiBTKVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmFsIGNhc2UuXG4gIGVsc2Uge1xuICAgIHZhciBkMSA9IE1hdGguc3FydChkMiksXG4gICAgICAgIGIwID0gKHcxICogdzEgLSB3MCAqIHcwICsgcmhvNCAqIGQyKSAvICgyICogdzAgKiByaG8yICogZDEpLFxuICAgICAgICBiMSA9ICh3MSAqIHcxIC0gdzAgKiB3MCAtIHJobzQgKiBkMikgLyAoMiAqIHcxICogcmhvMiAqIGQxKSxcbiAgICAgICAgcjAgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjAgKiBiMCArIDEpIC0gYjApLFxuICAgICAgICByMSA9IE1hdGgubG9nKE1hdGguc3FydChiMSAqIGIxICsgMSkgLSBiMSk7XG4gICAgUyA9IChyMSAtIHIwKSAvIHJobztcbiAgICBpID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHMgPSB0ICogUyxcbiAgICAgICAgICBjb3NocjAgPSBjb3NoKHIwKSxcbiAgICAgICAgICB1ID0gdzAgLyAocmhvMiAqIGQxKSAqIChjb3NocjAgKiB0YW5oKHJobyAqIHMgKyByMCkgLSBzaW5oKHIwKSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB1eDAgKyB1ICogZHgsXG4gICAgICAgIHV5MCArIHUgKiBkeSxcbiAgICAgICAgdzAgKiBjb3NocjAgLyBjb3NoKHJobyAqIHMgKyByMClcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgaS5kdXJhdGlvbiA9IFMgKiAxMDAwO1xuXG4gIHJldHVybiBpO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHBhdGh9IGZyb20gXCIuL3BhdGhcIjtcbiIsInZhciBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBQYXRoKCkge1xuICB0aGlzLl94MCA9IHRoaXMuX3kwID0gLy8gc3RhcnQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuXyA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiBuZXcgUGF0aDtcbn1cblxuUGF0aC5wcm90b3R5cGUgPSBwYXRoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFBhdGgsXG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl8gKz0gXCJaXCI7XG4gICAgfVxuICB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgcXVhZHJhdGljQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiUVwiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJDXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICgreDIpICsgXCIsXCIgKyAoK3kyKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGFyY1RvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5Miwgcikge1xuICAgIHgxID0gK3gxLCB5MSA9ICt5MSwgeDIgPSAreDIsIHkyID0gK3kyLCByID0gK3I7XG4gICAgdmFyIHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgxLHkxKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICB2YXIgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuXyArPSBcIkxcIiArICh4MSArIHQwMSAqIHgwMSkgKyBcIixcIiArICh5MSArIHQwMSAqIHkwMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDAsXCIgKyAoKyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApKSArIFwiLFwiICsgKHRoaXMuX3gxID0geDEgKyB0MjEgKiB4MjEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMSk7XG4gICAgfVxuICB9LFxuICBhcmM6IGZ1bmN0aW9uKHgsIHksIHIsIGEwLCBhMSwgY2N3KSB7XG4gICAgeCA9ICt4LCB5ID0gK3ksIHIgPSArcjtcbiAgICB2YXIgZHggPSByICogTWF0aC5jb3MoYTApLFxuICAgICAgICBkeSA9IHIgKiBNYXRoLnNpbihhMCksXG4gICAgICAgIHgwID0geCArIGR4LFxuICAgICAgICB5MCA9IHkgKyBkeSxcbiAgICAgICAgY3cgPSAxIF4gY2N3LFxuICAgICAgICBkYSA9IGNjdyA/IGEwIC0gYTEgOiBhMSAtIGEwO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgwLHkwKSBub3QgY29pbmNpZGVudCB3aXRoIHRoZSBwcmV2aW91cyBwb2ludD8gTGluZSB0byAoeDAseTApLlxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuX3gxIC0geDApID4gZXBzaWxvbiB8fCBNYXRoLmFicyh0aGlzLl95MSAtIHkwKSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBlbXB0eT8gV2XigJlyZSBkb25lLlxuICAgIGlmICghcikgcmV0dXJuO1xuXG4gICAgLy8gRG9lcyB0aGUgYW5nbGUgZ28gdGhlIHdyb25nIHdheT8gRmxpcCB0aGUgZGlyZWN0aW9uLlxuICAgIGlmIChkYSA8IDApIGRhID0gZGEgJSB0YXUgKyB0YXU7XG5cbiAgICAvLyBJcyB0aGlzIGEgY29tcGxldGUgY2lyY2xlPyBEcmF3IHR3byBhcmNzIHRvIGNvbXBsZXRlIHRoZSBjaXJjbGUuXG4gICAgaWYgKGRhID4gdGF1RXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAoeCAtIGR4KSArIFwiLFwiICsgKHkgLSBkeSkgKyBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geDApICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MCk7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgbm9uLWVtcHR5PyBEcmF3IGFuIGFyYyFcbiAgICBlbHNlIGlmIChkYSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLFwiICsgKCsoZGEgPj0gcGkpKSArIFwiLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHggKyByICogTWF0aC5jb3MoYTEpKSArIFwiLFwiICsgKHRoaXMuX3kxID0geSArIHIgKiBNYXRoLnNpbihhMSkpO1xuICAgIH1cbiAgfSxcbiAgcmVjdDogZnVuY3Rpb24oeCwgeSwgdywgaCkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KSArIFwiaFwiICsgKCt3KSArIFwidlwiICsgKCtoKSArIFwiaFwiICsgKC13KSArIFwiWlwiO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcGF0aDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvbHlnb24pIHtcbiAgdmFyIGkgPSAtMSxcbiAgICAgIG4gPSBwb2x5Z29uLmxlbmd0aCxcbiAgICAgIGEsXG4gICAgICBiID0gcG9seWdvbltuIC0gMV0sXG4gICAgICBhcmVhID0gMDtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIGEgPSBiO1xuICAgIGIgPSBwb2x5Z29uW2ldO1xuICAgIGFyZWEgKz0gYVsxXSAqIGJbMF0gLSBhWzBdICogYlsxXTtcbiAgfVxuXG4gIHJldHVybiBhcmVhIC8gMjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvbHlnb24pIHtcbiAgdmFyIGkgPSAtMSxcbiAgICAgIG4gPSBwb2x5Z29uLmxlbmd0aCxcbiAgICAgIHggPSAwLFxuICAgICAgeSA9IDAsXG4gICAgICBhLFxuICAgICAgYiA9IHBvbHlnb25bbiAtIDFdLFxuICAgICAgYyxcbiAgICAgIGsgPSAwO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgYSA9IGI7XG4gICAgYiA9IHBvbHlnb25baV07XG4gICAgayArPSBjID0gYVswXSAqIGJbMV0gLSBiWzBdICogYVsxXTtcbiAgICB4ICs9IChhWzBdICsgYlswXSkgKiBjO1xuICAgIHkgKz0gKGFbMV0gKyBiWzFdKSAqIGM7XG4gIH1cblxuICByZXR1cm4gayAqPSAzLCBbeCAvIGssIHkgLyBrXTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvbHlnb24sIHBvaW50KSB7XG4gIHZhciBuID0gcG9seWdvbi5sZW5ndGgsXG4gICAgICBwID0gcG9seWdvbltuIC0gMV0sXG4gICAgICB4ID0gcG9pbnRbMF0sIHkgPSBwb2ludFsxXSxcbiAgICAgIHgwID0gcFswXSwgeTAgPSBwWzFdLFxuICAgICAgeDEsIHkxLFxuICAgICAgaW5zaWRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBwID0gcG9seWdvbltpXSwgeDEgPSBwWzBdLCB5MSA9IHBbMV07XG4gICAgaWYgKCgoeTEgPiB5KSAhPT0gKHkwID4geSkpICYmICh4IDwgKHgwIC0geDEpICogKHkgLSB5MSkgLyAoeTAgLSB5MSkgKyB4MSkpIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgeDAgPSB4MSwgeTAgPSB5MTtcbiAgfVxuXG4gIHJldHVybiBpbnNpZGU7XG59XG4iLCIvLyBSZXR1cm5zIHRoZSAyRCBjcm9zcyBwcm9kdWN0IG9mIEFCIGFuZCBBQyB2ZWN0b3JzLCBpLmUuLCB0aGUgei1jb21wb25lbnQgb2Zcbi8vIHRoZSAzRCBjcm9zcyBwcm9kdWN0IGluIGEgcXVhZHJhbnQgSSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0gKCt4IGlzXG4vLyByaWdodCwgK3kgaXMgdXApLiBSZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUgaWYgQUJDIGlzIGNvdW50ZXItY2xvY2t3aXNlLFxuLy8gbmVnYXRpdmUgaWYgY2xvY2t3aXNlLCBhbmQgemVybyBpZiB0aGUgcG9pbnRzIGFyZSBjb2xsaW5lYXIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjKSB7XG4gIHJldHVybiAoYlswXSAtIGFbMF0pICogKGNbMV0gLSBhWzFdKSAtIChiWzFdIC0gYVsxXSkgKiAoY1swXSAtIGFbMF0pO1xufVxuIiwiaW1wb3J0IGNyb3NzIGZyb20gXCIuL2Nyb3NzXCI7XG5cbmZ1bmN0aW9uIGxleGljb2dyYXBoaWNPcmRlcihhLCBiKSB7XG4gIHJldHVybiBhWzBdIC0gYlswXSB8fCBhWzFdIC0gYlsxXTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIHVwcGVyIGNvbnZleCBodWxsIHBlciB0aGUgbW9ub3RvbmUgY2hhaW4gYWxnb3JpdGhtLlxuLy8gQXNzdW1lcyBwb2ludHMubGVuZ3RoID49IDMsIGlzIHNvcnRlZCBieSB4LCB1bmlxdWUgaW4geS5cbi8vIFJldHVybnMgYW4gYXJyYXkgb2YgaW5kaWNlcyBpbnRvIHBvaW50cyBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuZnVuY3Rpb24gY29tcHV0ZVVwcGVySHVsbEluZGV4ZXMocG9pbnRzKSB7XG4gIHZhciBuID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgIGluZGV4ZXMgPSBbMCwgMV0sXG4gICAgICBzaXplID0gMjtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IG47ICsraSkge1xuICAgIHdoaWxlIChzaXplID4gMSAmJiBjcm9zcyhwb2ludHNbaW5kZXhlc1tzaXplIC0gMl1dLCBwb2ludHNbaW5kZXhlc1tzaXplIC0gMV1dLCBwb2ludHNbaV0pIDw9IDApIC0tc2l6ZTtcbiAgICBpbmRleGVzW3NpemUrK10gPSBpO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4ZXMuc2xpY2UoMCwgc2l6ZSk7IC8vIHJlbW92ZSBwb3BwZWQgcG9pbnRzXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvaW50cykge1xuICBpZiAoKG4gPSBwb2ludHMubGVuZ3RoKSA8IDMpIHJldHVybiBudWxsO1xuXG4gIHZhciBpLFxuICAgICAgbixcbiAgICAgIHNvcnRlZFBvaW50cyA9IG5ldyBBcnJheShuKSxcbiAgICAgIGZsaXBwZWRQb2ludHMgPSBuZXcgQXJyYXkobik7XG5cbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgc29ydGVkUG9pbnRzW2ldID0gWytwb2ludHNbaV1bMF0sICtwb2ludHNbaV1bMV0sIGldO1xuICBzb3J0ZWRQb2ludHMuc29ydChsZXhpY29ncmFwaGljT3JkZXIpO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBmbGlwcGVkUG9pbnRzW2ldID0gW3NvcnRlZFBvaW50c1tpXVswXSwgLXNvcnRlZFBvaW50c1tpXVsxXV07XG5cbiAgdmFyIHVwcGVySW5kZXhlcyA9IGNvbXB1dGVVcHBlckh1bGxJbmRleGVzKHNvcnRlZFBvaW50cyksXG4gICAgICBsb3dlckluZGV4ZXMgPSBjb21wdXRlVXBwZXJIdWxsSW5kZXhlcyhmbGlwcGVkUG9pbnRzKTtcblxuICAvLyBDb25zdHJ1Y3QgdGhlIGh1bGwgcG9seWdvbiwgcmVtb3ZpbmcgcG9zc2libGUgZHVwbGljYXRlIGVuZHBvaW50cy5cbiAgdmFyIHNraXBMZWZ0ID0gbG93ZXJJbmRleGVzWzBdID09PSB1cHBlckluZGV4ZXNbMF0sXG4gICAgICBza2lwUmlnaHQgPSBsb3dlckluZGV4ZXNbbG93ZXJJbmRleGVzLmxlbmd0aCAtIDFdID09PSB1cHBlckluZGV4ZXNbdXBwZXJJbmRleGVzLmxlbmd0aCAtIDFdLFxuICAgICAgaHVsbCA9IFtdO1xuXG4gIC8vIEFkZCB1cHBlciBodWxsIGluIHJpZ2h0LXRvLWwgb3JkZXIuXG4gIC8vIFRoZW4gYWRkIGxvd2VyIGh1bGwgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbiAgZm9yIChpID0gdXBwZXJJbmRleGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSBodWxsLnB1c2gocG9pbnRzW3NvcnRlZFBvaW50c1t1cHBlckluZGV4ZXNbaV1dWzJdXSk7XG4gIGZvciAoaSA9ICtza2lwTGVmdDsgaSA8IGxvd2VySW5kZXhlcy5sZW5ndGggLSBza2lwUmlnaHQ7ICsraSkgaHVsbC5wdXNoKHBvaW50c1tzb3J0ZWRQb2ludHNbbG93ZXJJbmRleGVzW2ldXVsyXV0pO1xuXG4gIHJldHVybiBodWxsO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHBvbHlnb25BcmVhfSBmcm9tIFwiLi9hcmVhXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkNlbnRyb2lkfSBmcm9tIFwiLi9jZW50cm9pZFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvbHlnb25IdWxsfSBmcm9tIFwiLi9odWxsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkNvbnRhaW5zfSBmcm9tIFwiLi9jb250YWluc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvbHlnb25MZW5ndGh9IGZyb20gXCIuL2xlbmd0aFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocG9seWdvbikge1xuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IHBvbHlnb24ubGVuZ3RoLFxuICAgICAgYiA9IHBvbHlnb25bbiAtIDFdLFxuICAgICAgeGEsXG4gICAgICB5YSxcbiAgICAgIHhiID0gYlswXSxcbiAgICAgIHliID0gYlsxXSxcbiAgICAgIHBlcmltZXRlciA9IDA7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICB4YSA9IHhiO1xuICAgIHlhID0geWI7XG4gICAgYiA9IHBvbHlnb25baV07XG4gICAgeGIgPSBiWzBdO1xuICAgIHliID0gYlsxXTtcbiAgICB4YSAtPSB4YjtcbiAgICB5YSAtPSB5YjtcbiAgICBwZXJpbWV0ZXIgKz0gTWF0aC5zcXJ0KHhhICogeGEgKyB5YSAqIHlhKTtcbiAgfVxuXG4gIHJldHVybiBwZXJpbWV0ZXI7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkKSB7XG4gIHZhciB4ID0gK3RoaXMuX3guY2FsbChudWxsLCBkKSxcbiAgICAgIHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpO1xuICByZXR1cm4gYWRkKHRoaXMuY292ZXIoeCwgeSksIHgsIHksIGQpO1xufVxuXG5mdW5jdGlvbiBhZGQodHJlZSwgeCwgeSwgZCkge1xuICBpZiAoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybiB0cmVlOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgcGFyZW50LFxuICAgICAgbm9kZSA9IHRyZWUuX3Jvb3QsXG4gICAgICBsZWFmID0ge2RhdGE6IGR9LFxuICAgICAgeDAgPSB0cmVlLl94MCxcbiAgICAgIHkwID0gdHJlZS5feTAsXG4gICAgICB4MSA9IHRyZWUuX3gxLFxuICAgICAgeTEgPSB0cmVlLl95MSxcbiAgICAgIHhtLFxuICAgICAgeW0sXG4gICAgICB4cCxcbiAgICAgIHlwLFxuICAgICAgcmlnaHQsXG4gICAgICBib3R0b20sXG4gICAgICBpLFxuICAgICAgajtcblxuICAvLyBJZiB0aGUgdHJlZSBpcyBlbXB0eSwgaW5pdGlhbGl6ZSB0aGUgcm9vdCBhcyBhIGxlYWYuXG4gIGlmICghbm9kZSkgcmV0dXJuIHRyZWUuX3Jvb3QgPSBsZWFmLCB0cmVlO1xuXG4gIC8vIEZpbmQgdGhlIGV4aXN0aW5nIGxlYWYgZm9yIHRoZSBuZXcgcG9pbnQsIG9yIGFkZCBpdC5cbiAgd2hpbGUgKG5vZGUubGVuZ3RoKSB7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gICAgaWYgKHBhcmVudCA9IG5vZGUsICEobm9kZSA9IG5vZGVbaSA9IGJvdHRvbSA8PCAxIHwgcmlnaHRdKSkgcmV0dXJuIHBhcmVudFtpXSA9IGxlYWYsIHRyZWU7XG4gIH1cblxuICAvLyBJcyB0aGUgbmV3IHBvaW50IGlzIGV4YWN0bHkgY29pbmNpZGVudCB3aXRoIHRoZSBleGlzdGluZyBwb2ludD9cbiAgeHAgPSArdHJlZS5feC5jYWxsKG51bGwsIG5vZGUuZGF0YSk7XG4gIHlwID0gK3RyZWUuX3kuY2FsbChudWxsLCBub2RlLmRhdGEpO1xuICBpZiAoeCA9PT0geHAgJiYgeSA9PT0geXApIHJldHVybiBsZWFmLm5leHQgPSBub2RlLCBwYXJlbnQgPyBwYXJlbnRbaV0gPSBsZWFmIDogdHJlZS5fcm9vdCA9IGxlYWYsIHRyZWU7XG5cbiAgLy8gT3RoZXJ3aXNlLCBzcGxpdCB0aGUgbGVhZiBub2RlIHVudGlsIHRoZSBvbGQgYW5kIG5ldyBwb2ludCBhcmUgc2VwYXJhdGVkLlxuICBkbyB7XG4gICAgcGFyZW50ID0gcGFyZW50ID8gcGFyZW50W2ldID0gbmV3IEFycmF5KDQpIDogdHJlZS5fcm9vdCA9IG5ldyBBcnJheSg0KTtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgfSB3aGlsZSAoKGkgPSBib3R0b20gPDwgMSB8IHJpZ2h0KSA9PT0gKGogPSAoeXAgPj0geW0pIDw8IDEgfCAoeHAgPj0geG0pKSk7XG4gIHJldHVybiBwYXJlbnRbal0gPSBub2RlLCBwYXJlbnRbaV0gPSBsZWFmLCB0cmVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQWxsKGRhdGEpIHtcbiAgdmFyIGQsIGksIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeHogPSBuZXcgQXJyYXkobiksXG4gICAgICB5eiA9IG5ldyBBcnJheShuKSxcbiAgICAgIHgwID0gSW5maW5pdHksXG4gICAgICB5MCA9IEluZmluaXR5LFxuICAgICAgeDEgPSAtSW5maW5pdHksXG4gICAgICB5MSA9IC1JbmZpbml0eTtcblxuICAvLyBDb21wdXRlIHRoZSBwb2ludHMgYW5kIHRoZWlyIGV4dGVudC5cbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGlmIChpc05hTih4ID0gK3RoaXMuX3guY2FsbChudWxsLCBkID0gZGF0YVtpXSkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgY29udGludWU7XG4gICAgeHpbaV0gPSB4O1xuICAgIHl6W2ldID0geTtcbiAgICBpZiAoeCA8IHgwKSB4MCA9IHg7XG4gICAgaWYgKHggPiB4MSkgeDEgPSB4O1xuICAgIGlmICh5IDwgeTApIHkwID0geTtcbiAgICBpZiAoeSA+IHkxKSB5MSA9IHk7XG4gIH1cblxuICAvLyBJZiB0aGVyZSB3ZXJlIG5vICh2YWxpZCkgcG9pbnRzLCBhYm9ydC5cbiAgaWYgKHgwID4geDEgfHwgeTAgPiB5MSkgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRXhwYW5kIHRoZSB0cmVlIHRvIGNvdmVyIHRoZSBuZXcgcG9pbnRzLlxuICB0aGlzLmNvdmVyKHgwLCB5MCkuY292ZXIoeDEsIHkxKTtcblxuICAvLyBBZGQgdGhlIG5ldyBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBhZGQodGhpcywgeHpbaV0sIHl6W2ldLCBkYXRhW2ldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICBpZiAoaXNOYU4oeCA9ICt4KSB8fCBpc05hTih5ID0gK3kpKSByZXR1cm4gdGhpczsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEgPSB0aGlzLl94MSxcbiAgICAgIHkxID0gdGhpcy5feTE7XG5cbiAgLy8gSWYgdGhlIHF1YWR0cmVlIGhhcyBubyBleHRlbnQsIGluaXRpYWxpemUgdGhlbS5cbiAgLy8gSW50ZWdlciBleHRlbnQgYXJlIG5lY2Vzc2FyeSBzbyB0aGF0IGlmIHdlIGxhdGVyIGRvdWJsZSB0aGUgZXh0ZW50LFxuICAvLyB0aGUgZXhpc3RpbmcgcXVhZHJhbnQgYm91bmRhcmllcyBkb27igJl0IGNoYW5nZSBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgZXJyb3IhXG4gIGlmIChpc05hTih4MCkpIHtcbiAgICB4MSA9ICh4MCA9IE1hdGguZmxvb3IoeCkpICsgMTtcbiAgICB5MSA9ICh5MCA9IE1hdGguZmxvb3IoeSkpICsgMTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgZG91YmxlIHJlcGVhdGVkbHkgdG8gY292ZXIuXG4gIGVsc2Uge1xuICAgIHZhciB6ID0geDEgLSB4MCxcbiAgICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgaTtcblxuICAgIHdoaWxlICh4MCA+IHggfHwgeCA+PSB4MSB8fCB5MCA+IHkgfHwgeSA+PSB5MSkge1xuICAgICAgaSA9ICh5IDwgeTApIDw8IDEgfCAoeCA8IHgwKTtcbiAgICAgIHBhcmVudCA9IG5ldyBBcnJheSg0KSwgcGFyZW50W2ldID0gbm9kZSwgbm9kZSA9IHBhcmVudCwgeiAqPSAyO1xuICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgIGNhc2UgMDogeDEgPSB4MCArIHosIHkxID0geTAgKyB6OyBicmVhaztcbiAgICAgICAgY2FzZSAxOiB4MCA9IHgxIC0geiwgeTEgPSB5MCArIHo7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IHgxID0geDAgKyB6LCB5MCA9IHkxIC0gejsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogeDAgPSB4MSAtIHosIHkwID0geTEgLSB6OyBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcm9vdCAmJiB0aGlzLl9yb290Lmxlbmd0aCkgdGhpcy5fcm9vdCA9IG5vZGU7XG4gIH1cblxuICB0aGlzLl94MCA9IHgwO1xuICB0aGlzLl95MCA9IHkwO1xuICB0aGlzLl94MSA9IHgxO1xuICB0aGlzLl95MSA9IHkxO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YSA9IFtdO1xuICB0aGlzLnZpc2l0KGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBkbyBkYXRhLnB1c2gobm9kZS5kYXRhKTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gZGF0YTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5jb3ZlcigrX1swXVswXSwgK19bMF1bMV0pLmNvdmVyKCtfWzFdWzBdLCArX1sxXVsxXSlcbiAgICAgIDogaXNOYU4odGhpcy5feDApID8gdW5kZWZpbmVkIDogW1t0aGlzLl94MCwgdGhpcy5feTBdLCBbdGhpcy5feDEsIHRoaXMuX3kxXV07XG59XG4iLCJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHksIHJhZGl1cykge1xuICB2YXIgZGF0YSxcbiAgICAgIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEsXG4gICAgICB5MSxcbiAgICAgIHgyLFxuICAgICAgeTIsXG4gICAgICB4MyA9IHRoaXMuX3gxLFxuICAgICAgeTMgPSB0aGlzLl95MSxcbiAgICAgIHF1YWRzID0gW10sXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHEsXG4gICAgICBpO1xuXG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHgwLCB5MCwgeDMsIHkzKSk7XG4gIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gIGVsc2Uge1xuICAgIHgwID0geCAtIHJhZGl1cywgeTAgPSB5IC0gcmFkaXVzO1xuICAgIHgzID0geCArIHJhZGl1cywgeTMgPSB5ICsgcmFkaXVzO1xuICAgIHJhZGl1cyAqPSByYWRpdXM7XG4gIH1cblxuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG5cbiAgICAvLyBTdG9wIHNlYXJjaGluZyBpZiB0aGlzIHF1YWRyYW50IGNhbuKAmXQgY29udGFpbiBhIGNsb3NlciBub2RlLlxuICAgIGlmICghKG5vZGUgPSBxLm5vZGUpXG4gICAgICAgIHx8ICh4MSA9IHEueDApID4geDNcbiAgICAgICAgfHwgKHkxID0gcS55MCkgPiB5M1xuICAgICAgICB8fCAoeDIgPSBxLngxKSA8IHgwXG4gICAgICAgIHx8ICh5MiA9IHEueTEpIDwgeTApIGNvbnRpbnVlO1xuXG4gICAgLy8gQmlzZWN0IHRoZSBjdXJyZW50IHF1YWRyYW50LlxuICAgIGlmIChub2RlLmxlbmd0aCkge1xuICAgICAgdmFyIHhtID0gKHgxICsgeDIpIC8gMixcbiAgICAgICAgICB5bSA9ICh5MSArIHkyKSAvIDI7XG5cbiAgICAgIHF1YWRzLnB1c2goXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbM10sIHhtLCB5bSwgeDIsIHkyKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVsyXSwgeDEsIHltLCB4bSwgeTIpLFxuICAgICAgICBuZXcgUXVhZChub2RlWzFdLCB4bSwgeTEsIHgyLCB5bSksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMF0sIHgxLCB5MSwgeG0sIHltKVxuICAgICAgKTtcblxuICAgICAgLy8gVmlzaXQgdGhlIGNsb3Nlc3QgcXVhZHJhbnQgZmlyc3QuXG4gICAgICBpZiAoaSA9ICh5ID49IHltKSA8PCAxIHwgKHggPj0geG0pKSB7XG4gICAgICAgIHEgPSBxdWFkc1txdWFkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgcXVhZHNbcXVhZHMubGVuZ3RoIC0gMV0gPSBxdWFkc1txdWFkcy5sZW5ndGggLSAxIC0gaV07XG4gICAgICAgIHF1YWRzW3F1YWRzLmxlbmd0aCAtIDEgLSBpXSA9IHE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmlzaXQgdGhpcyBwb2ludC4gKFZpc2l0aW5nIGNvaW5jaWRlbnQgcG9pbnRzIGlzbuKAmXQgbmVjZXNzYXJ5ISlcbiAgICBlbHNlIHtcbiAgICAgIHZhciBkeCA9IHggLSArdGhpcy5feC5jYWxsKG51bGwsIG5vZGUuZGF0YSksXG4gICAgICAgICAgZHkgPSB5IC0gK3RoaXMuX3kuY2FsbChudWxsLCBub2RlLmRhdGEpLFxuICAgICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICBpZiAoZDIgPCByYWRpdXMpIHtcbiAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQocmFkaXVzID0gZDIpO1xuICAgICAgICB4MCA9IHggLSBkLCB5MCA9IHkgLSBkO1xuICAgICAgICB4MyA9IHggKyBkLCB5MyA9IHkgKyBkO1xuICAgICAgICBkYXRhID0gbm9kZS5kYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHF1YWR0cmVlfSBmcm9tIFwiLi9xdWFkdHJlZVwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5ub2RlID0gbm9kZTtcbiAgdGhpcy54MCA9IHgwO1xuICB0aGlzLnkwID0geTA7XG4gIHRoaXMueDEgPSB4MTtcbiAgdGhpcy55MSA9IHkxO1xufVxuIiwiaW1wb3J0IHRyZWVfYWRkLCB7YWRkQWxsIGFzIHRyZWVfYWRkQWxsfSBmcm9tIFwiLi9hZGRcIjtcbmltcG9ydCB0cmVlX2NvdmVyIGZyb20gXCIuL2NvdmVyXCI7XG5pbXBvcnQgdHJlZV9kYXRhIGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCB0cmVlX2V4dGVudCBmcm9tIFwiLi9leHRlbnRcIjtcbmltcG9ydCB0cmVlX2ZpbmQgZnJvbSBcIi4vZmluZFwiO1xuaW1wb3J0IHRyZWVfcmVtb3ZlLCB7cmVtb3ZlQWxsIGFzIHRyZWVfcmVtb3ZlQWxsfSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCB0cmVlX3Jvb3QgZnJvbSBcIi4vcm9vdFwiO1xuaW1wb3J0IHRyZWVfc2l6ZSBmcm9tIFwiLi9zaXplXCI7XG5pbXBvcnQgdHJlZV92aXNpdCBmcm9tIFwiLi92aXNpdFwiO1xuaW1wb3J0IHRyZWVfdmlzaXRBZnRlciBmcm9tIFwiLi92aXNpdEFmdGVyXCI7XG5pbXBvcnQgdHJlZV94LCB7ZGVmYXVsdFh9IGZyb20gXCIuL3hcIjtcbmltcG9ydCB0cmVlX3ksIHtkZWZhdWx0WX0gZnJvbSBcIi4veVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFkdHJlZShub2RlcywgeCwgeSkge1xuICB2YXIgdHJlZSA9IG5ldyBRdWFkdHJlZSh4ID09IG51bGwgPyBkZWZhdWx0WCA6IHgsIHkgPT0gbnVsbCA/IGRlZmF1bHRZIDogeSwgTmFOLCBOYU4sIE5hTiwgTmFOKTtcbiAgcmV0dXJuIG5vZGVzID09IG51bGwgPyB0cmVlIDogdHJlZS5hZGRBbGwobm9kZXMpO1xufVxuXG5mdW5jdGlvbiBRdWFkdHJlZSh4LCB5LCB4MCwgeTAsIHgxLCB5MSkge1xuICB0aGlzLl94ID0geDtcbiAgdGhpcy5feSA9IHk7XG4gIHRoaXMuX3gwID0geDA7XG4gIHRoaXMuX3kwID0geTA7XG4gIHRoaXMuX3gxID0geDE7XG4gIHRoaXMuX3kxID0geTE7XG4gIHRoaXMuX3Jvb3QgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxlYWZfY29weShsZWFmKSB7XG4gIHZhciBjb3B5ID0ge2RhdGE6IGxlYWYuZGF0YX0sIG5leHQgPSBjb3B5O1xuICB3aGlsZSAobGVhZiA9IGxlYWYubmV4dCkgbmV4dCA9IG5leHQubmV4dCA9IHtkYXRhOiBsZWFmLmRhdGF9O1xuICByZXR1cm4gY29weTtcbn1cblxudmFyIHRyZWVQcm90byA9IHF1YWR0cmVlLnByb3RvdHlwZSA9IFF1YWR0cmVlLnByb3RvdHlwZTtcblxudHJlZVByb3RvLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvcHkgPSBuZXcgUXVhZHRyZWUodGhpcy5feCwgdGhpcy5feSwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBub2RlcyxcbiAgICAgIGNoaWxkO1xuXG4gIGlmICghbm9kZSkgcmV0dXJuIGNvcHk7XG5cbiAgaWYgKCFub2RlLmxlbmd0aCkgcmV0dXJuIGNvcHkuX3Jvb3QgPSBsZWFmX2NvcHkobm9kZSksIGNvcHk7XG5cbiAgbm9kZXMgPSBbe3NvdXJjZTogbm9kZSwgdGFyZ2V0OiBjb3B5Ll9yb290ID0gbmV3IEFycmF5KDQpfV07XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKGNoaWxkID0gbm9kZS5zb3VyY2VbaV0pIHtcbiAgICAgICAgaWYgKGNoaWxkLmxlbmd0aCkgbm9kZXMucHVzaCh7c291cmNlOiBjaGlsZCwgdGFyZ2V0OiBub2RlLnRhcmdldFtpXSA9IG5ldyBBcnJheSg0KX0pO1xuICAgICAgICBlbHNlIG5vZGUudGFyZ2V0W2ldID0gbGVhZl9jb3B5KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29weTtcbn07XG5cbnRyZWVQcm90by5hZGQgPSB0cmVlX2FkZDtcbnRyZWVQcm90by5hZGRBbGwgPSB0cmVlX2FkZEFsbDtcbnRyZWVQcm90by5jb3ZlciA9IHRyZWVfY292ZXI7XG50cmVlUHJvdG8uZGF0YSA9IHRyZWVfZGF0YTtcbnRyZWVQcm90by5leHRlbnQgPSB0cmVlX2V4dGVudDtcbnRyZWVQcm90by5maW5kID0gdHJlZV9maW5kO1xudHJlZVByb3RvLnJlbW92ZSA9IHRyZWVfcmVtb3ZlO1xudHJlZVByb3RvLnJlbW92ZUFsbCA9IHRyZWVfcmVtb3ZlQWxsO1xudHJlZVByb3RvLnJvb3QgPSB0cmVlX3Jvb3Q7XG50cmVlUHJvdG8uc2l6ZSA9IHRyZWVfc2l6ZTtcbnRyZWVQcm90by52aXNpdCA9IHRyZWVfdmlzaXQ7XG50cmVlUHJvdG8udmlzaXRBZnRlciA9IHRyZWVfdmlzaXRBZnRlcjtcbnRyZWVQcm90by54ID0gdHJlZV94O1xudHJlZVByb3RvLnkgPSB0cmVlX3k7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkKSB7XG4gIGlmIChpc05hTih4ID0gK3RoaXMuX3guY2FsbChudWxsLCBkKSkgfHwgaXNOYU4oeSA9ICt0aGlzLl95LmNhbGwobnVsbCwgZCkpKSByZXR1cm4gdGhpczsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHBhcmVudCxcbiAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgcmV0YWluZXIsXG4gICAgICBwcmV2aW91cyxcbiAgICAgIG5leHQsXG4gICAgICB4MCA9IHRoaXMuX3gwLFxuICAgICAgeTAgPSB0aGlzLl95MCxcbiAgICAgIHgxID0gdGhpcy5feDEsXG4gICAgICB5MSA9IHRoaXMuX3kxLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB4bSxcbiAgICAgIHltLFxuICAgICAgcmlnaHQsXG4gICAgICBib3R0b20sXG4gICAgICBpLFxuICAgICAgajtcblxuICAvLyBJZiB0aGUgdHJlZSBpcyBlbXB0eSwgaW5pdGlhbGl6ZSB0aGUgcm9vdCBhcyBhIGxlYWYuXG4gIGlmICghbm9kZSkgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRmluZCB0aGUgbGVhZiBub2RlIGZvciB0aGUgcG9pbnQuXG4gIC8vIFdoaWxlIGRlc2NlbmRpbmcsIGFsc28gcmV0YWluIHRoZSBkZWVwZXN0IHBhcmVudCB3aXRoIGEgbm9uLXJlbW92ZWQgc2libGluZy5cbiAgaWYgKG5vZGUubGVuZ3RoKSB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICAgIGlmICghKHBhcmVudCA9IG5vZGUsIG5vZGUgPSBub2RlW2kgPSBib3R0b20gPDwgMSB8IHJpZ2h0XSkpIHJldHVybiB0aGlzO1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGJyZWFrO1xuICAgIGlmIChwYXJlbnRbKGkgKyAxKSAmIDNdIHx8IHBhcmVudFsoaSArIDIpICYgM10gfHwgcGFyZW50WyhpICsgMykgJiAzXSkgcmV0YWluZXIgPSBwYXJlbnQsIGogPSBpO1xuICB9XG5cbiAgLy8gRmluZCB0aGUgcG9pbnQgdG8gcmVtb3ZlLlxuICB3aGlsZSAobm9kZS5kYXRhICE9PSBkKSBpZiAoIShwcmV2aW91cyA9IG5vZGUsIG5vZGUgPSBub2RlLm5leHQpKSByZXR1cm4gdGhpcztcbiAgaWYgKG5leHQgPSBub2RlLm5leHQpIGRlbGV0ZSBub2RlLm5leHQ7XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvaW5jaWRlbnQgcG9pbnRzLCByZW1vdmUganVzdCB0aGUgcG9pbnQuXG4gIGlmIChwcmV2aW91cykgcmV0dXJuIChuZXh0ID8gcHJldmlvdXMubmV4dCA9IG5leHQgOiBkZWxldGUgcHJldmlvdXMubmV4dCksIHRoaXM7XG5cbiAgLy8gSWYgdGhpcyBpcyB0aGUgcm9vdCBwb2ludCwgcmVtb3ZlIGl0LlxuICBpZiAoIXBhcmVudCkgcmV0dXJuIHRoaXMuX3Jvb3QgPSBuZXh0LCB0aGlzO1xuXG4gIC8vIFJlbW92ZSB0aGlzIGxlYWYuXG4gIG5leHQgPyBwYXJlbnRbaV0gPSBuZXh0IDogZGVsZXRlIHBhcmVudFtpXTtcblxuICAvLyBJZiB0aGUgcGFyZW50IG5vdyBjb250YWlucyBleGFjdGx5IG9uZSBsZWFmLCBjb2xsYXBzZSBzdXBlcmZsdW91cyBwYXJlbnRzLlxuICBpZiAoKG5vZGUgPSBwYXJlbnRbMF0gfHwgcGFyZW50WzFdIHx8IHBhcmVudFsyXSB8fCBwYXJlbnRbM10pXG4gICAgICAmJiBub2RlID09PSAocGFyZW50WzNdIHx8IHBhcmVudFsyXSB8fCBwYXJlbnRbMV0gfHwgcGFyZW50WzBdKVxuICAgICAgJiYgIW5vZGUubGVuZ3RoKSB7XG4gICAgaWYgKHJldGFpbmVyKSByZXRhaW5lcltqXSA9IG5vZGU7XG4gICAgZWxzZSB0aGlzLl9yb290ID0gbm9kZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWxsKGRhdGEpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBkYXRhLmxlbmd0aDsgaSA8IG47ICsraSkgdGhpcy5yZW1vdmUoZGF0YVtpXSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9yb290O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzaXplID0gMDtcbiAgdGhpcy52aXNpdChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgZG8gKytzaXplOyB3aGlsZSAobm9kZSA9IG5vZGUubmV4dClcbiAgfSk7XG4gIHJldHVybiBzaXplO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgcXVhZHMgPSBbXSwgcSwgbm9kZSA9IHRoaXMuX3Jvb3QsIGNoaWxkLCB4MCwgeTAsIHgxLCB5MTtcbiAgaWYgKG5vZGUpIHF1YWRzLnB1c2gobmV3IFF1YWQobm9kZSwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpKTtcbiAgd2hpbGUgKHEgPSBxdWFkcy5wb3AoKSkge1xuICAgIGlmICghY2FsbGJhY2sobm9kZSA9IHEubm9kZSwgeDAgPSBxLngwLCB5MCA9IHEueTAsIHgxID0gcS54MSwgeTEgPSBxLnkxKSAmJiBub2RlLmxlbmd0aCkge1xuICAgICAgdmFyIHhtID0gKHgwICsgeDEpIC8gMiwgeW0gPSAoeTAgKyB5MSkgLyAyO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVszXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHltLCB4MSwgeTEpKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMl0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5bSwgeG0sIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzFdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeTAsIHgxLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVswXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHkwLCB4bSwgeW0pKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBxdWFkcyA9IFtdLCBuZXh0ID0gW10sIHE7XG4gIGlmICh0aGlzLl9yb290KSBxdWFkcy5wdXNoKG5ldyBRdWFkKHRoaXMuX3Jvb3QsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICB2YXIgbm9kZSA9IHEubm9kZTtcbiAgICBpZiAobm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciBjaGlsZCwgeDAgPSBxLngwLCB5MCA9IHEueTAsIHgxID0gcS54MSwgeTEgPSBxLnkxLCB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzFdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeTAsIHgxLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsyXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHltLCB4bSwgeTEpKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgfVxuICAgIG5leHQucHVzaChxKTtcbiAgfVxuICB3aGlsZSAocSA9IG5leHQucG9wKCkpIHtcbiAgICBjYWxsYmFjayhxLm5vZGUsIHEueDAsIHEueTAsIHEueDEsIHEueTEpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRYKGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhpcy5feCA9IF8sIHRoaXMpIDogdGhpcy5feDtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0WShkKSB7XG4gIHJldHVybiBkWzFdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoaXMuX3kgPSBfLCB0aGlzKSA6IHRoaXMuX3k7XG59XG4iLCJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlXCI7XG5pbXBvcnQgaXJ3aW5IYWxsIGZyb20gXCIuL2lyd2luSGFsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tQmF0ZXMoc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbUJhdGVzKG4pIHtcbiAgICB2YXIgcmFuZG9tSXJ3aW5IYWxsID0gaXJ3aW5IYWxsLnNvdXJjZShzb3VyY2UpKG4pO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByYW5kb21JcndpbkhhbGwoKSAvIG47XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUJhdGVzLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUJhdGVzO1xuXG4gIHJldHVybiByYW5kb21CYXRlcztcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tRXhwb25lbnRpYWwoc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbUV4cG9uZW50aWFsKGxhbWJkYSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAtTWF0aC5sb2coMSAtIHNvdXJjZSgpKSAvIGxhbWJkYTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tRXhwb25lbnRpYWwuc291cmNlID0gc291cmNlUmFuZG9tRXhwb25lbnRpYWw7XG5cbiAgcmV0dXJuIHJhbmRvbUV4cG9uZW50aWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tVW5pZm9ybX0gZnJvbSBcIi4vdW5pZm9ybVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbU5vcm1hbH0gZnJvbSBcIi4vbm9ybWFsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tTG9nTm9ybWFsfSBmcm9tIFwiLi9sb2dOb3JtYWxcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21CYXRlc30gZnJvbSBcIi4vYmF0ZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21JcndpbkhhbGx9IGZyb20gXCIuL2lyd2luSGFsbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbUV4cG9uZW50aWFsfSBmcm9tIFwiLi9leHBvbmVudGlhbFwiO1xuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tSXJ3aW5IYWxsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21JcndpbkhhbGwobikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHN1bSA9IDAsIGkgPSAwOyBpIDwgbjsgKytpKSBzdW0gKz0gc291cmNlKCk7XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH07XG4gIH1cblxuICByYW5kb21JcndpbkhhbGwuc291cmNlID0gc291cmNlUmFuZG9tSXJ3aW5IYWxsO1xuXG4gIHJldHVybiByYW5kb21JcndpbkhhbGw7XG59KShkZWZhdWx0U291cmNlKTtcbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcbmltcG9ydCBub3JtYWwgZnJvbSBcIi4vbm9ybWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21Mb2dOb3JtYWwoc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbUxvZ05vcm1hbCgpIHtcbiAgICB2YXIgcmFuZG9tTm9ybWFsID0gbm9ybWFsLnNvdXJjZShzb3VyY2UpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE1hdGguZXhwKHJhbmRvbU5vcm1hbCgpKTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tTG9nTm9ybWFsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUxvZ05vcm1hbDtcblxuICByZXR1cm4gcmFuZG9tTG9nTm9ybWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21Ob3JtYWwoc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbU5vcm1hbChtdSwgc2lnbWEpIHtcbiAgICB2YXIgeCwgcjtcbiAgICBtdSA9IG11ID09IG51bGwgPyAwIDogK211O1xuICAgIHNpZ21hID0gc2lnbWEgPT0gbnVsbCA/IDEgOiArc2lnbWE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHk7XG5cbiAgICAgIC8vIElmIGF2YWlsYWJsZSwgdXNlIHRoZSBzZWNvbmQgcHJldmlvdXNseS1nZW5lcmF0ZWQgdW5pZm9ybSByYW5kb20uXG4gICAgICBpZiAoeCAhPSBudWxsKSB5ID0geCwgeCA9IG51bGw7XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgZ2VuZXJhdGUgYSBuZXcgeCBhbmQgeS5cbiAgICAgIGVsc2UgZG8ge1xuICAgICAgICB4ID0gc291cmNlKCkgKiAyIC0gMTtcbiAgICAgICAgeSA9IHNvdXJjZSgpICogMiAtIDE7XG4gICAgICAgIHIgPSB4ICogeCArIHkgKiB5O1xuICAgICAgfSB3aGlsZSAoIXIgfHwgciA+IDEpO1xuXG4gICAgICByZXR1cm4gbXUgKyBzaWdtYSAqIHkgKiBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhyKSAvIHIpO1xuICAgIH07XG4gIH1cblxuICByYW5kb21Ob3JtYWwuc291cmNlID0gc291cmNlUmFuZG9tTm9ybWFsO1xuXG4gIHJldHVybiByYW5kb21Ob3JtYWw7XG59KShkZWZhdWx0U291cmNlKTtcbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbVVuaWZvcm0oc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbVVuaWZvcm0obWluLCBtYXgpIHtcbiAgICBtaW4gPSBtaW4gPT0gbnVsbCA/IDAgOiArbWluO1xuICAgIG1heCA9IG1heCA9PSBudWxsID8gMSA6ICttYXg7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIG1heCA9IG1pbiwgbWluID0gMDtcbiAgICBlbHNlIG1heCAtPSBtaW47XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNvdXJjZSgpICogbWF4ICsgbWluO1xuICAgIH07XG4gIH1cblxuICByYW5kb21Vbmlmb3JtLnNvdXJjZSA9IHNvdXJjZVJhbmRvbVVuaWZvcm07XG5cbiAgcmV0dXJuIHJhbmRvbVVuaWZvcm07XG59KShkZWZhdWx0U291cmNlKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2XCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOFwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjJcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OVwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjNcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZlwiKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICB2YXIgbiA9IHNwZWNpZmllci5sZW5ndGggLyA2IHwgMCwgY29sb3JzID0gbmV3IEFycmF5KG4pLCBpID0gMDtcbiAgd2hpbGUgKGkgPCBuKSBjb2xvcnNbaV0gPSBcIiNcIiArIHNwZWNpZmllci5zbGljZShpICogNiwgKytpICogNik7XG4gIHJldHVybiBjb2xvcnM7XG59XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJkOGIzNjVmNWY1ZjU1YWI0YWNcIixcbiAgXCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzFcIixcbiAgXCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzFcIixcbiAgXCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWVcIixcbiAgXCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWVcIixcbiAgXCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWVcIixcbiAgXCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWVcIixcbiAgXCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzBcIixcbiAgXCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzBcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiYWY4ZGMzZjdmN2Y3N2ZiZjdiXCIsXG4gIFwiN2IzMjk0YzJhNWNmYTZkYmEwMDA4ODM3XCIsXG4gIFwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3XCIsXG4gIFwiNzYyYTgzYWY4ZGMzZTdkNGU4ZDlmMGQzN2ZiZjdiMWI3ODM3XCIsXG4gIFwiNzYyYTgzYWY4ZGMzZTdkNGU4ZjdmN2Y3ZDlmMGQzN2ZiZjdiMWI3ODM3XCIsXG4gIFwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3XCIsXG4gIFwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3XCIsXG4gIFwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiXCIsXG4gIFwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU5YTNjOWY3ZjdmN2ExZDc2YVwiLFxuICBcImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNlwiLFxuICBcImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNlwiLFxuICBcImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMVwiLFxuICBcImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMVwiLFxuICBcImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMVwiLFxuICBcImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMVwiLFxuICBcIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOVwiLFxuICBcIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCI5OThlYzNmN2Y3ZjdmMWEzNDBcIixcbiAgXCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDFcIixcbiAgXCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDFcIixcbiAgXCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDZcIixcbiAgXCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDZcIixcbiAgXCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDZcIixcbiAgXCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDZcIixcbiAgXCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDhcIixcbiAgXCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDhcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWY4YTYyZjdmN2Y3NjdhOWNmXCIsXG4gIFwiY2EwMDIwZjRhNTgyOTJjNWRlMDU3MWIwXCIsXG4gIFwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZDFlNWYwNjdhOWNmMjE2NmFjXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZjdmN2Y3ZDFlNWYwNjdhOWNmMjE2NmFjXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVmOGE2MmZmZmZmZjk5OTk5OVwiLFxuICBcImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MFwiLFxuICBcImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MFwiLFxuICBcImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZFwiLFxuICBcImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZFwiLFxuICBcImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZFwiLFxuICBcImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZFwiLFxuICBcIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYVwiLFxuICBcIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmYzhkNTlmZmZmYmY5MWJmZGJcIixcbiAgXCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjZcIixcbiAgXCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjZcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjRcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjRcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjRcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjRcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTVcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTVcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTFjZjYwXCIsXG4gIFwiZDcxOTFjZmRhZTYxYTZkOTZhMWE5NjQxXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYTZkOTZhMWE5NjQxXCIsXG4gIFwiZDczMDI3ZmM4ZDU5ZmVlMDhiZDllZjhiOTFjZjYwMWE5ODUwXCIsXG4gIFwiZDczMDI3ZmM4ZDU5ZmVlMDhiZmZmZmJmZDllZjhiOTFjZjYwMWE5ODUwXCIsXG4gIFwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwXCIsXG4gIFwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwXCIsXG4gIFwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3XCIsXG4gIFwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjk5ZDU5NFwiLFxuICBcImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYVwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYVwiLFxuICBcImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZFwiLFxuICBcImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZFwiLFxuICBcImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZFwiLFxuICBcImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZFwiLFxuICBcIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMlwiLFxuICBcIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lQ2F0ZWdvcnkxMH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZUFjY2VudH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvQWNjZW50XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lRGFyazJ9IGZyb20gXCIuL2NhdGVnb3JpY2FsL0RhcmsyXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFpcmVkfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYWlyZWRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVQYXN0ZWwxfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYXN0ZWwxXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFzdGVsMn0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvUGFzdGVsMlwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVNldDF9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1NldDFcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVTZXQyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9TZXQyXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lU2V0M30gZnJvbSBcIi4vY2F0ZWdvcmljYWwvU2V0M1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnJCRywgc2NoZW1lIGFzIHNjaGVtZUJyQkd9IGZyb20gXCIuL2RpdmVyZ2luZy9CckJHXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQUkduLCBzY2hlbWUgYXMgc2NoZW1lUFJHbn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1BSR25cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVBpWUcsIHNjaGVtZSBhcyBzY2hlbWVQaVlHfSBmcm9tIFwiLi9kaXZlcmdpbmcvUGlZR1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVPciwgc2NoZW1lIGFzIHNjaGVtZVB1T3J9IGZyb20gXCIuL2RpdmVyZ2luZy9QdU9yXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZEJ1LCBzY2hlbWUgYXMgc2NoZW1lUmRCdX0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkQnVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkR3ksIHNjaGVtZSBhcyBzY2hlbWVSZEd5fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRHeVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRZbEJ1LCBzY2hlbWUgYXMgc2NoZW1lUmRZbEJ1fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRZbEJ1XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFlsR24sIHNjaGVtZSBhcyBzY2hlbWVSZFlsR259IGZyb20gXCIuL2RpdmVyZ2luZy9SZFlsR25cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVNwZWN0cmFsLCBzY2hlbWUgYXMgc2NoZW1lU3BlY3RyYWx9IGZyb20gXCIuL2RpdmVyZ2luZy9TcGVjdHJhbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnVHbiwgc2NoZW1lIGFzIHNjaGVtZUJ1R259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvQnVHblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnVQdSwgc2NoZW1lIGFzIHNjaGVtZUJ1UHV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvQnVQdVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlR25CdSwgc2NoZW1lIGFzIHNjaGVtZUduQnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvR25CdVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlT3JSZCwgc2NoZW1lIGFzIHNjaGVtZU9yUmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvT3JSZFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVCdUduLCBzY2hlbWUgYXMgc2NoZW1lUHVCdUdufSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1B1QnVHblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVCdSwgc2NoZW1lIGFzIHNjaGVtZVB1QnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVCdVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVSZCwgc2NoZW1lIGFzIHNjaGVtZVB1UmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVSZFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRQdSwgc2NoZW1lIGFzIHNjaGVtZVJkUHV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUmRQdVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxHbkJ1LCBzY2hlbWUgYXMgc2NoZW1lWWxHbkJ1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsR25CdVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxHbiwgc2NoZW1lIGFzIHNjaGVtZVlsR259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxHblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxPckJyLCBzY2hlbWUgYXMgc2NoZW1lWWxPckJyfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsT3JCclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxPclJkLCBzY2hlbWUgYXMgc2NoZW1lWWxPclJkfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQmx1ZXMsIHNjaGVtZSBhcyBzY2hlbWVCbHVlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvQmx1ZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUdyZWVucywgc2NoZW1lIGFzIHNjaGVtZUdyZWVuc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVHcmV5cywgc2NoZW1lIGFzIHNjaGVtZUdyZXlzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9HcmV5c1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVycGxlcywgc2NoZW1lIGFzIHNjaGVtZVB1cnBsZXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL1B1cnBsZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJlZHMsIHNjaGVtZSBhcyBzY2hlbWVSZWRzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9SZWRzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVPcmFuZ2VzLCBzY2hlbWUgYXMgc2NoZW1lT3Jhbmdlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvT3Jhbmdlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9jdWJlaGVsaXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJhaW5ib3csIHdhcm0gYXMgaW50ZXJwb2xhdGVXYXJtLCBjb29sIGFzIGludGVycG9sYXRlQ29vbH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9yYWluYm93XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVTaW5lYm93fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3NpbmVib3dcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVZpcmlkaXMsIG1hZ21hIGFzIGludGVycG9sYXRlTWFnbWEsIGluZmVybm8gYXMgaW50ZXJwb2xhdGVJbmZlcm5vLCBwbGFzbWEgYXMgaW50ZXJwb2xhdGVQbGFzbWF9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvdmlyaWRpc1wiO1xuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVJnYkJhc2lzfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2NoZW1lKSB7XG4gIHJldHVybiBpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0pO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTVmNWY5OTlkOGM5MmNhMjVmXCIsXG4gIFwiZWRmOGZiYjJlMmUyNjZjMmE0MjM4YjQ1XCIsXG4gIFwiZWRmOGZiYjJlMmUyNjZjMmE0MmNhMjVmMDA2ZDJjXCIsXG4gIFwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0MmNhMjVmMDA2ZDJjXCIsXG4gIFwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0XCIsXG4gIFwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0XCIsXG4gIFwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA2ZDJjMDA0NDFiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImUwZWNmNDllYmNkYTg4NTZhN1wiLFxuICBcImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZFwiLFxuICBcImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3Y1wiLFxuICBcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3Y1wiLFxuICBcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YlwiLFxuICBcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YlwiLFxuICBcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlMGYzZGJhOGRkYjU0M2EyY2FcIixcbiAgXCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmVcIixcbiAgXCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWNcIixcbiAgXCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWNcIixcbiAgXCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWVcIixcbiAgXCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWVcIixcbiAgXCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlOGM4ZmRiYjg0ZTM0YTMzXCIsXG4gIFwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZDczMDFmXCIsXG4gIFwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZTM0YTMzYjMwMDAwXCIsXG4gIFwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZTM0YTMzYjMwMDAwXCIsXG4gIFwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwXCIsXG4gIFwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwXCIsXG4gIFwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmYjMwMDAwN2YwMDAwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVjZTdmMmE2YmRkYjJiOGNiZVwiLFxuICBcImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMFwiLFxuICBcImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZFwiLFxuICBcImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZFwiLFxuICBcImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YlwiLFxuICBcImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YlwiLFxuICBcImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlY2UyZjBhNmJkZGIxYzkwOTlcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGFcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTdlMWVmYzk5NGM3ZGQxYzc3XCIsXG4gIFwiZjFlZWY2ZDdiNWQ4ZGY2NWIwY2UxMjU2XCIsXG4gIFwiZjFlZWY2ZDdiNWQ4ZGY2NWIwZGQxYzc3OTgwMDQzXCIsXG4gIFwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZGQxYzc3OTgwMDQzXCIsXG4gIFwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmXCIsXG4gIFwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmXCIsXG4gIFwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTgwMDQzNjcwMDFmXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZkZTBkZGZhOWZiNWM1MWI4YVwiLFxuICBcImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZVwiLFxuICBcImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3N1wiLFxuICBcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3N1wiLFxuICBcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3N1wiLFxuICBcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3N1wiLFxuICBcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmN2ZjYjlhZGRkOGUzMWEzNTRcIixcbiAgXCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDNcIixcbiAgXCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzdcIixcbiAgXCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzdcIixcbiAgXCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzJcIixcbiAgXCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzJcIixcbiAgXCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjlcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWRmOGIxN2ZjZGJiMmM3ZmI4XCIsXG4gIFwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4XCIsXG4gIFwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0XCIsXG4gIFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0XCIsXG4gIFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0XCIsXG4gIFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0XCIsXG4gIFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZmZjdiY2ZlYzQ0ZmQ5NWYwZVwiLFxuICBcImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMlwiLFxuICBcImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNFwiLFxuICBcImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNFwiLFxuICBcImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNFwiLFxuICBcImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNFwiLFxuICBcImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmVkYTBmZWIyNGNmMDNiMjBcIixcbiAgXCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWNcIixcbiAgXCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjZcIixcbiAgXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjZcIixcbiAgXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcbiAgXCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcbiAgXCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KDMwMCwgMC41LCAwLjApLCBjdWJlaGVsaXgoLTI0MCwgMC41LCAxLjApKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IHZhciB3YXJtID0gaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgtMTAwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxuZXhwb3J0IHZhciBjb29sID0gaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgyNjAsIDAuNzUsIDAuMzUpLCBjdWJlaGVsaXgoODAsIDEuNTAsIDAuOCkpO1xuXG52YXIgYyA9IGN1YmVoZWxpeCgpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIGlmICh0IDwgMCB8fCB0ID4gMSkgdCAtPSBNYXRoLmZsb29yKHQpO1xuICB2YXIgdHMgPSBNYXRoLmFicyh0IC0gMC41KTtcbiAgYy5oID0gMzYwICogdCAtIDEwMDtcbiAgYy5zID0gMS41IC0gMS41ICogdHM7XG4gIGMubCA9IDAuOCAtIDAuOSAqIHRzO1xuICByZXR1cm4gYyArIFwiXCI7XG59XG4iLCJpbXBvcnQge3JnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5cbnZhciBjID0gcmdiKCksXG4gICAgcGlfMV8zID0gTWF0aC5QSSAvIDMsXG4gICAgcGlfMl8zID0gTWF0aC5QSSAqIDIgLyAzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIHZhciB4O1xuICB0ID0gKDAuNSAtIHQpICogTWF0aC5QSTtcbiAgYy5yID0gMjU1ICogKHggPSBNYXRoLnNpbih0KSkgKiB4O1xuICBjLmcgPSAyNTUgKiAoeCA9IE1hdGguc2luKHQgKyBwaV8xXzMpKSAqIHg7XG4gIGMuYiA9IDI1NSAqICh4ID0gTWF0aC5zaW4odCArIHBpXzJfMykpICogeDtcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmZ1bmN0aW9uIHJhbXAocmFuZ2UpIHtcbiAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHJhbmdlW01hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKiBuKSkpXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmFtcChjb2xvcnMoXCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjVcIikpO1xuXG5leHBvcnQgdmFyIG1hZ21hID0gcmFtcChjb2xvcnMoXCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmZcIikpO1xuXG5leHBvcnQgdmFyIGluZmVybm8gPSByYW1wKGNvbG9ycyhcIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNFwiKSk7XG5cbmV4cG9ydCB2YXIgcGxhc21hID0gcmFtcChjb2xvcnMoXCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjFcIikpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZGVlYmY3OWVjYWUxMzE4MmJkXCIsXG4gIFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1XCIsXG4gIFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljXCIsXG4gIFwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljXCIsXG4gIFwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXG4gIFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXG4gIFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVlMGExZDk5YjMxYTM1NFwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NVwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmMGYwZjBiZGJkYmQ2MzYzNjNcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTJcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDBcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlNmNlZmRhZTZiZTY1NTBkXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVmZWRmNWJjYmRkYzc1NmJiMVwiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODZhNTFhM1wiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZWUwZDJmYzkyNzJkZTJkMjZcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWRcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGRcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwidmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xuXG5leHBvcnQgdmFyIG1hcCA9IGFycmF5Lm1hcDtcbmV4cG9ydCB2YXIgc2xpY2UgPSBhcnJheS5zbGljZTtcbiIsImltcG9ydCB7cmFuZ2UgYXMgc2VxdWVuY2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCBvcmRpbmFsIGZyb20gXCIuL29yZGluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmFuZCgpIHtcbiAgdmFyIHNjYWxlID0gb3JkaW5hbCgpLnVua25vd24odW5kZWZpbmVkKSxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbixcbiAgICAgIG9yZGluYWxSYW5nZSA9IHNjYWxlLnJhbmdlLFxuICAgICAgcmFuZ2UgPSBbMCwgMV0sXG4gICAgICBzdGVwLFxuICAgICAgYmFuZHdpZHRoLFxuICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgIHBhZGRpbmdJbm5lciA9IDAsXG4gICAgICBwYWRkaW5nT3V0ZXIgPSAwLFxuICAgICAgYWxpZ24gPSAwLjU7XG5cbiAgZGVsZXRlIHNjYWxlLnVua25vd247XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgbiA9IGRvbWFpbigpLmxlbmd0aCxcbiAgICAgICAgcmV2ZXJzZSA9IHJhbmdlWzFdIDwgcmFuZ2VbMF0sXG4gICAgICAgIHN0YXJ0ID0gcmFuZ2VbcmV2ZXJzZSAtIDBdLFxuICAgICAgICBzdG9wID0gcmFuZ2VbMSAtIHJldmVyc2VdO1xuICAgIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDEsIG4gLSBwYWRkaW5nSW5uZXIgKyBwYWRkaW5nT3V0ZXIgKiAyKTtcbiAgICBpZiAocm91bmQpIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgIHN0YXJ0ICs9IChzdG9wIC0gc3RhcnQgLSBzdGVwICogKG4gLSBwYWRkaW5nSW5uZXIpKSAqIGFsaWduO1xuICAgIGJhbmR3aWR0aCA9IHN0ZXAgKiAoMSAtIHBhZGRpbmdJbm5lcik7XG4gICAgaWYgKHJvdW5kKSBzdGFydCA9IE1hdGgucm91bmQoc3RhcnQpLCBiYW5kd2lkdGggPSBNYXRoLnJvdW5kKGJhbmR3aWR0aCk7XG4gICAgdmFyIHZhbHVlcyA9IHNlcXVlbmNlKG4pLm1hcChmdW5jdGlvbihpKSB7IHJldHVybiBzdGFydCArIHN0ZXAgKiBpOyB9KTtcbiAgICByZXR1cm4gb3JkaW5hbFJhbmdlKHJldmVyc2UgPyB2YWx1ZXMucmV2ZXJzZSgpIDogdmFsdWVzKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4oXyksIHJlc2NhbGUoKSkgOiBkb21haW4oKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IFsrX1swXSwgK19bMV1dLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IFsrX1swXSwgK19bMV1dLCByb3VuZCA9IHRydWUsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5iYW5kd2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYmFuZHdpZHRoO1xuICB9O1xuXG4gIHNjYWxlLnN0ZXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc3RlcDtcbiAgfTtcblxuICBzY2FsZS5yb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyb3VuZCA9ICEhXywgcmVzY2FsZSgpKSA6IHJvdW5kO1xuICB9O1xuXG4gIHNjYWxlLnBhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgcGFkZGluZ091dGVyID0gK18pLCByZXNjYWxlKCkpIDogcGFkZGluZ0lubmVyO1xuICB9O1xuXG4gIHNjYWxlLnBhZGRpbmdJbm5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSBNYXRoLm1pbigxLCBfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ091dGVyID0gK18sIHJlc2NhbGUoKSkgOiBwYWRkaW5nT3V0ZXI7XG4gIH07XG5cbiAgc2NhbGUuYWxpZ24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxpZ24gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBhbGlnbjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmQoZG9tYWluKCksIHJhbmdlKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5wYWRkaW5nSW5uZXIocGFkZGluZ0lubmVyKVxuICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgLmFsaWduKGFsaWduKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHJlc2NhbGUoKSwgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRpc2goc2NhbGUpIHtcbiAgdmFyIGNvcHkgPSBzY2FsZS5jb3B5O1xuXG4gIHNjYWxlLnBhZGRpbmcgPSBzY2FsZS5wYWRkaW5nT3V0ZXI7XG4gIGRlbGV0ZSBzY2FsZS5wYWRkaW5nSW5uZXI7XG4gIGRlbGV0ZSBzY2FsZS5wYWRkaW5nT3V0ZXI7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBwb2ludGlzaChjb3B5KCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50KCkge1xuICByZXR1cm4gcG9pbnRpc2goYmFuZC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGUgYXMgaW50ZXJwb2xhdGVWYWx1ZSwgaW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHttYXAsIHNsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgdW5pdCA9IFswLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhLCBiKSB7XG4gIHJldHVybiAoYiAtPSAoYSA9ICthKSlcbiAgICAgID8gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggLSBhKSAvIGI7IH1cbiAgICAgIDogY29uc3RhbnQoaXNOYU4oYikgPyBOYU4gOiAwLjUpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGVyKGRvbWFpbikge1xuICB2YXIgYSA9IGRvbWFpblswXSwgYiA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0sIHQ7XG4gIGlmIChhID4gYikgdCA9IGEsIGEgPSBiLCBiID0gdDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHgpKTsgfTtcbn1cblxuLy8gbm9ybWFsaXplKGEsIGIpKHgpIHRha2VzIGEgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHQgaW4gWzAsMV0uXG4vLyBpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJhbmdlIHZhbHVlIHggaW4gW2EsYl0uXG5mdW5jdGlvbiBiaW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgZDAgPSBkb21haW5bMF0sIGQxID0gZG9tYWluWzFdLCByMCA9IHJhbmdlWzBdLCByMSA9IHJhbmdlWzFdO1xuICBpZiAoZDEgPCBkMCkgZDAgPSBub3JtYWxpemUoZDEsIGQwKSwgcjAgPSBpbnRlcnBvbGF0ZShyMSwgcjApO1xuICBlbHNlIGQwID0gbm9ybWFsaXplKGQwLCBkMSksIHIwID0gaW50ZXJwb2xhdGUocjAsIHIxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHIwKGQwKHgpKTsgfTtcbn1cblxuZnVuY3Rpb24gcG9seW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxuICAgICAgZCA9IG5ldyBBcnJheShqKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICBpID0gLTE7XG5cbiAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXG4gIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuXG4gIHdoaWxlICgrK2kgPCBqKSB7XG4gICAgZFtpXSA9IG5vcm1hbGl6ZShkb21haW5baV0sIGRvbWFpbltpICsgMV0pO1xuICAgIHJbaV0gPSBpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGkgPSBiaXNlY3QoZG9tYWluLCB4LCAxLCBqKSAtIDE7XG4gICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgLmludGVycG9sYXRlKHNvdXJjZS5pbnRlcnBvbGF0ZSgpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKVxuICAgICAgLnVua25vd24oc291cmNlLnVua25vd24oKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgdmFyIGRvbWFpbiA9IHVuaXQsXG4gICAgICByYW5nZSA9IHVuaXQsXG4gICAgICBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlVmFsdWUsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICB1bnRyYW5zZm9ybSxcbiAgICAgIHVua25vd24sXG4gICAgICBjbGFtcCA9IGlkZW50aXR5LFxuICAgICAgcGllY2V3aXNlLFxuICAgICAgb3V0cHV0LFxuICAgICAgaW5wdXQ7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICBwaWVjZXdpc2UgPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gY2xhbXAodW50cmFuc2Zvcm0oKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCBpbnRlcnBvbGF0ZU51bWJlcikpKSh5KSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBtYXAuY2FsbChfLCBudW1iZXIpLCBjbGFtcCA9PT0gaWRlbnRpdHkgfHwgKGNsYW1wID0gY2xhbXBlcihkb21haW4pKSwgcmVzY2FsZSgpKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gcmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlUm91bmQsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9IF8gPyBjbGFtcGVyKGRvbWFpbikgOiBpZGVudGl0eSwgc2NhbGUpIDogY2xhbXAgIT09IGlkZW50aXR5O1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cyh0cmFuc2Zvcm0sIHVudHJhbnNmb3JtKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKHRyYW5zZm9ybSwgdW50cmFuc2Zvcm0pO1xufVxuIiwiaW1wb3J0IHtpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0SW50ZXJwb2xhdG9yfSBmcm9tIFwiLi9pbml0XCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5pbXBvcnQge2xvZ2dpc2h9IGZyb20gXCIuL2xvZ1wiO1xuaW1wb3J0IHtjb3B5fSBmcm9tIFwiLi9zZXF1ZW50aWFsXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAwLjUsXG4gICAgICB4MiA9IDEsXG4gICAgICB0MCxcbiAgICAgIHQxLFxuICAgICAgdDIsXG4gICAgICBrMTAsXG4gICAgICBrMjEsXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGNsYW1wID0gZmFsc2UsXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAoeCA9IDAuNSArICgoeCA9ICt0cmFuc2Zvcm0oeCkpIC0gdDEpICogKHggPCB0MSA/IGsxMCA6IGsyMSksIGludGVycG9sYXRvcihjbGFtcCA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHgpKSA6IHgpKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0MCA9IHRyYW5zZm9ybSh4MCA9ICtfWzBdKSwgdDEgPSB0cmFuc2Zvcm0oeDEgPSArX1sxXSksIHQyID0gdHJhbnNmb3JtKHgyID0gK19bMl0pLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMC41IC8gKHQxIC0gdDApLCBrMjEgPSB0MSA9PT0gdDIgPyAwIDogMC41IC8gKHQyIC0gdDEpLCBzY2FsZSkgOiBbeDAsIHgxLCB4Ml07XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHNjYWxlKSA6IGNsYW1wO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRyYW5zZm9ybSA9IHQsIHQwID0gdCh4MCksIHQxID0gdCh4MSksIHQyID0gdCh4MiksIGsxMCA9IHQwID09PSB0MSA/IDAgOiAwLjUgLyAodDEgLSB0MCksIGsyMSA9IHQxID09PSB0MiA/IDAgOiAwLjUgLyAodDIgLSB0MSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXZlcmdpbmcoKSB7XG4gIHZhciBzY2FsZSA9IGxpbmVhcmlzaCh0cmFuc2Zvcm1lcigpKGlkZW50aXR5KSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmcoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdMb2coKSB7XG4gIHZhciBzY2FsZSA9IGxvZ2dpc2godHJhbnNmb3JtZXIoKSkuZG9tYWluKFswLjEsIDEsIDEwXSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmdMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2ZXJnaW5nU3ltbG9nKCkge1xuICB2YXIgc2NhbGUgPSBzeW1sb2dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmdTeW1sb2coKSkuY29uc3RhbnQoc2NhbGUuY29uc3RhbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGRpdmVyZ2luZ1BvdygpKS5leHBvbmVudChzY2FsZS5leHBvbmVudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmVyZ2luZ1NxcnQoKSB7XG4gIHJldHVybiBkaXZlcmdpbmdQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIiwiaW1wb3J0IHttYXB9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpZGVudGl0eShkb21haW4pIHtcbiAgdmFyIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IHg7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBzY2FsZTtcblxuICBzY2FsZS5kb21haW4gPSBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBtYXAuY2FsbChfLCBudW1iZXIpLCBzY2FsZSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaWRlbnRpdHkoZG9tYWluKS51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIGRvbWFpbiA9IGFyZ3VtZW50cy5sZW5ndGggPyBtYXAuY2FsbChkb21haW4sIG51bWJlcikgOiBbMCwgMV07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJleHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlQmFuZCxcbiAgcG9pbnQgYXMgc2NhbGVQb2ludFxufSBmcm9tIFwiLi9iYW5kXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVJZGVudGl0eVxufSBmcm9tIFwiLi9pZGVudGl0eVwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlTGluZWFyXG59IGZyb20gXCIuL2xpbmVhclwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlTG9nXG59IGZyb20gXCIuL2xvZ1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU3ltbG9nXG59IGZyb20gXCIuL3N5bWxvZ1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlT3JkaW5hbCxcbiAgaW1wbGljaXQgYXMgc2NhbGVJbXBsaWNpdFxufSBmcm9tIFwiLi9vcmRpbmFsXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVQb3csXG4gIHNxcnQgYXMgc2NhbGVTcXJ0XG59IGZyb20gXCIuL3Bvd1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpbGVcbn0gZnJvbSBcIi4vcXVhbnRpbGVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVF1YW50aXplXG59IGZyb20gXCIuL3F1YW50aXplXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVUaHJlc2hvbGRcbn0gZnJvbSBcIi4vdGhyZXNob2xkXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVUaW1lXG59IGZyb20gXCIuL3RpbWVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVV0Y1xufSBmcm9tIFwiLi91dGNUaW1lXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTZXF1ZW50aWFsLFxuICBzZXF1ZW50aWFsTG9nIGFzIHNjYWxlU2VxdWVudGlhbExvZyxcbiAgc2VxdWVudGlhbFBvdyBhcyBzY2FsZVNlcXVlbnRpYWxQb3csXG4gIHNlcXVlbnRpYWxTcXJ0IGFzIHNjYWxlU2VxdWVudGlhbFNxcnQsXG4gIHNlcXVlbnRpYWxTeW1sb2cgYXMgc2NhbGVTZXF1ZW50aWFsU3ltbG9nXG59IGZyb20gXCIuL3NlcXVlbnRpYWxcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWxRdWFudGlsZVxufSBmcm9tIFwiLi9zZXF1ZW50aWFsUXVhbnRpbGVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZURpdmVyZ2luZyxcbiAgZGl2ZXJnaW5nTG9nIGFzIHNjYWxlRGl2ZXJnaW5nTG9nLFxuICBkaXZlcmdpbmdQb3cgYXMgc2NhbGVEaXZlcmdpbmdQb3csXG4gIGRpdmVyZ2luZ1NxcnQgYXMgc2NhbGVEaXZlcmdpbmdTcXJ0LFxuICBkaXZlcmdpbmdTeW1sb2cgYXMgc2NhbGVEaXZlcmdpbmdTeW1sb2dcbn0gZnJvbSBcIi4vZGl2ZXJnaW5nXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGlja0Zvcm1hdFxufSBmcm9tIFwiLi90aWNrRm9ybWF0XCI7XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMTogdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQge3RpY2tzLCB0aWNrSW5jcmVtZW50fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCBjb250aW51b3VzLCB7Y29weSwgaWRlbnRpdHl9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICBpMCA9IDAsXG4gICAgICAgIGkxID0gZC5sZW5ndGggLSAxLFxuICAgICAgICBzdGFydCA9IGRbaTBdLFxuICAgICAgICBzdG9wID0gZFtpMV0sXG4gICAgICAgIHN0ZXA7XG5cbiAgICBpZiAoc3RvcCA8IHN0YXJ0KSB7XG4gICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XG4gICAgICBzdGVwID0gaTAsIGkwID0gaTEsIGkxID0gc3RlcDtcbiAgICB9XG5cbiAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBkW2kwXSA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgZG9tYWluKGQpO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgZFtpMV0gPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKGlkZW50aXR5LCBpZGVudGl0eSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwiaW1wb3J0IHt0aWNrc30gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2Zvcm1hdH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZVwiO1xuaW1wb3J0IHtjb3B5LCB0cmFuc2Zvcm1lcn0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZnVuY3Rpb24gdHJhbnNmb3JtTG9nKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1FeHAoeCkge1xuICByZXR1cm4gTWF0aC5leHAoeCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxvZ24oeCkge1xuICByZXR1cm4gLU1hdGgubG9nKC14KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRXhwbih4KSB7XG4gIHJldHVybiAtTWF0aC5leHAoLXgpO1xufVxuXG5mdW5jdGlvbiBwb3cxMCh4KSB7XG4gIHJldHVybiBpc0Zpbml0ZSh4KSA/ICsoXCIxZVwiICsgeCkgOiB4IDwgMCA/IDAgOiB4O1xufVxuXG5mdW5jdGlvbiBwb3dwKGJhc2UpIHtcbiAgcmV0dXJuIGJhc2UgPT09IDEwID8gcG93MTBcbiAgICAgIDogYmFzZSA9PT0gTWF0aC5FID8gTWF0aC5leHBcbiAgICAgIDogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5wb3coYmFzZSwgeCk7IH07XG59XG5cbmZ1bmN0aW9uIGxvZ3AoYmFzZSkge1xuICByZXR1cm4gYmFzZSA9PT0gTWF0aC5FID8gTWF0aC5sb2dcbiAgICAgIDogYmFzZSA9PT0gMTAgJiYgTWF0aC5sb2cxMFxuICAgICAgfHwgYmFzZSA9PT0gMiAmJiBNYXRoLmxvZzJcbiAgICAgIHx8IChiYXNlID0gTWF0aC5sb2coYmFzZSksIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgubG9nKHgpIC8gYmFzZTsgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZmxlY3QoZikge1xuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAtZigteCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dnaXNoKHRyYW5zZm9ybSkge1xuICB2YXIgc2NhbGUgPSB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nLCB0cmFuc2Zvcm1FeHApLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgYmFzZSA9IDEwLFxuICAgICAgbG9ncyxcbiAgICAgIHBvd3M7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICBsb2dzID0gbG9ncChiYXNlKSwgcG93cyA9IHBvd3AoYmFzZSk7XG4gICAgaWYgKGRvbWFpbigpWzBdIDwgMCkge1xuICAgICAgbG9ncyA9IHJlZmxlY3QobG9ncyksIHBvd3MgPSByZWZsZWN0KHBvd3MpO1xuICAgICAgdHJhbnNmb3JtKHRyYW5zZm9ybUxvZ24sIHRyYW5zZm9ybUV4cG4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nLCB0cmFuc2Zvcm1FeHApO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBzY2FsZS5iYXNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGJhc2UgPSArXywgcmVzY2FsZSgpKSA6IGJhc2U7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbihfKSwgcmVzY2FsZSgpKSA6IGRvbWFpbigpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICB1ID0gZFswXSxcbiAgICAgICAgdiA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgcjtcblxuICAgIGlmIChyID0gdiA8IHUpIGkgPSB1LCB1ID0gdiwgdiA9IGk7XG5cbiAgICB2YXIgaSA9IGxvZ3ModSksXG4gICAgICAgIGogPSBsb2dzKHYpLFxuICAgICAgICBwLFxuICAgICAgICBrLFxuICAgICAgICB0LFxuICAgICAgICBuID0gY291bnQgPT0gbnVsbCA/IDEwIDogK2NvdW50LFxuICAgICAgICB6ID0gW107XG5cbiAgICBpZiAoIShiYXNlICUgMSkgJiYgaiAtIGkgPCBuKSB7XG4gICAgICBpID0gTWF0aC5yb3VuZChpKSAtIDEsIGogPSBNYXRoLnJvdW5kKGopICsgMTtcbiAgICAgIGlmICh1ID4gMCkgZm9yICg7IGkgPCBqOyArK2kpIHtcbiAgICAgICAgZm9yIChrID0gMSwgcCA9IHBvd3MoaSk7IGsgPCBiYXNlOyArK2spIHtcbiAgICAgICAgICB0ID0gcCAqIGs7XG4gICAgICAgICAgaWYgKHQgPCB1KSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZvciAoOyBpIDwgajsgKytpKSB7XG4gICAgICAgIGZvciAoayA9IGJhc2UgLSAxLCBwID0gcG93cyhpKTsgayA+PSAxOyAtLWspIHtcbiAgICAgICAgICB0ID0gcCAqIGs7XG4gICAgICAgICAgaWYgKHQgPCB1KSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB6ID0gdGlja3MoaSwgaiwgTWF0aC5taW4oaiAtIGksIG4pKS5tYXAocG93cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHIgPyB6LnJldmVyc2UoKSA6IHo7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICBpZiAoc3BlY2lmaWVyID09IG51bGwpIHNwZWNpZmllciA9IGJhc2UgPT09IDEwID8gXCIuMGVcIiA6IFwiLFwiO1xuICAgIGlmICh0eXBlb2Ygc3BlY2lmaWVyICE9PSBcImZ1bmN0aW9uXCIpIHNwZWNpZmllciA9IGZvcm1hdChzcGVjaWZpZXIpO1xuICAgIGlmIChjb3VudCA9PT0gSW5maW5pdHkpIHJldHVybiBzcGVjaWZpZXI7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG4gICAgdmFyIGsgPSBNYXRoLm1heCgxLCBiYXNlICogY291bnQgLyBzY2FsZS50aWNrcygpLmxlbmd0aCk7IC8vIFRPRE8gZmFzdCBlc3RpbWF0ZT9cbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgdmFyIGkgPSBkIC8gcG93cyhNYXRoLnJvdW5kKGxvZ3MoZCkpKTtcbiAgICAgIGlmIChpICogYmFzZSA8IGJhc2UgLSAwLjUpIGkgKj0gYmFzZTtcbiAgICAgIHJldHVybiBpIDw9IGsgPyBzcGVjaWZpZXIoZCkgOiBcIlwiO1xuICAgIH07XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb21haW4obmljZShkb21haW4oKSwge1xuICAgICAgZmxvb3I6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHBvd3MoTWF0aC5mbG9vcihsb2dzKHgpKSk7IH0sXG4gICAgICBjZWlsOiBmdW5jdGlvbih4KSB7IHJldHVybiBwb3dzKE1hdGguY2VpbChsb2dzKHgpKSk7IH1cbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBzY2FsZSA9IGxvZ2dpc2godHJhbnNmb3JtZXIoKSkuZG9tYWluKFsxLCAxMF0pO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbG9nKCkpLmJhc2Uoc2NhbGUuYmFzZSgpKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZG9tYWluLCBpbnRlcnZhbCkge1xuICBkb21haW4gPSBkb21haW4uc2xpY2UoKTtcblxuICB2YXIgaTAgPSAwLFxuICAgICAgaTEgPSBkb21haW4ubGVuZ3RoIC0gMSxcbiAgICAgIHgwID0gZG9tYWluW2kwXSxcbiAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgIHQ7XG5cbiAgaWYgKHgxIDwgeDApIHtcbiAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICB0ID0geDAsIHgwID0geDEsIHgxID0gdDtcbiAgfVxuXG4gIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gIGRvbWFpbltpMV0gPSBpbnRlcnZhbC5jZWlsKHgxKTtcbiAgcmV0dXJuIGRvbWFpbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuIiwiaW1wb3J0IHttYXB9IGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IHZhciBpbXBsaWNpdCA9IHtuYW1lOiBcImltcGxpY2l0XCJ9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRpbmFsKCkge1xuICB2YXIgaW5kZXggPSBtYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgdmFyIGtleSA9IGQgKyBcIlwiLCBpID0gaW5kZXguZ2V0KGtleSk7XG4gICAgaWYgKCFpKSB7XG4gICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgaW5kZXguc2V0KGtleSwgaSA9IGRvbWFpbi5wdXNoKGQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlWyhpIC0gMSkgJSByYW5nZS5sZW5ndGhdO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdLCBpbmRleCA9IG1hcCgpO1xuICAgIHZhciBpID0gLTEsIG4gPSBfLmxlbmd0aCwgZCwga2V5O1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWluZGV4LmhhcyhrZXkgPSAoZCA9IF9baV0pICsgXCJcIikpIGluZGV4LnNldChrZXksIGRvbWFpbi5wdXNoKGQpKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcmRpbmFsKGRvbWFpbiwgcmFuZ2UpLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7Y29weSwgaWRlbnRpdHksIHRyYW5zZm9ybWVyfSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Qb3coZXhwb25lbnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCA8IDAgPyAtTWF0aC5wb3coLXgsIGV4cG9uZW50KSA6IE1hdGgucG93KHgsIGV4cG9uZW50KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3FydCh4KSB7XG4gIHJldHVybiB4IDwgMCA/IC1NYXRoLnNxcnQoLXgpIDogTWF0aC5zcXJ0KHgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TcXVhcmUoeCkge1xuICByZXR1cm4geCA8IDAgPyAteCAqIHggOiB4ICogeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvd2lzaCh0cmFuc2Zvcm0pIHtcbiAgdmFyIHNjYWxlID0gdHJhbnNmb3JtKGlkZW50aXR5LCBpZGVudGl0eSksXG4gICAgICBleHBvbmVudCA9IDE7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICByZXR1cm4gZXhwb25lbnQgPT09IDEgPyB0cmFuc2Zvcm0oaWRlbnRpdHksIGlkZW50aXR5KVxuICAgICAgICA6IGV4cG9uZW50ID09PSAwLjUgPyB0cmFuc2Zvcm0odHJhbnNmb3JtU3FydCwgdHJhbnNmb3JtU3F1YXJlKVxuICAgICAgICA6IHRyYW5zZm9ybSh0cmFuc2Zvcm1Qb3coZXhwb25lbnQpLCB0cmFuc2Zvcm1Qb3coMSAvIGV4cG9uZW50KSk7XG4gIH1cblxuICBzY2FsZS5leHBvbmVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHBvbmVudCA9ICtfLCByZXNjYWxlKCkpIDogZXhwb25lbnQ7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvdygpIHtcbiAgdmFyIHNjYWxlID0gcG93aXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgcG93KCkpLmV4cG9uZW50KHNjYWxlLmV4cG9uZW50KCkpO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcXJ0KCkge1xuICByZXR1cm4gcG93LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuZXhwb25lbnQoMC41KTtcbn1cbiIsImltcG9ydCB7YXNjZW5kaW5nLCBiaXNlY3QsIHF1YW50aWxlIGFzIHRocmVzaG9sZH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhbnRpbGUoKSB7XG4gIHZhciBkb21haW4gPSBbXSxcbiAgICAgIHJhbmdlID0gW10sXG4gICAgICB0aHJlc2hvbGRzID0gW10sXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIGkgPSAwLCBuID0gTWF0aC5tYXgoMSwgcmFuZ2UubGVuZ3RoKTtcbiAgICB0aHJlc2hvbGRzID0gbmV3IEFycmF5KG4gLSAxKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGhyZXNob2xkc1tpIC0gMV0gPSB0aHJlc2hvbGQoZG9tYWluLCBpIC8gbik7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IHJhbmdlW2Jpc2VjdCh0aHJlc2hvbGRzLCB4KV07XG4gIH1cblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBpIDwgMCA/IFtOYU4sIE5hTl0gOiBbXG4gICAgICBpID4gMCA/IHRocmVzaG9sZHNbaSAtIDFdIDogZG9tYWluWzBdLFxuICAgICAgaSA8IHRocmVzaG9sZHMubGVuZ3RoID8gdGhyZXNob2xkc1tpXSA6IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV1cbiAgICBdO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IF8ubGVuZ3RoLCBkOyBpIDwgbjsgKytpKSBpZiAoZCA9IF9baV0sIGQgIT0gbnVsbCAmJiAhaXNOYU4oZCA9ICtkKSkgZG9tYWluLnB1c2goZCk7XG4gICAgZG9tYWluLnNvcnQoYXNjZW5kaW5nKTtcbiAgICByZXR1cm4gcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5xdWFudGlsZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhyZXNob2xkcy5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcXVhbnRpbGUoKVxuICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuIiwiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YW50aXplKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgbiA9IDEsXG4gICAgICBkb21haW4gPSBbMC41XSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgdW5rbm93bjtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPD0geCA/IHJhbmdlW2Jpc2VjdChkb21haW4sIHgsIDAsIG4pXSA6IHVua25vd247XG4gIH1cblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBpID0gLTE7XG4gICAgZG9tYWluID0gbmV3IEFycmF5KG4pO1xuICAgIHdoaWxlICgrK2kgPCBuKSBkb21haW5baV0gPSAoKGkgKyAxKSAqIHgxIC0gKGkgLSBuKSAqIHgwKSAvIChuICsgMSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gK19bMF0sIHgxID0gK19bMV0sIHJlc2NhbGUoKSkgOiBbeDAsIHgxXTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChuID0gKHJhbmdlID0gc2xpY2UuY2FsbChfKSkubGVuZ3RoIC0gMSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUuaW52ZXJ0RXh0ZW50ID0gZnVuY3Rpb24oeSkge1xuICAgIHZhciBpID0gcmFuZ2UuaW5kZXhPZih5KTtcbiAgICByZXR1cm4gaSA8IDAgPyBbTmFOLCBOYU5dXG4gICAgICAgIDogaSA8IDEgPyBbeDAsIGRvbWFpblswXV1cbiAgICAgICAgOiBpID49IG4gPyBbZG9tYWluW24gLSAxXSwgeDFdXG4gICAgICAgIDogW2RvbWFpbltpIC0gMV0sIGRvbWFpbltpXV07XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUudGhyZXNob2xkcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHF1YW50aXplKClcbiAgICAgICAgLmRvbWFpbihbeDAsIHgxXSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KGxpbmVhcmlzaChzY2FsZSksIGFyZ3VtZW50cyk7XG59XG4iLCJpbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7bG9nZ2lzaH0gZnJvbSBcIi4vbG9nXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgdDAsXG4gICAgICB0MSxcbiAgICAgIGsxMCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGludGVycG9sYXRvciA9IGlkZW50aXR5LFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IGludGVycG9sYXRvcihrMTAgPT09IDAgPyAwLjUgOiAoeCA9ICh0cmFuc2Zvcm0oeCkgLSB0MCkgKiBrMTAsIGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeCkpIDogeCkpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHQwID0gdHJhbnNmb3JtKHgwID0gK19bMF0pLCB0MSA9IHRyYW5zZm9ybSh4MSA9ICtfWzFdKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDEgLyAodDEgLSB0MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB0MCA9IHQoeDApLCB0MSA9IHQoeDEpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMSAvICh0MSAtIHQwKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLmludGVycG9sYXRvcihzb3VyY2UuaW50ZXJwb2xhdG9yKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbCgpIHtcbiAgdmFyIHNjYWxlID0gbGluZWFyaXNoKHRyYW5zZm9ybWVyKCkoaWRlbnRpdHkpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWwoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsTG9nKCkge1xuICB2YXIgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMSwgMTBdKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbFN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc2VxdWVudGlhbFN5bWxvZygpKS5jb25zdGFudChzY2FsZS5jb25zdGFudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbnRpYWxQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxQb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsU3FydCgpIHtcbiAgcmV0dXJuIHNlcXVlbnRpYWxQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIiwiaW1wb3J0IHthc2NlbmRpbmcsIGJpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbFF1YW50aWxlKCkge1xuICB2YXIgZG9tYWluID0gW10sXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgaWYgKCFpc05hTih4ID0gK3gpKSByZXR1cm4gaW50ZXJwb2xhdG9yKChiaXNlY3QoZG9tYWluLCB4KSAtIDEpIC8gKGRvbWFpbi5sZW5ndGggLSAxKSk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBfLmxlbmd0aCwgZDsgaSA8IG47ICsraSkgaWYgKGQgPSBfW2ldLCBkICE9IG51bGwgJiYgIWlzTmFOKGQgPSArZCkpIGRvbWFpbi5wdXNoKGQpO1xuICAgIGRvbWFpbi5zb3J0KGFzY2VuZGluZyk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXF1ZW50aWFsUXVhbnRpbGUoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7Y29weSwgdHJhbnNmb3JtZXJ9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVN5bWxvZyhjKSB7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIE1hdGguc2lnbih4KSAqIE1hdGgubG9nMXAoTWF0aC5hYnMoeCAvIGMpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3ltZXhwKGMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gTWF0aC5zaWduKHgpICogTWF0aC5leHBtMShNYXRoLmFicyh4KSkgKiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ltbG9naXNoKHRyYW5zZm9ybSkge1xuICB2YXIgYyA9IDEsIHNjYWxlID0gdHJhbnNmb3JtKHRyYW5zZm9ybVN5bWxvZyhjKSwgdHJhbnNmb3JtU3ltZXhwKGMpKTtcblxuICBzY2FsZS5jb25zdGFudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRyYW5zZm9ybSh0cmFuc2Zvcm1TeW1sb2coYyA9ICtfKSwgdHJhbnNmb3JtU3ltZXhwKGMpKSA6IGM7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc3ltbG9nKCkpLmNvbnN0YW50KHNjYWxlLmNvbnN0YW50KCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyZXNob2xkKCkge1xuICB2YXIgZG9tYWluID0gWzAuNV0sXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHVua25vd24sXG4gICAgICBuID0gMTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPD0geCA/IHJhbmdlW2Jpc2VjdChkb21haW4sIHgsIDAsIG4pXSA6IHVua25vd247XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gc2xpY2UuY2FsbChfKSwgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCAtIDEpLCBzY2FsZSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGggLSAxKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBbZG9tYWluW2kgLSAxXSwgZG9tYWluW2ldXTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhyZXNob2xkKClcbiAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgIC5yYW5nZShyYW5nZSlcbiAgICAgICAgLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICBwcmVjaXNpb247XG4gIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlIFwic1wiOiB7XG4gICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBcIlwiOlxuICAgIGNhc2UgXCJlXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZlwiOlxuICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XG59XG4iLCJpbXBvcnQge2Jpc2VjdG9yLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3RpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZU1pbGxpc2Vjb25kfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHt0aW1lRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCB7bWFwfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5LCBpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2VcIjtcblxudmFyIGR1cmF0aW9uU2Vjb25kID0gMTAwMCxcbiAgICBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjAsXG4gICAgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MCxcbiAgICBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0LFxuICAgIGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNyxcbiAgICBkdXJhdGlvbk1vbnRoID0gZHVyYXRpb25EYXkgKiAzMCxcbiAgICBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcblxuZnVuY3Rpb24gZGF0ZSh0KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh0KTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlID8gK3QgOiArbmV3IERhdGUoK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLCBmb3JtYXQpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cyhpZGVudGl0eSwgaWRlbnRpdHkpLFxuICAgICAgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0LFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHZhciBmb3JtYXRNaWxsaXNlY29uZCA9IGZvcm1hdChcIi4lTFwiKSxcbiAgICAgIGZvcm1hdFNlY29uZCA9IGZvcm1hdChcIjolU1wiKSxcbiAgICAgIGZvcm1hdE1pbnV0ZSA9IGZvcm1hdChcIiVJOiVNXCIpLFxuICAgICAgZm9ybWF0SG91ciA9IGZvcm1hdChcIiVJICVwXCIpLFxuICAgICAgZm9ybWF0RGF5ID0gZm9ybWF0KFwiJWEgJWRcIiksXG4gICAgICBmb3JtYXRXZWVrID0gZm9ybWF0KFwiJWIgJWRcIiksXG4gICAgICBmb3JtYXRNb250aCA9IGZvcm1hdChcIiVCXCIpLFxuICAgICAgZm9ybWF0WWVhciA9IGZvcm1hdChcIiVZXCIpO1xuXG4gIHZhciB0aWNrSW50ZXJ2YWxzID0gW1xuICAgIFtzZWNvbmQsICAxLCAgICAgIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAgNSwgIDUgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgMTUsIDE1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDMwLCAzMCAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbbWludXRlLCAgMSwgICAgICBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgIDUsICA1ICogZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsIDE1LCAxNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAzMCwgMzAgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgWyAgaG91ciwgIDEsICAgICAgZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsICAzLCAgMyAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgNiwgIDYgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgMTIsIDEyICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgICBkYXksICAxLCAgICAgIGR1cmF0aW9uRGF5ICAgXSxcbiAgICBbICAgZGF5LCAgMiwgIDIgKiBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgd2VlaywgIDEsICAgICAgZHVyYXRpb25XZWVrICBdLFxuICAgIFsgbW9udGgsICAxLCAgICAgIGR1cmF0aW9uTW9udGggXSxcbiAgICBbIG1vbnRoLCAgMywgIDMgKiBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyAgeWVhciwgIDEsICAgICAgZHVyYXRpb25ZZWFyICBdXG4gIF07XG5cbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChkYXRlKSB7XG4gICAgcmV0dXJuIChzZWNvbmQoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWlsbGlzZWNvbmRcbiAgICAgICAgOiBtaW51dGUoZGF0ZSkgPCBkYXRlID8gZm9ybWF0U2Vjb25kXG4gICAgICAgIDogaG91cihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaW51dGVcbiAgICAgICAgOiBkYXkoZGF0ZSkgPCBkYXRlID8gZm9ybWF0SG91clxuICAgICAgICA6IG1vbnRoKGRhdGUpIDwgZGF0ZSA/ICh3ZWVrKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdERheSA6IGZvcm1hdFdlZWspXG4gICAgICAgIDogeWVhcihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNb250aFxuICAgICAgICA6IGZvcm1hdFllYXIpKGRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGlja0ludGVydmFsKGludGVydmFsLCBzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChpbnRlcnZhbCA9PSBudWxsKSBpbnRlcnZhbCA9IDEwO1xuXG4gICAgLy8gSWYgYSBkZXNpcmVkIHRpY2sgY291bnQgaXMgc3BlY2lmaWVkLCBwaWNrIGEgcmVhc29uYWJsZSB0aWNrIGludGVydmFsXG4gICAgLy8gYmFzZWQgb24gdGhlIGV4dGVudCBvZiB0aGUgZG9tYWluIGFuZCBhIHJvdWdoIGVzdGltYXRlIG9mIHRpY2sgc2l6ZS5cbiAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSBpbnRlcnZhbCBpcyBhbHJlYWR5IGEgdGltZSBpbnRlcnZhbCBhbmQgdXNlIGl0LlxuICAgIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gaW50ZXJ2YWwsXG4gICAgICAgICAgaSA9IGJpc2VjdG9yKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGlbMl07IH0pLnJpZ2h0KHRpY2tJbnRlcnZhbHMsIHRhcmdldCk7XG4gICAgICBpZiAoaSA9PT0gdGlja0ludGVydmFscy5sZW5ndGgpIHtcbiAgICAgICAgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0IC8gZHVyYXRpb25ZZWFyLCBzdG9wIC8gZHVyYXRpb25ZZWFyLCBpbnRlcnZhbCk7XG4gICAgICAgIGludGVydmFsID0geWVhcjtcbiAgICAgIH0gZWxzZSBpZiAoaSkge1xuICAgICAgICBpID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgICAgICBzdGVwID0gaVsxXTtcbiAgICAgICAgaW50ZXJ2YWwgPSBpWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcCA9IE1hdGgubWF4KHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBpbnRlcnZhbCksIDEpO1xuICAgICAgICBpbnRlcnZhbCA9IG1pbGxpc2Vjb25kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGVwID09IG51bGwgPyBpbnRlcnZhbCA6IGludGVydmFsLmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpbnZlcnQoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGRvbWFpbihtYXAuY2FsbChfLCBudW1iZXIpKSA6IGRvbWFpbigpLm1hcChkYXRlKTtcbiAgfTtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgdDAgPSBkWzBdLFxuICAgICAgICB0MSA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgciA9IHQxIDwgdDAsXG4gICAgICAgIHQ7XG4gICAgaWYgKHIpIHQgPSB0MCwgdDAgPSB0MSwgdDEgPSB0O1xuICAgIHQgPSB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIHQwLCB0MSwgc3RlcCk7XG4gICAgdCA9IHQgPyB0LnJhbmdlKHQwLCB0MSArIDEpIDogW107IC8vIGluY2x1c2l2ZSBzdG9wXG4gICAgcmV0dXJuIHIgPyB0LnJldmVyc2UoKSA6IHQ7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gKGludGVydmFsID0gdGlja0ludGVydmFsKGludGVydmFsLCBkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIHN0ZXApKVxuICAgICAgICA/IGRvbWFpbihuaWNlKGQsIGludGVydmFsKSlcbiAgICAgICAgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwgZm9ybWF0KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShjYWxlbmRhcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVNaWxsaXNlY29uZCwgdGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyMDAwLCAwLCAxKSwgbmV3IERhdGUoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7Y2FsZW5kYXJ9IGZyb20gXCIuL3RpbWVcIjtcbmltcG9ydCB7dXRjRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCB7dXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlLCB1dGNTZWNvbmQsIHV0Y01pbGxpc2Vjb25kfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlLCB1dGNTZWNvbmQsIHV0Y01pbGxpc2Vjb25kLCB1dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMjAwMCwgMCwgMSksIERhdGUuVVRDKDIwMDAsIDAsIDIpXSksIGFyZ3VtZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuL2NyZWF0b3JcIjtcbmltcG9ydCBzZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdChjcmVhdG9yKG5hbWUpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSk7XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuL25hbWVzcGFjZVwiO1xuaW1wb3J0IHt4aHRtbH0gZnJvbSBcIi4vbmFtZXNwYWNlc1wiO1xuXG5mdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgIHJldHVybiB1cmkgPT09IHhodG1sICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IHhodG1sXG4gICAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKVxuICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gKGZ1bGxuYW1lLmxvY2FsXG4gICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgOiBjcmVhdG9ySW5oZXJpdCkoZnVsbG5hbWUpO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0ZX0gZnJvbSBcIi4vY3JlYXRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3JlYXRvcn0gZnJvbSBcIi4vY3JlYXRvclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxvY2FsfSBmcm9tIFwiLi9sb2NhbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1hdGNoZXJ9IGZyb20gXCIuL21hdGNoZXJcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtb3VzZX0gZnJvbSBcIi4vbW91c2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBuYW1lc3BhY2V9IGZyb20gXCIuL25hbWVzcGFjZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG5hbWVzcGFjZXN9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjbGllbnRQb2ludH0gZnJvbSBcIi4vcG9pbnRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3R9IGZyb20gXCIuL3NlbGVjdFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdEFsbH0gZnJvbSBcIi4vc2VsZWN0QWxsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0aW9ufSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3Rvcn0gZnJvbSBcIi4vc2VsZWN0b3JcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3RvckFsbH0gZnJvbSBcIi4vc2VsZWN0b3JBbGxcIjtcbmV4cG9ydCB7c3R5bGVWYWx1ZSBhcyBzdHlsZX0gZnJvbSBcIi4vc2VsZWN0aW9uL3N0eWxlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdG91Y2h9IGZyb20gXCIuL3RvdWNoXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdG91Y2hlc30gZnJvbSBcIi4vdG91Y2hlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHdpbmRvd30gZnJvbSBcIi4vd2luZG93XCI7XG5leHBvcnQge2V2ZW50LCBjdXN0b21FdmVudH0gZnJvbSBcIi4vc2VsZWN0aW9uL29uXCI7XG4iLCJ2YXIgbmV4dElkID0gMDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9jYWwoKSB7XG4gIHJldHVybiBuZXcgTG9jYWw7XG59XG5cbmZ1bmN0aW9uIExvY2FsKCkge1xuICB0aGlzLl8gPSBcIkBcIiArICgrK25leHRJZCkudG9TdHJpbmcoMzYpO1xufVxuXG5Mb2NhbC5wcm90b3R5cGUgPSBsb2NhbC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBMb2NhbCxcbiAgZ2V0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGlkID0gdGhpcy5fO1xuICAgIHdoaWxlICghKGlkIGluIG5vZGUpKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICAgIHJldHVybiBub2RlW2lkXTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihub2RlLCB2YWx1ZSkge1xuICAgIHJldHVybiBub2RlW3RoaXMuX10gPSB2YWx1ZTtcbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuXyBpbiBub2RlICYmIGRlbGV0ZSBub2RlW3RoaXMuX107XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuIiwiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50XCI7XG5pbXBvcnQgcG9pbnQgZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICB2YXIgZXZlbnQgPSBzb3VyY2VFdmVudCgpO1xuICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpIGV2ZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG59XG4iLCJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBldmVudCkge1xuICB2YXIgc3ZnID0gbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgbm9kZTtcblxuICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgcG9pbnQueCA9IGV2ZW50LmNsaWVudFgsIHBvaW50LnkgPSBldmVudC5jbGllbnRZO1xuICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcbiAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICB9XG5cbiAgdmFyIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4gW2V2ZW50LmNsaWVudFggLSByZWN0LmxlZnQgLSBub2RlLmNsaWVudExlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIG5vZGUuY2xpZW50VG9wXTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9KTtcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4uL25hbWVzcGFjZVwiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHYpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUoKTtcbiAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcbiAgICAgICAgPyBub2RlLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbClcbiAgICAgICAgOiBub2RlLmdldEF0dHJpYnV0ZShmdWxsbmFtZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkpKShmdWxsbmFtZSwgdmFsdWUpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbMF07XG4gIGFyZ3VtZW50c1swXSA9IHRoaXM7XG4gIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICByZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZShmYWxzZSksIHRoaXMubmV4dFNpYmxpbmcpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICByZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSh0cnVlKSwgdGhpcy5uZXh0U2libGluZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZXApIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGRlZXAgPyBzZWxlY3Rpb25fY2xvbmVEZWVwIDogc2VsZWN0aW9uX2Nsb25lU2hhbGxvdyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCB7RW50ZXJOb2RlfSBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudFwiO1xuXG52YXIga2V5UHJlZml4ID0gXCIkXCI7IC8vIFByb3RlY3QgYWdhaW5zdCBrZXlzIGxpa2Ug4oCcX19wcm90b19f4oCdLlxuXG5mdW5jdGlvbiBiaW5kSW5kZXgocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSkge1xuICB2YXIgaSA9IDAsXG4gICAgICBub2RlLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cbiAgLy8gUHV0IGFueSBudWxsIG5vZGVzIGludG8gZW50ZXIuXG4gIC8vIFB1dCBhbnkgcmVtYWluaW5nIGRhdGEgaW50byBlbnRlci5cbiAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBkb27igJl0IGZpdCBpbnRvIGV4aXQuXG4gIGZvciAoOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xuICB2YXIgaSxcbiAgICAgIG5vZGUsXG4gICAgICBub2RlQnlLZXlWYWx1ZSA9IHt9LFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICAgIGlmIChrZXlWYWx1ZSBpbiBub2RlQnlLZXlWYWx1ZSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSk7XG4gICAgaWYgKG5vZGUgPSBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0pIHtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBhbnkgcmVtYWluaW5nIG5vZGVzIHRoYXQgd2VyZSBub3QgYm91bmQgdG8gZGF0YSB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAobm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVzW2ldXSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICBkYXRhID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaiA9IC0xO1xuICAgIHRoaXMuZWFjaChmdW5jdGlvbihkKSB7IGRhdGFbKytqXSA9IGQ7IH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIGJpbmQgPSBrZXkgPyBiaW5kS2V5IDogYmluZEluZGV4LFxuICAgICAgcGFyZW50cyA9IHRoaXMuX3BhcmVudHMsXG4gICAgICBncm91cHMgPSB0aGlzLl9ncm91cHM7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB2YWx1ZSA9IGNvbnN0YW50KHZhbHVlKTtcblxuICBmb3IgKHZhciBtID0gZ3JvdXBzLmxlbmd0aCwgdXBkYXRlID0gbmV3IEFycmF5KG0pLCBlbnRlciA9IG5ldyBBcnJheShtKSwgZXhpdCA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tqXSxcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbal0sXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgICBkYXRhID0gdmFsdWUuY2FsbChwYXJlbnQsIHBhcmVudCAmJiBwYXJlbnQuX19kYXRhX18sIGosIHBhcmVudHMpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMubm9kZSgpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZW50ZXIgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGVyTm9kZShwYXJlbnQsIGRhdHVtKSB7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICB0aGlzLm5hbWVzcGFjZVVSSSA9IHBhcmVudC5uYW1lc3BhY2VVUkk7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMuX19kYXRhX18gPSBkYXR1bTtcbn1cblxuRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEVudGVyTm9kZSxcbiAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCB0aGlzLl9uZXh0KTsgfSxcbiAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7IH0sXG4gIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7IH1cbn07XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZVwiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBtYXRjaGVyIGZyb20gXCIuLi9tYXRjaGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXRcIjtcbmltcG9ydCBzZWxlY3Rpb25fam9pbiBmcm9tIFwiLi9qb2luXCI7XG5pbXBvcnQgc2VsZWN0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29yZGVyIGZyb20gXCIuL29yZGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NvcnQgZnJvbSBcIi4vc29ydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jYWxsIGZyb20gXCIuL2NhbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZXMgZnJvbSBcIi4vbm9kZXNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZSBmcm9tIFwiLi9ub2RlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NpemUgZnJvbSBcIi4vc2l6ZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbXB0eSBmcm9tIFwiLi9lbXB0eVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXR0ciBmcm9tIFwiLi9hdHRyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3Byb3BlcnR5IGZyb20gXCIuL3Byb3BlcnR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NsYXNzZWQgZnJvbSBcIi4vY2xhc3NlZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl90ZXh0IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCBzZWxlY3Rpb25faHRtbCBmcm9tIFwiLi9odG1sXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JhaXNlIGZyb20gXCIuL3JhaXNlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2xvd2VyIGZyb20gXCIuL2xvd2VyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2FwcGVuZCBmcm9tIFwiLi9hcHBlbmRcIjtcbmltcG9ydCBzZWxlY3Rpb25faW5zZXJ0IGZyb20gXCIuL2luc2VydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Nsb25lIGZyb20gXCIuL2Nsb25lXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdHVtIGZyb20gXCIuL2RhdHVtXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29uIGZyb20gXCIuL29uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Rpc3BhdGNoIGZyb20gXCIuL2Rpc3BhdGNoXCI7XG5cbmV4cG9ydCB2YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIG9yZGVyOiBzZWxlY3Rpb25fb3JkZXIsXG4gIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxuICBjYWxsOiBzZWxlY3Rpb25fY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX25vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX2VtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcbiAgYXR0cjogc2VsZWN0aW9uX2F0dHIsXG4gIHN0eWxlOiBzZWxlY3Rpb25fc3R5bGUsXG4gIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXG4gIGNsYXNzZWQ6IHNlbGVjdGlvbl9jbGFzc2VkLFxuICB0ZXh0OiBzZWxlY3Rpb25fdGV4dCxcbiAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXG4gIHJhaXNlOiBzZWxlY3Rpb25fcmFpc2UsXG4gIGxvd2VyOiBzZWxlY3Rpb25fbG93ZXIsXG4gIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcbiAgaW5zZXJ0OiBzZWxlY3Rpb25faW5zZXJ0LFxuICByZW1vdmU6IHNlbGVjdGlvbl9yZW1vdmUsXG4gIGNsb25lOiBzZWxlY3Rpb25fY2xvbmUsXG4gIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXG4gIG9uOiBzZWxlY3Rpb25fb24sXG4gIGRpc3BhdGNoOiBzZWxlY3Rpb25fZGlzcGF0Y2hcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdGlvbjtcbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvbmVudGVyLCBvbnVwZGF0ZSwgb25leGl0KSB7XG4gIHZhciBlbnRlciA9IHRoaXMuZW50ZXIoKSwgdXBkYXRlID0gdGhpcywgZXhpdCA9IHRoaXMuZXhpdCgpO1xuICBlbnRlciA9IHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIgPyBvbmVudGVyKGVudGVyKSA6IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIGlmIChvbnVwZGF0ZSAhPSBudWxsKSB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rpb24pIHtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gc2VsZWN0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBpID0gLTE7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgbm9kZXNbKytpXSA9IHRoaXM7IH0pO1xuICByZXR1cm4gbm9kZXM7XG59XG4iLCJ2YXIgZmlsdGVyRXZlbnRzID0ge307XG5cbmV4cG9ydCB2YXIgZXZlbnQgPSBudWxsO1xuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICBpZiAoIShcIm9ubW91c2VlbnRlclwiIGluIGVsZW1lbnQpKSB7XG4gICAgZmlsdGVyRXZlbnRzID0ge21vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsIG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIn07XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsdGVyQ29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCk7XG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICBpZiAoIXJlbGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRoaXMgJiYgIShyZWxhdGVkLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpICYgOCkpKSB7XG4gICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKSB7XG4gIHJldHVybiBmdW5jdGlvbihldmVudDEpIHtcbiAgICB2YXIgZXZlbnQwID0gZXZlbnQ7IC8vIEV2ZW50cyBjYW4gYmUgcmVlbnRyYW50IChlLmcuLCBmb2N1cykuXG4gICAgZXZlbnQgPSBldmVudDE7XG4gICAgdHJ5IHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgdGhpcy5fX2RhdGFfXywgaW5kZXgsIGdyb3VwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXZlbnQgPSBldmVudDA7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvblJlbW92ZSh0eXBlbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uO1xuICAgIGlmICghb24pIHJldHVybjtcbiAgICBmb3IgKHZhciBqID0gMCwgaSA9IC0xLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAobyA9IG9uW2pdLCAoIXR5cGVuYW1lLnR5cGUgfHwgby50eXBlID09PSB0eXBlbmFtZS50eXBlKSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5jYXB0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uWysraV0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKytpKSBvbi5sZW5ndGggPSBpO1xuICAgIGVsc2UgZGVsZXRlIHRoaXMuX19vbjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25BZGQodHlwZW5hbWUsIHZhbHVlLCBjYXB0dXJlKSB7XG4gIHZhciB3cmFwID0gZmlsdGVyRXZlbnRzLmhhc093blByb3BlcnR5KHR5cGVuYW1lLnR5cGUpID8gZmlsdGVyQ29udGV4dExpc3RlbmVyIDogY29udGV4dExpc3RlbmVyO1xuICByZXR1cm4gZnVuY3Rpb24oZCwgaSwgZ3JvdXApIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb24sIG8sIGxpc3RlbmVyID0gd3JhcCh2YWx1ZSwgaSwgZ3JvdXApO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8uY2FwdHVyZSA9IGNhcHR1cmUpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBjYXB0dXJlOiBjYXB0dXJlfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGlmIChjYXB0dXJlID09IG51bGwpIGNhcHR1cmUgPSBmYWxzZTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIGNhcHR1cmUpKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FdmVudChldmVudDEsIGxpc3RlbmVyLCB0aGF0LCBhcmdzKSB7XG4gIHZhciBldmVudDAgPSBldmVudDtcbiAgZXZlbnQxLnNvdXJjZUV2ZW50ID0gZXZlbnQ7XG4gIGV2ZW50ID0gZXZlbnQxO1xuICB0cnkge1xuICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBldmVudCA9IGV2ZW50MDtcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gLTEsIG0gPSBncm91cHMubGVuZ3RoOyArK2ogPCBtOykge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgaWYgKG5leHQgJiYgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuZXh0KSBeIDQpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZnVuY3Rpb24gcHJvcGVydHlSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIHRoaXNbbmFtZV07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5Q29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xuICAgIGVsc2UgdGhpc1tuYW1lXSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHByb3BlcnR5UmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHByb3BlcnR5RnVuY3Rpb25cbiAgICAgICAgICA6IHByb3BlcnR5Q29uc3RhbnQpKG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKClbbmFtZV07XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gcmVtb3ZlKCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzZWxlY3RvckFsbCBmcm9tIFwiLi4vc2VsZWN0b3JBbGxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHNpemUgPSAwO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7ICsrc2l6ZTsgfSk7XG4gIHJldHVybiBzaXplO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93XCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gbm9uZSgpIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gbm9uZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9O1xufVxuIiwiZnVuY3Rpb24gZW1wdHkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICB9O1xufVxuIiwiaW1wb3J0IHtldmVudH0gZnJvbSBcIi4vc2VsZWN0aW9uL29uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY3VycmVudCA9IGV2ZW50LCBzb3VyY2U7XG4gIHdoaWxlIChzb3VyY2UgPSBjdXJyZW50LnNvdXJjZUV2ZW50KSBjdXJyZW50ID0gc291cmNlO1xuICByZXR1cm4gY3VycmVudDtcbn1cbiIsImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudFwiO1xuaW1wb3J0IHBvaW50IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIHRvdWNoZXMsIGlkZW50aWZpZXIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSBpZGVudGlmaWVyID0gdG91Y2hlcywgdG91Y2hlcyA9IHNvdXJjZUV2ZW50KCkuY2hhbmdlZFRvdWNoZXM7XG5cbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0b3VjaGVzID8gdG91Y2hlcy5sZW5ndGggOiAwLCB0b3VjaDsgaSA8IG47ICsraSkge1xuICAgIGlmICgodG91Y2ggPSB0b3VjaGVzW2ldKS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXR1cm4gcG9pbnQobm9kZSwgdG91Y2gpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50XCI7XG5pbXBvcnQgcG9pbnQgZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgdG91Y2hlcykge1xuICBpZiAodG91Y2hlcyA9PSBudWxsKSB0b3VjaGVzID0gc291cmNlRXZlbnQoKS50b3VjaGVzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBuID0gdG91Y2hlcyA/IHRvdWNoZXMubGVuZ3RoIDogMCwgcG9pbnRzID0gbmV3IEFycmF5KG4pOyBpIDwgbjsgKytpKSB7XG4gICAgcG9pbnRzW2ldID0gcG9pbnQobm9kZSwgdG91Y2hlc1tpXSk7XG4gIH1cblxuICByZXR1cm4gcG9pbnRzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gKG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIC8vIG5vZGUgaXMgYSBOb2RlXG4gICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IHthYnMsIGFjb3MsIGFzaW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgbWF4LCBtaW4sIHBpLCBzaW4sIHNxcnQsIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuXG5mdW5jdGlvbiBhcmNJbm5lclJhZGl1cyhkKSB7XG4gIHJldHVybiBkLmlubmVyUmFkaXVzO1xufVxuXG5mdW5jdGlvbiBhcmNPdXRlclJhZGl1cyhkKSB7XG4gIHJldHVybiBkLm91dGVyUmFkaXVzO1xufVxuXG5mdW5jdGlvbiBhcmNTdGFydEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuc3RhcnRBbmdsZTtcbn1cblxuZnVuY3Rpb24gYXJjRW5kQW5nbGUoZCkge1xuICByZXR1cm4gZC5lbmRBbmdsZTtcbn1cblxuZnVuY3Rpb24gYXJjUGFkQW5nbGUoZCkge1xuICByZXR1cm4gZCAmJiBkLnBhZEFuZ2xlOyAvLyBOb3RlOiBvcHRpb25hbCFcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0KHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5Mykge1xuICB2YXIgeDEwID0geDEgLSB4MCwgeTEwID0geTEgLSB5MCxcbiAgICAgIHgzMiA9IHgzIC0geDIsIHkzMiA9IHkzIC0geTIsXG4gICAgICB0ID0geTMyICogeDEwIC0geDMyICogeTEwO1xuICBpZiAodCAqIHQgPCBlcHNpbG9uKSByZXR1cm47XG4gIHQgPSAoeDMyICogKHkwIC0geTIpIC0geTMyICogKHgwIC0geDIpKSAvIHQ7XG4gIHJldHVybiBbeDAgKyB0ICogeDEwLCB5MCArIHQgKiB5MTBdO1xufVxuXG4vLyBDb21wdXRlIHBlcnBlbmRpY3VsYXIgb2Zmc2V0IGxpbmUgb2YgbGVuZ3RoIHJjLlxuLy8gaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9DaXJjbGUtTGluZUludGVyc2VjdGlvbi5odG1sXG5mdW5jdGlvbiBjb3JuZXJUYW5nZW50cyh4MCwgeTAsIHgxLCB5MSwgcjEsIHJjLCBjdykge1xuICB2YXIgeDAxID0geDAgLSB4MSxcbiAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICBsbyA9IChjdyA/IHJjIDogLXJjKSAvIHNxcnQoeDAxICogeDAxICsgeTAxICogeTAxKSxcbiAgICAgIG94ID0gbG8gKiB5MDEsXG4gICAgICBveSA9IC1sbyAqIHgwMSxcbiAgICAgIHgxMSA9IHgwICsgb3gsXG4gICAgICB5MTEgPSB5MCArIG95LFxuICAgICAgeDEwID0geDEgKyBveCxcbiAgICAgIHkxMCA9IHkxICsgb3ksXG4gICAgICB4MDAgPSAoeDExICsgeDEwKSAvIDIsXG4gICAgICB5MDAgPSAoeTExICsgeTEwKSAvIDIsXG4gICAgICBkeCA9IHgxMCAtIHgxMSxcbiAgICAgIGR5ID0geTEwIC0geTExLFxuICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeSxcbiAgICAgIHIgPSByMSAtIHJjLFxuICAgICAgRCA9IHgxMSAqIHkxMCAtIHgxMCAqIHkxMSxcbiAgICAgIGQgPSAoZHkgPCAwID8gLTEgOiAxKSAqIHNxcnQobWF4KDAsIHIgKiByICogZDIgLSBEICogRCkpLFxuICAgICAgY3gwID0gKEQgKiBkeSAtIGR4ICogZCkgLyBkMixcbiAgICAgIGN5MCA9ICgtRCAqIGR4IC0gZHkgKiBkKSAvIGQyLFxuICAgICAgY3gxID0gKEQgKiBkeSArIGR4ICogZCkgLyBkMixcbiAgICAgIGN5MSA9ICgtRCAqIGR4ICsgZHkgKiBkKSAvIGQyLFxuICAgICAgZHgwID0gY3gwIC0geDAwLFxuICAgICAgZHkwID0gY3kwIC0geTAwLFxuICAgICAgZHgxID0gY3gxIC0geDAwLFxuICAgICAgZHkxID0gY3kxIC0geTAwO1xuXG4gIC8vIFBpY2sgdGhlIGNsb3NlciBvZiB0aGUgdHdvIGludGVyc2VjdGlvbiBwb2ludHMuXG4gIC8vIFRPRE8gSXMgdGhlcmUgYSBmYXN0ZXIgd2F5IHRvIGRldGVybWluZSB3aGljaCBpbnRlcnNlY3Rpb24gdG8gdXNlP1xuICBpZiAoZHgwICogZHgwICsgZHkwICogZHkwID4gZHgxICogZHgxICsgZHkxICogZHkxKSBjeDAgPSBjeDEsIGN5MCA9IGN5MTtcblxuICByZXR1cm4ge1xuICAgIGN4OiBjeDAsXG4gICAgY3k6IGN5MCxcbiAgICB4MDE6IC1veCxcbiAgICB5MDE6IC1veSxcbiAgICB4MTE6IGN4MCAqIChyMSAvIHIgLSAxKSxcbiAgICB5MTE6IGN5MCAqIChyMSAvIHIgLSAxKVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGlubmVyUmFkaXVzID0gYXJjSW5uZXJSYWRpdXMsXG4gICAgICBvdXRlclJhZGl1cyA9IGFyY091dGVyUmFkaXVzLFxuICAgICAgY29ybmVyUmFkaXVzID0gY29uc3RhbnQoMCksXG4gICAgICBwYWRSYWRpdXMgPSBudWxsLFxuICAgICAgc3RhcnRBbmdsZSA9IGFyY1N0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSA9IGFyY0VuZEFuZ2xlLFxuICAgICAgcGFkQW5nbGUgPSBhcmNQYWRBbmdsZSxcbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGFyYygpIHtcbiAgICB2YXIgYnVmZmVyLFxuICAgICAgICByLFxuICAgICAgICByMCA9ICtpbm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICByMSA9ICtvdXRlclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBhMCA9IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgYTEgPSBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gaGFsZlBpLFxuICAgICAgICBkYSA9IGFicyhhMSAtIGEwKSxcbiAgICAgICAgY3cgPSBhMSA+IGEwO1xuXG4gICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gYnVmZmVyID0gcGF0aCgpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG91dGVyIHJhZGl1cyBpcyBhbHdheXMgbGFyZ2VyIHRoYW4gdGhlIGlubmVyIHJhZGl1cy5cbiAgICBpZiAocjEgPCByMCkgciA9IHIxLCByMSA9IHIwLCByMCA9IHI7XG5cbiAgICAvLyBJcyBpdCBhIHBvaW50P1xuICAgIGlmICghKHIxID4gZXBzaWxvbikpIGNvbnRleHQubW92ZVRvKDAsIDApO1xuXG4gICAgLy8gT3IgaXMgaXQgYSBjaXJjbGUgb3IgYW5udWx1cz9cbiAgICBlbHNlIGlmIChkYSA+IHRhdSAtIGVwc2lsb24pIHtcbiAgICAgIGNvbnRleHQubW92ZVRvKHIxICogY29zKGEwKSwgcjEgKiBzaW4oYTApKTtcbiAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMCwgYTEsICFjdyk7XG4gICAgICBpZiAocjAgPiBlcHNpbG9uKSB7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKHIwICogY29zKGExKSwgcjAgKiBzaW4oYTEpKTtcbiAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExLCBhMCwgY3cpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY3VsYXIgb3IgYW5udWxhciBzZWN0b3I/XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYTAxID0gYTAsXG4gICAgICAgICAgYTExID0gYTEsXG4gICAgICAgICAgYTAwID0gYTAsXG4gICAgICAgICAgYTEwID0gYTEsXG4gICAgICAgICAgZGEwID0gZGEsXG4gICAgICAgICAgZGExID0gZGEsXG4gICAgICAgICAgYXAgPSBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC8gMixcbiAgICAgICAgICBycCA9IChhcCA+IGVwc2lsb24pICYmIChwYWRSYWRpdXMgPyArcGFkUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBzcXJ0KHIwICogcjAgKyByMSAqIHIxKSksXG4gICAgICAgICAgcmMgPSBtaW4oYWJzKHIxIC0gcjApIC8gMiwgK2Nvcm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgICByYzAgPSByYyxcbiAgICAgICAgICByYzEgPSByYyxcbiAgICAgICAgICB0MCxcbiAgICAgICAgICB0MTtcblxuICAgICAgLy8gQXBwbHkgcGFkZGluZz8gTm90ZSB0aGF0IHNpbmNlIHIxIOKJpSByMCwgZGExIOKJpSBkYTAuXG4gICAgICBpZiAocnAgPiBlcHNpbG9uKSB7XG4gICAgICAgIHZhciBwMCA9IGFzaW4ocnAgLyByMCAqIHNpbihhcCkpLFxuICAgICAgICAgICAgcDEgPSBhc2luKHJwIC8gcjEgKiBzaW4oYXApKTtcbiAgICAgICAgaWYgKChkYTAgLT0gcDAgKiAyKSA+IGVwc2lsb24pIHAwICo9IChjdyA/IDEgOiAtMSksIGEwMCArPSBwMCwgYTEwIC09IHAwO1xuICAgICAgICBlbHNlIGRhMCA9IDAsIGEwMCA9IGExMCA9IChhMCArIGExKSAvIDI7XG4gICAgICAgIGlmICgoZGExIC09IHAxICogMikgPiBlcHNpbG9uKSBwMSAqPSAoY3cgPyAxIDogLTEpLCBhMDEgKz0gcDEsIGExMSAtPSBwMTtcbiAgICAgICAgZWxzZSBkYTEgPSAwLCBhMDEgPSBhMTEgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgfVxuXG4gICAgICB2YXIgeDAxID0gcjEgKiBjb3MoYTAxKSxcbiAgICAgICAgICB5MDEgPSByMSAqIHNpbihhMDEpLFxuICAgICAgICAgIHgxMCA9IHIwICogY29zKGExMCksXG4gICAgICAgICAgeTEwID0gcjAgKiBzaW4oYTEwKTtcblxuICAgICAgLy8gQXBwbHkgcm91bmRlZCBjb3JuZXJzP1xuICAgICAgaWYgKHJjID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgeDExID0gcjEgKiBjb3MoYTExKSxcbiAgICAgICAgICAgIHkxMSA9IHIxICogc2luKGExMSksXG4gICAgICAgICAgICB4MDAgPSByMCAqIGNvcyhhMDApLFxuICAgICAgICAgICAgeTAwID0gcjAgKiBzaW4oYTAwKSxcbiAgICAgICAgICAgIG9jO1xuXG4gICAgICAgIC8vIFJlc3RyaWN0IHRoZSBjb3JuZXIgcmFkaXVzIGFjY29yZGluZyB0byB0aGUgc2VjdG9yIGFuZ2xlLlxuICAgICAgICBpZiAoZGEgPCBwaSAmJiAob2MgPSBpbnRlcnNlY3QoeDAxLCB5MDEsIHgwMCwgeTAwLCB4MTEsIHkxMSwgeDEwLCB5MTApKSkge1xuICAgICAgICAgIHZhciBheCA9IHgwMSAtIG9jWzBdLFxuICAgICAgICAgICAgICBheSA9IHkwMSAtIG9jWzFdLFxuICAgICAgICAgICAgICBieCA9IHgxMSAtIG9jWzBdLFxuICAgICAgICAgICAgICBieSA9IHkxMSAtIG9jWzFdLFxuICAgICAgICAgICAgICBrYyA9IDEgLyBzaW4oYWNvcygoYXggKiBieCArIGF5ICogYnkpIC8gKHNxcnQoYXggKiBheCArIGF5ICogYXkpICogc3FydChieCAqIGJ4ICsgYnkgKiBieSkpKSAvIDIpLFxuICAgICAgICAgICAgICBsYyA9IHNxcnQob2NbMF0gKiBvY1swXSArIG9jWzFdICogb2NbMV0pO1xuICAgICAgICAgIHJjMCA9IG1pbihyYywgKHIwIC0gbGMpIC8gKGtjIC0gMSkpO1xuICAgICAgICAgIHJjMSA9IG1pbihyYywgKHIxIC0gbGMpIC8gKGtjICsgMSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzIHRoZSBzZWN0b3IgY29sbGFwc2VkIHRvIGEgbGluZT9cbiAgICAgIGlmICghKGRhMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSk7XG5cbiAgICAgIC8vIERvZXMgdGhlIHNlY3RvcuKAmXMgb3V0ZXIgcmluZyBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMSA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MDAsIHkwMCwgeDAxLCB5MDEsIHIxLCByYzEsIGN3KTtcbiAgICAgICAgdDEgPSBjb3JuZXJUYW5nZW50cyh4MTEsIHkxMSwgeDEwLCB5MTAsIHIxLCByYzEsIGN3KTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMxIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzEsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQxLmN4LCB0MS5jeSwgcmMxLCBhdGFuMih0MS55MTEsIHQxLngxMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPciBpcyB0aGUgb3V0ZXIgcmluZyBqdXN0IGEgY2lyY3VsYXIgYXJjP1xuICAgICAgZWxzZSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSksIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMDEsIGExMSwgIWN3KTtcblxuICAgICAgLy8gSXMgdGhlcmUgbm8gaW5uZXIgcmluZywgYW5kIGl04oCZcyBhIGNpcmN1bGFyIHNlY3Rvcj9cbiAgICAgIC8vIE9yIHBlcmhhcHMgaXTigJlzIGFuIGFubnVsYXIgc2VjdG9yIGNvbGxhcHNlZCBkdWUgdG8gcGFkZGluZz9cbiAgICAgIGlmICghKHIwID4gZXBzaWxvbikgfHwgIShkYTAgPiBlcHNpbG9uKSkgY29udGV4dC5saW5lVG8oeDEwLCB5MTApO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIGlubmVyIHJpbmcgKG9yIHBvaW50KSBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMCA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MTAsIHkxMCwgeDExLCB5MTEsIHIwLCAtcmMwLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDAxLCB5MDEsIHgwMCwgeTAwLCByMCwgLXJjMCwgY3cpO1xuXG4gICAgICAgIGNvbnRleHQubGluZVRvKHQwLmN4ICsgdDAueDAxLCB0MC5jeSArIHQwLnkwMSk7XG5cbiAgICAgICAgLy8gSGF2ZSB0aGUgY29ybmVycyBtZXJnZWQ/XG4gICAgICAgIGlmIChyYzAgPCByYykgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgZHJhdyB0aGUgdHdvIGNvcm5lcnMgYW5kIHRoZSByaW5nLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMCwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MC55MTEsIHQwLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGF0YW4yKHQwLmN5ICsgdDAueTExLCB0MC5jeCArIHQwLngxMSksIGF0YW4yKHQxLmN5ICsgdDEueTExLCB0MS5jeCArIHQxLngxMSksIGN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMCwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIGlubmVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExMCwgYTAwLCBjdyk7XG4gICAgfVxuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGlmIChidWZmZXIpIHJldHVybiBjb250ZXh0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgYXJjLmNlbnRyb2lkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSAoK2lubmVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyLFxuICAgICAgICBhID0gKCtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyIC0gcGkgLyAyO1xuICAgIHJldHVybiBbY29zKGEpICogciwgc2luKGEpICogcl07XG4gIH07XG5cbiAgYXJjLmlubmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlubmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBpbm5lclJhZGl1cztcbiAgfTtcblxuICBhcmMub3V0ZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob3V0ZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IG91dGVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5jb3JuZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29ybmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBjb3JuZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnBhZFJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRSYWRpdXMgPSBfID09IG51bGwgPyBudWxsIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBwYWRSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICBhcmMuZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgYXJjLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXyksIGFyYykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBhcmM7XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXJcIjtcbmltcG9ydCBsaW5lIGZyb20gXCIuL2xpbmVcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHgwID0gcG9pbnRYLFxuICAgICAgeDEgPSBudWxsLFxuICAgICAgeTAgPSBjb25zdGFudCgwKSxcbiAgICAgIHkxID0gcG9pbnRZLFxuICAgICAgZGVmaW5lZCA9IGNvbnN0YW50KHRydWUpLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBjdXJ2ZSA9IGN1cnZlTGluZWFyLFxuICAgICAgb3V0cHV0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBhcmVhKGRhdGEpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgaixcbiAgICAgICAgayxcbiAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBkLFxuICAgICAgICBkZWZpbmVkMCA9IGZhbHNlLFxuICAgICAgICBidWZmZXIsXG4gICAgICAgIHgweiA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgeTB6ID0gbmV3IEFycmF5KG4pO1xuXG4gICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgb3V0cHV0ID0gY3VydmUoYnVmZmVyID0gcGF0aCgpKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgKytpKSB7XG4gICAgICBpZiAoIShpIDwgbiAmJiBkZWZpbmVkKGQgPSBkYXRhW2ldLCBpLCBkYXRhKSkgPT09IGRlZmluZWQwKSB7XG4gICAgICAgIGlmIChkZWZpbmVkMCA9ICFkZWZpbmVkMCkge1xuICAgICAgICAgIGogPSBpO1xuICAgICAgICAgIG91dHB1dC5hcmVhU3RhcnQoKTtcbiAgICAgICAgICBvdXRwdXQubGluZVN0YXJ0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0LmxpbmVFbmQoKTtcbiAgICAgICAgICBvdXRwdXQubGluZVN0YXJ0KCk7XG4gICAgICAgICAgZm9yIChrID0gaSAtIDE7IGsgPj0gajsgLS1rKSB7XG4gICAgICAgICAgICBvdXRwdXQucG9pbnQoeDB6W2tdLCB5MHpba10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgICAgIG91dHB1dC5hcmVhRW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWZpbmVkMCkge1xuICAgICAgICB4MHpbaV0gPSAreDAoZCwgaSwgZGF0YSksIHkweltpXSA9ICt5MChkLCBpLCBkYXRhKTtcbiAgICAgICAgb3V0cHV0LnBvaW50KHgxID8gK3gxKGQsIGksIGRhdGEpIDogeDB6W2ldLCB5MSA/ICt5MShkLCBpLCBkYXRhKSA6IHkweltpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIG91dHB1dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZWFsaW5lKCkge1xuICAgIHJldHVybiBsaW5lKCkuZGVmaW5lZChkZWZpbmVkKS5jdXJ2ZShjdXJ2ZSkuY29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGFyZWEueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCB4MSA9IG51bGwsIGFyZWEpIDogeDA7XG4gIH07XG5cbiAgYXJlYS54MCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHgwO1xuICB9O1xuXG4gIGFyZWEueDEgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDEgPSBfID09IG51bGwgPyBudWxsIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeDE7XG4gIH07XG5cbiAgYXJlYS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHkxID0gbnVsbCwgYXJlYSkgOiB5MDtcbiAgfTtcblxuICBhcmVhLnkwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeTA7XG4gIH07XG5cbiAgYXJlYS55MSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5MSA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB5MTtcbiAgfTtcblxuICBhcmVhLmxpbmVYMCA9XG4gIGFyZWEubGluZVkwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZWFsaW5lKCkueCh4MCkueSh5MCk7XG4gIH07XG5cbiAgYXJlYS5saW5lWTEgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJlYWxpbmUoKS54KHgwKS55KHkxKTtcbiAgfTtcblxuICBhcmVhLmxpbmVYMSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmVhbGluZSgpLngoeDEpLnkoeTApO1xuICB9O1xuXG4gIGFyZWEuZGVmaW5lZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkZWZpbmVkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBhcmVhKSA6IGRlZmluZWQ7XG4gIH07XG5cbiAgYXJlYS5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjdXJ2ZSA9IF8sIGNvbnRleHQgIT0gbnVsbCAmJiAob3V0cHV0ID0gY3VydmUoY29udGV4dCkpLCBhcmVhKSA6IGN1cnZlO1xuICB9O1xuXG4gIGFyZWEuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChfID09IG51bGwgPyBjb250ZXh0ID0gb3V0cHV0ID0gbnVsbCA6IG91dHB1dCA9IGN1cnZlKGNvbnRleHQgPSBfKSwgYXJlYSkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBhcmVhO1xufVxuIiwiaW1wb3J0IGN1cnZlUmFkaWFsLCB7Y3VydmVSYWRpYWxMaW5lYXJ9IGZyb20gXCIuL2N1cnZlL3JhZGlhbFwiO1xuaW1wb3J0IGFyZWEgZnJvbSBcIi4vYXJlYVwiO1xuaW1wb3J0IHtsaW5lUmFkaWFsfSBmcm9tIFwiLi9saW5lUmFkaWFsXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBhID0gYXJlYSgpLmN1cnZlKGN1cnZlUmFkaWFsTGluZWFyKSxcbiAgICAgIGMgPSBhLmN1cnZlLFxuICAgICAgeDAgPSBhLmxpbmVYMCxcbiAgICAgIHgxID0gYS5saW5lWDEsXG4gICAgICB5MCA9IGEubGluZVkwLFxuICAgICAgeTEgPSBhLmxpbmVZMTtcblxuICBhLmFuZ2xlID0gYS54LCBkZWxldGUgYS54O1xuICBhLnN0YXJ0QW5nbGUgPSBhLngwLCBkZWxldGUgYS54MDtcbiAgYS5lbmRBbmdsZSA9IGEueDEsIGRlbGV0ZSBhLngxO1xuICBhLnJhZGl1cyA9IGEueSwgZGVsZXRlIGEueTtcbiAgYS5pbm5lclJhZGl1cyA9IGEueTAsIGRlbGV0ZSBhLnkwO1xuICBhLm91dGVyUmFkaXVzID0gYS55MSwgZGVsZXRlIGEueTE7XG4gIGEubGluZVN0YXJ0QW5nbGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGxpbmVSYWRpYWwoeDAoKSk7IH0sIGRlbGV0ZSBhLmxpbmVYMDtcbiAgYS5saW5lRW5kQW5nbGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGxpbmVSYWRpYWwoeDEoKSk7IH0sIGRlbGV0ZSBhLmxpbmVYMTtcbiAgYS5saW5lSW5uZXJSYWRpdXMgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGxpbmVSYWRpYWwoeTAoKSk7IH0sIGRlbGV0ZSBhLmxpbmVZMDtcbiAgYS5saW5lT3V0ZXJSYWRpdXMgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGxpbmVSYWRpYWwoeTEoKSk7IH0sIGRlbGV0ZSBhLmxpbmVZMTtcblxuICBhLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gYyhjdXJ2ZVJhZGlhbChfKSkgOiBjKCkuX2N1cnZlO1xuICB9O1xuXG4gIHJldHVybiBhO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0YW50KCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHBvaW50KHRoYXQsIHgsIHkpIHtcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKFxuICAgICgyICogdGhhdC5feDAgKyB0aGF0Ll94MSkgLyAzLFxuICAgICgyICogdGhhdC5feTAgKyB0aGF0Ll95MSkgLyAzLFxuICAgICh0aGF0Ll94MCArIDIgKiB0aGF0Ll94MSkgLyAzLFxuICAgICh0aGF0Ll95MCArIDIgKiB0aGF0Ll95MSkgLyAzLFxuICAgICh0aGF0Ll94MCArIDQgKiB0aGF0Ll94MSArIHgpIC8gNixcbiAgICAodGhhdC5feTAgKyA0ICogdGhhdC5feTEgKyB5KSAvIDZcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJhc2lzKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkJhc2lzLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyAvLyBwcm9jZWVkXG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLCB0aGlzLl95MSk7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5fY29udGV4dC5saW5lVG8oKDUgKiB0aGlzLl94MCArIHRoaXMuX3gxKSAvIDYsICg1ICogdGhpcy5feTAgKyB0aGlzLl95MSkgLyA2KTsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQmFzaXMoY29udGV4dCk7XG59XG4iLCJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcFwiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vYmFzaXNcIjtcblxuZnVuY3Rpb24gQmFzaXNDbG9zZWQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuQmFzaXNDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gdGhpcy5feTMgPSB0aGlzLl95NCA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIgKyAyICogdGhpcy5feDMpIC8gMywgKHRoaXMuX3kyICsgMiAqIHRoaXMuX3kzKSAvIDMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMgKyAyICogdGhpcy5feDIpIC8gMywgKHRoaXMuX3kzICsgMiAqIHRoaXMuX3kyKSAvIDMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gyLCB0aGlzLl95Mik7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NCwgdGhpcy5feTQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gyID0geCwgdGhpcy5feTIgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHk7IHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCArIDQgKiB0aGlzLl94MSArIHgpIC8gNiwgKHRoaXMuX3kwICsgNCAqIHRoaXMuX3kxICsgeSkgLyA2KTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCYXNpc0Nsb3NlZChjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2Jhc2lzXCI7XG5cbmZ1bmN0aW9uIEJhc2lzT3Blbihjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5CYXNpc09wZW4ucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMykpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB2YXIgeDAgPSAodGhpcy5feDAgKyA0ICogdGhpcy5feDEgKyB4KSAvIDYsIHkwID0gKHRoaXMuX3kwICsgNCAqIHRoaXMuX3kxICsgeSkgLyA2OyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeDAsIHkwKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgwLCB5MCk7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLl9wb2ludCA9IDQ7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJhc2lzT3Blbihjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7QmFzaXN9IGZyb20gXCIuL2Jhc2lzXCI7XG5cbmZ1bmN0aW9uIEJ1bmRsZShjb250ZXh0LCBiZXRhKSB7XG4gIHRoaXMuX2Jhc2lzID0gbmV3IEJhc2lzKGNvbnRleHQpO1xuICB0aGlzLl9iZXRhID0gYmV0YTtcbn1cblxuQnVuZGxlLnByb3RvdHlwZSA9IHtcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94ID0gW107XG4gICAgdGhpcy5feSA9IFtdO1xuICAgIHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeCA9IHRoaXMuX3gsXG4gICAgICAgIHkgPSB0aGlzLl95LFxuICAgICAgICBqID0geC5sZW5ndGggLSAxO1xuXG4gICAgaWYgKGogPiAwKSB7XG4gICAgICB2YXIgeDAgPSB4WzBdLFxuICAgICAgICAgIHkwID0geVswXSxcbiAgICAgICAgICBkeCA9IHhbal0gLSB4MCxcbiAgICAgICAgICBkeSA9IHlbal0gLSB5MCxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgdDtcblxuICAgICAgd2hpbGUgKCsraSA8PSBqKSB7XG4gICAgICAgIHQgPSBpIC8gajtcbiAgICAgICAgdGhpcy5fYmFzaXMucG9pbnQoXG4gICAgICAgICAgdGhpcy5fYmV0YSAqIHhbaV0gKyAoMSAtIHRoaXMuX2JldGEpICogKHgwICsgdCAqIGR4KSxcbiAgICAgICAgICB0aGlzLl9iZXRhICogeVtpXSArICgxIC0gdGhpcy5fYmV0YSkgKiAoeTAgKyB0ICogZHkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBudWxsO1xuICAgIHRoaXMuX2Jhc2lzLmxpbmVFbmQoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl94LnB1c2goK3gpO1xuICAgIHRoaXMuX3kucHVzaCgreSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYmV0YSkge1xuXG4gIGZ1bmN0aW9uIGJ1bmRsZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGJldGEgPT09IDEgPyBuZXcgQmFzaXMoY29udGV4dCkgOiBuZXcgQnVuZGxlKGNvbnRleHQsIGJldGEpO1xuICB9XG5cbiAgYnVuZGxlLmJldGEgPSBmdW5jdGlvbihiZXRhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYmV0YSk7XG4gIH07XG5cbiAgcmV0dXJuIGJ1bmRsZTtcbn0pKDAuODUpO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIHBvaW50KHRoYXQsIHgsIHkpIHtcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKFxuICAgIHRoYXQuX3gxICsgdGhhdC5fayAqICh0aGF0Ll94MiAtIHRoYXQuX3gwKSxcbiAgICB0aGF0Ll95MSArIHRoYXQuX2sgKiAodGhhdC5feTIgLSB0aGF0Ll95MCksXG4gICAgdGhhdC5feDIgKyB0aGF0Ll9rICogKHRoYXQuX3gxIC0geCksXG4gICAgdGhhdC5feTIgKyB0aGF0Ll9rICogKHRoYXQuX3kxIC0geSksXG4gICAgdGhhdC5feDIsXG4gICAgdGhhdC5feTJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl94MSA9IHgsIHRoaXMuX3kxID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHRlbnNpb24pIHtcblxuICBmdW5jdGlvbiBjYXJkaW5hbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBDYXJkaW5hbChjb250ZXh0LCB0ZW5zaW9uKTtcbiAgfVxuXG4gIGNhcmRpbmFsLnRlbnNpb24gPSBmdW5jdGlvbih0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrdGVuc2lvbik7XG4gIH07XG5cbiAgcmV0dXJuIGNhcmRpbmFsO1xufSkoMCk7XG4iLCJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcFwiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2FyZGluYWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsQ2xvc2VkKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWxDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9IHRoaXMuX3g1ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gdGhpcy5feTUgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDM6IHtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g0LCB0aGlzLl95NCk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDUsIHRoaXMuX3k1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHkpOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl94NSA9IHgsIHRoaXMuX3k1ID0geTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsQ2xvc2VkKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2NhcmRpbmFsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDYXJkaW5hbE9wZW4oY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbE9wZW4ucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDMpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95MikgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5fcG9pbnQgPSA0OyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsT3Blbihjb250ZXh0LCB0ZW5zaW9uKTtcbiAgfVxuXG4gIGNhcmRpbmFsLnRlbnNpb24gPSBmdW5jdGlvbih0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrdGVuc2lvbik7XG4gIH07XG5cbiAgcmV0dXJuIGNhcmRpbmFsO1xufSkoMCk7XG4iLCJpbXBvcnQge2Vwc2lsb259IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge0NhcmRpbmFsfSBmcm9tIFwiLi9jYXJkaW5hbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB2YXIgeDEgPSB0aGF0Ll94MSxcbiAgICAgIHkxID0gdGhhdC5feTEsXG4gICAgICB4MiA9IHRoYXQuX3gyLFxuICAgICAgeTIgPSB0aGF0Ll95MjtcblxuICBpZiAodGhhdC5fbDAxX2EgPiBlcHNpbG9uKSB7XG4gICAgdmFyIGEgPSAyICogdGhhdC5fbDAxXzJhICsgMyAqIHRoYXQuX2wwMV9hICogdGhhdC5fbDEyX2EgKyB0aGF0Ll9sMTJfMmEsXG4gICAgICAgIG4gPSAzICogdGhhdC5fbDAxX2EgKiAodGhhdC5fbDAxX2EgKyB0aGF0Ll9sMTJfYSk7XG4gICAgeDEgPSAoeDEgKiBhIC0gdGhhdC5feDAgKiB0aGF0Ll9sMTJfMmEgKyB0aGF0Ll94MiAqIHRoYXQuX2wwMV8yYSkgLyBuO1xuICAgIHkxID0gKHkxICogYSAtIHRoYXQuX3kwICogdGhhdC5fbDEyXzJhICsgdGhhdC5feTIgKiB0aGF0Ll9sMDFfMmEpIC8gbjtcbiAgfVxuXG4gIGlmICh0aGF0Ll9sMjNfYSA+IGVwc2lsb24pIHtcbiAgICB2YXIgYiA9IDIgKiB0aGF0Ll9sMjNfMmEgKyAzICogdGhhdC5fbDIzX2EgKiB0aGF0Ll9sMTJfYSArIHRoYXQuX2wxMl8yYSxcbiAgICAgICAgbSA9IDMgKiB0aGF0Ll9sMjNfYSAqICh0aGF0Ll9sMjNfYSArIHRoYXQuX2wxMl9hKTtcbiAgICB4MiA9ICh4MiAqIGIgKyB0aGF0Ll94MSAqIHRoYXQuX2wyM18yYSAtIHggKiB0aGF0Ll9sMTJfMmEpIC8gbTtcbiAgICB5MiA9ICh5MiAqIGIgKyB0aGF0Ll95MSAqIHRoYXQuX2wyM18yYSAtIHkgKiB0aGF0Ll9sMTJfMmEpIC8gbTtcbiAgfVxuXG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgdGhhdC5feDIsIHRoYXQuX3kyKTtcbn1cblxuZnVuY3Rpb24gQ2F0bXVsbFJvbShjb250ZXh0LCBhbHBoYSkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fYWxwaGEgPSBhbHBoYTtcbn1cblxuQ2F0bXVsbFJvbS5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5wb2ludCh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb20oY29udGV4dCwgYWxwaGEpIDogbmV3IENhcmRpbmFsKGNvbnRleHQsIDApO1xuICB9XG5cbiAgY2F0bXVsbFJvbS5hbHBoYSA9IGZ1bmN0aW9uKGFscGhhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYWxwaGEpO1xuICB9O1xuXG4gIHJldHVybiBjYXRtdWxsUm9tO1xufSkoMC41KTtcbiIsImltcG9ydCB7Q2FyZGluYWxDbG9zZWR9IGZyb20gXCIuL2NhcmRpbmFsQ2xvc2VkXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcFwiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2F0bXVsbFJvbVwiO1xuXG5mdW5jdGlvbiBDYXRtdWxsUm9tQ2xvc2VkKGNvbnRleHQsIGFscGhhKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9hbHBoYSA9IGFscGhhO1xufVxuXG5DYXRtdWxsUm9tQ2xvc2VkLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBub29wLFxuICBhcmVhRW5kOiBub29wLFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9IHRoaXMuX3gzID0gdGhpcy5feDQgPSB0aGlzLl94NSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gdGhpcy5feTMgPSB0aGlzLl95NCA9IHRoaXMuX3k1ID0gTmFOO1xuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYSA9XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhID1cbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDQsIHRoaXMuX3k0KTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NSwgdGhpcy5feTUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG5cbiAgICBpZiAodGhpcy5fcG9pbnQpIHtcbiAgICAgIHZhciB4MjMgPSB0aGlzLl94MiAtIHgsXG4gICAgICAgICAgeTIzID0gdGhpcy5feTIgLSB5O1xuICAgICAgdGhpcy5fbDIzX2EgPSBNYXRoLnNxcnQodGhpcy5fbDIzXzJhID0gTWF0aC5wb3coeDIzICogeDIzICsgeTIzICogeTIzLCB0aGlzLl9hbHBoYSkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHkpOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl94NSA9IHgsIHRoaXMuX3k1ID0geTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb21DbG9zZWQoY29udGV4dCwgYWxwaGEpIDogbmV3IENhcmRpbmFsQ2xvc2VkKGNvbnRleHQsIDApO1xuICB9XG5cbiAgY2F0bXVsbFJvbS5hbHBoYSA9IGZ1bmN0aW9uKGFscGhhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYWxwaGEpO1xuICB9O1xuXG4gIHJldHVybiBjYXRtdWxsUm9tO1xufSkoMC41KTtcbiIsImltcG9ydCB7Q2FyZGluYWxPcGVufSBmcm9tIFwiLi9jYXJkaW5hbE9wZW5cIjtcbmltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2NhdG11bGxSb21cIjtcblxuZnVuY3Rpb24gQ2F0bXVsbFJvbU9wZW4oY29udGV4dCwgYWxwaGEpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2FscGhhID0gYWxwaGE7XG59XG5cbkNhdG11bGxSb21PcGVuLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2EgPVxuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYSA9XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMykpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuXG4gICAgaWYgKHRoaXMuX3BvaW50KSB7XG4gICAgICB2YXIgeDIzID0gdGhpcy5feDIgLSB4LFxuICAgICAgICAgIHkyMyA9IHRoaXMuX3kyIC0geTtcbiAgICAgIHRoaXMuX2wyM19hID0gTWF0aC5zcXJ0KHRoaXMuX2wyM18yYSA9IE1hdGgucG93KHgyMyAqIHgyMyArIHkyMyAqIHkyMywgdGhpcy5fYWxwaGEpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95MikgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5fcG9pbnQgPSA0OyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb21PcGVuKGNvbnRleHQsIGFscGhhKSA6IG5ldyBDYXJkaW5hbE9wZW4oY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIiwiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wXCI7XG5cbmZ1bmN0aW9uIExpbmVhckNsb3NlZChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5MaW5lYXJDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fcG9pbnQpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgaWYgKHRoaXMuX3BvaW50KSB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTtcbiAgICBlbHNlIHRoaXMuX3BvaW50ID0gMSwgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBMaW5lYXJDbG9zZWQoY29udGV4dCk7XG59XG4iLCJmdW5jdGlvbiBzaWduKHgpIHtcbiAgcmV0dXJuIHggPCAwID8gLTEgOiAxO1xufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHNsb3BlcyBvZiB0aGUgdGFuZ2VudHMgKEhlcm1pdGUtdHlwZSBpbnRlcnBvbGF0aW9uKSBiYXNlZCBvblxuLy8gdGhlIGZvbGxvd2luZyBwYXBlcjogU3RlZmZlbiwgTS4gMTk5MC4gQSBTaW1wbGUgTWV0aG9kIGZvciBNb25vdG9uaWNcbi8vIEludGVycG9sYXRpb24gaW4gT25lIERpbWVuc2lvbi4gQXN0cm9ub215IGFuZCBBc3Ryb3BoeXNpY3MsIFZvbC4gMjM5LCBOTy5cbi8vIE5PVihJSSksIFAuIDQ0MywgMTk5MC5cbmZ1bmN0aW9uIHNsb3BlMyh0aGF0LCB4MiwgeTIpIHtcbiAgdmFyIGgwID0gdGhhdC5feDEgLSB0aGF0Ll94MCxcbiAgICAgIGgxID0geDIgLSB0aGF0Ll94MSxcbiAgICAgIHMwID0gKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gKGgwIHx8IGgxIDwgMCAmJiAtMCksXG4gICAgICBzMSA9ICh5MiAtIHRoYXQuX3kxKSAvIChoMSB8fCBoMCA8IDAgJiYgLTApLFxuICAgICAgcCA9IChzMCAqIGgxICsgczEgKiBoMCkgLyAoaDAgKyBoMSk7XG4gIHJldHVybiAoc2lnbihzMCkgKyBzaWduKHMxKSkgKiBNYXRoLm1pbihNYXRoLmFicyhzMCksIE1hdGguYWJzKHMxKSwgMC41ICogTWF0aC5hYnMocCkpIHx8IDA7XG59XG5cbi8vIENhbGN1bGF0ZSBhIG9uZS1zaWRlZCBzbG9wZS5cbmZ1bmN0aW9uIHNsb3BlMih0aGF0LCB0KSB7XG4gIHZhciBoID0gdGhhdC5feDEgLSB0aGF0Ll94MDtcbiAgcmV0dXJuIGggPyAoMyAqICh0aGF0Ll95MSAtIHRoYXQuX3kwKSAvIGggLSB0KSAvIDIgOiB0O1xufVxuXG4vLyBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ViaWNfSGVybWl0ZV9zcGxpbmUjUmVwcmVzZW50YXRpb25zXG4vLyBcInlvdSBjYW4gZXhwcmVzcyBjdWJpYyBIZXJtaXRlIGludGVycG9sYXRpb24gaW4gdGVybXMgb2YgY3ViaWMgQsOpemllciBjdXJ2ZXNcbi8vIHdpdGggcmVzcGVjdCB0byB0aGUgZm91ciB2YWx1ZXMgcDAsIHAwICsgbTAgLyAzLCBwMSAtIG0xIC8gMywgcDFcIi5cbmZ1bmN0aW9uIHBvaW50KHRoYXQsIHQwLCB0MSkge1xuICB2YXIgeDAgPSB0aGF0Ll94MCxcbiAgICAgIHkwID0gdGhhdC5feTAsXG4gICAgICB4MSA9IHRoYXQuX3gxLFxuICAgICAgeTEgPSB0aGF0Ll95MSxcbiAgICAgIGR4ID0gKHgxIC0geDApIC8gMztcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwICsgZHgsIHkwICsgZHggKiB0MCwgeDEgLSBkeCwgeTEgLSBkeCAqIHQxLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBNb25vdG9uZVgoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTW9ub3RvbmVYLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID1cbiAgICB0aGlzLl90MCA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMjogdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCBzbG9wZTIodGhpcywgdGhpcy5fdDApKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIHQxID0gTmFOO1xuXG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgaWYgKHggPT09IHRoaXMuX3gxICYmIHkgPT09IHRoaXMuX3kxKSByZXR1cm47IC8vIElnbm9yZSBjb2luY2lkZW50IHBvaW50cy5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHBvaW50KHRoaXMsIHNsb3BlMih0aGlzLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSksIHQxKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB0aGlzLl90MCwgdDEgPSBzbG9wZTModGhpcywgeCwgeSkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICAgIHRoaXMuX3QwID0gdDE7XG4gIH1cbn1cblxuZnVuY3Rpb24gTW9ub3RvbmVZKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IG5ldyBSZWZsZWN0Q29udGV4dChjb250ZXh0KTtcbn1cblxuKE1vbm90b25lWS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1vbm90b25lWC5wcm90b3R5cGUpKS5wb2ludCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgTW9ub3RvbmVYLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsIHksIHgpO1xufTtcblxuZnVuY3Rpb24gUmVmbGVjdENvbnRleHQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUmVmbGVjdENvbnRleHQucHJvdG90eXBlID0ge1xuICBtb3ZlVG86IGZ1bmN0aW9uKHgsIHkpIHsgdGhpcy5fY29udGV4dC5tb3ZlVG8oeSwgeCk7IH0sXG4gIGNsb3NlUGF0aDogZnVuY3Rpb24oKSB7IHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7IH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0LmxpbmVUbyh5LCB4KTsgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHsgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHkxLCB4MSwgeTIsIHgyLCB5LCB4KTsgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vbm90b25lWChjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTW9ub3RvbmVYKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVZKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVkoY29udGV4dCk7XG59XG4iLCJmdW5jdGlvbiBOYXR1cmFsKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbk5hdHVyYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3ggPSBbXTtcbiAgICB0aGlzLl95ID0gW107XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB4ID0gdGhpcy5feCxcbiAgICAgICAgeSA9IHRoaXMuX3ksXG4gICAgICAgIG4gPSB4Lmxlbmd0aDtcblxuICAgIGlmIChuKSB7XG4gICAgICB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeFswXSwgeVswXSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4WzBdLCB5WzBdKTtcbiAgICAgIGlmIChuID09PSAyKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHhbMV0sIHlbMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHB4ID0gY29udHJvbFBvaW50cyh4KSxcbiAgICAgICAgICAgIHB5ID0gY29udHJvbFBvaW50cyh5KTtcbiAgICAgICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDE7IGkxIDwgbjsgKytpMCwgKytpMSkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhweFswXVtpMF0sIHB5WzBdW2kwXSwgcHhbMV1baTBdLCBweVsxXVtpMF0sIHhbaTFdLCB5W2kxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiBuID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBudWxsO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuX3gucHVzaCgreCk7XG4gICAgdGhpcy5feS5wdXNoKCt5KTtcbiAgfVxufTtcblxuLy8gU2VlIGh0dHBzOi8vd3d3LnBhcnRpY2xlaW5jZWxsLmNvbS8yMDEyL2Jlemllci1zcGxpbmVzLyBmb3IgZGVyaXZhdGlvbi5cbmZ1bmN0aW9uIGNvbnRyb2xQb2ludHMoeCkge1xuICB2YXIgaSxcbiAgICAgIG4gPSB4Lmxlbmd0aCAtIDEsXG4gICAgICBtLFxuICAgICAgYSA9IG5ldyBBcnJheShuKSxcbiAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICByID0gbmV3IEFycmF5KG4pO1xuICBhWzBdID0gMCwgYlswXSA9IDIsIHJbMF0gPSB4WzBdICsgMiAqIHhbMV07XG4gIGZvciAoaSA9IDE7IGkgPCBuIC0gMTsgKytpKSBhW2ldID0gMSwgYltpXSA9IDQsIHJbaV0gPSA0ICogeFtpXSArIDIgKiB4W2kgKyAxXTtcbiAgYVtuIC0gMV0gPSAyLCBiW24gLSAxXSA9IDcsIHJbbiAtIDFdID0gOCAqIHhbbiAtIDFdICsgeFtuXTtcbiAgZm9yIChpID0gMTsgaSA8IG47ICsraSkgbSA9IGFbaV0gLyBiW2kgLSAxXSwgYltpXSAtPSBtLCByW2ldIC09IG0gKiByW2kgLSAxXTtcbiAgYVtuIC0gMV0gPSByW24gLSAxXSAvIGJbbiAtIDFdO1xuICBmb3IgKGkgPSBuIC0gMjsgaSA+PSAwOyAtLWkpIGFbaV0gPSAocltpXSAtIGFbaSArIDFdKSAvIGJbaV07XG4gIGJbbiAtIDFdID0gKHhbbl0gKyBhW24gLSAxXSkgLyAyO1xuICBmb3IgKGkgPSAwOyBpIDwgbiAtIDE7ICsraSkgYltpXSA9IDIgKiB4W2kgKyAxXSAtIGFbaSArIDFdO1xuICByZXR1cm4gW2EsIGJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTmF0dXJhbChjb250ZXh0KTtcbn1cbiIsImltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9saW5lYXJcIjtcblxuZXhwb3J0IHZhciBjdXJ2ZVJhZGlhbExpbmVhciA9IGN1cnZlUmFkaWFsKGN1cnZlTGluZWFyKTtcblxuZnVuY3Rpb24gUmFkaWFsKGN1cnZlKSB7XG4gIHRoaXMuX2N1cnZlID0gY3VydmU7XG59XG5cblJhZGlhbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fY3VydmUuYXJlYVN0YXJ0KCk7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2N1cnZlLmFyZWFFbmQoKTtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKTtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fY3VydmUubGluZUVuZCgpO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oYSwgcikge1xuICAgIHRoaXMuX2N1cnZlLnBvaW50KHIgKiBNYXRoLnNpbihhKSwgciAqIC1NYXRoLmNvcyhhKSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1cnZlUmFkaWFsKGN1cnZlKSB7XG5cbiAgZnVuY3Rpb24gcmFkaWFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IFJhZGlhbChjdXJ2ZShjb250ZXh0KSk7XG4gIH1cblxuICByYWRpYWwuX2N1cnZlID0gY3VydmU7XG5cbiAgcmV0dXJuIHJhZGlhbDtcbn1cbiIsImZ1bmN0aW9uIFN0ZXAoY29udGV4dCwgdCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fdCA9IHQ7XG59XG5cblN0ZXAucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3ggPSB0aGlzLl95ID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKDAgPCB0aGlzLl90ICYmIHRoaXMuX3QgPCAxICYmIHRoaXMuX3BvaW50ID09PSAyKSB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LCB0aGlzLl95KTtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgaWYgKHRoaXMuX2xpbmUgPj0gMCkgdGhpcy5fdCA9IDEgLSB0aGlzLl90LCB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmICh0aGlzLl90IDw9IDApIHtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LCB5KTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgeDEgPSB0aGlzLl94ICogKDEgLSB0aGlzLl90KSArIHggKiB0aGlzLl90O1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgxLCB0aGlzLl95KTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh4MSwgeSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3ggPSB4LCB0aGlzLl95ID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IFN0ZXAoY29udGV4dCwgMC41KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBCZWZvcmUoY29udGV4dCkge1xuICByZXR1cm4gbmV3IFN0ZXAoY29udGV4dCwgMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwQWZ0ZXIoY29udGV4dCkge1xuICByZXR1cm4gbmV3IFN0ZXAoY29udGV4dCwgMSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBiIDwgYSA/IC0xIDogYiA+IGEgPyAxIDogYiA+PSBhID8gMCA6IE5hTjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgcmV0dXJuIGQ7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgYXJjfSBmcm9tIFwiLi9hcmNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhcmVhfSBmcm9tIFwiLi9hcmVhXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbGluZX0gZnJvbSBcIi4vbGluZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBpZX0gZnJvbSBcIi4vcGllXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYXJlYVJhZGlhbCwgZGVmYXVsdCBhcyByYWRpYWxBcmVhfSBmcm9tIFwiLi9hcmVhUmFkaWFsXCI7IC8vIE5vdGU6IHJhZGlhbEFyZWEgaXMgZGVwcmVjYXRlZCFcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsaW5lUmFkaWFsLCBkZWZhdWx0IGFzIHJhZGlhbExpbmV9IGZyb20gXCIuL2xpbmVSYWRpYWxcIjsgLy8gTm90ZTogcmFkaWFsTGluZSBpcyBkZXByZWNhdGVkIVxuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50UmFkaWFsfSBmcm9tIFwiLi9wb2ludFJhZGlhbFwiO1xuZXhwb3J0IHtsaW5rSG9yaXpvbnRhbCwgbGlua1ZlcnRpY2FsLCBsaW5rUmFkaWFsfSBmcm9tIFwiLi9saW5rL2luZGV4XCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2wsIHN5bWJvbHN9IGZyb20gXCIuL3N5bWJvbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENpcmNsZX0gZnJvbSBcIi4vc3ltYm9sL2NpcmNsZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENyb3NzfSBmcm9tIFwiLi9zeW1ib2wvY3Jvc3NcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xEaWFtb25kfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZX0gZnJvbSBcIi4vc3ltYm9sL3NxdWFyZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFN0YXJ9IGZyb20gXCIuL3N5bWJvbC9zdGFyXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVHJpYW5nbGV9IGZyb20gXCIuL3N5bWJvbC90cmlhbmdsZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFd5ZX0gZnJvbSBcIi4vc3ltYm9sL3d5ZVwiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vY3VydmUvYmFzaXNDbG9zZWRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzT3Blbn0gZnJvbSBcIi4vY3VydmUvYmFzaXNPcGVuXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc30gZnJvbSBcIi4vY3VydmUvYmFzaXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJ1bmRsZX0gZnJvbSBcIi4vY3VydmUvYnVuZGxlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxDbG9zZWRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhcmRpbmFsT3Blbn0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxPcGVuXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21DbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb21DbG9zZWRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21PcGVufSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tT3BlblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2F0bXVsbFJvbX0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTGluZWFyQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9saW5lYXJDbG9zZWRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhcn0gZnJvbSBcIi4vY3VydmUvbGluZWFyXCI7XG5leHBvcnQge21vbm90b25lWCBhcyBjdXJ2ZU1vbm90b25lWCwgbW9ub3RvbmVZIGFzIGN1cnZlTW9ub3RvbmVZfSBmcm9tIFwiLi9jdXJ2ZS9tb25vdG9uZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTmF0dXJhbH0gZnJvbSBcIi4vY3VydmUvbmF0dXJhbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlU3RlcCwgc3RlcEFmdGVyIGFzIGN1cnZlU3RlcEFmdGVyLCBzdGVwQmVmb3JlIGFzIGN1cnZlU3RlcEJlZm9yZX0gZnJvbSBcIi4vY3VydmUvc3RlcFwiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2t9IGZyb20gXCIuL3N0YWNrXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRFeHBhbmR9IGZyb20gXCIuL29mZnNldC9leHBhbmRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldERpdmVyZ2luZ30gZnJvbSBcIi4vb2Zmc2V0L2RpdmVyZ2luZ1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0Tm9uZX0gZnJvbSBcIi4vb2Zmc2V0L25vbmVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldFNpbGhvdWV0dGV9IGZyb20gXCIuL29mZnNldC9zaWxob3VldHRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRXaWdnbGV9IGZyb20gXCIuL29mZnNldC93aWdnbGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXBwZWFyYW5jZX0gZnJvbSBcIi4vb3JkZXIvYXBwZWFyYW5jZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJBc2NlbmRpbmd9IGZyb20gXCIuL29yZGVyL2FzY2VuZGluZ1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJEZXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9kZXNjZW5kaW5nXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckluc2lkZU91dH0gZnJvbSBcIi4vb3JkZXIvaW5zaWRlT3V0XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlck5vbmV9IGZyb20gXCIuL29yZGVyL25vbmVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyUmV2ZXJzZX0gZnJvbSBcIi4vb3JkZXIvcmV2ZXJzZVwiO1xuIiwiaW1wb3J0IHtwYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgY3VydmVMaW5lYXIgZnJvbSBcIi4vY3VydmUvbGluZWFyXCI7XG5pbXBvcnQge3ggYXMgcG9pbnRYLCB5IGFzIHBvaW50WX0gZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB4ID0gcG9pbnRYLFxuICAgICAgeSA9IHBvaW50WSxcbiAgICAgIGRlZmluZWQgPSBjb25zdGFudCh0cnVlKSxcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgY3VydmUgPSBjdXJ2ZUxpbmVhcixcbiAgICAgIG91dHB1dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZCxcbiAgICAgICAgZGVmaW5lZDAgPSBmYWxzZSxcbiAgICAgICAgYnVmZmVyO1xuXG4gICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgb3V0cHV0ID0gY3VydmUoYnVmZmVyID0gcGF0aCgpKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgKytpKSB7XG4gICAgICBpZiAoIShpIDwgbiAmJiBkZWZpbmVkKGQgPSBkYXRhW2ldLCBpLCBkYXRhKSkgPT09IGRlZmluZWQwKSB7XG4gICAgICAgIGlmIChkZWZpbmVkMCA9ICFkZWZpbmVkMCkgb3V0cHV0LmxpbmVTdGFydCgpO1xuICAgICAgICBlbHNlIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmaW5lZDApIG91dHB1dC5wb2ludCgreChkLCBpLCBkYXRhKSwgK3koZCwgaSwgZGF0YSkpO1xuICAgIH1cblxuICAgIGlmIChidWZmZXIpIHJldHVybiBvdXRwdXQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5lLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5lKSA6IHg7XG4gIH07XG5cbiAgbGluZS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB5O1xuICB9O1xuXG4gIGxpbmUuZGVmaW5lZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkZWZpbmVkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBsaW5lKSA6IGRlZmluZWQ7XG4gIH07XG5cbiAgbGluZS5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjdXJ2ZSA9IF8sIGNvbnRleHQgIT0gbnVsbCAmJiAob3V0cHV0ID0gY3VydmUoY29udGV4dCkpLCBsaW5lKSA6IGN1cnZlO1xuICB9O1xuXG4gIGxpbmUuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChfID09IG51bGwgPyBjb250ZXh0ID0gb3V0cHV0ID0gbnVsbCA6IG91dHB1dCA9IGN1cnZlKGNvbnRleHQgPSBfKSwgbGluZSkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5lO1xufVxuIiwiaW1wb3J0IGN1cnZlUmFkaWFsLCB7Y3VydmVSYWRpYWxMaW5lYXJ9IGZyb20gXCIuL2N1cnZlL3JhZGlhbFwiO1xuaW1wb3J0IGxpbmUgZnJvbSBcIi4vbGluZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbGluZVJhZGlhbChsKSB7XG4gIHZhciBjID0gbC5jdXJ2ZTtcblxuICBsLmFuZ2xlID0gbC54LCBkZWxldGUgbC54O1xuICBsLnJhZGl1cyA9IGwueSwgZGVsZXRlIGwueTtcblxuICBsLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gYyhjdXJ2ZVJhZGlhbChfKSkgOiBjKCkuX2N1cnZlO1xuICB9O1xuXG4gIHJldHVybiBsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGxpbmVSYWRpYWwobGluZSgpLmN1cnZlKGN1cnZlUmFkaWFsTGluZWFyKSk7XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi4vYXJyYXlcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnRcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi4vcG9pbnRcIjtcbmltcG9ydCBwb2ludFJhZGlhbCBmcm9tIFwiLi4vcG9pbnRSYWRpYWxcIjtcblxuZnVuY3Rpb24gbGlua1NvdXJjZShkKSB7XG4gIHJldHVybiBkLnNvdXJjZTtcbn1cblxuZnVuY3Rpb24gbGlua1RhcmdldChkKSB7XG4gIHJldHVybiBkLnRhcmdldDtcbn1cblxuZnVuY3Rpb24gbGluayhjdXJ2ZSkge1xuICB2YXIgc291cmNlID0gbGlua1NvdXJjZSxcbiAgICAgIHRhcmdldCA9IGxpbmtUYXJnZXQsXG4gICAgICB4ID0gcG9pbnRYLFxuICAgICAgeSA9IHBvaW50WSxcbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGxpbmsoKSB7XG4gICAgdmFyIGJ1ZmZlciwgYXJndiA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSwgcyA9IHNvdXJjZS5hcHBseSh0aGlzLCBhcmd2KSwgdCA9IHRhcmdldC5hcHBseSh0aGlzLCBhcmd2KTtcbiAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSBidWZmZXIgPSBwYXRoKCk7XG4gICAgY3VydmUoY29udGV4dCwgK3guYXBwbHkodGhpcywgKGFyZ3ZbMF0gPSBzLCBhcmd2KSksICt5LmFwcGx5KHRoaXMsIGFyZ3YpLCAreC5hcHBseSh0aGlzLCAoYXJndlswXSA9IHQsIGFyZ3YpKSwgK3kuYXBwbHkodGhpcywgYXJndikpO1xuICAgIGlmIChidWZmZXIpIHJldHVybiBjb250ZXh0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluay5zb3VyY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc291cmNlID0gXywgbGluaykgOiBzb3VyY2U7XG4gIH07XG5cbiAgbGluay50YXJnZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGFyZ2V0ID0gXywgbGluaykgOiB0YXJnZXQ7XG4gIH07XG5cbiAgbGluay54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluaykgOiB4O1xuICB9O1xuXG4gIGxpbmsueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmspIDogeTtcbiAgfTtcblxuICBsaW5rLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXyksIGxpbmspIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gY3VydmVIb3Jpem9udGFsKGNvbnRleHQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4MCA9ICh4MCArIHgxKSAvIDIsIHkwLCB4MCwgeTEsIHgxLCB5MSk7XG59XG5cbmZ1bmN0aW9uIGN1cnZlVmVydGljYWwoY29udGV4dCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwLCB5MCA9ICh5MCArIHkxKSAvIDIsIHgxLCB5MCwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gY3VydmVSYWRpYWwoY29udGV4dCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIHAwID0gcG9pbnRSYWRpYWwoeDAsIHkwKSxcbiAgICAgIHAxID0gcG9pbnRSYWRpYWwoeDAsIHkwID0gKHkwICsgeTEpIC8gMiksXG4gICAgICBwMiA9IHBvaW50UmFkaWFsKHgxLCB5MCksXG4gICAgICBwMyA9IHBvaW50UmFkaWFsKHgxLCB5MSk7XG4gIGNvbnRleHQubW92ZVRvKHAwWzBdLCBwMFsxXSk7XG4gIGNvbnRleHQuYmV6aWVyQ3VydmVUbyhwMVswXSwgcDFbMV0sIHAyWzBdLCBwMlsxXSwgcDNbMF0sIHAzWzFdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtIb3Jpem9udGFsKCkge1xuICByZXR1cm4gbGluayhjdXJ2ZUhvcml6b250YWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1ZlcnRpY2FsKCkge1xuICByZXR1cm4gbGluayhjdXJ2ZVZlcnRpY2FsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtSYWRpYWwoKSB7XG4gIHZhciBsID0gbGluayhjdXJ2ZVJhZGlhbCk7XG4gIGwuYW5nbGUgPSBsLngsIGRlbGV0ZSBsLng7XG4gIGwucmFkaXVzID0gbC55LCBkZWxldGUgbC55O1xuICByZXR1cm4gbDtcbn1cbiIsImV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnM7XG5leHBvcnQgdmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbmV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgc2luID0gTWF0aC5zaW47XG5leHBvcnQgdmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG5cbmV4cG9ydCB2YXIgZXBzaWxvbiA9IDFlLTEyO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgdGF1ID0gMiAqIHBpO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNvcyh4KSB7XG4gIHJldHVybiB4ID4gMSA/IDAgOiB4IDwgLTEgPyBwaSA6IE1hdGguYWNvcyh4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzaW4oeCkge1xuICByZXR1cm4geCA+PSAxID8gaGFsZlBpIDogeCA8PSAtMSA/IC1oYWxmUGkgOiBNYXRoLmFzaW4oeCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHt9XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMsIG9yZGVyKSB7XG4gIGlmICghKChuID0gc2VyaWVzLmxlbmd0aCkgPiAwKSkgcmV0dXJuO1xuICBmb3IgKHZhciBpLCBqID0gMCwgZCwgZHksIHlwLCB5biwgbiwgbSA9IHNlcmllc1tvcmRlclswXV0ubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh5cCA9IHluID0gMCwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgoZHkgPSAoZCA9IHNlcmllc1tvcmRlcltpXV1bal0pWzFdIC0gZFswXSkgPj0gMCkge1xuICAgICAgICBkWzBdID0geXAsIGRbMV0gPSB5cCArPSBkeTtcbiAgICAgIH0gZWxzZSBpZiAoZHkgPCAwKSB7XG4gICAgICAgIGRbMV0gPSB5biwgZFswXSA9IHluICs9IGR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZFswXSA9IHlwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMsIG9yZGVyKSB7XG4gIGlmICghKChuID0gc2VyaWVzLmxlbmd0aCkgPiAwKSkgcmV0dXJuO1xuICBmb3IgKHZhciBpLCBuLCBqID0gMCwgbSA9IHNlcmllc1swXS5sZW5ndGgsIHk7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHkgPSBpID0gMDsgaSA8IG47ICsraSkgeSArPSBzZXJpZXNbaV1bal1bMV0gfHwgMDtcbiAgICBpZiAoeSkgZm9yIChpID0gMDsgaSA8IG47ICsraSkgc2VyaWVzW2ldW2pdWzFdIC89IHk7XG4gIH1cbiAgbm9uZShzZXJpZXMsIG9yZGVyKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcywgb3JkZXIpIHtcbiAgaWYgKCEoKG4gPSBzZXJpZXMubGVuZ3RoKSA+IDEpKSByZXR1cm47XG4gIGZvciAodmFyIGkgPSAxLCBqLCBzMCwgczEgPSBzZXJpZXNbb3JkZXJbMF1dLCBuLCBtID0gczEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgczAgPSBzMSwgczEgPSBzZXJpZXNbb3JkZXJbaV1dO1xuICAgIGZvciAoaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIHMxW2pdWzFdICs9IHMxW2pdWzBdID0gaXNOYU4oczBbal1bMV0pID8gczBbal1bMF0gOiBzMFtqXVsxXTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBub25lIGZyb20gXCIuL25vbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzLCBvcmRlcikge1xuICBpZiAoISgobiA9IHNlcmllcy5sZW5ndGgpID4gMCkpIHJldHVybjtcbiAgZm9yICh2YXIgaiA9IDAsIHMwID0gc2VyaWVzW29yZGVyWzBdXSwgbiwgbSA9IHMwLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGkgPSAwLCB5ID0gMDsgaSA8IG47ICsraSkgeSArPSBzZXJpZXNbaV1bal1bMV0gfHwgMDtcbiAgICBzMFtqXVsxXSArPSBzMFtqXVswXSA9IC15IC8gMjtcbiAgfVxuICBub25lKHNlcmllcywgb3JkZXIpO1xufVxuIiwiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMsIG9yZGVyKSB7XG4gIGlmICghKChuID0gc2VyaWVzLmxlbmd0aCkgPiAwKSB8fCAhKChtID0gKHMwID0gc2VyaWVzW29yZGVyWzBdXSkubGVuZ3RoKSA+IDApKSByZXR1cm47XG4gIGZvciAodmFyIHkgPSAwLCBqID0gMSwgczAsIG0sIG47IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBpID0gMCwgczEgPSAwLCBzMiA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBzaSA9IHNlcmllc1tvcmRlcltpXV0sXG4gICAgICAgICAgc2lqMCA9IHNpW2pdWzFdIHx8IDAsXG4gICAgICAgICAgc2lqMSA9IHNpW2ogLSAxXVsxXSB8fCAwLFxuICAgICAgICAgIHMzID0gKHNpajAgLSBzaWoxKSAvIDI7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGk7ICsraykge1xuICAgICAgICB2YXIgc2sgPSBzZXJpZXNbb3JkZXJba11dLFxuICAgICAgICAgICAgc2tqMCA9IHNrW2pdWzFdIHx8IDAsXG4gICAgICAgICAgICBza2oxID0gc2tbaiAtIDFdWzFdIHx8IDA7XG4gICAgICAgIHMzICs9IHNrajAgLSBza2oxO1xuICAgICAgfVxuICAgICAgczEgKz0gc2lqMCwgczIgKz0gczMgKiBzaWowO1xuICAgIH1cbiAgICBzMFtqIC0gMV1bMV0gKz0gczBbaiAtIDFdWzBdID0geTtcbiAgICBpZiAoczEpIHkgLT0gczIgLyBzMTtcbiAgfVxuICBzMFtqIC0gMV1bMV0gKz0gczBbaiAtIDFdWzBdID0geTtcbiAgbm9uZShzZXJpZXMsIG9yZGVyKTtcbn1cbiIsImltcG9ydCBub25lIGZyb20gXCIuL25vbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzKSB7XG4gIHZhciBwZWFrcyA9IHNlcmllcy5tYXAocGVhayk7XG4gIHJldHVybiBub25lKHNlcmllcykuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBwZWFrc1thXSAtIHBlYWtzW2JdOyB9KTtcbn1cblxuZnVuY3Rpb24gcGVhayhzZXJpZXMpIHtcbiAgdmFyIGkgPSAtMSwgaiA9IDAsIG4gPSBzZXJpZXMubGVuZ3RoLCB2aSwgdmogPSAtSW5maW5pdHk7XG4gIHdoaWxlICgrK2kgPCBuKSBpZiAoKHZpID0gK3Nlcmllc1tpXVsxXSkgPiB2aikgdmogPSB2aSwgaiA9IGk7XG4gIHJldHVybiBqO1xufVxuIiwiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIHN1bXMgPSBzZXJpZXMubWFwKHN1bSk7XG4gIHJldHVybiBub25lKHNlcmllcykuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzdW1zW2FdIC0gc3Vtc1tiXTsgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW0oc2VyaWVzKSB7XG4gIHZhciBzID0gMCwgaSA9IC0xLCBuID0gc2VyaWVzLmxlbmd0aCwgdjtcbiAgd2hpbGUgKCsraSA8IG4pIGlmICh2ID0gK3Nlcmllc1tpXVsxXSkgcyArPSB2O1xuICByZXR1cm4gcztcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcykge1xuICByZXR1cm4gYXNjZW5kaW5nKHNlcmllcykucmV2ZXJzZSgpO1xufVxuIiwiaW1wb3J0IGFwcGVhcmFuY2UgZnJvbSBcIi4vYXBwZWFyYW5jZVwiO1xuaW1wb3J0IHtzdW19IGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIG4gPSBzZXJpZXMubGVuZ3RoLFxuICAgICAgaSxcbiAgICAgIGosXG4gICAgICBzdW1zID0gc2VyaWVzLm1hcChzdW0pLFxuICAgICAgb3JkZXIgPSBhcHBlYXJhbmNlKHNlcmllcyksXG4gICAgICB0b3AgPSAwLFxuICAgICAgYm90dG9tID0gMCxcbiAgICAgIHRvcHMgPSBbXSxcbiAgICAgIGJvdHRvbXMgPSBbXTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgaiA9IG9yZGVyW2ldO1xuICAgIGlmICh0b3AgPCBib3R0b20pIHtcbiAgICAgIHRvcCArPSBzdW1zW2pdO1xuICAgICAgdG9wcy5wdXNoKGopO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3R0b20gKz0gc3Vtc1tqXTtcbiAgICAgIGJvdHRvbXMucHVzaChqKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm90dG9tcy5yZXZlcnNlKCkuY29uY2F0KHRvcHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzKSB7XG4gIHZhciBuID0gc2VyaWVzLmxlbmd0aCwgbyA9IG5ldyBBcnJheShuKTtcbiAgd2hpbGUgKC0tbiA+PSAwKSBvW25dID0gbjtcbiAgcmV0dXJuIG87XG59XG4iLCJpbXBvcnQgbm9uZSBmcm9tIFwiLi9ub25lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcykge1xuICByZXR1cm4gbm9uZShzZXJpZXMpLnJldmVyc2UoKTtcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGRlc2NlbmRpbmcgZnJvbSBcIi4vZGVzY2VuZGluZ1wiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5XCI7XG5pbXBvcnQge3RhdX0gZnJvbSBcIi4vbWF0aFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gaWRlbnRpdHksXG4gICAgICBzb3J0VmFsdWVzID0gZGVzY2VuZGluZyxcbiAgICAgIHNvcnQgPSBudWxsLFxuICAgICAgc3RhcnRBbmdsZSA9IGNvbnN0YW50KDApLFxuICAgICAgZW5kQW5nbGUgPSBjb25zdGFudCh0YXUpLFxuICAgICAgcGFkQW5nbGUgPSBjb25zdGFudCgwKTtcblxuICBmdW5jdGlvbiBwaWUoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGosXG4gICAgICAgIGssXG4gICAgICAgIHN1bSA9IDAsXG4gICAgICAgIGluZGV4ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhcmNzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhMCA9ICtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIGRhID0gTWF0aC5taW4odGF1LCBNYXRoLm1heCgtdGF1LCBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gYTApKSxcbiAgICAgICAgYTEsXG4gICAgICAgIHAgPSBNYXRoLm1pbihNYXRoLmFicyhkYSkgLyBuLCBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgcGEgPSBwICogKGRhIDwgMCA/IC0xIDogMSksXG4gICAgICAgIHY7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHYgPSBhcmNzW2luZGV4W2ldID0gaV0gPSArdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSkpID4gMCkge1xuICAgICAgICBzdW0gKz0gdjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbGx5IHNvcnQgdGhlIGFyY3MgYnkgcHJldmlvdXNseS1jb21wdXRlZCB2YWx1ZXMgb3IgYnkgZGF0YS5cbiAgICBpZiAoc29ydFZhbHVlcyAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnRWYWx1ZXMoYXJjc1tpXSwgYXJjc1tqXSk7IH0pO1xuICAgIGVsc2UgaWYgKHNvcnQgIT0gbnVsbCkgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBzb3J0KGRhdGFbaV0sIGRhdGFbal0pOyB9KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGFyY3MhIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgb3JpZ2luYWwgZGF0YSdzIG9yZGVyLlxuICAgIGZvciAoaSA9IDAsIGsgPSBzdW0gPyAoZGEgLSBuICogcGEpIC8gc3VtIDogMDsgaSA8IG47ICsraSwgYTAgPSBhMSkge1xuICAgICAgaiA9IGluZGV4W2ldLCB2ID0gYXJjc1tqXSwgYTEgPSBhMCArICh2ID4gMCA/IHYgKiBrIDogMCkgKyBwYSwgYXJjc1tqXSA9IHtcbiAgICAgICAgZGF0YTogZGF0YVtqXSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBzdGFydEFuZ2xlOiBhMCxcbiAgICAgICAgZW5kQW5nbGU6IGExLFxuICAgICAgICBwYWRBbmdsZTogcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJjcztcbiAgfVxuXG4gIHBpZS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogdmFsdWU7XG4gIH07XG5cbiAgcGllLnNvcnRWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydFZhbHVlcyA9IF8sIHNvcnQgPSBudWxsLCBwaWUpIDogc29ydFZhbHVlcztcbiAgfTtcblxuICBwaWUuc29ydCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0ID0gXywgc29ydFZhbHVlcyA9IG51bGwsIHBpZSkgOiBzb3J0O1xuICB9O1xuXG4gIHBpZS5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgcGllLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBwaWUucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIHJldHVybiBwaWU7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24geChwKSB7XG4gIHJldHVybiBwWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geShwKSB7XG4gIHJldHVybiBwWzFdO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICByZXR1cm4gWyh5ID0gK3kpICogTWF0aC5jb3MoeCAtPSBNYXRoLlBJIC8gMiksIHkgKiBNYXRoLnNpbih4KV07XG59XG4iLCJpbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgb2Zmc2V0Tm9uZSBmcm9tIFwiLi9vZmZzZXQvbm9uZVwiO1xuaW1wb3J0IG9yZGVyTm9uZSBmcm9tIFwiLi9vcmRlci9ub25lXCI7XG5cbmZ1bmN0aW9uIHN0YWNrVmFsdWUoZCwga2V5KSB7XG4gIHJldHVybiBkW2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IGNvbnN0YW50KFtdKSxcbiAgICAgIG9yZGVyID0gb3JkZXJOb25lLFxuICAgICAgb2Zmc2V0ID0gb2Zmc2V0Tm9uZSxcbiAgICAgIHZhbHVlID0gc3RhY2tWYWx1ZTtcblxuICBmdW5jdGlvbiBzdGFjayhkYXRhKSB7XG4gICAgdmFyIGt6ID0ga2V5cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBpLFxuICAgICAgICBtID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIG4gPSBrei5sZW5ndGgsXG4gICAgICAgIHN6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBvejtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGZvciAodmFyIGtpID0ga3pbaV0sIHNpID0gc3pbaV0gPSBuZXcgQXJyYXkobSksIGogPSAwLCBzaWo7IGogPCBtOyArK2opIHtcbiAgICAgICAgc2lbal0gPSBzaWogPSBbMCwgK3ZhbHVlKGRhdGFbal0sIGtpLCBqLCBkYXRhKV07XG4gICAgICAgIHNpai5kYXRhID0gZGF0YVtqXTtcbiAgICAgIH1cbiAgICAgIHNpLmtleSA9IGtpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIG96ID0gb3JkZXIoc3opOyBpIDwgbjsgKytpKSB7XG4gICAgICBzeltveltpXV0uaW5kZXggPSBpO1xuICAgIH1cblxuICAgIG9mZnNldChzeiwgb3opO1xuICAgIHJldHVybiBzejtcbiAgfVxuXG4gIHN0YWNrLmtleXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoc2xpY2UuY2FsbChfKSksIHN0YWNrKSA6IGtleXM7XG4gIH07XG5cbiAgc3RhY2sudmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmFsdWUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgc3RhY2spIDogdmFsdWU7XG4gIH07XG5cbiAgc3RhY2sub3JkZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob3JkZXIgPSBfID09IG51bGwgPyBvcmRlck5vbmUgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KHNsaWNlLmNhbGwoXykpLCBzdGFjaykgOiBvcmRlcjtcbiAgfTtcblxuICBzdGFjay5vZmZzZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob2Zmc2V0ID0gXyA9PSBudWxsID8gb2Zmc2V0Tm9uZSA6IF8sIHN0YWNrKSA6IG9mZnNldDtcbiAgfTtcblxuICByZXR1cm4gc3RhY2s7XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY2lyY2xlIGZyb20gXCIuL3N5bWJvbC9jaXJjbGVcIjtcbmltcG9ydCBjcm9zcyBmcm9tIFwiLi9zeW1ib2wvY3Jvc3NcIjtcbmltcG9ydCBkaWFtb25kIGZyb20gXCIuL3N5bWJvbC9kaWFtb25kXCI7XG5pbXBvcnQgc3RhciBmcm9tIFwiLi9zeW1ib2wvc3RhclwiO1xuaW1wb3J0IHNxdWFyZSBmcm9tIFwiLi9zeW1ib2wvc3F1YXJlXCI7XG5pbXBvcnQgdHJpYW5nbGUgZnJvbSBcIi4vc3ltYm9sL3RyaWFuZ2xlXCI7XG5pbXBvcnQgd3llIGZyb20gXCIuL3N5bWJvbC93eWVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5leHBvcnQgdmFyIHN5bWJvbHMgPSBbXG4gIGNpcmNsZSxcbiAgY3Jvc3MsXG4gIGRpYW1vbmQsXG4gIHNxdWFyZSxcbiAgc3RhcixcbiAgdHJpYW5nbGUsXG4gIHd5ZVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB0eXBlID0gY29uc3RhbnQoY2lyY2xlKSxcbiAgICAgIHNpemUgPSBjb25zdGFudCg2NCksXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBzeW1ib2woKSB7XG4gICAgdmFyIGJ1ZmZlcjtcbiAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSBidWZmZXIgPSBwYXRoKCk7XG4gICAgdHlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLmRyYXcoY29udGV4dCwgK3NpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBzeW1ib2wudHlwZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0eXBlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgc3ltYm9sKSA6IHR5cGU7XG4gIH07XG5cbiAgc3ltYm9sLnNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2l6ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBzeW1ib2wpIDogc2l6ZTtcbiAgfTtcblxuICBzeW1ib2wuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb250ZXh0ID0gXyA9PSBudWxsID8gbnVsbCA6IF8sIHN5bWJvbCkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBzeW1ib2w7XG59XG4iLCJpbXBvcnQge3BpLCB0YXV9IGZyb20gXCIuLi9tYXRoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdzogZnVuY3Rpb24oY29udGV4dCwgc2l6ZSkge1xuICAgIHZhciByID0gTWF0aC5zcXJ0KHNpemUgLyBwaSk7XG4gICAgY29udGV4dC5tb3ZlVG8ociwgMCk7XG4gICAgY29udGV4dC5hcmMoMCwgMCwgciwgMCwgdGF1KTtcbiAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdzogZnVuY3Rpb24oY29udGV4dCwgc2l6ZSkge1xuICAgIHZhciByID0gTWF0aC5zcXJ0KHNpemUgLyA1KSAvIDI7XG4gICAgY29udGV4dC5tb3ZlVG8oLTMgKiByLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oLXIsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgLTMgKiByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAtMyAqIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbygzICogciwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKDMgKiByLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAzICogcik7XG4gICAgY29udGV4dC5saW5lVG8oLXIsIDMgKiByKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgcik7XG4gICAgY29udGV4dC5saW5lVG8oLTMgKiByLCByKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwidmFyIHRhbjMwID0gTWF0aC5zcXJ0KDEgLyAzKSxcbiAgICB0YW4zMF8yID0gdGFuMzAgKiAyO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgeSA9IE1hdGguc3FydChzaXplIC8gdGFuMzBfMiksXG4gICAgICAgIHggPSB5ICogdGFuMzA7XG4gICAgY29udGV4dC5tb3ZlVG8oMCwgLXkpO1xuICAgIGNvbnRleHQubGluZVRvKHgsIDApO1xuICAgIGNvbnRleHQubGluZVRvKDAsIHkpO1xuICAgIGNvbnRleHQubGluZVRvKC14LCAwKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHcgPSBNYXRoLnNxcnQoc2l6ZSksXG4gICAgICAgIHggPSAtdyAvIDI7XG4gICAgY29udGV4dC5yZWN0KHgsIHgsIHcsIHcpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtwaSwgdGF1fSBmcm9tIFwiLi4vbWF0aFwiO1xuXG52YXIga2EgPSAwLjg5MDgxMzA5MTUyOTI4NTIyODEwLFxuICAgIGtyID0gTWF0aC5zaW4ocGkgLyAxMCkgLyBNYXRoLnNpbig3ICogcGkgLyAxMCksXG4gICAga3ggPSBNYXRoLnNpbih0YXUgLyAxMCkgKiBrcixcbiAgICBreSA9IC1NYXRoLmNvcyh0YXUgLyAxMCkgKiBrcjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHIgPSBNYXRoLnNxcnQoc2l6ZSAqIGthKSxcbiAgICAgICAgeCA9IGt4ICogcixcbiAgICAgICAgeSA9IGt5ICogcjtcbiAgICBjb250ZXh0Lm1vdmVUbygwLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCA1OyArK2kpIHtcbiAgICAgIHZhciBhID0gdGF1ICogaSAvIDUsXG4gICAgICAgICAgYyA9IE1hdGguY29zKGEpLFxuICAgICAgICAgIHMgPSBNYXRoLnNpbihhKTtcbiAgICAgIGNvbnRleHQubGluZVRvKHMgKiByLCAtYyAqIHIpO1xuICAgICAgY29udGV4dC5saW5lVG8oYyAqIHggLSBzICogeSwgcyAqIHggKyBjICogeSk7XG4gICAgfVxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iLCJ2YXIgc3FydDMgPSBNYXRoLnNxcnQoMyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdzogZnVuY3Rpb24oY29udGV4dCwgc2l6ZSkge1xuICAgIHZhciB5ID0gLU1hdGguc3FydChzaXplIC8gKHNxcnQzICogMykpO1xuICAgIGNvbnRleHQubW92ZVRvKDAsIHkgKiAyKTtcbiAgICBjb250ZXh0LmxpbmVUbygtc3FydDMgKiB5LCAteSk7XG4gICAgY29udGV4dC5saW5lVG8oc3FydDMgKiB5LCAteSk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiIsInZhciBjID0gLTAuNSxcbiAgICBzID0gTWF0aC5zcXJ0KDMpIC8gMixcbiAgICBrID0gMSAvIE1hdGguc3FydCgxMiksXG4gICAgYSA9IChrIC8gMiArIDEpICogMztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHIgPSBNYXRoLnNxcnQoc2l6ZSAvIGEpLFxuICAgICAgICB4MCA9IHIgLyAyLFxuICAgICAgICB5MCA9IHIgKiBrLFxuICAgICAgICB4MSA9IHgwLFxuICAgICAgICB5MSA9IHIgKiBrICsgcixcbiAgICAgICAgeDIgPSAteDEsXG4gICAgICAgIHkyID0geTE7XG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgwIC0gcyAqIHkwLCBzICogeDAgKyBjICogeTApO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MSAtIHMgKiB5MSwgcyAqIHgxICsgYyAqIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDIgLSBzICogeTIsIHMgKiB4MiArIGMgKiB5Mik7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgwICsgcyAqIHkwLCBjICogeTAgLSBzICogeDApO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MSArIHMgKiB5MSwgYyAqIHkxIC0gcyAqIHgxKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDIgKyBzICogeTIsIGMgKiB5MiAtIHMgKiB4Mik7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIHRpbWVGb3JtYXQ7XG5leHBvcnQgdmFyIHRpbWVQYXJzZTtcbmV4cG9ydCB2YXIgdXRjRm9ybWF0O1xuZXhwb3J0IHZhciB1dGNQYXJzZTtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRhdGVUaW1lOiBcIiV4LCAlWFwiLFxuICBkYXRlOiBcIiUtbS8lLWQvJVlcIixcbiAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcbiAgcGVyaW9kczogW1wiQU1cIiwgXCJQTVwiXSxcbiAgZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sXG4gIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICBtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLFxuICBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgdGltZUZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIHRpbWVQYXJzZSA9IGxvY2FsZS5wYXJzZTtcbiAgdXRjRm9ybWF0ID0gbG9jYWxlLnV0Y0Zvcm1hdDtcbiAgdXRjUGFyc2UgPSBsb2NhbGUudXRjUGFyc2U7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgdGltZUZvcm1hdERlZmF1bHRMb2NhbGUsIHRpbWVGb3JtYXQsIHRpbWVQYXJzZSwgdXRjRm9ybWF0LCB1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRpbWVGb3JtYXRMb2NhbGV9IGZyb20gXCIuL2xvY2FsZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGlzb0Zvcm1hdH0gZnJvbSBcIi4vaXNvRm9ybWF0XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaXNvUGFyc2V9IGZyb20gXCIuL2lzb1BhcnNlXCI7XG4iLCJpbXBvcnQge3V0Y0Zvcm1hdH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5leHBvcnQgdmFyIGlzb1NwZWNpZmllciA9IFwiJVktJW0tJWRUJUg6JU06JVMuJUxaXCI7XG5cbmZ1bmN0aW9uIGZvcm1hdElzb05hdGl2ZShkYXRlKSB7XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG59XG5cbnZhciBmb3JtYXRJc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ1xuICAgID8gZm9ybWF0SXNvTmF0aXZlXG4gICAgOiB1dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0SXNvO1xuIiwiaW1wb3J0IHtpc29TcGVjaWZpZXJ9IGZyb20gXCIuL2lzb0Zvcm1hdFwiO1xuaW1wb3J0IHt1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5mdW5jdGlvbiBwYXJzZUlzb05hdGl2ZShzdHJpbmcpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHJpbmcpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBudWxsIDogZGF0ZTtcbn1cblxudmFyIHBhcnNlSXNvID0gK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpXG4gICAgPyBwYXJzZUlzb05hdGl2ZVxuICAgIDogdXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJc287XG4iLCJpbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lU3VuZGF5LFxuICB0aW1lTW9uZGF5LFxuICB0aW1lVGh1cnNkYXksXG4gIHRpbWVZZWFyLFxuICB1dGNEYXksXG4gIHV0Y1N1bmRheSxcbiAgdXRjTW9uZGF5LFxuICB1dGNUaHVyc2RheSxcbiAgdXRjWWVhclxufSBmcm9tIFwiZDMtdGltZVwiO1xuXG5mdW5jdGlvbiBsb2NhbERhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xufVxuXG5mdW5jdGlvbiB1dGNEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xufVxuXG5mdW5jdGlvbiBuZXdZZWFyKHkpIHtcbiAgcmV0dXJuIHt5OiB5LCBtOiAwLCBkOiAxLCBIOiAwLCBNOiAwLCBTOiAwLCBMOiAwfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TG9jYWxlKGxvY2FsZSkge1xuICB2YXIgbG9jYWxlX2RhdGVUaW1lID0gbG9jYWxlLmRhdGVUaW1lLFxuICAgICAgbG9jYWxlX2RhdGUgPSBsb2NhbGUuZGF0ZSxcbiAgICAgIGxvY2FsZV90aW1lID0gbG9jYWxlLnRpbWUsXG4gICAgICBsb2NhbGVfcGVyaW9kcyA9IGxvY2FsZS5wZXJpb2RzLFxuICAgICAgbG9jYWxlX3dlZWtkYXlzID0gbG9jYWxlLmRheXMsXG4gICAgICBsb2NhbGVfc2hvcnRXZWVrZGF5cyA9IGxvY2FsZS5zaG9ydERheXMsXG4gICAgICBsb2NhbGVfbW9udGhzID0gbG9jYWxlLm1vbnRocyxcbiAgICAgIGxvY2FsZV9zaG9ydE1vbnRocyA9IGxvY2FsZS5zaG9ydE1vbnRocztcblxuICB2YXIgcGVyaW9kUmUgPSBmb3JtYXRSZShsb2NhbGVfcGVyaW9kcyksXG4gICAgICBwZXJpb2RMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgd2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIG1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfbW9udGhzKSxcbiAgICAgIG1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9tb250aHMpLFxuICAgICAgc2hvcnRNb250aFJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0TW9udGhzKTtcblxuICB2YXIgZm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0U2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0TWljcm9zZWNvbmRzLFxuICAgIFwiSFwiOiBmb3JtYXRIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdEhvdXIxMixcbiAgICBcImpcIjogZm9ybWF0RGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdE1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRQZXJpb2QsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxuICAgIFwiSFwiOiBmb3JtYXRVVENIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdFVUQ0hvdXIxMixcbiAgICBcImpcIjogZm9ybWF0VVRDRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRVVENNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdFVUQ01vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRVVENNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRVVENQZXJpb2QsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRVVENXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRVVENZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgcGFyc2VzID0ge1xuICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogcGFyc2VXZWVrZGF5LFxuICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgXCJCXCI6IHBhcnNlTW9udGgsXG4gICAgXCJjXCI6IHBhcnNlTG9jYWxlRGF0ZVRpbWUsXG4gICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBwYXJzZU1pY3Jvc2Vjb25kcyxcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJRXCI6IHBhcnNlVW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogcGFyc2VTZWNvbmRzLFxuICAgIFwidVwiOiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IHBhcnNlV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogcGFyc2VXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IHBhcnNlV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogcGFyc2VMb2NhbGVEYXRlLFxuICAgIFwiWFwiOiBwYXJzZUxvY2FsZVRpbWUsXG4gICAgXCJ5XCI6IHBhcnNlWWVhcixcbiAgICBcIllcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIlpcIjogcGFyc2Vab25lLFxuICAgIFwiJVwiOiBwYXJzZUxpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgLy8gVGhlc2UgcmVjdXJzaXZlIGRpcmVjdGl2ZSBkZWZpbml0aW9ucyBtdXN0IGJlIGRlZmVycmVkLlxuICBmb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCBmb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgdXRjRm9ybWF0cyk7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllciwgZm9ybWF0cykge1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICB2YXIgc3RyaW5nID0gW10sXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIGogPSAwLFxuICAgICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICAgIGMsXG4gICAgICAgICAgcGFkLFxuICAgICAgICAgIGZvcm1hdDtcblxuICAgICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSBkYXRlID0gbmV3IERhdGUoK2RhdGUpO1xuXG4gICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSkgPT09IDM3KSB7XG4gICAgICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgICAgICBpZiAoKHBhZCA9IHBhZHNbYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKV0pICE9IG51bGwpIGMgPSBzcGVjaWZpZXIuY2hhckF0KCsraSk7XG4gICAgICAgICAgZWxzZSBwYWQgPSBjID09PSBcImVcIiA/IFwiIFwiIDogXCIwXCI7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9IGZvcm1hdHNbY10pIGMgPSBmb3JtYXQoZGF0ZSwgcGFkKTtcbiAgICAgICAgICBzdHJpbmcucHVzaChjKTtcbiAgICAgICAgICBqID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgIHJldHVybiBzdHJpbmcuam9pbihcIlwiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbmV3UGFyc2Uoc3BlY2lmaWVyLCBuZXdEYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIGQgPSBuZXdZZWFyKDE5MDApLFxuICAgICAgICAgIGkgPSBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZyArPSBcIlwiLCAwKSxcbiAgICAgICAgICB3ZWVrLCBkYXk7XG4gICAgICBpZiAoaSAhPSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gSWYgYSBVTklYIHRpbWVzdGFtcCBpcyBzcGVjaWZpZWQsIHJldHVybiBpdC5cbiAgICAgIGlmIChcIlFcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5RKTtcblxuICAgICAgLy8gVGhlIGFtLXBtIGZsYWcgaXMgMCBmb3IgQU0sIGFuZCAxIGZvciBQTS5cbiAgICAgIGlmIChcInBcIiBpbiBkKSBkLkggPSBkLkggJSAxMiArIGQucCAqIDEyO1xuXG4gICAgICAvLyBDb252ZXJ0IGRheS1vZi13ZWVrIGFuZCB3ZWVrLW9mLXllYXIgdG8gZGF5LW9mLXllYXIuXG4gICAgICBpZiAoXCJWXCIgaW4gZCkge1xuICAgICAgICBpZiAoZC5WIDwgMSB8fCBkLlYgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSAxO1xuICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXRlKG5ld1llYXIoZC55KSksIGRheSA9IHdlZWsuZ2V0VVRDRGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdXRjTW9uZGF5LmNlaWwod2VlaykgOiB1dGNNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHV0Y0RheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldFVUQ0RhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2VlayA9IG5ld0RhdGUobmV3WWVhcihkLnkpKSwgZGF5ID0gd2Vlay5nZXREYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB0aW1lTW9uZGF5LmNlaWwod2VlaykgOiB0aW1lTW9uZGF5KHdlZWspO1xuICAgICAgICAgIHdlZWsgPSB0aW1lRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0RGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcIldcIiBpbiBkIHx8IFwiVVwiIGluIGQpIHtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IFwidVwiIGluIGQgPyBkLnUgJSA3IDogXCJXXCIgaW4gZCA/IDEgOiAwO1xuICAgICAgICBkYXkgPSBcIlpcIiBpbiBkID8gdXRjRGF0ZShuZXdZZWFyKGQueSkpLmdldFVUQ0RheSgpIDogbmV3RGF0ZShuZXdZZWFyKGQueSkpLmdldERheSgpO1xuICAgICAgICBkLm0gPSAwO1xuICAgICAgICBkLmQgPSBcIldcIiBpbiBkID8gKGQudyArIDYpICUgNyArIGQuVyAqIDcgLSAoZGF5ICsgNSkgJSA3IDogZC53ICsgZC5VICogNyAtIChkYXkgKyA2KSAlIDc7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGEgdGltZSB6b25lIGlzIHNwZWNpZmllZCwgYWxsIGZpZWxkcyBhcmUgaW50ZXJwcmV0ZWQgYXMgVVRDIGFuZCB0aGVuXG4gICAgICAvLyBvZmZzZXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgdGltZSB6b25lLlxuICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgZC5IICs9IGQuWiAvIDEwMCB8IDA7XG4gICAgICAgIGQuTSArPSBkLlogJSAxMDA7XG4gICAgICAgIHJldHVybiB1dGNEYXRlKGQpO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UsIGFsbCBmaWVsZHMgYXJlIGluIGxvY2FsIHRpbWUuXG4gICAgICByZXR1cm4gbmV3RGF0ZShkKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcsIGopIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICBtID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgYyxcbiAgICAgICAgcGFyc2U7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIGlmIChqID49IG0pIHJldHVybiAtMTtcbiAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xuICAgICAgaWYgKGMgPT09IDM3KSB7XG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckF0KGkrKyk7XG4gICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xuICAgICAgICBpZiAoIXBhcnNlIHx8ICgoaiA9IHBhcnNlKGQsIHN0cmluZywgaikpIDwgMCkpIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPSBzdHJpbmcuY2hhckNvZGVBdChqKyspKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gajtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUGVyaW9kKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gcGVyaW9kUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQucCA9IHBlcmlvZExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0V2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0V2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSBzaG9ydFdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gd2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSB3ZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0TW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gc2hvcnRNb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gbW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gbW9udGhMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGVUaW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX3RpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFBlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1BlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRVVENIb3VycygpID49IDEyKV07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgZm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIGxvY2FsRGF0ZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIHV0Y0Zvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgdXRjRm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHV0Y1BhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyLCB1dGNEYXRlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHBhZHMgPSB7XCItXCI6IFwiXCIsIFwiX1wiOiBcIiBcIiwgXCIwXCI6IFwiMFwifSxcbiAgICBudW1iZXJSZSA9IC9eXFxzKlxcZCsvLCAvLyBub3RlOiBpZ25vcmVzIG5leHQgZGlyZWN0aXZlXG4gICAgcGVyY2VudFJlID0gL14lLyxcbiAgICByZXF1b3RlUmUgPSAvW1xcXFxeJCorP3xbXFxdKCkue31dL2c7XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZSwgZmlsbCwgd2lkdGgpIHtcbiAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyBcIi1cIiA6IFwiXCIsXG4gICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiByZXF1b3RlKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZShyZXF1b3RlUmUsIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZShuYW1lcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChyZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvb2t1cChuYW1lcykge1xuICB2YXIgbWFwID0ge30sIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIG1hcFtuYW1lc1tpXS50b0xvd2VyQ2FzZSgpXSA9IGk7XG4gIHJldHVybiBtYXA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLncgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC51ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlcklTTyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlYgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5XID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdWxsWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0gKyAoK25bMF0gPiA2OCA/IDE5MDAgOiAyMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVpvbmUoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gL14oWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/Ly5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLlogPSBuWzFdID8gMCA6IC0oblsyXSArIChuWzNdIHx8IFwiMDBcIikpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTW9udGhOdW1iZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gblswXSAtIDEsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZk1vbnRoKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQubSA9IDAsIGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSG91cjI0KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuSCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWludXRlcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLk0gPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5TID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWxsaXNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWNyb3NlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gTWF0aC5mbG9vcihuWzBdIC8gMTAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaXRlcmFsUGVyY2VudChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBwZXJjZW50UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyBpICsgblswXS5sZW5ndGggOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQuUSA9ICgrblswXSkgKiAxMDAwLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdGltZURheS5jb3VudCh0aW1lWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZVN1bmRheS5jb3VudCh0aW1lWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKHRpbWVUaHVyc2RheS5jb3VudCh0aW1lWWVhcihkKSwgZCkgKyAodGltZVllYXIoZCkuZ2V0RGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldERheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lTW9uZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFpvbmUoZCkge1xuICB2YXIgeiA9IGQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuICh6ID4gMCA/IFwiLVwiIDogKHogKj0gLTEsIFwiK1wiKSlcbiAgICAgICsgcGFkKHogLyA2MCB8IDAsIFwiMFwiLCAyKVxuICAgICAgKyBwYWQoeiAlIDYwLCBcIjBcIiwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdXRjRGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ1NlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZG93ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIGRvdyA9PT0gMCA/IDcgOiBkb3c7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y1N1bmRheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKHV0Y1RodXJzZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpICsgKHV0Y1llYXIoZCkuZ2V0VVRDRGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldFVUQ0RheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNNb25kYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENab25lKCkge1xuICByZXR1cm4gXCIrMDAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaXRlcmFsUGVyY2VudCgpIHtcbiAgcmV0dXJuIFwiJVwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wKGQpIHtcbiAgcmV0dXJuICtkO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyhkKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKCtkIC8gMTAwMCk7XG59XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgZGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldERhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGF5O1xuZXhwb3J0IHZhciBkYXlzID0gZGF5LnJhbmdlO1xuIiwiZXhwb3J0IHZhciBkdXJhdGlvblNlY29uZCA9IDFlMztcbmV4cG9ydCB2YXIgZHVyYXRpb25NaW51dGUgPSA2ZTQ7XG5leHBvcnQgdmFyIGR1cmF0aW9uSG91ciA9IDM2ZTU7XG5leHBvcnQgdmFyIGR1cmF0aW9uRGF5ID0gODY0ZTU7XG5leHBvcnQgdmFyIGR1cmF0aW9uV2VlayA9IDYwNDhlNTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIGhvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvdXI7XG5leHBvcnQgdmFyIGhvdXJzID0gaG91ci5yYW5nZTtcbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZUludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZU1pbGxpc2Vjb25kLFxuICBtaWxsaXNlY29uZHMgYXMgdGltZU1pbGxpc2Vjb25kcyxcbiAgZGVmYXVsdCBhcyB1dGNNaWxsaXNlY29uZCxcbiAgbWlsbGlzZWNvbmRzIGFzIHV0Y01pbGxpc2Vjb25kc1xufSBmcm9tIFwiLi9taWxsaXNlY29uZFwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVTZWNvbmQsXG4gIHNlY29uZHMgYXMgdGltZVNlY29uZHMsXG4gIGRlZmF1bHQgYXMgdXRjU2Vjb25kLFxuICBzZWNvbmRzIGFzIHV0Y1NlY29uZHNcbn0gZnJvbSBcIi4vc2Vjb25kXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZU1pbnV0ZSxcbiAgbWludXRlcyBhcyB0aW1lTWludXRlc1xufSBmcm9tIFwiLi9taW51dGVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lSG91cixcbiAgaG91cnMgYXMgdGltZUhvdXJzXG59IGZyb20gXCIuL2hvdXJcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lRGF5LFxuICBkYXlzIGFzIHRpbWVEYXlzXG59IGZyb20gXCIuL2RheVwiO1xuXG5leHBvcnQge1xuICBzdW5kYXkgYXMgdGltZVdlZWssXG4gIHN1bmRheXMgYXMgdGltZVdlZWtzLFxuICBzdW5kYXkgYXMgdGltZVN1bmRheSxcbiAgc3VuZGF5cyBhcyB0aW1lU3VuZGF5cyxcbiAgbW9uZGF5IGFzIHRpbWVNb25kYXksXG4gIG1vbmRheXMgYXMgdGltZU1vbmRheXMsXG4gIHR1ZXNkYXkgYXMgdGltZVR1ZXNkYXksXG4gIHR1ZXNkYXlzIGFzIHRpbWVUdWVzZGF5cyxcbiAgd2VkbmVzZGF5IGFzIHRpbWVXZWRuZXNkYXksXG4gIHdlZG5lc2RheXMgYXMgdGltZVdlZG5lc2RheXMsXG4gIHRodXJzZGF5IGFzIHRpbWVUaHVyc2RheSxcbiAgdGh1cnNkYXlzIGFzIHRpbWVUaHVyc2RheXMsXG4gIGZyaWRheSBhcyB0aW1lRnJpZGF5LFxuICBmcmlkYXlzIGFzIHRpbWVGcmlkYXlzLFxuICBzYXR1cmRheSBhcyB0aW1lU2F0dXJkYXksXG4gIHNhdHVyZGF5cyBhcyB0aW1lU2F0dXJkYXlzXG59IGZyb20gXCIuL3dlZWtcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lTW9udGgsXG4gIG1vbnRocyBhcyB0aW1lTW9udGhzXG59IGZyb20gXCIuL21vbnRoXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZVllYXIsXG4gIHllYXJzIGFzIHRpbWVZZWFyc1xufSBmcm9tIFwiLi95ZWFyXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdXRjTWludXRlLFxuICB1dGNNaW51dGVzIGFzIHV0Y01pbnV0ZXNcbn0gZnJvbSBcIi4vdXRjTWludXRlXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdXRjSG91cixcbiAgdXRjSG91cnMgYXMgdXRjSG91cnNcbn0gZnJvbSBcIi4vdXRjSG91clwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHV0Y0RheSxcbiAgdXRjRGF5cyBhcyB1dGNEYXlzXG59IGZyb20gXCIuL3V0Y0RheVwiO1xuXG5leHBvcnQge1xuICB1dGNTdW5kYXkgYXMgdXRjV2VlayxcbiAgdXRjU3VuZGF5cyBhcyB1dGNXZWVrcyxcbiAgdXRjU3VuZGF5IGFzIHV0Y1N1bmRheSxcbiAgdXRjU3VuZGF5cyBhcyB1dGNTdW5kYXlzLFxuICB1dGNNb25kYXkgYXMgdXRjTW9uZGF5LFxuICB1dGNNb25kYXlzIGFzIHV0Y01vbmRheXMsXG4gIHV0Y1R1ZXNkYXkgYXMgdXRjVHVlc2RheSxcbiAgdXRjVHVlc2RheXMgYXMgdXRjVHVlc2RheXMsXG4gIHV0Y1dlZG5lc2RheSBhcyB1dGNXZWRuZXNkYXksXG4gIHV0Y1dlZG5lc2RheXMgYXMgdXRjV2VkbmVzZGF5cyxcbiAgdXRjVGh1cnNkYXkgYXMgdXRjVGh1cnNkYXksXG4gIHV0Y1RodXJzZGF5cyBhcyB1dGNUaHVyc2RheXMsXG4gIHV0Y0ZyaWRheSBhcyB1dGNGcmlkYXksXG4gIHV0Y0ZyaWRheXMgYXMgdXRjRnJpZGF5cyxcbiAgdXRjU2F0dXJkYXkgYXMgdXRjU2F0dXJkYXksXG4gIHV0Y1NhdHVyZGF5cyBhcyB1dGNTYXR1cmRheXNcbn0gZnJvbSBcIi4vdXRjV2Vla1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHV0Y01vbnRoLFxuICB1dGNNb250aHMgYXMgdXRjTW9udGhzXG59IGZyb20gXCIuL3V0Y01vbnRoXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdXRjWWVhcixcbiAgdXRjWWVhcnMgYXMgdXRjWWVhcnNcbn0gZnJvbSBcIi4vdXRjWWVhclwiO1xuIiwidmFyIHQwID0gbmV3IERhdGUsXG4gICAgdDEgPSBuZXcgRGF0ZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbmV3SW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gaW50ZXJ2YWw7XG5cbiAgaW50ZXJ2YWwuY2VpbCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZShkYXRlIC0gMSkpLCBvZmZzZXRpKGRhdGUsIDEpLCBmbG9vcmkoZGF0ZSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucm91bmQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgdmFyIGQwID0gaW50ZXJ2YWwoZGF0ZSksXG4gICAgICAgIGQxID0gaW50ZXJ2YWwuY2VpbChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZSAtIGQwIDwgZDEgLSBkYXRlID8gZDAgOiBkMTtcbiAgfTtcblxuICBpbnRlcnZhbC5vZmZzZXQgPSBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICB2YXIgcmFuZ2UgPSBbXSwgcHJldmlvdXM7XG4gICAgc3RhcnQgPSBpbnRlcnZhbC5jZWlsKHN0YXJ0KTtcbiAgICBzdGVwID0gc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgaWYgKCEoc3RhcnQgPCBzdG9wKSB8fCAhKHN0ZXAgPiAwKSkgcmV0dXJuIHJhbmdlOyAvLyBhbHNvIGhhbmRsZXMgSW52YWxpZCBEYXRlXG4gICAgZG8gcmFuZ2UucHVzaChwcmV2aW91cyA9IG5ldyBEYXRlKCtzdGFydCkpLCBvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KTtcbiAgICB3aGlsZSAocHJldmlvdXMgPCBzdGFydCAmJiBzdGFydCA8IHN0b3ApO1xuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSBmdW5jdGlvbih0ZXN0KSB7XG4gICAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHtcbiAgICAgICAgaWYgKHN0ZXAgPCAwKSB3aGlsZSAoKytzdGVwIDw9IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCAtMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH0gZWxzZSB3aGlsZSAoLS1zdGVwID49IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCArMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoY291bnQpIHtcbiAgICBpbnRlcnZhbC5jb3VudCA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHQwLnNldFRpbWUoK3N0YXJ0KSwgdDEuc2V0VGltZSgrZW5kKTtcbiAgICAgIGZsb29yaSh0MCksIGZsb29yaSh0MSk7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihjb3VudCh0MCwgdDEpKTtcbiAgICB9O1xuXG4gICAgaW50ZXJ2YWwuZXZlcnkgPSBmdW5jdGlvbihzdGVwKSB7XG4gICAgICBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHJldHVybiAhaXNGaW5pdGUoc3RlcCkgfHwgIShzdGVwID4gMCkgPyBudWxsXG4gICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXG4gICAgICAgICAgOiBpbnRlcnZhbC5maWx0ZXIoZmllbGRcbiAgICAgICAgICAgICAgPyBmdW5jdGlvbihkKSB7IHJldHVybiBmaWVsZChkKSAlIHN0ZXAgPT09IDA7IH1cbiAgICAgICAgICAgICAgOiBmdW5jdGlvbihkKSB7IHJldHVybiBpbnRlcnZhbC5jb3VudCgwLCBkKSAlIHN0ZXAgPT09IDA7IH0pO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gaW50ZXJ2YWw7XG59XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIG1pbGxpc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gIC8vIG5vb3Bcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQgLSBzdGFydDtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG5taWxsaXNlY29uZC5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gaykgKiBrKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gaztcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtaWxsaXNlY29uZDtcbmV4cG9ydCB2YXIgbWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmQucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgbWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1pbnV0ZTtcbmV4cG9ydCB2YXIgbWludXRlcyA9IG1pbnV0ZS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgbW9udGggPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRNb250aCgpIC0gc3RhcnQuZ2V0TW9udGgoKSArIChlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCkpICogMTI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbW9udGg7XG5leHBvcnQgdmFyIG1vbnRocyA9IG1vbnRoLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc2Vjb25kO1xuZXhwb3J0IHZhciBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5fSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjRGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNEYXk7XG5leHBvcnQgdmFyIHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjSG91ciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjSG91cjtcbmV4cG9ydCB2YXIgdXRjSG91cnMgPSB1dGNIb3VyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjTWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNNaW51dGU7XG5leHBvcnQgdmFyIHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIChkYXRlLmdldFVUQ0RheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IHZhciB1dGNNb25kYXkgPSB1dGNXZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5ID0gdXRjV2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXkgPSB1dGNXZWVrZGF5KDQpO1xuZXhwb3J0IHZhciB1dGNGcmlkYXkgPSB1dGNXZWVrZGF5KDUpO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5cyA9IHV0Y1N1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5cyA9IHV0Y01vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXlzID0gdXRjV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheXMgPSB1dGNUaHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXlzID0gdXRjU2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHV0Y1llYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudXRjWWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y1llYXI7XG5leHBvcnQgdmFyIHV0Y1llYXJzID0gdXRjWWVhci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG5mdW5jdGlvbiB3ZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHN1bmRheSA9IHdlZWtkYXkoMCk7XG5leHBvcnQgdmFyIG1vbmRheSA9IHdlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXkgPSB3ZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB0aHVyc2RheSA9IHdlZWtkYXkoNCk7XG5leHBvcnQgdmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHNhdHVyZGF5ID0gd2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciBzdW5kYXlzID0gc3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBtb25kYXlzID0gbW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0dWVzZGF5cyA9IHR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHdlZG5lc2RheXMgPSB3ZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHRodXJzZGF5cyA9IHRodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBmcmlkYXlzID0gZnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBzYXR1cmRheXMgPSBzYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgeWVhciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG55ZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGRhdGUuZ2V0RnVsbFllYXIoKSAvIGspICogayk7XG4gICAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgeWVhcjtcbmV4cG9ydCB2YXIgeWVhcnMgPSB5ZWFyLnJhbmdlO1xuIiwiZXhwb3J0IHtcbiAgbm93LFxuICB0aW1lcixcbiAgdGltZXJGbHVzaFxufSBmcm9tIFwiLi90aW1lclwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVvdXRcbn0gZnJvbSBcIi4vdGltZW91dFwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsXCI7XG4iLCJpbXBvcnQge1RpbWVyLCBub3d9IGZyb20gXCIuL3RpbWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lciwgdG90YWwgPSBkZWxheTtcbiAgaWYgKGRlbGF5ID09IG51bGwpIHJldHVybiB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSwgdDtcbiAgZGVsYXkgPSArZGVsYXksIHRpbWUgPSB0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lO1xuICB0LnJlc3RhcnQoZnVuY3Rpb24gdGljayhlbGFwc2VkKSB7XG4gICAgZWxhcHNlZCArPSB0b3RhbDtcbiAgICB0LnJlc3RhcnQodGljaywgdG90YWwgKz0gZGVsYXksIHRpbWUpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQpO1xuICB9LCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuIiwiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZnVuY3Rpb24oZWxhcHNlZCkge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKG51bGwsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vdHJhbnNpdGlvbi9pbmRleFwiO1xuaW1wb3J0IHtTQ0hFRFVMRUR9IGZyb20gXCIuL3RyYW5zaXRpb24vc2NoZWR1bGVcIjtcblxudmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBpO1xuXG4gIGlmIChzY2hlZHVsZXMpIHtcbiAgICBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLnN0YXRlID4gU0NIRURVTEVEICYmIHNjaGVkdWxlLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKFtbbm9kZV1dLCByb290LCBuYW1lLCAraSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgXCIuL3NlbGVjdGlvbi9pbmRleFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyYW5zaXRpb259IGZyb20gXCIuL3RyYW5zaXRpb24vaW5kZXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhY3RpdmV9IGZyb20gXCIuL2FjdGl2ZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycnVwdH0gZnJvbSBcIi4vaW50ZXJydXB0XCI7XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnRlcnJ1cHQgZnJvbSBcIi4vaW50ZXJydXB0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvblwiO1xuXG5zZWxlY3Rpb24ucHJvdG90eXBlLmludGVycnVwdCA9IHNlbGVjdGlvbl9pbnRlcnJ1cHQ7XG5zZWxlY3Rpb24ucHJvdG90eXBlLnRyYW5zaXRpb24gPSBzZWxlY3Rpb25fdHJhbnNpdGlvbjtcbiIsImltcG9ydCBpbnRlcnJ1cHQgZnJvbSBcIi4uL2ludGVycnVwdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaW50ZXJydXB0KHRoaXMsIG5hbWUpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuLi90cmFuc2l0aW9uL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUgZnJvbSBcIi4uL3RyYW5zaXRpb24vc2NoZWR1bGVcIjtcbmltcG9ydCB7ZWFzZUN1YmljSW5PdXR9IGZyb20gXCJkMy1lYXNlXCI7XG5pbXBvcnQge25vd30gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBkZWZhdWx0VGltaW5nID0ge1xuICB0aW1lOiBudWxsLCAvLyBTZXQgb24gdXNlLlxuICBkZWxheTogMCxcbiAgZHVyYXRpb246IDI1MCxcbiAgZWFzZTogZWFzZUN1YmljSW5PdXRcbn07XG5cbmZ1bmN0aW9uIGluaGVyaXQobm9kZSwgaWQpIHtcbiAgdmFyIHRpbWluZztcbiAgd2hpbGUgKCEodGltaW5nID0gbm9kZS5fX3RyYW5zaXRpb24pIHx8ICEodGltaW5nID0gdGltaW5nW2lkXSkpIHtcbiAgICBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRUaW1pbmcudGltZSA9IG5vdygpLCBkZWZhdWx0VGltaW5nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGltaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBpZCxcbiAgICAgIHRpbWluZztcblxuICBpZiAobmFtZSBpbnN0YW5jZW9mIFRyYW5zaXRpb24pIHtcbiAgICBpZCA9IG5hbWUuX2lkLCBuYW1lID0gbmFtZS5fbmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IG5ld0lkKCksICh0aW1pbmcgPSBkZWZhdWx0VGltaW5nKS50aW1lID0gbm93KCksIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZCwgaSwgZ3JvdXAsIHRpbWluZyB8fCBpbmhlcml0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCwgdmFsdWUxID0gdmFsdWUodGhpcyksIHN0cmluZzE7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSksIGkgPSBmdWxsbmFtZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB0aGlzLmF0dHJUd2VlbihuYW1lLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbikoZnVsbG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJhdHRyLlwiICsgbmFtZSwgdmFsdWUpKVxuICAgICAgOiB2YWx1ZSA9PSBudWxsID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkoZnVsbG5hbWUpXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KShmdWxsbmFtZSwgaSwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZShuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgaSh0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkodCkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW5OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiBhdHRySW50ZXJwb2xhdGVOUyhmdWxsbmFtZSwgaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2VlbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZShuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGtleSA9IFwiYXR0ci5cIiArIG5hbWU7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIChmdWxsbmFtZS5sb2NhbCA/IGF0dHJUd2Vlbk5TIDogYXR0clR3ZWVuKShmdWxsbmFtZSwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7Z2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBkZWxheUZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVsYXlDb25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBkZWxheUZ1bmN0aW9uXG4gICAgICAgICAgOiBkZWxheUNvbnN0YW50KShpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5kZWxheTtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIGR1cmF0aW9uRnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gK3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGR1cmF0aW9uQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBkdXJhdGlvbkZ1bmN0aW9uXG4gICAgICAgICAgOiBkdXJhdGlvbkNvbnN0YW50KShpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5kdXJhdGlvbjtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIGVhc2VDb25zdGFudChpZCwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmVhc2UgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKGVhc2VDb25zdGFudChpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5lYXNlO1xufVxuIiwiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgb24wLCBvbjEsIHRoYXQgPSB0aGlzLCBpZCA9IHRoYXQuX2lkLCBzaXplID0gdGhhdC5zaXplKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgY2FuY2VsID0ge3ZhbHVlOiByZWplY3R9LFxuICAgICAgICBlbmQgPSB7dmFsdWU6IGZ1bmN0aW9uKCkgeyBpZiAoLS1zaXplID09PSAwKSByZXNvbHZlKCk7IH19O1xuXG4gICAgdGhhdC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgICAgaWYgKG9uICE9PSBvbjApIHtcbiAgICAgICAgb24xID0gKG9uMCA9IG9uKS5jb3B5KCk7XG4gICAgICAgIG9uMS5fLmNhbmNlbC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmludGVycnVwdC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmVuZC5wdXNoKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0clwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2VlblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXlcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2VcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXJcIjtcbmltcG9ydCB0cmFuc2l0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9vbiBmcm9tIFwiLi9vblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdFwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGVcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlVHdlZW4gZnJvbSBcIi4vc3R5bGVUd2VlblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dCBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3R3ZWVuIGZyb20gXCIuL3R3ZWVuXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lbmQgZnJvbSBcIi4vZW5kXCI7XG5cbnZhciBpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFuc2l0aW9uKGdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIHRoaXMuX2lkID0gaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICByZXR1cm4gKytpZDtcbn1cblxudmFyIHNlbGVjdGlvbl9wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlO1xuXG5UcmFuc2l0aW9uLnByb3RvdHlwZSA9IHRyYW5zaXRpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNpdGlvbixcbiAgc2VsZWN0OiB0cmFuc2l0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiB0cmFuc2l0aW9uX3NlbGVjdEFsbCxcbiAgZmlsdGVyOiB0cmFuc2l0aW9uX2ZpbHRlcixcbiAgbWVyZ2U6IHRyYW5zaXRpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogdHJhbnNpdGlvbl9zZWxlY3Rpb24sXG4gIHRyYW5zaXRpb246IHRyYW5zaXRpb25fdHJhbnNpdGlvbixcbiAgY2FsbDogc2VsZWN0aW9uX3Byb3RvdHlwZS5jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fcHJvdG90eXBlLmVtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fcHJvdG90eXBlLmVhY2gsXG4gIG9uOiB0cmFuc2l0aW9uX29uLFxuICBhdHRyOiB0cmFuc2l0aW9uX2F0dHIsXG4gIGF0dHJUd2VlbjogdHJhbnNpdGlvbl9hdHRyVHdlZW4sXG4gIHN0eWxlOiB0cmFuc2l0aW9uX3N0eWxlLFxuICBzdHlsZVR3ZWVuOiB0cmFuc2l0aW9uX3N0eWxlVHdlZW4sXG4gIHRleHQ6IHRyYW5zaXRpb25fdGV4dCxcbiAgcmVtb3ZlOiB0cmFuc2l0aW9uX3JlbW92ZSxcbiAgdHdlZW46IHRyYW5zaXRpb25fdHdlZW4sXG4gIGRlbGF5OiB0cmFuc2l0aW9uX2RlbGF5LFxuICBkdXJhdGlvbjogdHJhbnNpdGlvbl9kdXJhdGlvbixcbiAgZWFzZTogdHJhbnNpdGlvbl9lYXNlLFxuICBlbmQ6IHRyYW5zaXRpb25fZW5kXG59O1xuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJnYiwgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBjO1xuICByZXR1cm4gKHR5cGVvZiBiID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gaW50ZXJwb2xhdGVSZ2JcbiAgICAgIDogKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIGludGVycG9sYXRlUmdiKVxuICAgICAgOiBpbnRlcnBvbGF0ZVN0cmluZykoYSwgYik7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIHN0YXJ0KG5hbWUpIHtcbiAgcmV0dXJuIChuYW1lICsgXCJcIikudHJpbSgpLnNwbGl0KC9efFxccysvKS5ldmVyeShmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIHJldHVybiAhdCB8fCB0ID09PSBcInN0YXJ0XCI7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvbkZ1bmN0aW9uKGlkLCBuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgb24wLCBvbjEsIHNpdCA9IHN0YXJ0KG5hbWUpID8gaW5pdCA6IHNldDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNpdCh0aGlzLCBpZCksXG4gICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKG9uICE9PSBvbjApIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24obmFtZSwgbGlzdGVuZXIpO1xuXG4gICAgc2NoZWR1bGUub24gPSBvbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGxpc3RlbmVyKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMlxuICAgICAgPyBnZXQodGhpcy5ub2RlKCksIGlkKS5vbi5vbihuYW1lKVxuICAgICAgOiB0aGlzLmVhY2gob25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpKTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIGZvciAodmFyIGkgaW4gdGhpcy5fX3RyYW5zaXRpb24pIGlmICgraSAhPT0gaWQpIHJldHVybjtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vbihcImVuZC5yZW1vdmVcIiwgcmVtb3ZlRnVuY3Rpb24odGhpcy5faWQpKTtcbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHtzZWxlY3Rvcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgICAgc2NoZWR1bGUoc3ViZ3JvdXBbaV0sIG5hbWUsIGlkLCBpLCBzdWJncm91cCwgZ2V0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG52YXIgU2VsZWN0aW9uID0gc2VsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2dyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtQ3NzIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c3R5bGV9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIHN0eWxlTnVsbChuYW1lLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHN0cmluZzEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCBzdHJpbmcxMCA9IHN0cmluZzEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHZhbHVlMSA9IHZhbHVlKHRoaXMpLFxuICAgICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHN0cmluZzEgPSB2YWx1ZTEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVNYXliZVJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgb24wLCBvbjEsIGxpc3RlbmVyMCwga2V5ID0gXCJzdHlsZS5cIiArIG5hbWUsIGV2ZW50ID0gXCJlbmQuXCIgKyBrZXksIHJlbW92ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIG9uID0gc2NoZWR1bGUub24sXG4gICAgICAgIGxpc3RlbmVyID0gc2NoZWR1bGUudmFsdWVba2V5XSA9PSBudWxsID8gcmVtb3ZlIHx8IChyZW1vdmUgPSBzdHlsZVJlbW92ZShuYW1lKSkgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKG9uICE9PSBvbjAgfHwgbGlzdGVuZXIwICE9PSBsaXN0ZW5lcikgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihldmVudCwgbGlzdGVuZXIwID0gbGlzdGVuZXIpO1xuXG4gICAgc2NoZWR1bGUub24gPSBvbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgaSA9IChuYW1lICs9IFwiXCIpID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZU51bGwobmFtZSwgaSkpXG4gICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBzdHlsZVJlbW92ZShuYW1lKSlcbiAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVGdW5jdGlvbihuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwic3R5bGUuXCIgKyBuYW1lLCB2YWx1ZSkpKVxuICAgICAgLmVhY2goc3R5bGVNYXliZVJlbW92ZSh0aGlzLl9pZCwgbmFtZSkpXG4gICAgOiB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUNvbnN0YW50KG5hbWUsIGksIHZhbHVlKSwgcHJpb3JpdHkpXG4gICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBudWxsKTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkodCksIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIHQsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0ID0gKGkwID0gaSkgJiYgc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSk7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBrZXkgPSBcInN0eWxlLlwiICsgKG5hbWUgKz0gXCJcIik7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSk7XG59XG4iLCJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQwID0gdGhpcy5faWQsXG4gICAgICBpZDEgPSBuZXdJZCgpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHZhciBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkMCk7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkMSwgaSwgZ3JvdXAsIHtcbiAgICAgICAgICB0aW1lOiBpbmhlcml0LnRpbWUgKyBpbmhlcml0LmRlbGF5ICsgaW5oZXJpdC5kdXJhdGlvbixcbiAgICAgICAgICBkZWxheTogMCxcbiAgICAgICAgICBkdXJhdGlvbjogaW5oZXJpdC5kdXJhdGlvbixcbiAgICAgICAgICBlYXNlOiBpbmhlcml0LmVhc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQxKTtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJpbXBvcnQge1JlZEJsYWNrTm9kZX0gZnJvbSBcIi4vUmVkQmxhY2tUcmVlXCI7XG5pbXBvcnQge2NyZWF0ZUNlbGx9IGZyb20gXCIuL0NlbGxcIjtcbmltcG9ydCB7YXR0YWNoQ2lyY2xlLCBkZXRhY2hDaXJjbGV9IGZyb20gXCIuL0NpcmNsZVwiO1xuaW1wb3J0IHtjcmVhdGVFZGdlLCBzZXRFZGdlRW5kfSBmcm9tIFwiLi9FZGdlXCI7XG5pbXBvcnQge2JlYWNoZXMsIGVwc2lsb259IGZyb20gXCIuL0RpYWdyYW1cIjtcblxudmFyIGJlYWNoUG9vbCA9IFtdO1xuXG5mdW5jdGlvbiBCZWFjaCgpIHtcbiAgUmVkQmxhY2tOb2RlKHRoaXMpO1xuICB0aGlzLmVkZ2UgPVxuICB0aGlzLnNpdGUgPVxuICB0aGlzLmNpcmNsZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJlYWNoKHNpdGUpIHtcbiAgdmFyIGJlYWNoID0gYmVhY2hQb29sLnBvcCgpIHx8IG5ldyBCZWFjaDtcbiAgYmVhY2guc2l0ZSA9IHNpdGU7XG4gIHJldHVybiBiZWFjaDtcbn1cblxuZnVuY3Rpb24gZGV0YWNoQmVhY2goYmVhY2gpIHtcbiAgZGV0YWNoQ2lyY2xlKGJlYWNoKTtcbiAgYmVhY2hlcy5yZW1vdmUoYmVhY2gpO1xuICBiZWFjaFBvb2wucHVzaChiZWFjaCk7XG4gIFJlZEJsYWNrTm9kZShiZWFjaCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVCZWFjaChiZWFjaCkge1xuICB2YXIgY2lyY2xlID0gYmVhY2guY2lyY2xlLFxuICAgICAgeCA9IGNpcmNsZS54LFxuICAgICAgeSA9IGNpcmNsZS5jeSxcbiAgICAgIHZlcnRleCA9IFt4LCB5XSxcbiAgICAgIHByZXZpb3VzID0gYmVhY2guUCxcbiAgICAgIG5leHQgPSBiZWFjaC5OLFxuICAgICAgZGlzYXBwZWFyaW5nID0gW2JlYWNoXTtcblxuICBkZXRhY2hCZWFjaChiZWFjaCk7XG5cbiAgdmFyIGxBcmMgPSBwcmV2aW91cztcbiAgd2hpbGUgKGxBcmMuY2lyY2xlXG4gICAgICAmJiBNYXRoLmFicyh4IC0gbEFyYy5jaXJjbGUueCkgPCBlcHNpbG9uXG4gICAgICAmJiBNYXRoLmFicyh5IC0gbEFyYy5jaXJjbGUuY3kpIDwgZXBzaWxvbikge1xuICAgIHByZXZpb3VzID0gbEFyYy5QO1xuICAgIGRpc2FwcGVhcmluZy51bnNoaWZ0KGxBcmMpO1xuICAgIGRldGFjaEJlYWNoKGxBcmMpO1xuICAgIGxBcmMgPSBwcmV2aW91cztcbiAgfVxuXG4gIGRpc2FwcGVhcmluZy51bnNoaWZ0KGxBcmMpO1xuICBkZXRhY2hDaXJjbGUobEFyYyk7XG5cbiAgdmFyIHJBcmMgPSBuZXh0O1xuICB3aGlsZSAockFyYy5jaXJjbGVcbiAgICAgICYmIE1hdGguYWJzKHggLSByQXJjLmNpcmNsZS54KSA8IGVwc2lsb25cbiAgICAgICYmIE1hdGguYWJzKHkgLSByQXJjLmNpcmNsZS5jeSkgPCBlcHNpbG9uKSB7XG4gICAgbmV4dCA9IHJBcmMuTjtcbiAgICBkaXNhcHBlYXJpbmcucHVzaChyQXJjKTtcbiAgICBkZXRhY2hCZWFjaChyQXJjKTtcbiAgICByQXJjID0gbmV4dDtcbiAgfVxuXG4gIGRpc2FwcGVhcmluZy5wdXNoKHJBcmMpO1xuICBkZXRhY2hDaXJjbGUockFyYyk7XG5cbiAgdmFyIG5BcmNzID0gZGlzYXBwZWFyaW5nLmxlbmd0aCxcbiAgICAgIGlBcmM7XG4gIGZvciAoaUFyYyA9IDE7IGlBcmMgPCBuQXJjczsgKytpQXJjKSB7XG4gICAgckFyYyA9IGRpc2FwcGVhcmluZ1tpQXJjXTtcbiAgICBsQXJjID0gZGlzYXBwZWFyaW5nW2lBcmMgLSAxXTtcbiAgICBzZXRFZGdlRW5kKHJBcmMuZWRnZSwgbEFyYy5zaXRlLCByQXJjLnNpdGUsIHZlcnRleCk7XG4gIH1cblxuICBsQXJjID0gZGlzYXBwZWFyaW5nWzBdO1xuICByQXJjID0gZGlzYXBwZWFyaW5nW25BcmNzIC0gMV07XG4gIHJBcmMuZWRnZSA9IGNyZWF0ZUVkZ2UobEFyYy5zaXRlLCByQXJjLnNpdGUsIG51bGwsIHZlcnRleCk7XG5cbiAgYXR0YWNoQ2lyY2xlKGxBcmMpO1xuICBhdHRhY2hDaXJjbGUockFyYyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRCZWFjaChzaXRlKSB7XG4gIHZhciB4ID0gc2l0ZVswXSxcbiAgICAgIGRpcmVjdHJpeCA9IHNpdGVbMV0sXG4gICAgICBsQXJjLFxuICAgICAgckFyYyxcbiAgICAgIGR4bCxcbiAgICAgIGR4cixcbiAgICAgIG5vZGUgPSBiZWFjaGVzLl87XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBkeGwgPSBsZWZ0QnJlYWtQb2ludChub2RlLCBkaXJlY3RyaXgpIC0geDtcbiAgICBpZiAoZHhsID4gZXBzaWxvbikgbm9kZSA9IG5vZGUuTDsgZWxzZSB7XG4gICAgICBkeHIgPSB4IC0gcmlnaHRCcmVha1BvaW50KG5vZGUsIGRpcmVjdHJpeCk7XG4gICAgICBpZiAoZHhyID4gZXBzaWxvbikge1xuICAgICAgICBpZiAoIW5vZGUuUikge1xuICAgICAgICAgIGxBcmMgPSBub2RlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLlI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZHhsID4gLWVwc2lsb24pIHtcbiAgICAgICAgICBsQXJjID0gbm9kZS5QO1xuICAgICAgICAgIHJBcmMgPSBub2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGR4ciA+IC1lcHNpbG9uKSB7XG4gICAgICAgICAgbEFyYyA9IG5vZGU7XG4gICAgICAgICAgckFyYyA9IG5vZGUuTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsQXJjID0gckFyYyA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQ2VsbChzaXRlKTtcbiAgdmFyIG5ld0FyYyA9IGNyZWF0ZUJlYWNoKHNpdGUpO1xuICBiZWFjaGVzLmluc2VydChsQXJjLCBuZXdBcmMpO1xuXG4gIGlmICghbEFyYyAmJiAhckFyYykgcmV0dXJuO1xuXG4gIGlmIChsQXJjID09PSByQXJjKSB7XG4gICAgZGV0YWNoQ2lyY2xlKGxBcmMpO1xuICAgIHJBcmMgPSBjcmVhdGVCZWFjaChsQXJjLnNpdGUpO1xuICAgIGJlYWNoZXMuaW5zZXJ0KG5ld0FyYywgckFyYyk7XG4gICAgbmV3QXJjLmVkZ2UgPSByQXJjLmVkZ2UgPSBjcmVhdGVFZGdlKGxBcmMuc2l0ZSwgbmV3QXJjLnNpdGUpO1xuICAgIGF0dGFjaENpcmNsZShsQXJjKTtcbiAgICBhdHRhY2hDaXJjbGUockFyYyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFyQXJjKSB7IC8vICYmIGxBcmNcbiAgICBuZXdBcmMuZWRnZSA9IGNyZWF0ZUVkZ2UobEFyYy5zaXRlLCBuZXdBcmMuc2l0ZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZWxzZSBsQXJjICE9PSByQXJjXG4gIGRldGFjaENpcmNsZShsQXJjKTtcbiAgZGV0YWNoQ2lyY2xlKHJBcmMpO1xuXG4gIHZhciBsU2l0ZSA9IGxBcmMuc2l0ZSxcbiAgICAgIGF4ID0gbFNpdGVbMF0sXG4gICAgICBheSA9IGxTaXRlWzFdLFxuICAgICAgYnggPSBzaXRlWzBdIC0gYXgsXG4gICAgICBieSA9IHNpdGVbMV0gLSBheSxcbiAgICAgIHJTaXRlID0gckFyYy5zaXRlLFxuICAgICAgY3ggPSByU2l0ZVswXSAtIGF4LFxuICAgICAgY3kgPSByU2l0ZVsxXSAtIGF5LFxuICAgICAgZCA9IDIgKiAoYnggKiBjeSAtIGJ5ICogY3gpLFxuICAgICAgaGIgPSBieCAqIGJ4ICsgYnkgKiBieSxcbiAgICAgIGhjID0gY3ggKiBjeCArIGN5ICogY3ksXG4gICAgICB2ZXJ0ZXggPSBbKGN5ICogaGIgLSBieSAqIGhjKSAvIGQgKyBheCwgKGJ4ICogaGMgLSBjeCAqIGhiKSAvIGQgKyBheV07XG5cbiAgc2V0RWRnZUVuZChyQXJjLmVkZ2UsIGxTaXRlLCByU2l0ZSwgdmVydGV4KTtcbiAgbmV3QXJjLmVkZ2UgPSBjcmVhdGVFZGdlKGxTaXRlLCBzaXRlLCBudWxsLCB2ZXJ0ZXgpO1xuICByQXJjLmVkZ2UgPSBjcmVhdGVFZGdlKHNpdGUsIHJTaXRlLCBudWxsLCB2ZXJ0ZXgpO1xuICBhdHRhY2hDaXJjbGUobEFyYyk7XG4gIGF0dGFjaENpcmNsZShyQXJjKTtcbn1cblxuZnVuY3Rpb24gbGVmdEJyZWFrUG9pbnQoYXJjLCBkaXJlY3RyaXgpIHtcbiAgdmFyIHNpdGUgPSBhcmMuc2l0ZSxcbiAgICAgIHJmb2N4ID0gc2l0ZVswXSxcbiAgICAgIHJmb2N5ID0gc2l0ZVsxXSxcbiAgICAgIHBieTIgPSByZm9jeSAtIGRpcmVjdHJpeDtcblxuICBpZiAoIXBieTIpIHJldHVybiByZm9jeDtcblxuICB2YXIgbEFyYyA9IGFyYy5QO1xuICBpZiAoIWxBcmMpIHJldHVybiAtSW5maW5pdHk7XG5cbiAgc2l0ZSA9IGxBcmMuc2l0ZTtcbiAgdmFyIGxmb2N4ID0gc2l0ZVswXSxcbiAgICAgIGxmb2N5ID0gc2l0ZVsxXSxcbiAgICAgIHBsYnkyID0gbGZvY3kgLSBkaXJlY3RyaXg7XG5cbiAgaWYgKCFwbGJ5MikgcmV0dXJuIGxmb2N4O1xuXG4gIHZhciBobCA9IGxmb2N4IC0gcmZvY3gsXG4gICAgICBhYnkyID0gMSAvIHBieTIgLSAxIC8gcGxieTIsXG4gICAgICBiID0gaGwgLyBwbGJ5MjtcblxuICBpZiAoYWJ5MikgcmV0dXJuICgtYiArIE1hdGguc3FydChiICogYiAtIDIgKiBhYnkyICogKGhsICogaGwgLyAoLTIgKiBwbGJ5MikgLSBsZm9jeSArIHBsYnkyIC8gMiArIHJmb2N5IC0gcGJ5MiAvIDIpKSkgLyBhYnkyICsgcmZvY3g7XG5cbiAgcmV0dXJuIChyZm9jeCArIGxmb2N4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHJpZ2h0QnJlYWtQb2ludChhcmMsIGRpcmVjdHJpeCkge1xuICB2YXIgckFyYyA9IGFyYy5OO1xuICBpZiAockFyYykgcmV0dXJuIGxlZnRCcmVha1BvaW50KHJBcmMsIGRpcmVjdHJpeCk7XG4gIHZhciBzaXRlID0gYXJjLnNpdGU7XG4gIHJldHVybiBzaXRlWzFdID09PSBkaXJlY3RyaXggPyBzaXRlWzBdIDogSW5maW5pdHk7XG59XG4iLCJpbXBvcnQge2NyZWF0ZUJvcmRlckVkZ2V9IGZyb20gXCIuL0VkZ2VcIjtcbmltcG9ydCB7Y2VsbHMsIGVkZ2VzLCBlcHNpbG9ufSBmcm9tIFwiLi9EaWFncmFtXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDZWxsKHNpdGUpIHtcbiAgcmV0dXJuIGNlbGxzW3NpdGUuaW5kZXhdID0ge1xuICAgIHNpdGU6IHNpdGUsXG4gICAgaGFsZmVkZ2VzOiBbXVxuICB9O1xufVxuXG5mdW5jdGlvbiBjZWxsSGFsZmVkZ2VBbmdsZShjZWxsLCBlZGdlKSB7XG4gIHZhciBzaXRlID0gY2VsbC5zaXRlLFxuICAgICAgdmEgPSBlZGdlLmxlZnQsXG4gICAgICB2YiA9IGVkZ2UucmlnaHQ7XG4gIGlmIChzaXRlID09PSB2YikgdmIgPSB2YSwgdmEgPSBzaXRlO1xuICBpZiAodmIpIHJldHVybiBNYXRoLmF0YW4yKHZiWzFdIC0gdmFbMV0sIHZiWzBdIC0gdmFbMF0pO1xuICBpZiAoc2l0ZSA9PT0gdmEpIHZhID0gZWRnZVsxXSwgdmIgPSBlZGdlWzBdO1xuICBlbHNlIHZhID0gZWRnZVswXSwgdmIgPSBlZGdlWzFdO1xuICByZXR1cm4gTWF0aC5hdGFuMih2YVswXSAtIHZiWzBdLCB2YlsxXSAtIHZhWzFdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbGxIYWxmZWRnZVN0YXJ0KGNlbGwsIGVkZ2UpIHtcbiAgcmV0dXJuIGVkZ2VbKyhlZGdlLmxlZnQgIT09IGNlbGwuc2l0ZSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VsbEhhbGZlZGdlRW5kKGNlbGwsIGVkZ2UpIHtcbiAgcmV0dXJuIGVkZ2VbKyhlZGdlLmxlZnQgPT09IGNlbGwuc2l0ZSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydENlbGxIYWxmZWRnZXMoKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBoYWxmZWRnZXMsIGosIG07IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGNlbGwgPSBjZWxsc1tpXSkgJiYgKG0gPSAoaGFsZmVkZ2VzID0gY2VsbC5oYWxmZWRnZXMpLmxlbmd0aCkpIHtcbiAgICAgIHZhciBpbmRleCA9IG5ldyBBcnJheShtKSxcbiAgICAgICAgICBhcnJheSA9IG5ldyBBcnJheShtKTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBtOyArK2opIGluZGV4W2pdID0gaiwgYXJyYXlbal0gPSBjZWxsSGFsZmVkZ2VBbmdsZShjZWxsLCBlZGdlc1toYWxmZWRnZXNbal1dKTtcbiAgICAgIGluZGV4LnNvcnQoZnVuY3Rpb24oaSwgaikgeyByZXR1cm4gYXJyYXlbal0gLSBhcnJheVtpXTsgfSk7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSBhcnJheVtqXSA9IGhhbGZlZGdlc1tpbmRleFtqXV07XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSBoYWxmZWRnZXNbal0gPSBhcnJheVtqXTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaXBDZWxscyh4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgbkNlbGxzID0gY2VsbHMubGVuZ3RoLFxuICAgICAgaUNlbGwsXG4gICAgICBjZWxsLFxuICAgICAgc2l0ZSxcbiAgICAgIGlIYWxmZWRnZSxcbiAgICAgIGhhbGZlZGdlcyxcbiAgICAgIG5IYWxmZWRnZXMsXG4gICAgICBzdGFydCxcbiAgICAgIHN0YXJ0WCxcbiAgICAgIHN0YXJ0WSxcbiAgICAgIGVuZCxcbiAgICAgIGVuZFgsXG4gICAgICBlbmRZLFxuICAgICAgY292ZXIgPSB0cnVlO1xuXG4gIGZvciAoaUNlbGwgPSAwOyBpQ2VsbCA8IG5DZWxsczsgKytpQ2VsbCkge1xuICAgIGlmIChjZWxsID0gY2VsbHNbaUNlbGxdKSB7XG4gICAgICBzaXRlID0gY2VsbC5zaXRlO1xuICAgICAgaGFsZmVkZ2VzID0gY2VsbC5oYWxmZWRnZXM7XG4gICAgICBpSGFsZmVkZ2UgPSBoYWxmZWRnZXMubGVuZ3RoO1xuXG4gICAgICAvLyBSZW1vdmUgYW55IGRhbmdsaW5nIGNsaXBwZWQgZWRnZXMuXG4gICAgICB3aGlsZSAoaUhhbGZlZGdlLS0pIHtcbiAgICAgICAgaWYgKCFlZGdlc1toYWxmZWRnZXNbaUhhbGZlZGdlXV0pIHtcbiAgICAgICAgICBoYWxmZWRnZXMuc3BsaWNlKGlIYWxmZWRnZSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSW5zZXJ0IGFueSBib3JkZXIgZWRnZXMgYXMgbmVjZXNzYXJ5LlxuICAgICAgaUhhbGZlZGdlID0gMCwgbkhhbGZlZGdlcyA9IGhhbGZlZGdlcy5sZW5ndGg7XG4gICAgICB3aGlsZSAoaUhhbGZlZGdlIDwgbkhhbGZlZGdlcykge1xuICAgICAgICBlbmQgPSBjZWxsSGFsZmVkZ2VFbmQoY2VsbCwgZWRnZXNbaGFsZmVkZ2VzW2lIYWxmZWRnZV1dKSwgZW5kWCA9IGVuZFswXSwgZW5kWSA9IGVuZFsxXTtcbiAgICAgICAgc3RhcnQgPSBjZWxsSGFsZmVkZ2VTdGFydChjZWxsLCBlZGdlc1toYWxmZWRnZXNbKytpSGFsZmVkZ2UgJSBuSGFsZmVkZ2VzXV0pLCBzdGFydFggPSBzdGFydFswXSwgc3RhcnRZID0gc3RhcnRbMV07XG4gICAgICAgIGlmIChNYXRoLmFicyhlbmRYIC0gc3RhcnRYKSA+IGVwc2lsb24gfHwgTWF0aC5hYnMoZW5kWSAtIHN0YXJ0WSkgPiBlcHNpbG9uKSB7XG4gICAgICAgICAgaGFsZmVkZ2VzLnNwbGljZShpSGFsZmVkZ2UsIDAsIGVkZ2VzLnB1c2goY3JlYXRlQm9yZGVyRWRnZShzaXRlLCBlbmQsXG4gICAgICAgICAgICAgIE1hdGguYWJzKGVuZFggLSB4MCkgPCBlcHNpbG9uICYmIHkxIC0gZW5kWSA+IGVwc2lsb24gPyBbeDAsIE1hdGguYWJzKHN0YXJ0WCAtIHgwKSA8IGVwc2lsb24gPyBzdGFydFkgOiB5MV1cbiAgICAgICAgICAgICAgOiBNYXRoLmFicyhlbmRZIC0geTEpIDwgZXBzaWxvbiAmJiB4MSAtIGVuZFggPiBlcHNpbG9uID8gW01hdGguYWJzKHN0YXJ0WSAtIHkxKSA8IGVwc2lsb24gPyBzdGFydFggOiB4MSwgeTFdXG4gICAgICAgICAgICAgIDogTWF0aC5hYnMoZW5kWCAtIHgxKSA8IGVwc2lsb24gJiYgZW5kWSAtIHkwID4gZXBzaWxvbiA/IFt4MSwgTWF0aC5hYnMoc3RhcnRYIC0geDEpIDwgZXBzaWxvbiA/IHN0YXJ0WSA6IHkwXVxuICAgICAgICAgICAgICA6IE1hdGguYWJzKGVuZFkgLSB5MCkgPCBlcHNpbG9uICYmIGVuZFggLSB4MCA+IGVwc2lsb24gPyBbTWF0aC5hYnMoc3RhcnRZIC0geTApIDwgZXBzaWxvbiA/IHN0YXJ0WCA6IHgwLCB5MF1cbiAgICAgICAgICAgICAgOiBudWxsKSkgLSAxKTtcbiAgICAgICAgICArK25IYWxmZWRnZXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5IYWxmZWRnZXMpIGNvdmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlcmUgd2VyZW7igJl0IGFueSBlZGdlcywgaGF2ZSB0aGUgY2xvc2VzdCBzaXRlIGNvdmVyIHRoZSBleHRlbnQuXG4gIC8vIEl0IGRvZXNu4oCZdCBtYXR0ZXIgd2hpY2ggY29ybmVyIG9mIHRoZSBleHRlbnQgd2UgbWVhc3VyZSFcbiAgaWYgKGNvdmVyKSB7XG4gICAgdmFyIGR4LCBkeSwgZDIsIGRjID0gSW5maW5pdHk7XG5cbiAgICBmb3IgKGlDZWxsID0gMCwgY292ZXIgPSBudWxsOyBpQ2VsbCA8IG5DZWxsczsgKytpQ2VsbCkge1xuICAgICAgaWYgKGNlbGwgPSBjZWxsc1tpQ2VsbF0pIHtcbiAgICAgICAgc2l0ZSA9IGNlbGwuc2l0ZTtcbiAgICAgICAgZHggPSBzaXRlWzBdIC0geDA7XG4gICAgICAgIGR5ID0gc2l0ZVsxXSAtIHkwO1xuICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgICBpZiAoZDIgPCBkYykgZGMgPSBkMiwgY292ZXIgPSBjZWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb3Zlcikge1xuICAgICAgdmFyIHYwMCA9IFt4MCwgeTBdLCB2MDEgPSBbeDAsIHkxXSwgdjExID0gW3gxLCB5MV0sIHYxMCA9IFt4MSwgeTBdO1xuICAgICAgY292ZXIuaGFsZmVkZ2VzLnB1c2goXG4gICAgICAgIGVkZ2VzLnB1c2goY3JlYXRlQm9yZGVyRWRnZShzaXRlID0gY292ZXIuc2l0ZSwgdjAwLCB2MDEpKSAtIDEsXG4gICAgICAgIGVkZ2VzLnB1c2goY3JlYXRlQm9yZGVyRWRnZShzaXRlLCB2MDEsIHYxMSkpIC0gMSxcbiAgICAgICAgZWRnZXMucHVzaChjcmVhdGVCb3JkZXJFZGdlKHNpdGUsIHYxMSwgdjEwKSkgLSAxLFxuICAgICAgICBlZGdlcy5wdXNoKGNyZWF0ZUJvcmRlckVkZ2Uoc2l0ZSwgdjEwLCB2MDApKSAtIDFcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFzdGx5IGRlbGV0ZSBhbnkgY2VsbHMgd2l0aCBubyBlZGdlczsgdGhlc2Ugd2VyZSBlbnRpcmVseSBjbGlwcGVkLlxuICBmb3IgKGlDZWxsID0gMDsgaUNlbGwgPCBuQ2VsbHM7ICsraUNlbGwpIHtcbiAgICBpZiAoY2VsbCA9IGNlbGxzW2lDZWxsXSkge1xuICAgICAgaWYgKCFjZWxsLmhhbGZlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIGNlbGxzW2lDZWxsXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7UmVkQmxhY2tOb2RlfSBmcm9tIFwiLi9SZWRCbGFja1RyZWVcIjtcbmltcG9ydCB7Y2lyY2xlcywgZXBzaWxvbjJ9IGZyb20gXCIuL0RpYWdyYW1cIjtcblxudmFyIGNpcmNsZVBvb2wgPSBbXTtcblxuZXhwb3J0IHZhciBmaXJzdENpcmNsZTtcblxuZnVuY3Rpb24gQ2lyY2xlKCkge1xuICBSZWRCbGFja05vZGUodGhpcyk7XG4gIHRoaXMueCA9XG4gIHRoaXMueSA9XG4gIHRoaXMuYXJjID1cbiAgdGhpcy5zaXRlID1cbiAgdGhpcy5jeSA9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hDaXJjbGUoYXJjKSB7XG4gIHZhciBsQXJjID0gYXJjLlAsXG4gICAgICByQXJjID0gYXJjLk47XG5cbiAgaWYgKCFsQXJjIHx8ICFyQXJjKSByZXR1cm47XG5cbiAgdmFyIGxTaXRlID0gbEFyYy5zaXRlLFxuICAgICAgY1NpdGUgPSBhcmMuc2l0ZSxcbiAgICAgIHJTaXRlID0gckFyYy5zaXRlO1xuXG4gIGlmIChsU2l0ZSA9PT0gclNpdGUpIHJldHVybjtcblxuICB2YXIgYnggPSBjU2l0ZVswXSxcbiAgICAgIGJ5ID0gY1NpdGVbMV0sXG4gICAgICBheCA9IGxTaXRlWzBdIC0gYngsXG4gICAgICBheSA9IGxTaXRlWzFdIC0gYnksXG4gICAgICBjeCA9IHJTaXRlWzBdIC0gYngsXG4gICAgICBjeSA9IHJTaXRlWzFdIC0gYnk7XG5cbiAgdmFyIGQgPSAyICogKGF4ICogY3kgLSBheSAqIGN4KTtcbiAgaWYgKGQgPj0gLWVwc2lsb24yKSByZXR1cm47XG5cbiAgdmFyIGhhID0gYXggKiBheCArIGF5ICogYXksXG4gICAgICBoYyA9IGN4ICogY3ggKyBjeSAqIGN5LFxuICAgICAgeCA9IChjeSAqIGhhIC0gYXkgKiBoYykgLyBkLFxuICAgICAgeSA9IChheCAqIGhjIC0gY3ggKiBoYSkgLyBkO1xuXG4gIHZhciBjaXJjbGUgPSBjaXJjbGVQb29sLnBvcCgpIHx8IG5ldyBDaXJjbGU7XG4gIGNpcmNsZS5hcmMgPSBhcmM7XG4gIGNpcmNsZS5zaXRlID0gY1NpdGU7XG4gIGNpcmNsZS54ID0geCArIGJ4O1xuICBjaXJjbGUueSA9IChjaXJjbGUuY3kgPSB5ICsgYnkpICsgTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpOyAvLyB5IGJvdHRvbVxuXG4gIGFyYy5jaXJjbGUgPSBjaXJjbGU7XG5cbiAgdmFyIGJlZm9yZSA9IG51bGwsXG4gICAgICBub2RlID0gY2lyY2xlcy5fO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKGNpcmNsZS55IDwgbm9kZS55IHx8IChjaXJjbGUueSA9PT0gbm9kZS55ICYmIGNpcmNsZS54IDw9IG5vZGUueCkpIHtcbiAgICAgIGlmIChub2RlLkwpIG5vZGUgPSBub2RlLkw7XG4gICAgICBlbHNlIHsgYmVmb3JlID0gbm9kZS5QOyBicmVhazsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobm9kZS5SKSBub2RlID0gbm9kZS5SO1xuICAgICAgZWxzZSB7IGJlZm9yZSA9IG5vZGU7IGJyZWFrOyB9XG4gICAgfVxuICB9XG5cbiAgY2lyY2xlcy5pbnNlcnQoYmVmb3JlLCBjaXJjbGUpO1xuICBpZiAoIWJlZm9yZSkgZmlyc3RDaXJjbGUgPSBjaXJjbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRhY2hDaXJjbGUoYXJjKSB7XG4gIHZhciBjaXJjbGUgPSBhcmMuY2lyY2xlO1xuICBpZiAoY2lyY2xlKSB7XG4gICAgaWYgKCFjaXJjbGUuUCkgZmlyc3RDaXJjbGUgPSBjaXJjbGUuTjtcbiAgICBjaXJjbGVzLnJlbW92ZShjaXJjbGUpO1xuICAgIGNpcmNsZVBvb2wucHVzaChjaXJjbGUpO1xuICAgIFJlZEJsYWNrTm9kZShjaXJjbGUpO1xuICAgIGFyYy5jaXJjbGUgPSBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQge2FkZEJlYWNoLCByZW1vdmVCZWFjaH0gZnJvbSBcIi4vQmVhY2hcIjtcbmltcG9ydCB7c29ydENlbGxIYWxmZWRnZXMsIGNlbGxIYWxmZWRnZVN0YXJ0LCBjbGlwQ2VsbHN9IGZyb20gXCIuL0NlbGxcIjtcbmltcG9ydCB7Zmlyc3RDaXJjbGV9IGZyb20gXCIuL0NpcmNsZVwiO1xuaW1wb3J0IHtjbGlwRWRnZXN9IGZyb20gXCIuL0VkZ2VcIjtcbmltcG9ydCBSZWRCbGFja1RyZWUgZnJvbSBcIi4vUmVkQmxhY2tUcmVlXCI7XG5cbmV4cG9ydCB2YXIgZXBzaWxvbiA9IDFlLTY7XG5leHBvcnQgdmFyIGVwc2lsb24yID0gMWUtMTI7XG5leHBvcnQgdmFyIGJlYWNoZXM7XG5leHBvcnQgdmFyIGNlbGxzO1xuZXhwb3J0IHZhciBjaXJjbGVzO1xuZXhwb3J0IHZhciBlZGdlcztcblxuZnVuY3Rpb24gdHJpYW5nbGVBcmVhKGEsIGIsIGMpIHtcbiAgcmV0dXJuIChhWzBdIC0gY1swXSkgKiAoYlsxXSAtIGFbMV0pIC0gKGFbMF0gLSBiWzBdKSAqIChjWzFdIC0gYVsxXSk7XG59XG5cbmZ1bmN0aW9uIGxleGljb2dyYXBoaWMoYSwgYikge1xuICByZXR1cm4gYlsxXSAtIGFbMV1cbiAgICAgIHx8IGJbMF0gLSBhWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaWFncmFtKHNpdGVzLCBleHRlbnQpIHtcbiAgdmFyIHNpdGUgPSBzaXRlcy5zb3J0KGxleGljb2dyYXBoaWMpLnBvcCgpLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBjaXJjbGU7XG5cbiAgZWRnZXMgPSBbXTtcbiAgY2VsbHMgPSBuZXcgQXJyYXkoc2l0ZXMubGVuZ3RoKTtcbiAgYmVhY2hlcyA9IG5ldyBSZWRCbGFja1RyZWU7XG4gIGNpcmNsZXMgPSBuZXcgUmVkQmxhY2tUcmVlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY2lyY2xlID0gZmlyc3RDaXJjbGU7XG4gICAgaWYgKHNpdGUgJiYgKCFjaXJjbGUgfHwgc2l0ZVsxXSA8IGNpcmNsZS55IHx8IChzaXRlWzFdID09PSBjaXJjbGUueSAmJiBzaXRlWzBdIDwgY2lyY2xlLngpKSkge1xuICAgICAgaWYgKHNpdGVbMF0gIT09IHggfHwgc2l0ZVsxXSAhPT0geSkge1xuICAgICAgICBhZGRCZWFjaChzaXRlKTtcbiAgICAgICAgeCA9IHNpdGVbMF0sIHkgPSBzaXRlWzFdO1xuICAgICAgfVxuICAgICAgc2l0ZSA9IHNpdGVzLnBvcCgpO1xuICAgIH0gZWxzZSBpZiAoY2lyY2xlKSB7XG4gICAgICByZW1vdmVCZWFjaChjaXJjbGUuYXJjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc29ydENlbGxIYWxmZWRnZXMoKTtcblxuICBpZiAoZXh0ZW50KSB7XG4gICAgdmFyIHgwID0gK2V4dGVudFswXVswXSxcbiAgICAgICAgeTAgPSArZXh0ZW50WzBdWzFdLFxuICAgICAgICB4MSA9ICtleHRlbnRbMV1bMF0sXG4gICAgICAgIHkxID0gK2V4dGVudFsxXVsxXTtcbiAgICBjbGlwRWRnZXMoeDAsIHkwLCB4MSwgeTEpO1xuICAgIGNsaXBDZWxscyh4MCwgeTAsIHgxLCB5MSk7XG4gIH1cblxuICB0aGlzLmVkZ2VzID0gZWRnZXM7XG4gIHRoaXMuY2VsbHMgPSBjZWxscztcblxuICBiZWFjaGVzID1cbiAgY2lyY2xlcyA9XG4gIGVkZ2VzID1cbiAgY2VsbHMgPSBudWxsO1xufVxuXG5EaWFncmFtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpYWdyYW0sXG5cbiAgcG9seWdvbnM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlZGdlcyA9IHRoaXMuZWRnZXM7XG5cbiAgICByZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24oY2VsbCkge1xuICAgICAgdmFyIHBvbHlnb24gPSBjZWxsLmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gY2VsbEhhbGZlZGdlU3RhcnQoY2VsbCwgZWRnZXNbaV0pOyB9KTtcbiAgICAgIHBvbHlnb24uZGF0YSA9IGNlbGwuc2l0ZS5kYXRhO1xuICAgICAgcmV0dXJuIHBvbHlnb247XG4gICAgfSk7XG4gIH0sXG5cbiAgdHJpYW5nbGVzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdHJpYW5nbGVzID0gW10sXG4gICAgICAgIGVkZ2VzID0gdGhpcy5lZGdlcztcblxuICAgIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihjZWxsLCBpKSB7XG4gICAgICBpZiAoIShtID0gKGhhbGZlZGdlcyA9IGNlbGwuaGFsZmVkZ2VzKS5sZW5ndGgpKSByZXR1cm47XG4gICAgICB2YXIgc2l0ZSA9IGNlbGwuc2l0ZSxcbiAgICAgICAgICBoYWxmZWRnZXMsXG4gICAgICAgICAgaiA9IC0xLFxuICAgICAgICAgIG0sXG4gICAgICAgICAgczAsXG4gICAgICAgICAgZTEgPSBlZGdlc1toYWxmZWRnZXNbbSAtIDFdXSxcbiAgICAgICAgICBzMSA9IGUxLmxlZnQgPT09IHNpdGUgPyBlMS5yaWdodCA6IGUxLmxlZnQ7XG5cbiAgICAgIHdoaWxlICgrK2ogPCBtKSB7XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGUxID0gZWRnZXNbaGFsZmVkZ2VzW2pdXTtcbiAgICAgICAgczEgPSBlMS5sZWZ0ID09PSBzaXRlID8gZTEucmlnaHQgOiBlMS5sZWZ0O1xuICAgICAgICBpZiAoczAgJiYgczEgJiYgaSA8IHMwLmluZGV4ICYmIGkgPCBzMS5pbmRleCAmJiB0cmlhbmdsZUFyZWEoc2l0ZSwgczAsIHMxKSA8IDApIHtcbiAgICAgICAgICB0cmlhbmdsZXMucHVzaChbc2l0ZS5kYXRhLCBzMC5kYXRhLCBzMS5kYXRhXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG4gIH0sXG5cbiAgbGlua3M6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihlZGdlKSB7XG4gICAgICByZXR1cm4gZWRnZS5yaWdodDtcbiAgICB9KS5tYXAoZnVuY3Rpb24oZWRnZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBlZGdlLmxlZnQuZGF0YSxcbiAgICAgICAgdGFyZ2V0OiBlZGdlLnJpZ2h0LmRhdGFcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgZmluZDogZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzLCBpMCwgaTEgPSB0aGF0Ll9mb3VuZCB8fCAwLCBuID0gdGhhdC5jZWxscy5sZW5ndGgsIGNlbGw7XG5cbiAgICAvLyBVc2UgdGhlIHByZXZpb3VzbHktZm91bmQgY2VsbCwgb3Igc3RhcnQgd2l0aCBhbiBhcmJpdHJhcnkgb25lLlxuICAgIHdoaWxlICghKGNlbGwgPSB0aGF0LmNlbGxzW2kxXSkpIGlmICgrK2kxID49IG4pIHJldHVybiBudWxsO1xuICAgIHZhciBkeCA9IHggLSBjZWxsLnNpdGVbMF0sIGR5ID0geSAtIGNlbGwuc2l0ZVsxXSwgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcblxuICAgIC8vIFRyYXZlcnNlIHRoZSBoYWxmLWVkZ2VzIHRvIGZpbmQgYSBjbG9zZXIgY2VsbCwgaWYgYW55LlxuICAgIGRvIHtcbiAgICAgIGNlbGwgPSB0aGF0LmNlbGxzW2kwID0gaTFdLCBpMSA9IG51bGw7XG4gICAgICBjZWxsLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGVkZ2UgPSB0aGF0LmVkZ2VzW2VdLCB2ID0gZWRnZS5sZWZ0O1xuICAgICAgICBpZiAoKHYgPT09IGNlbGwuc2l0ZSB8fCAhdikgJiYgISh2ID0gZWRnZS5yaWdodCkpIHJldHVybjtcbiAgICAgICAgdmFyIHZ4ID0geCAtIHZbMF0sIHZ5ID0geSAtIHZbMV0sIHYyID0gdnggKiB2eCArIHZ5ICogdnk7XG4gICAgICAgIGlmICh2MiA8IGQyKSBkMiA9IHYyLCBpMSA9IHYuaW5kZXg7XG4gICAgICB9KTtcbiAgICB9IHdoaWxlIChpMSAhPT0gbnVsbCk7XG5cbiAgICB0aGF0Ll9mb3VuZCA9IGkwO1xuXG4gICAgcmV0dXJuIHJhZGl1cyA9PSBudWxsIHx8IGQyIDw9IHJhZGl1cyAqIHJhZGl1cyA/IGNlbGwuc2l0ZSA6IG51bGw7XG4gIH1cbn1cbiIsImltcG9ydCB7Y2VsbHMsIGVkZ2VzLCBlcHNpbG9ufSBmcm9tIFwiLi9EaWFncmFtXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFZGdlKGxlZnQsIHJpZ2h0LCB2MCwgdjEpIHtcbiAgdmFyIGVkZ2UgPSBbbnVsbCwgbnVsbF0sXG4gICAgICBpbmRleCA9IGVkZ2VzLnB1c2goZWRnZSkgLSAxO1xuICBlZGdlLmxlZnQgPSBsZWZ0O1xuICBlZGdlLnJpZ2h0ID0gcmlnaHQ7XG4gIGlmICh2MCkgc2V0RWRnZUVuZChlZGdlLCBsZWZ0LCByaWdodCwgdjApO1xuICBpZiAodjEpIHNldEVkZ2VFbmQoZWRnZSwgcmlnaHQsIGxlZnQsIHYxKTtcbiAgY2VsbHNbbGVmdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2goaW5kZXgpO1xuICBjZWxsc1tyaWdodC5pbmRleF0uaGFsZmVkZ2VzLnB1c2goaW5kZXgpO1xuICByZXR1cm4gZWRnZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJvcmRlckVkZ2UobGVmdCwgdjAsIHYxKSB7XG4gIHZhciBlZGdlID0gW3YwLCB2MV07XG4gIGVkZ2UubGVmdCA9IGxlZnQ7XG4gIHJldHVybiBlZGdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRnZUVuZChlZGdlLCBsZWZ0LCByaWdodCwgdmVydGV4KSB7XG4gIGlmICghZWRnZVswXSAmJiAhZWRnZVsxXSkge1xuICAgIGVkZ2VbMF0gPSB2ZXJ0ZXg7XG4gICAgZWRnZS5sZWZ0ID0gbGVmdDtcbiAgICBlZGdlLnJpZ2h0ID0gcmlnaHQ7XG4gIH0gZWxzZSBpZiAoZWRnZS5sZWZ0ID09PSByaWdodCkge1xuICAgIGVkZ2VbMV0gPSB2ZXJ0ZXg7XG4gIH0gZWxzZSB7XG4gICAgZWRnZVswXSA9IHZlcnRleDtcbiAgfVxufVxuXG4vLyBMaWFuZ+KAk0JhcnNreSBsaW5lIGNsaXBwaW5nLlxuZnVuY3Rpb24gY2xpcEVkZ2UoZWRnZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIGEgPSBlZGdlWzBdLFxuICAgICAgYiA9IGVkZ2VbMV0sXG4gICAgICBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICB0MCA9IDAsXG4gICAgICB0MSA9IDEsXG4gICAgICBkeCA9IGJ4IC0gYXgsXG4gICAgICBkeSA9IGJ5IC0gYXksXG4gICAgICByO1xuXG4gIHIgPSB4MCAtIGF4O1xuICBpZiAoIWR4ICYmIHIgPiAwKSByZXR1cm47XG4gIHIgLz0gZHg7XG4gIGlmIChkeCA8IDApIHtcbiAgICBpZiAociA8IHQwKSByZXR1cm47XG4gICAgaWYgKHIgPCB0MSkgdDEgPSByO1xuICB9IGVsc2UgaWYgKGR4ID4gMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH1cblxuICByID0geDEgLSBheDtcbiAgaWYgKCFkeCAmJiByIDwgMCkgcmV0dXJuO1xuICByIC89IGR4O1xuICBpZiAoZHggPCAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfSBlbHNlIGlmIChkeCA+IDApIHtcbiAgICBpZiAociA8IHQwKSByZXR1cm47XG4gICAgaWYgKHIgPCB0MSkgdDEgPSByO1xuICB9XG5cbiAgciA9IHkwIC0gYXk7XG4gIGlmICghZHkgJiYgciA+IDApIHJldHVybjtcbiAgciAvPSBkeTtcbiAgaWYgKGR5IDwgMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH0gZWxzZSBpZiAoZHkgPiAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfVxuXG4gIHIgPSB5MSAtIGF5O1xuICBpZiAoIWR5ICYmIHIgPCAwKSByZXR1cm47XG4gIHIgLz0gZHk7XG4gIGlmIChkeSA8IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9IGVsc2UgaWYgKGR5ID4gMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH1cblxuICBpZiAoISh0MCA+IDApICYmICEodDEgPCAxKSkgcmV0dXJuIHRydWU7IC8vIFRPRE8gQmV0dGVyIGNoZWNrP1xuXG4gIGlmICh0MCA+IDApIGVkZ2VbMF0gPSBbYXggKyB0MCAqIGR4LCBheSArIHQwICogZHldO1xuICBpZiAodDEgPCAxKSBlZGdlWzFdID0gW2F4ICsgdDEgKiBkeCwgYXkgKyB0MSAqIGR5XTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbm5lY3RFZGdlKGVkZ2UsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciB2MSA9IGVkZ2VbMV07XG4gIGlmICh2MSkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHYwID0gZWRnZVswXSxcbiAgICAgIGxlZnQgPSBlZGdlLmxlZnQsXG4gICAgICByaWdodCA9IGVkZ2UucmlnaHQsXG4gICAgICBseCA9IGxlZnRbMF0sXG4gICAgICBseSA9IGxlZnRbMV0sXG4gICAgICByeCA9IHJpZ2h0WzBdLFxuICAgICAgcnkgPSByaWdodFsxXSxcbiAgICAgIGZ4ID0gKGx4ICsgcngpIC8gMixcbiAgICAgIGZ5ID0gKGx5ICsgcnkpIC8gMixcbiAgICAgIGZtLFxuICAgICAgZmI7XG5cbiAgaWYgKHJ5ID09PSBseSkge1xuICAgIGlmIChmeCA8IHgwIHx8IGZ4ID49IHgxKSByZXR1cm47XG4gICAgaWYgKGx4ID4gcngpIHtcbiAgICAgIGlmICghdjApIHYwID0gW2Z4LCB5MF07XG4gICAgICBlbHNlIGlmICh2MFsxXSA+PSB5MSkgcmV0dXJuO1xuICAgICAgdjEgPSBbZngsIHkxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF2MCkgdjAgPSBbZngsIHkxXTtcbiAgICAgIGVsc2UgaWYgKHYwWzFdIDwgeTApIHJldHVybjtcbiAgICAgIHYxID0gW2Z4LCB5MF07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZtID0gKGx4IC0gcngpIC8gKHJ5IC0gbHkpO1xuICAgIGZiID0gZnkgLSBmbSAqIGZ4O1xuICAgIGlmIChmbSA8IC0xIHx8IGZtID4gMSkge1xuICAgICAgaWYgKGx4ID4gcngpIHtcbiAgICAgICAgaWYgKCF2MCkgdjAgPSBbKHkwIC0gZmIpIC8gZm0sIHkwXTtcbiAgICAgICAgZWxzZSBpZiAodjBbMV0gPj0geTEpIHJldHVybjtcbiAgICAgICAgdjEgPSBbKHkxIC0gZmIpIC8gZm0sIHkxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdjApIHYwID0gWyh5MSAtIGZiKSAvIGZtLCB5MV07XG4gICAgICAgIGVsc2UgaWYgKHYwWzFdIDwgeTApIHJldHVybjtcbiAgICAgICAgdjEgPSBbKHkwIC0gZmIpIC8gZm0sIHkwXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGx5IDwgcnkpIHtcbiAgICAgICAgaWYgKCF2MCkgdjAgPSBbeDAsIGZtICogeDAgKyBmYl07XG4gICAgICAgIGVsc2UgaWYgKHYwWzBdID49IHgxKSByZXR1cm47XG4gICAgICAgIHYxID0gW3gxLCBmbSAqIHgxICsgZmJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF2MCkgdjAgPSBbeDEsIGZtICogeDEgKyBmYl07XG4gICAgICAgIGVsc2UgaWYgKHYwWzBdIDwgeDApIHJldHVybjtcbiAgICAgICAgdjEgPSBbeDAsIGZtICogeDAgKyBmYl07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWRnZVswXSA9IHYwO1xuICBlZGdlWzFdID0gdjE7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpcEVkZ2VzKHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBpID0gZWRnZXMubGVuZ3RoLFxuICAgICAgZWRnZTtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKCFjb25uZWN0RWRnZShlZGdlID0gZWRnZXNbaV0sIHgwLCB5MCwgeDEsIHkxKVxuICAgICAgICB8fCAhY2xpcEVkZ2UoZWRnZSwgeDAsIHkwLCB4MSwgeTEpXG4gICAgICAgIHx8ICEoTWF0aC5hYnMoZWRnZVswXVswXSAtIGVkZ2VbMV1bMF0pID4gZXBzaWxvblxuICAgICAgICAgICAgfHwgTWF0aC5hYnMoZWRnZVswXVsxXSAtIGVkZ2VbMV1bMV0pID4gZXBzaWxvbikpIHtcbiAgICAgIGRlbGV0ZSBlZGdlc1tpXTtcbiAgICB9XG4gIH1cbn1cbiIsImZ1bmN0aW9uIFJlZEJsYWNrVHJlZSgpIHtcbiAgdGhpcy5fID0gbnVsbDsgLy8gcm9vdCBub2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWRCbGFja05vZGUobm9kZSkge1xuICBub2RlLlUgPSAvLyBwYXJlbnQgbm9kZVxuICBub2RlLkMgPSAvLyBjb2xvciAtIHRydWUgZm9yIHJlZCwgZmFsc2UgZm9yIGJsYWNrXG4gIG5vZGUuTCA9IC8vIGxlZnQgbm9kZVxuICBub2RlLlIgPSAvLyByaWdodCBub2RlXG4gIG5vZGUuUCA9IC8vIHByZXZpb3VzIG5vZGVcbiAgbm9kZS5OID0gbnVsbDsgLy8gbmV4dCBub2RlXG59XG5cblJlZEJsYWNrVHJlZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBSZWRCbGFja1RyZWUsXG5cbiAgaW5zZXJ0OiBmdW5jdGlvbihhZnRlciwgbm9kZSkge1xuICAgIHZhciBwYXJlbnQsIGdyYW5kcGEsIHVuY2xlO1xuXG4gICAgaWYgKGFmdGVyKSB7XG4gICAgICBub2RlLlAgPSBhZnRlcjtcbiAgICAgIG5vZGUuTiA9IGFmdGVyLk47XG4gICAgICBpZiAoYWZ0ZXIuTikgYWZ0ZXIuTi5QID0gbm9kZTtcbiAgICAgIGFmdGVyLk4gPSBub2RlO1xuICAgICAgaWYgKGFmdGVyLlIpIHtcbiAgICAgICAgYWZ0ZXIgPSBhZnRlci5SO1xuICAgICAgICB3aGlsZSAoYWZ0ZXIuTCkgYWZ0ZXIgPSBhZnRlci5MO1xuICAgICAgICBhZnRlci5MID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFmdGVyLlIgPSBub2RlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gYWZ0ZXI7XG4gICAgfSBlbHNlIGlmICh0aGlzLl8pIHtcbiAgICAgIGFmdGVyID0gUmVkQmxhY2tGaXJzdCh0aGlzLl8pO1xuICAgICAgbm9kZS5QID0gbnVsbDtcbiAgICAgIG5vZGUuTiA9IGFmdGVyO1xuICAgICAgYWZ0ZXIuUCA9IGFmdGVyLkwgPSBub2RlO1xuICAgICAgcGFyZW50ID0gYWZ0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuUCA9IG5vZGUuTiA9IG51bGw7XG4gICAgICB0aGlzLl8gPSBub2RlO1xuICAgICAgcGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgbm9kZS5MID0gbm9kZS5SID0gbnVsbDtcbiAgICBub2RlLlUgPSBwYXJlbnQ7XG4gICAgbm9kZS5DID0gdHJ1ZTtcblxuICAgIGFmdGVyID0gbm9kZTtcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5DKSB7XG4gICAgICBncmFuZHBhID0gcGFyZW50LlU7XG4gICAgICBpZiAocGFyZW50ID09PSBncmFuZHBhLkwpIHtcbiAgICAgICAgdW5jbGUgPSBncmFuZHBhLlI7XG4gICAgICAgIGlmICh1bmNsZSAmJiB1bmNsZS5DKSB7XG4gICAgICAgICAgcGFyZW50LkMgPSB1bmNsZS5DID0gZmFsc2U7XG4gICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTtcbiAgICAgICAgICBhZnRlciA9IGdyYW5kcGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGFmdGVyID09PSBwYXJlbnQuUikge1xuICAgICAgICAgICAgUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgICBhZnRlciA9IHBhcmVudDtcbiAgICAgICAgICAgIHBhcmVudCA9IGFmdGVyLlU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudC5DID0gZmFsc2U7XG4gICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsIGdyYW5kcGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bmNsZSA9IGdyYW5kcGEuTDtcbiAgICAgICAgaWYgKHVuY2xlICYmIHVuY2xlLkMpIHtcbiAgICAgICAgICBwYXJlbnQuQyA9IHVuY2xlLkMgPSBmYWxzZTtcbiAgICAgICAgICBncmFuZHBhLkMgPSB0cnVlO1xuICAgICAgICAgIGFmdGVyID0gZ3JhbmRwYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoYWZ0ZXIgPT09IHBhcmVudC5MKSB7XG4gICAgICAgICAgICBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgICBhZnRlciA9IHBhcmVudDtcbiAgICAgICAgICAgIHBhcmVudCA9IGFmdGVyLlU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudC5DID0gZmFsc2U7XG4gICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgZ3JhbmRwYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IGFmdGVyLlU7XG4gICAgfVxuICAgIHRoaXMuXy5DID0gZmFsc2U7XG4gIH0sXG5cbiAgcmVtb3ZlOiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUuTikgbm9kZS5OLlAgPSBub2RlLlA7XG4gICAgaWYgKG5vZGUuUCkgbm9kZS5QLk4gPSBub2RlLk47XG4gICAgbm9kZS5OID0gbm9kZS5QID0gbnVsbDtcblxuICAgIHZhciBwYXJlbnQgPSBub2RlLlUsXG4gICAgICAgIHNpYmxpbmcsXG4gICAgICAgIGxlZnQgPSBub2RlLkwsXG4gICAgICAgIHJpZ2h0ID0gbm9kZS5SLFxuICAgICAgICBuZXh0LFxuICAgICAgICByZWQ7XG5cbiAgICBpZiAoIWxlZnQpIG5leHQgPSByaWdodDtcbiAgICBlbHNlIGlmICghcmlnaHQpIG5leHQgPSBsZWZ0O1xuICAgIGVsc2UgbmV4dCA9IFJlZEJsYWNrRmlyc3QocmlnaHQpO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC5MID09PSBub2RlKSBwYXJlbnQuTCA9IG5leHQ7XG4gICAgICBlbHNlIHBhcmVudC5SID0gbmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fID0gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAobGVmdCAmJiByaWdodCkge1xuICAgICAgcmVkID0gbmV4dC5DO1xuICAgICAgbmV4dC5DID0gbm9kZS5DO1xuICAgICAgbmV4dC5MID0gbGVmdDtcbiAgICAgIGxlZnQuVSA9IG5leHQ7XG4gICAgICBpZiAobmV4dCAhPT0gcmlnaHQpIHtcbiAgICAgICAgcGFyZW50ID0gbmV4dC5VO1xuICAgICAgICBuZXh0LlUgPSBub2RlLlU7XG4gICAgICAgIG5vZGUgPSBuZXh0LlI7XG4gICAgICAgIHBhcmVudC5MID0gbm9kZTtcbiAgICAgICAgbmV4dC5SID0gcmlnaHQ7XG4gICAgICAgIHJpZ2h0LlUgPSBuZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dC5VID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQgPSBuZXh0O1xuICAgICAgICBub2RlID0gbmV4dC5SO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWQgPSBub2RlLkM7XG4gICAgICBub2RlID0gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAobm9kZSkgbm9kZS5VID0gcGFyZW50O1xuICAgIGlmIChyZWQpIHJldHVybjtcbiAgICBpZiAobm9kZSAmJiBub2RlLkMpIHsgbm9kZS5DID0gZmFsc2U7IHJldHVybjsgfVxuXG4gICAgZG8ge1xuICAgICAgaWYgKG5vZGUgPT09IHRoaXMuXykgYnJlYWs7XG4gICAgICBpZiAobm9kZSA9PT0gcGFyZW50LkwpIHtcbiAgICAgICAgc2libGluZyA9IHBhcmVudC5SO1xuICAgICAgICBpZiAoc2libGluZy5DKSB7XG4gICAgICAgICAgc2libGluZy5DID0gZmFsc2U7XG4gICAgICAgICAgcGFyZW50LkMgPSB0cnVlO1xuICAgICAgICAgIFJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLCBwYXJlbnQpO1xuICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQylcbiAgICAgICAgICAgIHx8IChzaWJsaW5nLlIgJiYgc2libGluZy5SLkMpKSB7XG4gICAgICAgICAgaWYgKCFzaWJsaW5nLlIgfHwgIXNpYmxpbmcuUi5DKSB7XG4gICAgICAgICAgICBzaWJsaW5nLkwuQyA9IGZhbHNlO1xuICAgICAgICAgICAgc2libGluZy5DID0gdHJ1ZTtcbiAgICAgICAgICAgIFJlZEJsYWNrUm90YXRlUmlnaHQodGhpcywgc2libGluZyk7XG4gICAgICAgICAgICBzaWJsaW5nID0gcGFyZW50LlI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNpYmxpbmcuQyA9IHBhcmVudC5DO1xuICAgICAgICAgIHBhcmVudC5DID0gc2libGluZy5SLkMgPSBmYWxzZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgcGFyZW50KTtcbiAgICAgICAgICBub2RlID0gdGhpcy5fO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWJsaW5nID0gcGFyZW50Lkw7XG4gICAgICAgIGlmIChzaWJsaW5nLkMpIHtcbiAgICAgICAgICBzaWJsaW5nLkMgPSBmYWxzZTtcbiAgICAgICAgICBwYXJlbnQuQyA9IHRydWU7XG4gICAgICAgICAgUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBwYXJlbnQpO1xuICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuTDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQylcbiAgICAgICAgICB8fCAoc2libGluZy5SICYmIHNpYmxpbmcuUi5DKSkge1xuICAgICAgICAgIGlmICghc2libGluZy5MIHx8ICFzaWJsaW5nLkwuQykge1xuICAgICAgICAgICAgc2libGluZy5SLkMgPSBmYWxzZTtcbiAgICAgICAgICAgIHNpYmxpbmcuQyA9IHRydWU7XG4gICAgICAgICAgICBSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgc2libGluZyk7XG4gICAgICAgICAgICBzaWJsaW5nID0gcGFyZW50Lkw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNpYmxpbmcuQyA9IHBhcmVudC5DO1xuICAgICAgICAgIHBhcmVudC5DID0gc2libGluZy5MLkMgPSBmYWxzZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgbm9kZSA9IHRoaXMuXztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2libGluZy5DID0gdHJ1ZTtcbiAgICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuVTtcbiAgICB9IHdoaWxlICghbm9kZS5DKTtcblxuICAgIGlmIChub2RlKSBub2RlLkMgPSBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gUmVkQmxhY2tSb3RhdGVMZWZ0KHRyZWUsIG5vZGUpIHtcbiAgdmFyIHAgPSBub2RlLFxuICAgICAgcSA9IG5vZGUuUixcbiAgICAgIHBhcmVudCA9IHAuVTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5MID09PSBwKSBwYXJlbnQuTCA9IHE7XG4gICAgZWxzZSBwYXJlbnQuUiA9IHE7XG4gIH0gZWxzZSB7XG4gICAgdHJlZS5fID0gcTtcbiAgfVxuXG4gIHEuVSA9IHBhcmVudDtcbiAgcC5VID0gcTtcbiAgcC5SID0gcS5MO1xuICBpZiAocC5SKSBwLlIuVSA9IHA7XG4gIHEuTCA9IHA7XG59XG5cbmZ1bmN0aW9uIFJlZEJsYWNrUm90YXRlUmlnaHQodHJlZSwgbm9kZSkge1xuICB2YXIgcCA9IG5vZGUsXG4gICAgICBxID0gbm9kZS5MLFxuICAgICAgcGFyZW50ID0gcC5VO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50LkwgPT09IHApIHBhcmVudC5MID0gcTtcbiAgICBlbHNlIHBhcmVudC5SID0gcTtcbiAgfSBlbHNlIHtcbiAgICB0cmVlLl8gPSBxO1xuICB9XG5cbiAgcS5VID0gcGFyZW50O1xuICBwLlUgPSBxO1xuICBwLkwgPSBxLlI7XG4gIGlmIChwLkwpIHAuTC5VID0gcDtcbiAgcS5SID0gcDtcbn1cblxuZnVuY3Rpb24gUmVkQmxhY2tGaXJzdChub2RlKSB7XG4gIHdoaWxlIChub2RlLkwpIG5vZGUgPSBub2RlLkw7XG4gIHJldHVybiBub2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSZWRCbGFja1RyZWU7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyB2b3Jvbm9pfSBmcm9tIFwiLi92b3Jvbm9pXCI7XG4iLCJleHBvcnQgZnVuY3Rpb24geChkKSB7XG4gIHJldHVybiBkWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geShkKSB7XG4gIHJldHVybiBkWzFdO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQge3ggYXMgcG9pbnRYLCB5IGFzIHBvaW50WX0gZnJvbSBcIi4vcG9pbnRcIjtcbmltcG9ydCBEaWFncmFtLCB7ZXBzaWxvbn0gZnJvbSBcIi4vRGlhZ3JhbVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHggPSBwb2ludFgsXG4gICAgICB5ID0gcG9pbnRZLFxuICAgICAgZXh0ZW50ID0gbnVsbDtcblxuICBmdW5jdGlvbiB2b3Jvbm9pKGRhdGEpIHtcbiAgICByZXR1cm4gbmV3IERpYWdyYW0oZGF0YS5tYXAoZnVuY3Rpb24oZCwgaSkge1xuICAgICAgdmFyIHMgPSBbTWF0aC5yb3VuZCh4KGQsIGksIGRhdGEpIC8gZXBzaWxvbikgKiBlcHNpbG9uLCBNYXRoLnJvdW5kKHkoZCwgaSwgZGF0YSkgLyBlcHNpbG9uKSAqIGVwc2lsb25dO1xuICAgICAgcy5pbmRleCA9IGk7XG4gICAgICBzLmRhdGEgPSBkO1xuICAgICAgcmV0dXJuIHM7XG4gICAgfSksIGV4dGVudCk7XG4gIH1cblxuICB2b3Jvbm9pLnBvbHlnb25zID0gZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiB2b3Jvbm9pKGRhdGEpLnBvbHlnb25zKCk7XG4gIH07XG5cbiAgdm9yb25vaS5saW5rcyA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gdm9yb25vaShkYXRhKS5saW5rcygpO1xuICB9O1xuXG4gIHZvcm9ub2kudHJpYW5nbGVzID0gZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiB2b3Jvbm9pKGRhdGEpLnRyaWFuZ2xlcygpO1xuICB9O1xuXG4gIHZvcm9ub2kueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHZvcm9ub2kpIDogeDtcbiAgfTtcblxuICB2b3Jvbm9pLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCB2b3Jvbm9pKSA6IHk7XG4gIH07XG5cbiAgdm9yb25vaS5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gXyA9PSBudWxsID8gbnVsbCA6IFtbK19bMF1bMF0sICtfWzBdWzFdXSwgWytfWzFdWzBdLCArX1sxXVsxXV1dLCB2b3Jvbm9pKSA6IGV4dGVudCAmJiBbW2V4dGVudFswXVswXSwgZXh0ZW50WzBdWzFdXSwgW2V4dGVudFsxXVswXSwgZXh0ZW50WzFdWzFdXV07XG4gIH07XG5cbiAgdm9yb25vaS5zaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IF8gPT0gbnVsbCA/IG51bGwgOiBbWzAsIDBdLCBbK19bMF0sICtfWzFdXV0sIHZvcm9ub2kpIDogZXh0ZW50ICYmIFtleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0sIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXV07XG4gIH07XG5cbiAgcmV0dXJuIHZvcm9ub2k7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFpvb21FdmVudCh0YXJnZXQsIHR5cGUsIHRyYW5zZm9ybSkge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgem9vbX0gZnJvbSBcIi4vem9vbVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHpvb21UcmFuc2Zvcm0sIGlkZW50aXR5IGFzIHpvb21JZGVudGl0eX0gZnJvbSBcIi4vdHJhbnNmb3JtXCI7XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIFRyYW5zZm9ybShrLCB4LCB5KSB7XG4gIHRoaXMuayA9IGs7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm0sXG4gIHNjYWxlOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyB0aGlzIDogbmV3IFRyYW5zZm9ybSh0aGlzLmsgKiBrLCB0aGlzLngsIHRoaXMueSk7XG4gIH0sXG4gIHRyYW5zbGF0ZTogZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiB4ID09PSAwICYgeSA9PT0gMCA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuaywgdGhpcy54ICsgdGhpcy5rICogeCwgdGhpcy55ICsgdGhpcy5rICogeSk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBbcG9pbnRbMF0gKiB0aGlzLmsgKyB0aGlzLngsIHBvaW50WzFdICogdGhpcy5rICsgdGhpcy55XTtcbiAgfSxcbiAgYXBwbHlYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHggKiB0aGlzLmsgKyB0aGlzLng7XG4gIH0sXG4gIGFwcGx5WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5ICogdGhpcy5rICsgdGhpcy55O1xuICB9LFxuICBpbnZlcnQ6IGZ1bmN0aW9uKGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIFsobG9jYXRpb25bMF0gLSB0aGlzLngpIC8gdGhpcy5rLCAobG9jYXRpb25bMV0gLSB0aGlzLnkpIC8gdGhpcy5rXTtcbiAgfSxcbiAgaW52ZXJ0WDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMueCkgLyB0aGlzLms7XG4gIH0sXG4gIGludmVydFk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLnkpIC8gdGhpcy5rO1xuICB9LFxuICByZXNjYWxlWDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4LmNvcHkoKS5kb21haW4oeC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsIHRoaXMpLm1hcCh4LmludmVydCwgeCkpO1xuICB9LFxuICByZXNjYWxlWTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5LmNvcHkoKS5kb21haW4oeS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksIHRoaXMpLm1hcCh5LmludmVydCwgeSkpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgdGhpcy54ICsgXCIsXCIgKyB0aGlzLnkgKyBcIikgc2NhbGUoXCIgKyB0aGlzLmsgKyBcIilcIjtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IG5ldyBUcmFuc2Zvcm0oMSwgMCwgMCk7XG5cbnRyYW5zZm9ybS5wcm90b3R5cGUgPSBUcmFuc2Zvcm0ucHJvdG90eXBlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSkge1xuICByZXR1cm4gbm9kZS5fX3pvb20gfHwgaWRlbnRpdHk7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlWm9vbX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2V2ZW50LCBjdXN0b21FdmVudCwgc2VsZWN0LCBtb3VzZSwgdG91Y2h9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7aW50ZXJydXB0fSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgWm9vbUV2ZW50IGZyb20gXCIuL2V2ZW50XCI7XG5pbXBvcnQge1RyYW5zZm9ybSwgaWRlbnRpdHl9IGZyb20gXCIuL3RyYW5zZm9ybVwiO1xuaW1wb3J0IG5vZXZlbnQsIHtub3Byb3BhZ2F0aW9ufSBmcm9tIFwiLi9ub2V2ZW50XCI7XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBlID0gdGhpcywgdywgaDtcbiAgaWYgKGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB7XG4gICAgZSA9IGUub3duZXJTVkdFbGVtZW50IHx8IGU7XG4gICAgdyA9IGUud2lkdGguYmFzZVZhbC52YWx1ZTtcbiAgICBoID0gZS5oZWlnaHQuYmFzZVZhbC52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB3ID0gZS5jbGllbnRXaWR0aDtcbiAgICBoID0gZS5jbGllbnRIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFt3LCBoXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUcmFuc2Zvcm0oKSB7XG4gIHJldHVybiB0aGlzLl9fem9vbSB8fCBpZGVudGl0eTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFdoZWVsRGVsdGEoKSB7XG4gIHJldHVybiAtZXZlbnQuZGVsdGFZICogKGV2ZW50LmRlbHRhTW9kZSA/IDEyMCA6IDEpIC8gNTAwO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VG91Y2hhYmxlKCkge1xuICByZXR1cm4gXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29uc3RyYWluKHRyYW5zZm9ybSwgZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpIHtcbiAgdmFyIGR4MCA9IHRyYW5zZm9ybS5pbnZlcnRYKGV4dGVudFswXVswXSkgLSB0cmFuc2xhdGVFeHRlbnRbMF1bMF0sXG4gICAgICBkeDEgPSB0cmFuc2Zvcm0uaW52ZXJ0WChleHRlbnRbMV1bMF0pIC0gdHJhbnNsYXRlRXh0ZW50WzFdWzBdLFxuICAgICAgZHkwID0gdHJhbnNmb3JtLmludmVydFkoZXh0ZW50WzBdWzFdKSAtIHRyYW5zbGF0ZUV4dGVudFswXVsxXSxcbiAgICAgIGR5MSA9IHRyYW5zZm9ybS5pbnZlcnRZKGV4dGVudFsxXVsxXSkgLSB0cmFuc2xhdGVFeHRlbnRbMV1bMV07XG4gIHJldHVybiB0cmFuc2Zvcm0udHJhbnNsYXRlKFxuICAgIGR4MSA+IGR4MCA/IChkeDAgKyBkeDEpIC8gMiA6IE1hdGgubWluKDAsIGR4MCkgfHwgTWF0aC5tYXgoMCwgZHgxKSxcbiAgICBkeTEgPiBkeTAgPyAoZHkwICsgZHkxKSAvIDIgOiBNYXRoLm1pbigwLCBkeTApIHx8IE1hdGgubWF4KDAsIGR5MSlcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyLFxuICAgICAgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGNvbnN0cmFpbiA9IGRlZmF1bHRDb25zdHJhaW4sXG4gICAgICB3aGVlbERlbHRhID0gZGVmYXVsdFdoZWVsRGVsdGEsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAgc2NhbGVFeHRlbnQgPSBbMCwgSW5maW5pdHldLFxuICAgICAgdHJhbnNsYXRlRXh0ZW50ID0gW1stSW5maW5pdHksIC1JbmZpbml0eV0sIFtJbmZpbml0eSwgSW5maW5pdHldXSxcbiAgICAgIGR1cmF0aW9uID0gMjUwLFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVpvb20sXG4gICAgICBnZXN0dXJlcyA9IFtdLFxuICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcInpvb21cIiwgXCJlbmRcIiksXG4gICAgICB0b3VjaHN0YXJ0aW5nLFxuICAgICAgdG91Y2hlbmRpbmcsXG4gICAgICB0b3VjaERlbGF5ID0gNTAwLFxuICAgICAgd2hlZWxEZWxheSA9IDE1MCxcbiAgICAgIGNsaWNrRGlzdGFuY2UyID0gMDtcblxuICBmdW5jdGlvbiB6b29tKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvblxuICAgICAgICAucHJvcGVydHkoXCJfX3pvb21cIiwgZGVmYXVsdFRyYW5zZm9ybSlcbiAgICAgICAgLm9uKFwid2hlZWwuem9vbVwiLCB3aGVlbGVkKVxuICAgICAgICAub24oXCJtb3VzZWRvd24uem9vbVwiLCBtb3VzZWRvd25lZClcbiAgICAgICAgLm9uKFwiZGJsY2xpY2suem9vbVwiLCBkYmxjbGlja2VkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuem9vbVwiLCB0b3VjaHN0YXJ0ZWQpXG4gICAgICAgIC5vbihcInRvdWNobW92ZS56b29tXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbVwiLCB0b3VjaGVuZGVkKVxuICAgICAgICAuc3R5bGUoXCJ0b3VjaC1hY3Rpb25cIiwgXCJub25lXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICB6b29tLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSkge1xuICAgIHZhciBzZWxlY3Rpb24gPSBjb2xsZWN0aW9uLnNlbGVjdGlvbiA/IGNvbGxlY3Rpb24uc2VsZWN0aW9uKCkgOiBjb2xsZWN0aW9uO1xuICAgIHNlbGVjdGlvbi5wcm9wZXJ0eShcIl9fem9vbVwiLCBkZWZhdWx0VHJhbnNmb3JtKTtcbiAgICBpZiAoY29sbGVjdGlvbiAhPT0gc2VsZWN0aW9uKSB7XG4gICAgICBzY2hlZHVsZShjb2xsZWN0aW9uLCB0cmFuc2Zvcm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24uaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAuc3RhcnQoKVxuICAgICAgICAgICAgLnpvb20obnVsbCwgdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0cmFuc2Zvcm0pXG4gICAgICAgICAgICAuZW5kKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgem9vbS5zY2FsZUJ5ID0gZnVuY3Rpb24oc2VsZWN0aW9uLCBrKSB7XG4gICAgem9vbS5zY2FsZVRvKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgazAgPSB0aGlzLl9fem9vbS5rLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gazAgKiBrMTtcbiAgICB9KTtcbiAgfTtcblxuICB6b29tLnNjYWxlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIGspIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGUgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICB0MCA9IHRoaXMuX196b29tLFxuICAgICAgICAgIHAwID0gY2VudHJvaWQoZSksXG4gICAgICAgICAgcDEgPSB0MC5pbnZlcnQocDApLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0MCwgazEpLCBwMCwgcDEpLCBlLCB0cmFuc2xhdGVFeHRlbnQpO1xuICAgIH0pO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlQnkgPSBmdW5jdGlvbihzZWxlY3Rpb24sIHgsIHkpIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbih0aGlzLl9fem9vbS50cmFuc2xhdGUoXG4gICAgICAgIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB4LFxuICAgICAgICB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogeVxuICAgICAgKSwgZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSk7XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVUbyA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgeCwgeSkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSA9IGV4dGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgIHQgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgICBwID0gY2VudHJvaWQoZSk7XG4gICAgICByZXR1cm4gY29uc3RyYWluKGlkZW50aXR5LnRyYW5zbGF0ZShwWzBdLCBwWzFdKS5zY2FsZSh0LmspLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IC14LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteCxcbiAgICAgICAgdHlwZW9mIHkgPT09IFwiZnVuY3Rpb25cIiA/IC15LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteVxuICAgICAgKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBzY2FsZSh0cmFuc2Zvcm0sIGspIHtcbiAgICBrID0gTWF0aC5tYXgoc2NhbGVFeHRlbnRbMF0sIE1hdGgubWluKHNjYWxlRXh0ZW50WzFdLCBrKSk7XG4gICAgcmV0dXJuIGsgPT09IHRyYW5zZm9ybS5rID8gdHJhbnNmb3JtIDogbmV3IFRyYW5zZm9ybShrLCB0cmFuc2Zvcm0ueCwgdHJhbnNmb3JtLnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHRyYW5zZm9ybSwgcDAsIHAxKSB7XG4gICAgdmFyIHggPSBwMFswXSAtIHAxWzBdICogdHJhbnNmb3JtLmssIHkgPSBwMFsxXSAtIHAxWzFdICogdHJhbnNmb3JtLms7XG4gICAgcmV0dXJuIHggPT09IHRyYW5zZm9ybS54ICYmIHkgPT09IHRyYW5zZm9ybS55ID8gdHJhbnNmb3JtIDogbmV3IFRyYW5zZm9ybSh0cmFuc2Zvcm0uaywgeCwgeSk7XG4gIH1cblxuICBmdW5jdGlvbiBjZW50cm9pZChleHRlbnQpIHtcbiAgICByZXR1cm4gWygrZXh0ZW50WzBdWzBdICsgK2V4dGVudFsxXVswXSkgLyAyLCAoK2V4dGVudFswXVsxXSArICtleHRlbnRbMV1bMV0pIC8gMl07XG4gIH1cblxuICBmdW5jdGlvbiBzY2hlZHVsZSh0cmFuc2l0aW9uLCB0cmFuc2Zvcm0sIGNlbnRlcikge1xuICAgIHRyYW5zaXRpb25cbiAgICAgICAgLm9uKFwic3RhcnQuem9vbVwiLCBmdW5jdGlvbigpIHsgZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpLnN0YXJ0KCk7IH0pXG4gICAgICAgIC5vbihcImludGVycnVwdC56b29tIGVuZC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuZW5kKCk7IH0pXG4gICAgICAgIC50d2VlbihcInpvb21cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICBnID0gZ2VzdHVyZSh0aGF0LCBhcmdzKSxcbiAgICAgICAgICAgICAgZSA9IGV4dGVudC5hcHBseSh0aGF0LCBhcmdzKSxcbiAgICAgICAgICAgICAgcCA9IGNlbnRlciB8fCBjZW50cm9pZChlKSxcbiAgICAgICAgICAgICAgdyA9IE1hdGgubWF4KGVbMV1bMF0gLSBlWzBdWzBdLCBlWzFdWzFdIC0gZVswXVsxXSksXG4gICAgICAgICAgICAgIGEgPSB0aGF0Ll9fem9vbSxcbiAgICAgICAgICAgICAgYiA9IHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwiZnVuY3Rpb25cIiA/IHRyYW5zZm9ybS5hcHBseSh0aGF0LCBhcmdzKSA6IHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgaSA9IGludGVycG9sYXRlKGEuaW52ZXJ0KHApLmNvbmNhdCh3IC8gYS5rKSwgYi5pbnZlcnQocCkuY29uY2F0KHcgLyBiLmspKTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHQgPT09IDEpIHQgPSBiOyAvLyBBdm9pZCByb3VuZGluZyBlcnJvciBvbiBlbmQuXG4gICAgICAgICAgICBlbHNlIHsgdmFyIGwgPSBpKHQpLCBrID0gdyAvIGxbMl07IHQgPSBuZXcgVHJhbnNmb3JtKGssIHBbMF0gLSBsWzBdICogaywgcFsxXSAtIGxbMV0gKiBrKTsgfVxuICAgICAgICAgICAgZy56b29tKG51bGwsIHQpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VzdHVyZSh0aGF0LCBhcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBnZXN0dXJlcy5sZW5ndGgsIGc7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgoZyA9IGdlc3R1cmVzW2ldKS50aGF0ID09PSB0aGF0KSB7XG4gICAgICAgIHJldHVybiBnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEdlc3R1cmUodGhhdCwgYXJncyk7XG4gIH1cblxuICBmdW5jdGlvbiBHZXN0dXJlKHRoYXQsIGFyZ3MpIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5pbmRleCA9IC0xO1xuICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudC5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxuXG4gIEdlc3R1cmUucHJvdG90eXBlID0ge1xuICAgIHN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgrK3RoaXMuYWN0aXZlID09PSAxKSB7XG4gICAgICAgIHRoaXMuaW5kZXggPSBnZXN0dXJlcy5wdXNoKHRoaXMpIC0gMTtcbiAgICAgICAgdGhpcy5lbWl0KFwic3RhcnRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHpvb206IGZ1bmN0aW9uKGtleSwgdHJhbnNmb3JtKSB7XG4gICAgICBpZiAodGhpcy5tb3VzZSAmJiBrZXkgIT09IFwibW91c2VcIikgdGhpcy5tb3VzZVsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy5tb3VzZVswXSk7XG4gICAgICBpZiAodGhpcy50b3VjaDAgJiYga2V5ICE9PSBcInRvdWNoXCIpIHRoaXMudG91Y2gwWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLnRvdWNoMFswXSk7XG4gICAgICBpZiAodGhpcy50b3VjaDEgJiYga2V5ICE9PSBcInRvdWNoXCIpIHRoaXMudG91Y2gxWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLnRvdWNoMVswXSk7XG4gICAgICB0aGlzLnRoYXQuX196b29tID0gdHJhbnNmb3JtO1xuICAgICAgdGhpcy5lbWl0KFwiem9vbVwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRoaXMuYWN0aXZlID09PSAwKSB7XG4gICAgICAgIGdlc3R1cmVzLnNwbGljZSh0aGlzLmluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmVtaXQoXCJlbmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgIGN1c3RvbUV2ZW50KG5ldyBab29tRXZlbnQoem9vbSwgdHlwZSwgdGhpcy50aGF0Ll9fem9vbSksIGxpc3RlbmVycy5hcHBseSwgbGlzdGVuZXJzLCBbdHlwZSwgdGhpcy50aGF0LCB0aGlzLmFyZ3NdKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gd2hlZWxlZCgpIHtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHQgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgayA9IE1hdGgubWF4KHNjYWxlRXh0ZW50WzBdLCBNYXRoLm1pbihzY2FsZUV4dGVudFsxXSwgdC5rICogTWF0aC5wb3coMiwgd2hlZWxEZWx0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSkpLFxuICAgICAgICBwID0gbW91c2UodGhpcyk7XG5cbiAgICAvLyBJZiB0aGUgbW91c2UgaXMgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgYmVmb3JlLCByZXVzZSBpdC5cbiAgICAvLyBJZiB0aGVyZSB3ZXJlIHJlY2VudCB3aGVlbCBldmVudHMsIHJlc2V0IHRoZSB3aGVlbCBpZGxlIHRpbWVvdXQuXG4gICAgaWYgKGcud2hlZWwpIHtcbiAgICAgIGlmIChnLm1vdXNlWzBdWzBdICE9PSBwWzBdIHx8IGcubW91c2VbMF1bMV0gIT09IHBbMV0pIHtcbiAgICAgICAgZy5tb3VzZVsxXSA9IHQuaW52ZXJ0KGcubW91c2VbMF0gPSBwKTtcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dChnLndoZWVsKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIHdoZWVsIGV2ZW50IHdvbuKAmXQgdHJpZ2dlciBhIHRyYW5zZm9ybSBjaGFuZ2UsIGlnbm9yZSBpdC5cbiAgICBlbHNlIGlmICh0LmsgPT09IGspIHJldHVybjtcblxuICAgIC8vIE90aGVyd2lzZSwgY2FwdHVyZSB0aGUgbW91c2UgcG9pbnQgYW5kIGxvY2F0aW9uIGF0IHRoZSBzdGFydC5cbiAgICBlbHNlIHtcbiAgICAgIGcubW91c2UgPSBbcCwgdC5pbnZlcnQocCldO1xuICAgICAgaW50ZXJydXB0KHRoaXMpO1xuICAgICAgZy5zdGFydCgpO1xuICAgIH1cblxuICAgIG5vZXZlbnQoKTtcbiAgICBnLndoZWVsID0gc2V0VGltZW91dCh3aGVlbGlkbGVkLCB3aGVlbERlbGF5KTtcbiAgICBnLnpvb20oXCJtb3VzZVwiLCBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQsIGspLCBnLm1vdXNlWzBdLCBnLm1vdXNlWzFdKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuXG4gICAgZnVuY3Rpb24gd2hlZWxpZGxlZCgpIHtcbiAgICAgIGcud2hlZWwgPSBudWxsO1xuICAgICAgZy5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZWRvd25lZCgpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgfHwgIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHYgPSBzZWxlY3QoZXZlbnQudmlldykub24oXCJtb3VzZW1vdmUuem9vbVwiLCBtb3VzZW1vdmVkLCB0cnVlKS5vbihcIm1vdXNldXAuem9vbVwiLCBtb3VzZXVwcGVkLCB0cnVlKSxcbiAgICAgICAgcCA9IG1vdXNlKHRoaXMpLFxuICAgICAgICB4MCA9IGV2ZW50LmNsaWVudFgsXG4gICAgICAgIHkwID0gZXZlbnQuY2xpZW50WTtcblxuICAgIGRyYWdEaXNhYmxlKGV2ZW50LnZpZXcpO1xuICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICBnLm1vdXNlID0gW3AsIHRoaXMuX196b29tLmludmVydChwKV07XG4gICAgaW50ZXJydXB0KHRoaXMpO1xuICAgIGcuc3RhcnQoKTtcblxuICAgIGZ1bmN0aW9uIG1vdXNlbW92ZWQoKSB7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBpZiAoIWcubW92ZWQpIHtcbiAgICAgICAgdmFyIGR4ID0gZXZlbnQuY2xpZW50WCAtIHgwLCBkeSA9IGV2ZW50LmNsaWVudFkgLSB5MDtcbiAgICAgICAgZy5tb3ZlZCA9IGR4ICogZHggKyBkeSAqIGR5ID4gY2xpY2tEaXN0YW5jZTI7XG4gICAgICB9XG4gICAgICBnLnpvb20oXCJtb3VzZVwiLCBjb25zdHJhaW4odHJhbnNsYXRlKGcudGhhdC5fX3pvb20sIGcubW91c2VbMF0gPSBtb3VzZShnLnRoYXQpLCBnLm1vdXNlWzFdKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdXNldXBwZWQoKSB7XG4gICAgICB2Lm9uKFwibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tXCIsIG51bGwpO1xuICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBnLm1vdmVkKTtcbiAgICAgIG5vZXZlbnQoKTtcbiAgICAgIGcuZW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGJsY2xpY2tlZCgpIHtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG4gICAgdmFyIHQwID0gdGhpcy5fX3pvb20sXG4gICAgICAgIHAwID0gbW91c2UodGhpcyksXG4gICAgICAgIHAxID0gdDAuaW52ZXJ0KHAwKSxcbiAgICAgICAgazEgPSB0MC5rICogKGV2ZW50LnNoaWZ0S2V5ID8gMC41IDogMiksXG4gICAgICAgIHQxID0gY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0MCwgazEpLCBwMCwgcDEpLCBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdHJhbnNsYXRlRXh0ZW50KTtcblxuICAgIG5vZXZlbnQoKTtcbiAgICBpZiAoZHVyYXRpb24gPiAwKSBzZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKS5jYWxsKHNjaGVkdWxlLCB0MSwgcDApO1xuICAgIGVsc2Ugc2VsZWN0KHRoaXMpLmNhbGwoem9vbS50cmFuc2Zvcm0sIHQxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoc3RhcnRlZCgpIHtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0LCBwO1xuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gdG91Y2godGhpcywgdG91Y2hlcywgdC5pZGVudGlmaWVyKTtcbiAgICAgIHAgPSBbcCwgdGhpcy5fX3pvb20uaW52ZXJ0KHApLCB0LmlkZW50aWZpZXJdO1xuICAgICAgaWYgKCFnLnRvdWNoMCkgZy50b3VjaDAgPSBwLCBzdGFydGVkID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKCFnLnRvdWNoMSkgZy50b3VjaDEgPSBwO1xuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSBkYmx0YXAsIHJlcm91dGUgdG8gdGhlIChvcHRpb25hbCkgZGJsY2xpY2suem9vbSBoYW5kbGVyLlxuICAgIGlmICh0b3VjaHN0YXJ0aW5nKSB7XG4gICAgICB0b3VjaHN0YXJ0aW5nID0gY2xlYXJUaW1lb3V0KHRvdWNoc3RhcnRpbmcpO1xuICAgICAgaWYgKCFnLnRvdWNoMSkge1xuICAgICAgICBnLmVuZCgpO1xuICAgICAgICBwID0gc2VsZWN0KHRoaXMpLm9uKFwiZGJsY2xpY2suem9vbVwiKTtcbiAgICAgICAgaWYgKHApIHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGFydGVkKSB7XG4gICAgICB0b3VjaHN0YXJ0aW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hzdGFydGluZyA9IG51bGw7IH0sIHRvdWNoRGVsYXkpO1xuICAgICAgaW50ZXJydXB0KHRoaXMpO1xuICAgICAgZy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNobW92ZWQoKSB7XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0LCBwLCBsO1xuXG4gICAgbm9ldmVudCgpO1xuICAgIGlmICh0b3VjaHN0YXJ0aW5nKSB0b3VjaHN0YXJ0aW5nID0gY2xlYXJUaW1lb3V0KHRvdWNoc3RhcnRpbmcpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gdG91Y2godGhpcywgdG91Y2hlcywgdC5pZGVudGlmaWVyKTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMFswXSA9IHA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMVswXSA9IHA7XG4gICAgfVxuICAgIHQgPSBnLnRoYXQuX196b29tO1xuICAgIGlmIChnLnRvdWNoMSkge1xuICAgICAgdmFyIHAwID0gZy50b3VjaDBbMF0sIGwwID0gZy50b3VjaDBbMV0sXG4gICAgICAgICAgcDEgPSBnLnRvdWNoMVswXSwgbDEgPSBnLnRvdWNoMVsxXSxcbiAgICAgICAgICBkcCA9IChkcCA9IHAxWzBdIC0gcDBbMF0pICogZHAgKyAoZHAgPSBwMVsxXSAtIHAwWzFdKSAqIGRwLFxuICAgICAgICAgIGRsID0gKGRsID0gbDFbMF0gLSBsMFswXSkgKiBkbCArIChkbCA9IGwxWzFdIC0gbDBbMV0pICogZGw7XG4gICAgICB0ID0gc2NhbGUodCwgTWF0aC5zcXJ0KGRwIC8gZGwpKTtcbiAgICAgIHAgPSBbKHAwWzBdICsgcDFbMF0pIC8gMiwgKHAwWzFdICsgcDFbMV0pIC8gMl07XG4gICAgICBsID0gWyhsMFswXSArIGwxWzBdKSAvIDIsIChsMFsxXSArIGwxWzFdKSAvIDJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChnLnRvdWNoMCkgcCA9IGcudG91Y2gwWzBdLCBsID0gZy50b3VjaDBbMV07XG4gICAgZWxzZSByZXR1cm47XG4gICAgZy56b29tKFwidG91Y2hcIiwgY29uc3RyYWluKHRyYW5zbGF0ZSh0LCBwLCBsKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hlbmRlZCgpIHtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIHQ7XG5cbiAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgIHRvdWNoZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hlbmRpbmcgPSBudWxsOyB9LCB0b3VjaERlbGF5KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB0ID0gdG91Y2hlc1tpXTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDE7XG4gICAgfVxuICAgIGlmIChnLnRvdWNoMSAmJiAhZy50b3VjaDApIGcudG91Y2gwID0gZy50b3VjaDEsIGRlbGV0ZSBnLnRvdWNoMTtcbiAgICBpZiAoZy50b3VjaDApIGcudG91Y2gwWzFdID0gdGhpcy5fX3pvb20uaW52ZXJ0KGcudG91Y2gwWzBdKTtcbiAgICBlbHNlIGcuZW5kKCk7XG4gIH1cblxuICB6b29tLndoZWVsRGVsdGEgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAod2hlZWxEZWx0YSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCB6b29tKSA6IHdoZWVsRGVsdGE7XG4gIH07XG5cbiAgem9vbS5maWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZmlsdGVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCB6b29tKSA6IGZpbHRlcjtcbiAgfTtcblxuICB6b29tLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIHpvb20pIDogdG91Y2hhYmxlO1xuICB9O1xuXG4gIHpvb20uZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0pLCB6b29tKSA6IGV4dGVudDtcbiAgfTtcblxuICB6b29tLnNjYWxlRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlRXh0ZW50WzBdID0gK19bMF0sIHNjYWxlRXh0ZW50WzFdID0gK19bMV0sIHpvb20pIDogW3NjYWxlRXh0ZW50WzBdLCBzY2FsZUV4dGVudFsxXV07XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodHJhbnNsYXRlRXh0ZW50WzBdWzBdID0gK19bMF1bMF0sIHRyYW5zbGF0ZUV4dGVudFsxXVswXSA9ICtfWzFdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMF1bMV0gPSArX1swXVsxXSwgdHJhbnNsYXRlRXh0ZW50WzFdWzFdID0gK19bMV1bMV0sIHpvb20pIDogW1t0cmFuc2xhdGVFeHRlbnRbMF1bMF0sIHRyYW5zbGF0ZUV4dGVudFswXVsxXV0sIFt0cmFuc2xhdGVFeHRlbnRbMV1bMF0sIHRyYW5zbGF0ZUV4dGVudFsxXVsxXV1dO1xuICB9O1xuXG4gIHpvb20uY29uc3RyYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnN0cmFpbiA9IF8sIHpvb20pIDogY29uc3RyYWluO1xuICB9O1xuXG4gIHpvb20uZHVyYXRpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZHVyYXRpb24gPSArXywgem9vbSkgOiBkdXJhdGlvbjtcbiAgfTtcblxuICB6b29tLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgem9vbSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICB6b29tLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IHpvb20gOiB2YWx1ZTtcbiAgfTtcblxuICB6b29tLmNsaWNrRGlzdGFuY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xpY2tEaXN0YW5jZTIgPSAoXyA9ICtfKSAqIF8sIHpvb20pIDogTWF0aC5zcXJ0KGNsaWNrRGlzdGFuY2UyKTtcbiAgfTtcblxuICByZXR1cm4gem9vbTtcbn1cbiIsImV4cG9ydCB2YXIgbmFtZSA9IFwiZDNcIjtcbmV4cG9ydCB2YXIgdmVyc2lvbiA9IFwiNS45LjJcIjtcbmV4cG9ydCB2YXIgZGVzY3JpcHRpb24gPSBcIkRhdGEtRHJpdmVuIERvY3VtZW50c1wiO1xuZXhwb3J0IHZhciBrZXl3b3JkcyA9IFtcImRvbVwiLFwidmlzdWFsaXphdGlvblwiLFwic3ZnXCIsXCJhbmltYXRpb25cIixcImNhbnZhc1wiXTtcbmV4cG9ydCB2YXIgaG9tZXBhZ2UgPSBcImh0dHBzOi8vZDNqcy5vcmdcIjtcbmV4cG9ydCB2YXIgbGljZW5zZSA9IFwiQlNELTMtQ2xhdXNlXCI7XG5leHBvcnQgdmFyIGF1dGhvciA9IHtcIm5hbWVcIjpcIk1pa2UgQm9zdG9ja1wiLFwidXJsXCI6XCJodHRwczovL2Jvc3Qub2Nrcy5vcmcvbWlrZVwifTtcbmV4cG9ydCB2YXIgbWFpbiA9IFwiZGlzdC9kMy5ub2RlLmpzXCI7XG5leHBvcnQgdmFyIHVucGtnID0gXCJkaXN0L2QzLm1pbi5qc1wiO1xuZXhwb3J0IHZhciBqc2RlbGl2ciA9IFwiZGlzdC9kMy5taW4uanNcIjtcbmV4cG9ydCB2YXIgbW9kdWxlID0gXCJpbmRleC5qc1wiO1xuZXhwb3J0IHZhciByZXBvc2l0b3J5ID0ge1widHlwZVwiOlwiZ2l0XCIsXCJ1cmxcIjpcImh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy5naXRcIn07XG5leHBvcnQgdmFyIHNjcmlwdHMgPSB7XCJwcmV0ZXN0XCI6XCJyaW1yYWYgZGlzdCAmJiBta2RpciBkaXN0ICYmIGpzb24ybW9kdWxlIHBhY2thZ2UuanNvbiA+IGRpc3QvcGFja2FnZS5qcyAmJiBub2RlIHJvbGx1cC5ub2RlXCIsXCJ0ZXN0XCI6XCJ0YXBlICd0ZXN0LyoqLyotdGVzdC5qcydcIixcInByZXB1Ymxpc2hPbmx5XCI6XCJ5YXJuIHRlc3QgJiYgcm9sbHVwIC1jXCIsXCJwb3N0cHVibGlzaFwiOlwiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzICYmIGNkIC4uL2QzLmdpdGh1Yi5jb20gJiYgZ2l0IHB1bGwgJiYgY3AgLi4vZDMvZGlzdC9kMy5qcyBkMy52NS5qcyAmJiBjcCAuLi9kMy9kaXN0L2QzLm1pbi5qcyBkMy52NS5taW4uanMgJiYgZ2l0IGFkZCBkMy52NS5qcyBkMy52NS5taW4uanMgJiYgZ2l0IGNvbW1pdCAtbSBcXFwiZDMgJHtucG1fcGFja2FnZV92ZXJzaW9ufVxcXCIgJiYgZ2l0IHB1c2ggJiYgY2QgLSAmJiBjZCAuLi9kMy1ib3dlciAmJiBnaXQgcHVsbCAmJiBjcCAuLi9kMy9MSUNFTlNFIC4uL2QzL1JFQURNRS5tZCAuLi9kMy9kaXN0L2QzLmpzIC4uL2QzL2Rpc3QvZDMubWluLmpzIC4gJiYgZ2l0IGFkZCAtLSBMSUNFTlNFIFJFQURNRS5tZCBkMy5qcyBkMy5taW4uanMgJiYgZ2l0IGNvbW1pdCAtbSBcXFwiJHtucG1fcGFja2FnZV92ZXJzaW9ufVxcXCIgJiYgZ2l0IHRhZyAtYW0gXFxcIiR7bnBtX3BhY2thZ2VfdmVyc2lvbn1cXFwiIHYke25wbV9wYWNrYWdlX3ZlcnNpb259ICYmIGdpdCBwdXNoICYmIGdpdCBwdXNoIC0tdGFncyAmJiBjZCAtICYmIHppcCAtaiBkaXN0L2QzLnppcCAtLSBMSUNFTlNFIFJFQURNRS5tZCBBUEkubWQgQ0hBTkdFUy5tZCBkaXN0L2QzLmpzIGRpc3QvZDMubWluLmpzXCJ9O1xuZXhwb3J0IHZhciBkZXZEZXBlbmRlbmNpZXMgPSB7XCJqc29uMm1vZHVsZVwiOlwiMC4wXCIsXCJyaW1yYWZcIjpcIjJcIixcInJvbGx1cFwiOlwiMC42NFwiLFwicm9sbHVwLXBsdWdpbi1hc2NpaVwiOlwiMC4wXCIsXCJyb2xsdXAtcGx1Z2luLW5vZGUtcmVzb2x2ZVwiOlwiM1wiLFwicm9sbHVwLXBsdWdpbi10ZXJzZXJcIjpcIjFcIixcInRhcGVcIjpcIjRcIn07XG5leHBvcnQgdmFyIGRlcGVuZGVuY2llcyA9IHtcImQzLWFycmF5XCI6XCIxXCIsXCJkMy1heGlzXCI6XCIxXCIsXCJkMy1icnVzaFwiOlwiMVwiLFwiZDMtY2hvcmRcIjpcIjFcIixcImQzLWNvbGxlY3Rpb25cIjpcIjFcIixcImQzLWNvbG9yXCI6XCIxXCIsXCJkMy1jb250b3VyXCI6XCIxXCIsXCJkMy1kaXNwYXRjaFwiOlwiMVwiLFwiZDMtZHJhZ1wiOlwiMVwiLFwiZDMtZHN2XCI6XCIxXCIsXCJkMy1lYXNlXCI6XCIxXCIsXCJkMy1mZXRjaFwiOlwiMVwiLFwiZDMtZm9yY2VcIjpcIjFcIixcImQzLWZvcm1hdFwiOlwiMVwiLFwiZDMtZ2VvXCI6XCIxXCIsXCJkMy1oaWVyYXJjaHlcIjpcIjFcIixcImQzLWludGVycG9sYXRlXCI6XCIxXCIsXCJkMy1wYXRoXCI6XCIxXCIsXCJkMy1wb2x5Z29uXCI6XCIxXCIsXCJkMy1xdWFkdHJlZVwiOlwiMVwiLFwiZDMtcmFuZG9tXCI6XCIxXCIsXCJkMy1zY2FsZVwiOlwiMlwiLFwiZDMtc2NhbGUtY2hyb21hdGljXCI6XCIxXCIsXCJkMy1zZWxlY3Rpb25cIjpcIjFcIixcImQzLXNoYXBlXCI6XCIxXCIsXCJkMy10aW1lXCI6XCIxXCIsXCJkMy10aW1lLWZvcm1hdFwiOlwiMlwiLFwiZDMtdGltZXJcIjpcIjFcIixcImQzLXRyYW5zaXRpb25cIjpcIjFcIixcImQzLXZvcm9ub2lcIjpcIjFcIixcImQzLXpvb21cIjpcIjFcIn07XG4iLCJleHBvcnQge3ZlcnNpb259IGZyb20gXCIuL2Rpc3QvcGFja2FnZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWFycmF5XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtYXhpc1wiO1xuZXhwb3J0ICogZnJvbSBcImQzLWJydXNoXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtY2hvcmRcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtY29sb3JcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1jb250b3VyXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1kcmFnXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZHN2XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZWFzZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWZldGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZm9yY2VcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1mb3JtYXRcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1nZW9cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1oaWVyYXJjaHlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXBhdGhcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1wb2x5Z29uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1yYW5kb21cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1zY2FsZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNjYWxlLWNocm9tYXRpY1wiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNoYXBlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZXJcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdm9yb25vaVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXpvb21cIjtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgRGF0YUZpbHRlcnNfMSA9IHJlcXVpcmUoXCIuL0RhdGFGaWx0ZXJzXCIpO1xuO1xuY2xhc3MgRGF0YSB7XG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5tZXRhID0gW107XG4gICAgICAgIHRoaXMuaW1wb3J0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9EYXRhU2V0KGRhdGEsIG5hbWUpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEgfHwgW3t9XTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhkYXRhWzBdKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKChyKSA9PiBuYW1lcy5tYXAoKG4pID0+IHJbbl0pKTtcbiAgICAgICAgcmV0dXJuIHsgcm93czogcm93cywgY29sTmFtZXM6IG5hbWVzLCBuYW1lOiBuYW1lIHx8IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBnZXROYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cbiAgICBpbXBvcnQoZGF0YSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhLnJvd3MsIGRhdGEuY29sTmFtZXMpO1xuICAgIH1cbiAgICBleHBvcnQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3dzOiB0aGlzLmdldERhdGEoKSxcbiAgICAgICAgICAgIGNvbE5hbWVzOiB0aGlzLmNvbE5hbWVzKClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG4gICAgZ2V0Q29sdW1uKGNvbCkge1xuICAgICAgICBjb25zdCBjbiA9IHRoaXMuY29sTnVtYmVyKGNvbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWFwKChyb3cpID0+IHJvd1tjbl0pO1xuICAgIH1cbiAgICBjb2xBZGQoY29sKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5nZXRNZXRhKGNvbCk7XG4gICAgICAgIGlmIChtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG0gPSB0aGlzLm1ldGFbY29sXSA9IHt9O1xuICAgICAgICAgICAgbS5uYW1lID0gY29sO1xuICAgICAgICAgICAgbS5jb2x1bW4gPSB0aGlzLm1ldGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5tZXRhLnB1c2gobSk7XG4gICAgICAgICAgICBtLmNhc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIG0uYWNjZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG4gICAgY29sSW5pdGlhbGl6ZShjb2wsIGluaXRpYWxpemVyKSB7XG4gICAgICAgIGNvbnN0IGZuID0gdHlwZW9mIGluaXRpYWxpemVyID09PSAnZnVuY3Rpb24nO1xuICAgICAgICBsZXQgY24gPSB0aGlzLmdldE1ldGEoY29sKTtcbiAgICAgICAgaWYgKCFjbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2wgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY24gPSB0aGlzLmNvbEFkZChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb2x1bW4gJHtjb2x9IGRvZXMgbm90IGV4aXN0IGluIERhdGFgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGEubWFwKChyb3csIHJvd0luZGV4KSA9PiByb3dbY24uY29sdW1uXSA9IGZuID8gaW5pdGlhbGl6ZXIocm93W2NuLmNvbHVtbl0sIHJvd0luZGV4LCByb3cpIDogaW5pdGlhbGl6ZXIpO1xuICAgICAgICByZXR1cm4gY24uY29sdW1uO1xuICAgIH1cbiAgICBjb2xOdW1iZXIoY29sKSB7XG4gICAgICAgIGNvbnN0IG0gPSB0aGlzLmdldE1ldGEoY29sKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbS5hY2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbS5jb2x1bW47XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29sTmFtZShjb2wpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzLmdldE1ldGEoY29sKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIG0uYWNjZXNzZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gbS5uYW1lO1xuICAgIH1cbiAgICBjb2xOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YS5tYXAoKG0pID0+IG0ubmFtZSk7XG4gICAgfVxuICAgIGNvbFR5cGUoY29sKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldE1ldGEoY29sKTtcbiAgICAgICAgcmV0dXJuIG1ldGEgPyBtZXRhLnR5cGVzWzBdLnR5cGUgOiBEYXRhLnR5cGUubmFtZTtcbiAgICB9XG4gICAgZmluZERvbWFpbihjb2wsIGRvbWFpbikge1xuICAgICAgICBpZiAoZG9tYWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRvbWFpbiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZG9tYWluWzBdID0gMDtcbiAgICAgICAgICAgIGRvbWFpblsxXSA9IHRoaXMuZGF0YS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuY29sTnVtYmVyKGNvbCk7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5jb2xUeXBlKGNvbCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERhdGEudHlwZS5uYW1lOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9tRG9tID0gZG9tYWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vbURvbS5pbmRleE9mKCcnICsgcltjXSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9tRG9tLnB1c2goJycgKyByW2NdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YS50eXBlLmRhdGU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMudG9EYXRlKHJbY10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWFpblswXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluWzBdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21haW5bMV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblsxXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA8IGRvbWFpblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5bMF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2ID4gZG9tYWluWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblsxXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2ID0gcGFyc2VGbG9hdChyW2NdLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWFpblswXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluWzBdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21haW5bMV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblsxXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA8IGRvbWFpblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5bMF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2ID4gZG9tYWluWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblsxXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tYWluO1xuICAgIH1cbiAgICBjYXN0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5tZXRhLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGMuY29sdW1uO1xuICAgICAgICAgICAgaWYgKCFjLmNhc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocm93KSA9PiByb3dbY29sXSA9IHRoaXMuY2FzdFZhbChjLnR5cGVzWzBdLnR5cGUsIHJvd1tjb2xdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjLmNhc3QgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmlsdGVyKGNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gRGF0YUZpbHRlcnNfMS5maWx0ZXIodGhpcywgY29uZGl0aW9uKTtcbiAgICB9XG4gICAgc29ydChzb3J0Rm4sIGNvbCkge1xuICAgICAgICBsZXQgZm4gPSBzb3J0Rm47XG4gICAgICAgIGlmICghY29sKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc29ydChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb2wgPSB0aGlzLmNvbE51bWJlcihjb2wpO1xuICAgICAgICAgICAgaWYgKHNvcnRGbiA9PT0gJ2Rlc2NlbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgZm4gPSAoYSwgYikgPT4gKGIgPiBhKSA/IDEgOiAoKGIgPCBhKSA/IC0xIDogMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc29ydEZuID09PSAnYXNjZW5kaW5nJykge1xuICAgICAgICAgICAgICAgIGZuID0gKGEsIGIpID0+IChiIDwgYSkgPyAxIDogKChiID4gYSkgPyAtMSA6IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRhLnNvcnQoKHIxLCByMikgPT4gZm4ocjFbY29sXSwgcjJbY29sXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBtYXAobWFwRm4sIGNvbCkge1xuICAgICAgICBjb25zdCBub29wID0gKHZhbCkgPT4gdmFsO1xuICAgICAgICBjb25zdCBjdW11bGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuICh2YWwsIGkpID0+IHsgc3VtICs9ICt2YWw7IHJldHVybiBzdW07IH07XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIGdldEZuKCkge1xuICAgICAgICAgICAgbGV0IGZuO1xuICAgICAgICAgICAgc3dpdGNoIChtYXBGbikge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2N1bXVsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgZm4gPSBjdW11bGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdub29wJzpcbiAgICAgICAgICAgICAgICAgICAgZm4gPSBub29wO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmbiA9IG1hcEZuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmbiA9IGdldEZuKCk7XG4gICAgICAgIGNvbnN0IGMgPSBjb2wgPyB0aGlzLmNvbE51bWJlcihjb2wpIDogdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IERhdGEoe1xuICAgICAgICAgICAgY29sTmFtZXM6IHRoaXMuY29sTmFtZXMoKSxcbiAgICAgICAgICAgIHJvd3M6IHRoaXMuZGF0YS5tYXAoKHJvdywgcm93SW5kZXgsIHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICByb3dbY10gPSBmbihyb3dbY10sIGMsIHJvd0luZGV4LCByb3dzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3Nbcm93SW5kZXhdID0gZm4ocm93LCByb3dJbmRleCwgcm93cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0TmFtZSgpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBnZXRNZXRhKGNvbCkge1xuICAgICAgICBpZiAoIXRoaXMubWV0YVtjb2xdKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YVtjb2xdLmFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YVtjb2xdO1xuICAgIH1cbiAgICBzZXREYXRhKGRhdGEsIG5hbWVzLCBhdXRvVHlwZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5tZXRhID0gW107XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIG5hbWVzLmZvckVhY2goKGNvbCkgPT4gdGhpcy5jb2xBZGQoY29sKSk7XG4gICAgICAgIG5hbWVzLmZvckVhY2goKGNvbCkgPT4gdGhpcy5maW5kVHlwZXMoY29sKSk7XG4gICAgICAgIHRoaXMuY2FzdERhdGEoKTtcbiAgICB9XG4gICAgZmluZFR5cGVzKGNvbCkge1xuICAgICAgICBjb25zdCBtID0gdGhpcy5nZXRNZXRhKGNvbCk7XG4gICAgICAgIGNvbnN0IHR5cGVzID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKERhdGEudHlwZSkuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHMgPSB7IHR5cGU6IERhdGEudHlwZVt0XSwgY291bnQ6IDAgfTtcbiAgICAgICAgICAgIHR5cGVzLnB1c2godHMpO1xuICAgICAgICAgICAgdHlwZXNbRGF0YS50eXBlW3RdXSA9IHRzO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChsZXQgdiBvZiB0aGlzLmFsbFJvd3MoY29sKSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMuZmluZFR5cGUodik7XG4gICAgICAgICAgICBpZiAodCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHR5cGVzW3RdLmNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHlwZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgaWYgKGEudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJiBhLmNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiLnR5cGUgPT09ICdjdXJyZW5jeScgJiYgYi5jb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiLmNvdW50IC0gYS5jb3VudDtcbiAgICAgICAgfSk7XG4gICAgICAgIG0udHlwZXMgPSB0eXBlcztcbiAgICAgICAgcmV0dXJuIHR5cGVzWzBdLnR5cGU7XG4gICAgfVxuICAgIGZpbmRUeXBlKHZhbCkge1xuICAgICAgICBpZiAodmFsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGEudHlwZS5kYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGEudHlwZS5udW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJWYWwgPSAnJyArIHZhbDtcbiAgICAgICAgICAgIGlmICgnJyArIHBhcnNlRmxvYXQoc3RyVmFsKSA9PT0gc3RyVmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGEudHlwZS5udW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyVmFsLnN0YXJ0c1dpdGgoJyQnKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChzdHJWYWwuc2xpY2UoMSkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBEYXRhLnR5cGUuY3VycmVuY3k7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyVmFsLmVuZHNXaXRoKCclJykgJiYgIWlzTmFOKHBhcnNlRmxvYXQoc3RyVmFsKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0YS50eXBlLnBlcmNlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMudG9EYXRlKHN0clZhbCkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBEYXRhLnR5cGUuZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RyVmFsLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVsbFwiOiBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiI3JlZiFcIjogYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogaWYgKHZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRhLnR5cGUubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgICphbGxSb3dzKGNvbHVtbikge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jb2xOdW1iZXIoY29sdW1uKTtcbiAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCB0aGlzLmRhdGEubGVuZ3RoOyByKyspIHtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuZGF0YVtyXVtjXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0RhdGUodmFsLCBsaW1pdFllYXIgPSAxOTcwKSB7XG4gICAgICAgIGxldCBkO1xuICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgZCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICAgICAgaWYgKCFpc05hTihkLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IFJlZ0V4cChgXFxcXGRcXFxcZCR7ZC5nZXRGdWxsWWVhcigpICUgMTAwfWAsICdnJyk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWwubWF0Y2gocikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeXIgPSAxOTAwICsgZC5nZXRGdWxsWWVhcigpICUgMTAwO1xuICAgICAgICAgICAgICAgICAgICBkLnNldEZ1bGxZZWFyKCh5ciA8IGxpbWl0WWVhcikgPyB5ciArIDEwMCA6IHlyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuICAgIGNhc3RWYWwodHlwZSwgdmFsKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB2YWw7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhLnR5cGUuZGF0ZTpcbiAgICAgICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLnRvRGF0ZSh2YWwpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihyZXN1bHQuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGF0YS50eXBlLnBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IHBhcnNlRmxvYXQodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsLmVuZHNXaXRoKCclJykgPyBudW0gLyAxMDAgOiBudW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc05hTihyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhLnR5cGUuY3VycmVuY3k6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSA/IHZhbC5yZXBsYWNlKC9bXmVFXFwrXFwtXFwuXFxkXS9nLCAnJykgOiB2YWw7XG4gICAgICAgICAgICBjYXNlIERhdGEudHlwZS5udW1iZXI6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlRmxvYXQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXN1bHQgPSAnJyArIHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbkRhdGEudHlwZSA9IHtcbiAgICBudW1iZXI6ICdudW1iZXInLFxuICAgIG5hbWU6ICduYW1lJyxcbiAgICBkYXRlOiAnZGF0ZScsXG4gICAgY3VycmVuY3k6ICdjdXJyZW5jeScsXG4gICAgcGVyY2VudDogJ3BlcmNlbnQnLFxufTtcbmV4cG9ydHMuRGF0YSA9IERhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSR0YwWVM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OUVZWFJoTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJTVUVzSzBOQlFXdEVPMEZCZFVORkxFTkJRVU03UVVGelFuSkVMRTFCUVdFc1NVRkJTVHRKUVdkRFlpeFpRVUZaTEVsQlFXRTdVVUZwVldwQ0xGTkJRVWtzUjBGQmFVSXNSVUZCUlN4RFFVRkRPMUZCUTNoQ0xGTkJRVWtzUjBGQmFVSXNSVUZCUlN4RFFVRkRPMUZCYWxVMVFpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRM1JDTEVOQlFVTTdTVUZXVFN4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVzFDTEVWQlFVVXNTVUZCV1R0UlFVTnlSQ3hKUVVGSkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRjRUlzVFVGQlRTeExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnVReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVVzUTBGRE5VSXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51UXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVWQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJReXhKUVVGSkxFbEJRVVVzVTBGQlV5eEZRVUZGTEVOQlFVTTdTVUZETDBRc1EwRkJRenRKUVZOTkxFOUJRVTg3VVVGRFZpeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRja0lzUTBGQlF6dEpRVTFOTEUxQlFVMHNRMEZCUXl4SlFVRlpPMUZCUTNSQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOMFFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMGxCUXpORExFTkJRVU03U1VGTFRTeE5RVUZOTzFGQlExUXNUMEZCVHp0WlFVTklMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEzQkNMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTzFOQlF6TkNMRU5CUVVNN1NVRkRUaXhEUVVGRE8wbEJTMDBzVDBGQlR6dFJRVU5XTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVOeVFpeERRVUZETzBsQlRVMHNVMEZCVXl4RFFVRkRMRWRCUVcxQ08xRkJRMmhETEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZETDBJc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVZjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRia1FzUTBGQlF6dEpRVkZOTEUxQlFVMHNRMEZCUXl4SFFVRlZPMUZCUTNCQ0xFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhGUVVGRk8xbEJRMnBDTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZsTEVWQlFVVXNRMEZCUXp0WlFVTndReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZMTEVkQlFVY3NRMEZCUXp0WlFVTm1MRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1dVRkROVUlzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGJFSXNRMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJUeXhMUVVGTExFTkJRVU03V1VGRGJrSXNRMEZCUXl4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03VTBGRGRFSTdVVUZEUkN4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVOaUxFTkJRVU03U1VGWlRTeGhRVUZoTEVOQlFVTXNSMEZCYlVJc1JVRkJSU3hYUVVFd1FqdFJRVU5vUlN4TlFVRk5MRVZCUVVVc1IwRkJSeXhQUVVGUExGZEJRVmNzUzBGQlN5eFZRVUZWTEVOQlFVTTdVVUZETjBNc1NVRkJTU3hGUVVGRkxFZEJRV01zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTB3c1NVRkJTU3hQUVVGUExFZEJRVWNzUzBGQlN5eFJRVUZSTEVWQlFVVTdaMEpCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1lVRkJSVHRwUWtGRGJFUTdaMEpCUVVVc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFZRVUZWTEVkQlFVY3NlVUpCUVhsQ0xFTkJRVU1zUTBGQlF6dGhRVUZGTzFOQlEzQkZPMUZCUTBRc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRlhMRVZCUVVVc1VVRkJaU3hGUVVGRkxFVkJRVVVzUTBGRE0wTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVRXNRMEZCUXl4RFFVRlZMRmRCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFWVXNWMEZCVnl4RFFVTnVSeXhEUVVGRE8xRkJRMFlzVDBGQlR5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUTNKQ0xFTkJRVU03U1VGUlRTeFRRVUZUTEVOQlFVTXNSMEZCYlVJN1VVRkRhRU1zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU0xUWl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRk8xbEJRVVVzVDBGQlR5eFRRVUZUTEVOQlFVTTdVMEZCUlR0aFFVTjRRanRaUVVORUxFTkJRVU1zUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUTJ4Q0xFOUJRVThzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0VFFVTnVRanRKUVVOTUxFTkJRVU03U1VGUlRTeFBRVUZQTEVOQlFVTXNSMEZCYlVJN1VVRkRPVUlzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU14UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRk8xbEJRVVVzVDBGQlR5eFRRVUZUTEVOQlFVTTdVMEZCUlR0UlFVTTNRaXhEUVVGRExFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnNRaXhQUVVGUExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVUxTkxGRkJRVkU3VVVGRFdDeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQldTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGJrUXNRMEZCUXp0SlFWRk5MRTlCUVU4c1EwRkJReXhIUVVGdFFqdFJRVU01UWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUXk5Q0xFOUJRVThzU1VGQlNTeERRVUZCTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTTdTVUZEY2tRc1EwRkJRenRKUVZOTkxGVkJRVlVzUTBGQlF5eEhRVUZ2UWl4RlFVRkZMRTFCUVdNN1VVRkRiRVFzU1VGQlNTeE5RVUZOTEV0QlFVY3NVMEZCVXl4RlFVRkZPMWxCUVVVc1RVRkJUU3hIUVVGWExFVkJRVVVzUTBGQlF6dFRRVUZGTzFGQlEyaEVMRWxCUVVrc1IwRkJSeXhMUVVGTExGTkJRVk1zUlVGQlJUdFpRVU51UWl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyUXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOc1F6dGhRVUZOTzFsQlEwZ3NUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTTVRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJReTlDTEZGQlFVOHNTVUZCU1N4RlFVRkZPMmRDUVVOVUxFdEJRVXNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpPMjlDUVVObUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJVeXhGUVVGRkxFVkJRVVU3ZDBKQlF6VkNMRTFCUVUwc1RVRkJUU3hIUVVGaExFMUJRVTBzUTBGQlF6dDNRa0ZEYUVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVTdORUpCUVVVc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZVVKQlFVVTdiMEpCUXpsRUxFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTklMRTFCUVUwN1owSkJRMVlzUzBGQlN5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrN2IwSkJRMllzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGVExFVkJRVVVzUlVGQlJUdDNRa0ZETlVJc1NVRkJTU3hEUVVGRExFZEJRVkVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dDNRa0ZETDBJc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVY3NVMEZCVXl4RlFVRkZPelJDUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2VVSkJRVVU3ZDBKQlF6ZERMRWxCUVVrc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZITEZOQlFWTXNSVUZCUlRzMFFrRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPM2xDUVVGRk8zZENRVU0zUXl4SlFVRkpMRU5CUVVNc1MwRkJSeXhUUVVGVExFbEJRVWtzUTBGQlF5eExRVUZITEVsQlFVa3NSVUZCUlRzMFFrRkRNMElzU1VGQlNTeERRVUZETEVkQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZERRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03TmtKQlFVVTdhVU5CUXpsQ0xFbEJRVWtzUTBGQlF5eEhRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVHRuUTBGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE96WkNRVUZGTzNsQ1FVTXpRenR2UWtGRFRDeERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRTQ3hOUVVGTk8yZENRVU5XTzI5Q1FVTkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVVVN2QwSkJRelZDTEVsQlFVa3NRMEZCUXl4SFFVRlZMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJRenQzUWtGRE0wTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVWNzVTBGQlV5eEZRVUZGT3pSQ1FVRkZMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdlVUpCUVVVN2QwSkJRemRETEVsQlFVa3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGSExGTkJRVk1zUlVGQlJUczBRa0ZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzNsQ1FVRkZPM2RDUVVNM1F5eEpRVUZKTEVOQlFVTXNTMEZCUnl4VFFVRlRMRWxCUVVrc1EwRkJReXhMUVVGSExFbEJRVWtzUlVGQlJUczBRa0ZETTBJc1NVRkJTU3hEUVVGRExFZEJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmREUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN05rSkJRVVU3YVVOQlF6bENMRWxCUVVrc1EwRkJReXhIUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0blEwRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPelpDUVVGRk8zbENRVU16UXp0dlFrRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5XTzFOQlEwbzdVVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlJVMHNVVUZCVVR0UlFVTllMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCV1N4RlFVRkZMRVZCUVVVN1dVRkRMMElzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVOeVFpeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSVHRuUWtGRFZDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVmNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU14Ump0WlFVTkVMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEyeENMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMUFzUTBGQlF6dEpRVk5OTEUxQlFVMHNRMEZCUXl4VFFVRnRRanRSUVVNM1FpeFBRVUZQTEc5Q1FVRk5MRU5CUVVNc1NVRkJTU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzBsQlEyNURMRU5CUVVNN1NVRTBRazBzU1VGQlNTeERRVUZETEUxQlFXOUNMRVZCUVVVc1IwRkJiMEk3VVVGRGJFUXNTVUZCU1N4RlFVRkZMRWRCUVZjc1RVRkJUU3hEUVVGRE8xRkJRM2hDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVN1dVRkRUaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRUUVVOMFFqdGhRVUZOTzFsQlEwZ3NSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZETVVJc1NVRkJTU3hOUVVGTkxFdEJRVXNzV1VGQldTeEZRVUZGTzJkQ1FVRkZMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVXNzUlVGQlJTeERRVUZMTEVWQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVGRk8xbEJRemxGTEVsQlFVa3NUVUZCVFN4TFFVRkxMRmRCUVZjc1JVRkJSenRuUWtGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkxMRVZCUVVVc1EwRkJTeXhGUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZCUlR0WlFVTTVSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVZFc1JVRkJSU3hGUVVGUkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOb1JUdFJRVU5FTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VFMFEwMHNSMEZCUnl4RFFVRkRMRXRCUVRKQ0xFVkJRVVVzUjBGQmIwSTdVVUZEZUVRc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEhRVUZQTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVNNVFpeE5RVUZOTEZGQlFWRXNSMEZCUnl4SFFVRkhMRVZCUVVVN1dVRkRiRUlzU1VGQlNTeEhRVUZITEVkQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTFZc1QwRkJUeXhEUVVGRExFZEJRVlVzUlVGQlJTeERRVUZSTEVWQlFVVXNSVUZCUlN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMnhGTEVOQlFVTXNRMEZCUXp0UlFVTkdMRk5CUVZNc1MwRkJTenRaUVVOV0xFbEJRVWtzUlVGQlJTeERRVUZETzFsQlExQXNVVUZCVVN4TFFVRkxMRVZCUVVVN1owSkJRMWdzUzBGQlN5eFZRVUZWTzI5Q1FVRkZMRVZCUVVVc1IwRkJSeXhSUVVGUkxFVkJRVVVzUTBGQlF6dHZRa0ZCUXl4TlFVRk5PMmRDUVVONFF5eExRVUZMTEUxQlFVMDdiMEpCUVUwc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF6dHZRa0ZCUXl4TlFVRk5PMmRDUVVOc1F5eFBRVUZQTEVOQlFVTXNRMEZCVXl4RlFVRkZMRWRCUVcxQ0xFdEJRVXNzUTBGQlF6dGhRVU12UXp0WlFVTkVMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMlFzUTBGQlF6dFJRVVZFTEVsQlFVa3NSVUZCUlN4SFFVRkhMRXRCUVVzc1JVRkJSU3hEUVVGRE8xRkJRMnBDTEUxQlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJRU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETzFGQlF5OURMRWxCUVVrc1RVRkJUU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETzFsQlEyeENMRkZCUVZFc1JVRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTzFsQlEzaENMRWxCUVVrc1JVRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVZNc1JVRkJSU3hSUVVGbExFVkJRVVVzU1VGQldTeEZRVUZGTEVWQlFVVTdaMEpCUXpWRUxFbEJRVWtzUTBGQlF5eEZRVUZGTzI5Q1FVTklMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlZ5eEZRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN2FVSkJRMjVFTzNGQ1FVRk5PMjlDUVVOSUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCWXl4RlFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0cFFrRkRlRVE3WjBKQlEwUXNUMEZCVHl4SFFVRkhMRU5CUVVNN1dVRkRaaXhEUVVGRExFTkJRVU03V1VGRFJpeEpRVUZKTEVWQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRUUVVOMFFpeERRVUZETEVOQlFVTTdVVUZEU0N4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlUwOHNUMEZCVHl4RFFVRkRMRWRCUVcxQ08xRkJSUzlDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTzFsQlFVVXNUMEZCVHl4VFFVRlRMRU5CUVVNN1UwRkJSVHRSUVVNeFF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZETDBJc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpGQ0xFTkJRVU03U1VGWFR5eFBRVUZQTEVOQlFVTXNTVUZCWXl4RlFVRkZMRXRCUVdNc1JVRkJSU3hSUVVGUkxFZEJRVU1zU1VGQlNUdFJRVU42UkN4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU5tTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5vUkN4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYmtRc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzBsQlEzQkNMRU5CUVVNN1NVRlRUeXhUUVVGVExFTkJRVU1zUjBGQmJVSTdVVUZEYWtNc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVNMVFpeE5RVUZOTEV0QlFVc3NSMEZCWjBJc1JVRkJSU3hEUVVGRE8xRkJRemxDTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRk8xbEJRM2hETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6VkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdXVUZEWml4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNM1FpeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRXRCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSVHRaUVVNM1FpeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6TkNMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWtzUlVGQlJUdG5Ra0ZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdZVUZCUlR0VFFVTjRRenRSUVVORUxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVXl4RFFVRlpMRVZCUVVVc1EwRkJXVHRaUVVNeFF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRXRCUVVjc1ZVRkJWU3hKUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZCUlR0WlFVTnNSQ3hKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEV0QlFVY3NWVUZCVlN4SlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8yRkJRVVU3V1VGRGFrUXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdVVUZETjBJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOb1FpeFBRVUZQTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03U1VGRGVrSXNRMEZCUXp0SlFXRlBMRkZCUVZFc1EwRkJReXhIUVVGWE8xRkJRM2hDTEVsQlFVa3NSMEZCUnl4SlFVRkpMRWRCUVVjc1MwRkJSeXhGUVVGRkxFVkJRVVU3V1VGRGFrSXNTVUZCU1N4SFFVRkhMRmxCUVZrc1NVRkJTU3hGUVVGRk8yZENRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03WVVGQlJUdFpRVU51UkN4SlFVRkpMRTlCUVU4c1IwRkJSeXhMUVVGTExGRkJRVkVzUlVGQlJUdG5Ra0ZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzJGQlFVVTdXVUZIZWtRc1RVRkJUU3hOUVVGTkxFZEJRVWNzUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUXp0WlFVTjBRaXhKUVVGSkxFVkJRVVVzUjBGQlF5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1RVRkJUU3hGUVVFclFqdG5Ra0ZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzJGQlFVVTdXVUZETDBZc1NVRkJTU3hOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdG5Ra0ZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzJGQlFVVTdXVUZEYWtjc1NVRkJTU3hOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRmhPMmRDUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1lVRkJSVHRaUVVOb1J5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJlVUk3WjBKQlFVVXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF6dGhRVUZGTzFsQlVUVkdMRkZCUVZFc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeEZRVUZGTzJkQ1FVTXhRaXhMUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETEUxQlFVMDdaMEpCUTI1Q0xFdEJRVXNzVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFR0blFrRkRjRUlzVDBGQlR5eERRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUlVGQlJUdHZRa0ZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETzJsQ1FVRkZPMkZCUTNoRU8xTkJRMG83VVVGRFJDeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTm9RaXhEUVVGRE8wbEJUVThzUTBGQlJTeFBRVUZQTEVOQlFVTXNUVUZCYzBJN1VVRkRjRU1zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU5xUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEYmtNc1RVRkJUU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM3BDTzBsQlEwd3NRMEZCUXp0SlFXRlBMRTFCUVUwc1EwRkJReXhIUVVGWExFVkJRVVVzVTBGQlV5eEhRVUZETEVsQlFVazdVVUZEZEVNc1NVRkJTU3hEUVVGTkxFTkJRVU03VVVGRFdDeEpRVUZKTEVkQlFVY3NXVUZCV1N4SlFVRkpMRVZCUVVVN1dVRkJSU3hEUVVGRExFZEJRVk1zUjBGQlJ5eERRVUZETzFOQlFVVTdZVUZEZEVNN1dVRkRSQ3hEUVVGRExFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFWTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRNVUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZEY2tJc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFZEJRVWNzUjBGQlJ5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRelZFTEVsQlFVa3NRMEZCVlN4SFFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzI5Q1FVTjZRaXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRmRCUVZjc1JVRkJSU3hIUVVGSExFZEJRVWNzUTBGQlF6dHZRa0ZEZUVNc1EwRkJReXhEUVVGRExGZEJRVmNzUTBGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03YVVKQlEycEVPMkZCUTBvN1UwRkRTanRSUVVORUxFOUJRVThzUTBGQlF5eERRVUZETzBsQlEySXNRMEZCUXp0SlFWTlBMRTlCUVU4c1EwRkJReXhKUVVGWExFVkJRVVVzUjBGQlZ6dFJRVU53UXl4SlFVRkpMRTFCUVUwc1IwRkJWeXhIUVVGSExFTkJRVU03VVVGRGVrSXNVVUZCVVN4SlFVRkpMRVZCUVVVN1dVRkRWaXhMUVVGTExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1R0blFrRkJTeXhKUVVGSkxFZEJRVWNzV1VGQldTeEpRVUZKTEVWQlFVVTdiMEpCUVVVc1QwRkJUeXhIUVVGSExFTkJRVU03YVVKQlFVVTdaMEpCUTJoRUxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU14UWl4SlFVRkpMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlR0dlFrRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzJsQ1FVRkZPMmRDUVVNdlF5eE5RVUZOTzFsQlEzUkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTzJkQ1FVRkZMRWxCUVVrc1QwRkJUeXhIUVVGSExFdEJRVXNzVVVGQlVTeEZRVUZGTzI5Q1FVTnFReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRelZDTEUxQlFVMHNSMEZCV1N4SFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTTdhVUpCUTNaRU8zRkNRVUZOTzI5Q1FVTklMRTFCUVUwc1IwRkJSeXhIUVVGSExFTkJRVU03YVVKQlEyaENPMmRDUVVORUxFbEJRVWtzUzBGQlN5eERRVUZUTEUxQlFVMHNRMEZCUXl4RlFVRkZPMjlDUVVGRkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTTdhVUpCUVVVN1owSkJRemRETEUxQlFVMDdXVUZEZEVJc1MwRkJTeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRTdaMEpCUTFBc1RVRkJUU3hIUVVGSExFTkJRVU1zVDBGQlR5eEhRVUZITEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRaUVVVMVJpeExRVUZMTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUVHRuUWtGQlJ5eEpRVUZKTEU5QlFVOHNUVUZCVFN4TFFVRkxMRkZCUVZFc1JVRkJSVHR2UWtGQlJTeE5RVUZOTEVkQlFVY3NWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8ybENRVUZGTzJkQ1FVTjRSU3hKUVVGSkxFdEJRVXNzUTBGQlV5eE5RVUZOTEVOQlFVTXNSVUZCUlR0dlFrRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzJsQ1FVRkZPMmRDUVVNM1F5eE5RVUZOTzFsQlEzUkNMRTlCUVU4c1EwRkJReXhEUVVGUkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RFFVRkRPMU5CUTI1RE8xRkJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYWtJc1EwRkJRenM3UVVGb1owSlpMRk5CUVVrc1IwRkJSenRKUVVWcVFpeE5RVUZOTEVWQlFXZENMRkZCUVZFN1NVRkZPVUlzU1VGQlNTeEZRVUZyUWl4TlFVRk5PMGxCUlRWQ0xFbEJRVWtzUlVGQmEwSXNUVUZCVFR0SlFVVTFRaXhSUVVGUkxFVkJRV01zVlVGQlZUdEpRVVZvUXl4UFFVRlBMRVZCUVdVc1UwRkJVenREUVVWc1F5eERRVUZETzBGQmFFSk9MRzlDUVhGblFrTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBEYXRhXzEgPSByZXF1aXJlKFwiLi9EYXRhXCIpO1xuO1xuO1xuZnVuY3Rpb24gcmVzb2x2ZVRlcm1pbmFsQ29uZGl0aW9uKG5hbWUsIHZhbCwgcm93LCBjb2xOdW1iZXIpIHtcbiAgICBjb25zdCBjb2wgPSBjb2xOdW1iZXIobmFtZSk7XG4gICAgY29uc3QgdmFsSXNGdW5jdGlvbiA9ICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKTtcbiAgICBjb25zdCB2YWxJc0FycmF5ID0gKCh0eXBlb2YgdmFsID09PSAnb2JqZWN0JykgJiYgKHZhbC5sZW5ndGggIT09IHVuZGVmaW5lZCkpO1xuICAgIGlmIChpc05hTihjb2wpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBjb2x1bW4gbmFtZSAnJHtuYW1lfScgY2Fubm90IGJlIHJlc29sdmVkIGluIHRlcm1pbmFsIGNvbmRpdGlvbiAke25hbWV9PSR7dmFsfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhyb3cpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbElzRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbChyb3dbY29sXSwgcm93KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsSXNBcnJheSkge1xuICAgICAgICByZXR1cm4gKHZhbC5sZW5ndGggPT09IDApIHx8IHZhbC5zb21lKCh2KSA9PiByb3dbY29sXSA9PT0gdik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHJvd1tjb2xdID09PSB2YWwpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVDb25kaXRpb24oY29uZGl0aW9uLCByb3csIHIsIGNvbE51bWJlciwgYW5kKSB7XG4gICAgbGV0IG9yUmVzdWx0ID0gZmFsc2U7XG4gICAgbGV0IGFuZFJlc3VsdCA9IHRydWU7XG4gICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gKGNvbmRpdGlvbiA9PT0gcik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25kaXRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IG1jID0gY29uZGl0aW9uO1xuICAgICAgICBpZiAobWMubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChhbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFuZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1jLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhbmQgP1xuICAgICAgICAgICAgICAgIG1jLmV2ZXJ5KChjZCkgPT4gcmVzb2x2ZUNvbmRpdGlvbihjZCwgcm93LCByLCBjb2xOdW1iZXIsIGFuZCkpIDpcbiAgICAgICAgICAgICAgICBtYy5zb21lKChjZCkgPT4gcmVzb2x2ZUNvbmRpdGlvbihjZCwgcm93LCByLCBjb2xOdW1iZXIsIGFuZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBjb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBsZXQgY29uZGl0aW9uTWV0ID0gYW5kO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNldENvbmQgPSBjb25kaXRpb247XG4gICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ29yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbk1ldCA9IHJlc29sdmVDb25kaXRpb24oc2V0Q29uZC5vciwgcm93LCByLCBjb2xOdW1iZXIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdhbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uTWV0ID0gcmVzb2x2ZUNvbmRpdGlvbihzZXRDb25kLmFuZCwgcm93LCByLCBjb2xOdW1iZXIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25NZXQgPSAhcmVzb2x2ZUNvbmRpdGlvbihzZXRDb25kLm5vdCwgcm93LCByLCBjb2xOdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGNvbmRpdGlvbk1ldCA9IHJlc29sdmVUZXJtaW5hbENvbmRpdGlvbihuYW1lLCBjb25kaXRpb25bbmFtZV0sIHJvdywgY29sTnVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbk1ldCkge1xuICAgICAgICAgICAgICAgICAgICBvclJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYW5kUmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGB1bnJlY29nbml6ZWQgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGNvbmRpdGlvbil9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGFuZCA/IGFuZFJlc3VsdCA6IG9yUmVzdWx0O1xufVxuZnVuY3Rpb24gZmlsdGVyKGRhdGEsIGNvbmQpIHtcbiAgICBjb25zdCBjb2xOdW1iZXIgPSAobmFtZSkgPT4gZGF0YS5jb2xOdW1iZXIobmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhXzEuRGF0YSh7XG4gICAgICAgICAgICBuYW1lOiBkYXRhLmdldE5hbWUoKSxcbiAgICAgICAgICAgIGNvbE5hbWVzOiBkYXRhLmNvbE5hbWVzKCksXG4gICAgICAgICAgICByb3dzOiBkYXRhLmdldERhdGEoKS5maWx0ZXIoKHJvdywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtlZXAgPSByZXNvbHZlQ29uZGl0aW9uKGNvbmQsIHJvdywgaSwgY29sTnVtYmVyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2VlcDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIGNvbnNvbGUubG9nKGVyci5zdGFjayk7XG4gICAgfVxufVxuZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSR0YwWVVacGJIUmxjbk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlJHRjBZVVpwYkhSbGNuTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVFeVNFRXNhVU5CUjJkQ08wRkJaV1lzUTBGQlF6dEJRVkZFTEVOQlFVTTdRVUZKUml4VFFVRlRMSGRDUVVGM1FpeERRVUZETEVsQlFWY3NSVUZCUlN4SFFVRlBMRVZCUVVVc1IwRkJWeXhGUVVGRkxGTkJRU3RDTzBsQlEyaEhMRTFCUVUwc1IwRkJSeXhIUVVGSExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTTFRaXhOUVVGTkxHRkJRV0VzUjBGQlJ5eERRVUZETEU5QlFVOHNSMEZCUnl4TFFVRkxMRlZCUVZVc1EwRkJReXhEUVVGRE8wbEJRMnhFTEUxQlFVMHNWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFZEJRVWNzUzBGQlN5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFdEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTXpSU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0UlFVTmFMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zWjBKQlFXZENMRWxCUVVrc09FTkJRVGhETEVsQlFVa3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRemRHTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGFrSXNUMEZCVHl4TFFVRkxMRU5CUVVNN1MwRkRhRUk3VTBGQlRTeEpRVUZKTEdGQlFXRXNSVUZCUlR0UlFVVjBRaXhQUVVGUExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRE4wSTdVMEZCVFN4SlFVRkpMRlZCUVZVc1JVRkJSVHRSUVVWdVFpeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGNFVTdVMEZCVFR0UlFVTklMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkROMEk3UVVGRFRDeERRVUZETzBGQlUwUXNVMEZCVXl4blFrRkJaMElzUTBGQlF5eFRRVUZ0UWl4RlFVRkZMRWRCUVZjc1JVRkJSU3hEUVVGUkxFVkJRVVVzVTBGQkswSXNSVUZCUlN4SFFVRlpPMGxCUXk5SExFbEJRVWtzVVVGQlVTeEhRVUZITEV0QlFVc3NRMEZCUXp0SlFVTnlRaXhKUVVGSkxGTkJRVk1zUjBGQlJTeEpRVUZKTEVOQlFVTTdTVUZGY0VJc1NVRkJTU3hUUVVGVExFdEJRVWNzVTBGQlV5eEZRVUZGTzFGQlFVVXNUMEZCVHl4SlFVRkpMRU5CUVVNN1MwRkJSVHRUUVVkMFF5eEpRVUZKTEU5QlFVOHNVMEZCVXl4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVGRkxFOUJRVThzUTBGQlF5eFRRVUZUTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkJSVHRUUVVkb1JTeEpRVUZKTEU5QlFVOHNVMEZCVXl4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVWd1F5eE5RVUZOTEVWQlFVVXNSMEZCYlVJc1UwRkJVeXhEUVVGRE8xRkJSM0pETEVsQlFVa3NSVUZCUlN4RFFVRkRMRTFCUVUwc1MwRkJTeXhUUVVGVExFVkJRVVU3V1VGRGVrSXNTVUZCU1N4SFFVRkhMRXRCUVVzc1UwRkJVeXhGUVVGRk8yZENRVUZGTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNN1lVRkJSVHRaUVVOMlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhGUVVGRk8yZENRVUZGTEU5QlFVOHNTMEZCU3l4RFFVRkRPMkZCUVVVN1dVRkZkRU1zVDBGQlR5eEhRVUZITEVOQlFVRXNRMEZCUXp0blFrRkRVQ3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCWlN4RlFVRkZMRVZCUVVVc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RlFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU0zUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlpTeEZRVUZGTEVWQlFVVXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTnNSanRoUVVWSk8xbEJRMFFzU1VGQlNTeEhRVUZITEV0QlFVc3NVMEZCVXl4RlFVRkZPMmRDUVVGRkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdZVUZCUlR0WlFVTjBReXhMUVVGTExFMUJRVTBzU1VGQlNTeEpRVUZKTEZOQlFWTXNSVUZCUlR0blFrRkRNVUlzU1VGQlNTeFpRVUZaTEVkQlFVY3NSMEZCUnl4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTEU5QlFVOHNSMEZCYjBJc1UwRkJVeXhEUVVGRE8yZENRVWN6UXl4UlFVRlJMRWxCUVVrc1JVRkJSVHR2UWtGRFZpeExRVUZMTEVsQlFVazdkMEpCUVVjc1dVRkJXU3hIUVVGSExHZENRVUZuUWl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4VFFVRlRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03ZDBKQlFVTXNUVUZCVFR0dlFrRkRla1lzUzBGQlN5eExRVUZMTzNkQ1FVRkZMRmxCUVZrc1IwRkJSeXhuUWtGQlowSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8zZENRVUZETEUxQlFVMDdiMEpCUTNwR0xFdEJRVXNzUzBGQlN6dDNRa0ZCUlN4WlFVRlpMRWRCUVVjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN2QwSkJRVU1zVFVGQlRUdHZRa0ZEY0VZc1QwRkJUeXhEUVVGRExFTkJRVWtzV1VGQldTeEhRVUZITEhkQ1FVRjNRaXhEUVVGRExFbEJRVWtzUlVGQlJTeFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzJsQ1FVTTVSanRuUWtGRFJDeEpRVUZKTEZsQlFWa3NSVUZCUlR0dlFrRkJSU3hSUVVGUkxFZEJRVWtzU1VGQlNTeERRVUZETzI5Q1FVRkZMRWxCUVVjc1EwRkJReXhIUVVGSExFVkJRVVU3ZDBKQlFVVXNUVUZCVFR0eFFrRkJSVHRwUWtGQlF6dHhRa0ZEZWtNN2IwSkJRVVVzVTBGQlV5eEhRVUZITEV0QlFVc3NRMEZCUXp0dlFrRkJReXhKUVVGSExFZEJRVWNzUlVGQlJ6dDNRa0ZCUlN4TlFVRk5PM0ZDUVVGRk8ybENRVUZETzJGQlF6bEVPMU5CUTBvN1MwRkRTanRUUVVGTk8xRkJRMGdzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl3eVFrRkJNa0lzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRGRFVXNUMEZCVHl4TFFVRkxMRU5CUVVNN1MwRkRhRUk3U1VGRFJDeFBRVUZQTEVkQlFVY3NRMEZCUVN4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZEY2tNc1EwRkJRenRCUVZORUxGTkJRV2RDTEUxQlFVMHNRMEZCUXl4SlFVRlRMRVZCUVVVc1NVRkJZenRKUVVNMVF5eE5RVUZOTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWxCUVZjc1JVRkJVeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNdlJDeEpRVUZKTzFGQlEwRXNUMEZCVHl4SlFVRkpMRmRCUVVrc1EwRkJRenRaUVVOYUxFbEJRVWtzUlVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMWxCUTNoQ0xGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZPMWxCUTNwQ0xFbEJRVWtzUlVGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlZ5eEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZPMmRDUVVOcVJDeE5RVUZOTEVsQlFVa3NSMEZCUnl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dG5Ra0ZEZGtRc1QwRkJUeXhKUVVGSkxFTkJRVU03V1VGRGFFSXNRMEZCUXl4RFFVRkRPMU5CUTB3c1EwRkJReXhEUVVGRE8wdEJRMDQ3U1VGQlF5eFBRVUZOTEVkQlFVY3NSVUZCUlR0UlFVTlVMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYWtJc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1MwRkRNVUk3UVVGRFRDeERRVUZETzBGQlprUXNkMEpCWlVNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBEYXRhXzEgPSByZXF1aXJlKFwiLi9EYXRhXCIpO1xuZXhwb3J0cy5EYXRhID0gRGF0YV8xLkRhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3clFrRlhPRUk3UVVGTWNrSXNjMEpCUVVFc1NVRkJTU3hEUVVGQkluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubSA9IHJlcXVpcmUoXCJtaXRocmlsXCIpO1xuO1xuY29uc3QgU1ZHRWxlbV8xID0gcmVxdWlyZShcIi4vU1ZHRWxlbVwiKTtcbmZ1bmN0aW9uIGdldENyb3NzQXQoY3Jvc3MsIHNjYWxlKSB7XG4gICAgbGV0IGNyb3NzZXNBdDtcbiAgICBzd2l0Y2ggKGNyb3NzKSB7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgICBjcm9zc2VzQXQgPSBzY2FsZS5kb21haW4oKVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtYXgnOlxuICAgICAgICAgICAgY3Jvc3Nlc0F0ID0gc2NhbGUuZG9tYWluKClbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogY3Jvc3Nlc0F0ID0gY3Jvc3MgfHwgMDtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlLmNvbnZlcnQoY3Jvc3Nlc0F0KTtcbn1cbmNsYXNzIEF4ZXMgZXh0ZW5kcyBTVkdFbGVtXzEuU1ZHRWxlbSB7XG4gICAgc3RhdGljIGRlZmF1bHRDb25maWcoY2ZnKSB7XG4gICAgICAgIGZ1bmN0aW9uIHNjYWxlQ2ZnKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgZG9tYWluOiBbJ2F1dG8nLCAnYXV0byddXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxhYmVsQ2ZnKHByaW1hcnksIHgsIG1ham9yKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZpc2libGU6IG1ham9yLCB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICB4cG9zOiB4ID8gU1ZHRWxlbV8xLlRleHRIQWxpZ24ubWlkZGxlIDogKHByaW1hcnkgPyBTVkdFbGVtXzEuVGV4dEhBbGlnbi5lbmQgOiBTVkdFbGVtXzEuVGV4dEhBbGlnbi5zdGFydCksXG4gICAgICAgICAgICAgICAgeXBvczogeCA/IChwcmltYXJ5ID8gU1ZHRWxlbV8xLlRleHRWQWxpZ24udG9wIDogU1ZHRWxlbV8xLlRleHRWQWxpZ24uYm90dG9tKSA6IFNWR0VsZW1fMS5UZXh0VkFsaWduLmNlbnRlcixcbiAgICAgICAgICAgICAgICBoT2Zmc2V0OiB4ID8gMCA6IChwcmltYXJ5ID8gLTEgOiAwLjcpLFxuICAgICAgICAgICAgICAgIHZPZmZzZXQ6IHggPyAocHJpbWFyeSA/IDAuNyA6IC0wLjcpIDogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYXJrQ2ZnKHByaW1hcnksIG1ham9yKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZpc2libGU6IG1ham9yLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogKHByaW1hcnkgPyAxIDogLTEpICogKG1ham9yID8gMTAgOiA1KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0aXRsZUNmZyhwcmltYXJ5LCB4KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsIHRleHQ6ICh4ID8gJ3gnIDogJ3knKSArIChwcmltYXJ5ID8gJycgOiAnMicpLFxuICAgICAgICAgICAgICAgIHhwb3M6IHggPyBTVkdFbGVtXzEuVGV4dEhBbGlnbi5lbmQgOiAocHJpbWFyeSA/IFNWR0VsZW1fMS5UZXh0SEFsaWduLm1pZGRsZSA6IFNWR0VsZW1fMS5UZXh0SEFsaWduLnN0YXJ0KSxcbiAgICAgICAgICAgICAgICB5cG9zOiB4ID8gU1ZHRWxlbV8xLlRleHRWQWxpZ24udG9wIDogKHByaW1hcnkgPyBTVkdFbGVtXzEuVGV4dFZBbGlnbi5ib3R0b20gOiBTVkdFbGVtXzEuVGV4dFZBbGlnbi50b3ApLFxuICAgICAgICAgICAgICAgIGhPZmZzZXQ6IHggPyAtMiA6IChwcmltYXJ5ID8gMCA6IDAuMyksXG4gICAgICAgICAgICAgICAgdk9mZnNldDogeCA/IChwcmltYXJ5ID8gMC40IDogLTEuMikgOiAocHJpbWFyeSA/IC0wLjUgOiAwLjcpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGF4aXNDZmcocHJpbWFyeSwgeCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiBwcmltYXJ5ID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNyb3NzZXNBdDogcHJpbWFyeSA/ICdtaW4nIDogJ21heCcsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHNjYWxlQ2ZnKCksXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlQ2ZnKHByaW1hcnksIHgpLFxuICAgICAgICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1ham9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrczogbWFya0NmZyhwcmltYXJ5LCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsczogbGFiZWxDZmcocHJpbWFyeSwgeCwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbEZtdDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1pbm9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrczogbWFya0NmZyhwcmltYXJ5LCBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM6IGxhYmVsQ2ZnKHByaW1hcnksIHgsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsRm10OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2ZnLmF4ZXMgPSB7XG4gICAgICAgICAgICBwcmltYXJ5OiB7XG4gICAgICAgICAgICAgICAgeDogYXhpc0NmZyh0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICB5OiBheGlzQ2ZnKHRydWUsIGZhbHNlKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlY29uZGFyeToge1xuICAgICAgICAgICAgICAgIHg6IGF4aXNDZmcoZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgICAgIHk6IGF4aXNDZmcoZmFsc2UsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgYWRqdXN0Q29uZmlnKGNmZykge1xuICAgIH1cbiAgICBkcmF3QXhpc0xpbmUoeCwgcmFuZ2UsIGNyb3NzKSB7XG4gICAgICAgIHJldHVybiB4ID8gdGhpcy5ob3JMaW5lKHJhbmdlWzBdLCByYW5nZVsxXSwgY3Jvc3MsICdocy1ncmFwaC1heGlzLWxpbmUnKSA6XG4gICAgICAgICAgICB0aGlzLnZlckxpbmUoY3Jvc3MsIHJhbmdlWzBdLCByYW5nZVsxXSwgJ2hzLWdyYXBoLWF4aXMtbGluZScpO1xuICAgIH1cbiAgICBkcmF3VGl0bGUoeCwgdHRsQ2ZnLCB0eXBlLCByYW5nZSwgY3Jvc3MpIHtcbiAgICAgICAgdHRsQ2ZnLmNzc0NsYXNzID0gJ2hzLWdyYXBoLWF4aXMtdGl0bGUnO1xuICAgICAgICBjb25zdCB4eSA9IHsgdHJhbnNmb3JtOiBgdHJhbnNsYXRlKCR7eCA/IHJhbmdlWzFdIDogY3Jvc3N9LCAke3ggPyBjcm9zcyA6IHJhbmdlWzFdfSlgIH07XG4gICAgICAgIHJldHVybiAhdHRsQ2ZnLnZpc2libGUgPyB1bmRlZmluZWQgOlxuICAgICAgICAgICAgZXhwb3J0cy5tKCdnJywgeHksIHRoaXMudGV4dCh0dGxDZmcsIHR0bENmZy50ZXh0KSk7XG4gICAgfVxuICAgIGRyYXdUaWNrTWFya3MoeCwgdHlwZSwgY3Jvc3Nlc0F0LCBzY2FsZSwgdGlja3MsIGNmZykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiBgaHMtZ3JhcGgtYXhpcy0ke3R5cGV9LXRpY2stbWFya3NgIH0sICFjZmcubWFya3MudmlzaWJsZSA/ICcnIDogdGlja3MubWFya3MubWFwKCh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geCA/IHRoaXMudmVyTGluZShzY2FsZS5jb252ZXJ0KHQpLCBjcm9zc2VzQXQsIGNyb3NzZXNBdCArIGNmZy5tYXJrcy5sZW5ndGgpIDpcbiAgICAgICAgICAgICAgICB0aGlzLmhvckxpbmUoY3Jvc3Nlc0F0LCBjcm9zc2VzQXQgLSBjZmcubWFya3MubGVuZ3RoLCBzY2FsZS5jb252ZXJ0KHQpKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBkcmF3VGlja0xhYmVscyh4LCB0eXBlLCBjcm9zc2VzQXQsIHNjYWxlLCB0aWNrcywgY2ZnKSB7XG4gICAgICAgIHNjYWxlLnNldExhYmVsRm9ybWF0KGNmZy5sYWJlbEZtdCk7XG4gICAgICAgIGNvbnN0IGxhYmVsQ2ZnID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGNmZy5sYWJlbHMpLmZvckVhY2goKGspID0+IGxhYmVsQ2ZnW2tdID0gY2ZnLmxhYmVsc1trXSk7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6IGBocy1ncmFwaC1heGlzLSR7dHlwZX0tdGljay1sYWJlbGAgfSwgIWxhYmVsQ2ZnLnZpc2libGUgPyAnJyA6IHRpY2tzLmxhYmVscy5tYXAoKHQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBzY2FsZS5jb252ZXJ0KHQucG9zKTtcbiAgICAgICAgICAgIGNvbnN0IHh5ID0geyB0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHt4ID8gdiA6IGNyb3NzZXNBdH0sICR7eCA/IGNyb3NzZXNBdCA6IHZ9KWAgfTtcbiAgICAgICAgICAgIGlmICh4ICYmIGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsYWJlbENmZy54cG9zID0gU1ZHRWxlbV8xLlRleHRIQWxpZ24uc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh4ICYmIGkgPT09IHRpY2tzLmxhYmVscy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbGFiZWxDZmcueHBvcyA9IFNWR0VsZW1fMS5UZXh0SEFsaWduLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxhYmVsQ2ZnLnhwb3MgPSBTVkdFbGVtXzEuVGV4dEhBbGlnbi5taWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdnJywgeHksIHRoaXMudGV4dChsYWJlbENmZywgdC50ZXh0KSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgZHJhd0F4aXMoZGlyLCBzY2FsZXMsIHR5cGUsIGF4aXNDZmcpIHtcbiAgICAgICAgY29uc3QgeCA9IGRpciA9PT0gJ3gnO1xuICAgICAgICBjb25zdCByYW5nZSA9IHNjYWxlc1tkaXJdLnJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGNmZyA9IGF4aXNDZmdbdHlwZV1bZGlyXTtcbiAgICAgICAgY29uc3QgY3Jvc3Nlc0F0ID0gZ2V0Q3Jvc3NBdChjZmcuY3Jvc3Nlc0F0LCBzY2FsZXNbeCA/ICd5JyA6ICd4J10pO1xuICAgICAgICBjb25zdCB0aWNrcyA9IHNjYWxlc1tkaXJdLnRpY2tzKCk7XG4gICAgICAgIHJldHVybiAhY2ZnLnZpc2libGUgPyB1bmRlZmluZWQgOiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6IGBocy1ncmFwaC1heGlzLSR7ZGlyfSBocy1ncmFwaC1heGlzLSR7dHlwZX1gIH0sIFtcbiAgICAgICAgICAgIHRoaXMuZHJhd0F4aXNMaW5lKHgsIHJhbmdlLCBjcm9zc2VzQXQpLFxuICAgICAgICAgICAgdGhpcy5kcmF3VGl0bGUoeCwgY2ZnLnRpdGxlLCB0eXBlLCByYW5nZSwgY3Jvc3Nlc0F0KSxcbiAgICAgICAgICAgIHRoaXMuZHJhd1RpY2tNYXJrcyh4LCAnbWlub3InLCBjcm9zc2VzQXQsIHNjYWxlc1tkaXJdLCB0aWNrcy5taW5vciwgY2ZnLnRpY2tzLm1pbm9yKSxcbiAgICAgICAgICAgIHRoaXMuZHJhd1RpY2tNYXJrcyh4LCAnbWFqb3InLCBjcm9zc2VzQXQsIHNjYWxlc1tkaXJdLCB0aWNrcy5tYWpvciwgY2ZnLnRpY2tzLm1ham9yKSxcbiAgICAgICAgICAgIHRoaXMuZHJhd1RpY2tMYWJlbHMoeCwgJ21pbm9yJywgY3Jvc3Nlc0F0LCBzY2FsZXNbZGlyXSwgdGlja3MubWlub3IsIGNmZy50aWNrcy5taW5vciksXG4gICAgICAgICAgICB0aGlzLmRyYXdUaWNrTGFiZWxzKHgsICdtYWpvcicsIGNyb3NzZXNBdCwgc2NhbGVzW2Rpcl0sIHRpY2tzLm1ham9yLCBjZmcudGlja3MubWFqb3IpXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICB2aWV3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2ZnID0gbm9kZS5hdHRycy5jZmc7XG4gICAgICAgIGNvbnN0IHNjYWxlcyA9IG5vZGUuYXR0cnMuc2NhbGVzO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgtYXhpcycgfSwgW1xuICAgICAgICAgICAgdGhpcy5kcmF3QXhpcygneCcsIHNjYWxlcy5wcmltYXJ5LCAncHJpbWFyeScsIGNmZyksXG4gICAgICAgICAgICB0aGlzLmRyYXdBeGlzKCd5Jywgc2NhbGVzLnByaW1hcnksICdwcmltYXJ5JywgY2ZnKSxcbiAgICAgICAgICAgIHRoaXMuZHJhd0F4aXMoJ3gnLCBzY2FsZXMuc2Vjb25kYXJ5LCAnc2Vjb25kYXJ5JywgY2ZnKSxcbiAgICAgICAgICAgIHRoaXMuZHJhd0F4aXMoJ3knLCBzY2FsZXMuc2Vjb25kYXJ5LCAnc2Vjb25kYXJ5JywgY2ZnKVxuICAgICAgICBdKTtcbiAgICB9XG59XG5BeGVzLnR5cGUgPSB7XG4gICAgbGluZWFyOiAnbGluZWFyIGF4aXMnLFxuICAgIGxvZzogJ2xvZyBheGlzJyxcbiAgICBkYXRlOiAnZGF0ZSBheGlzJyxcbiAgICBpbmRleDogJ2luZGV4IGF4aXMnLFxuICAgIHBlcmNlbnQ6ICdwZXJjZW50IGF4aXMnLFxuICAgIG9yZGluYWw6ICdvcmRpbmFsIGF4aXMnLFxuICAgIG5vbWluYWw6ICdub21pbmFsIGF4aXMnLFxuICAgIGF1dG86ICdhdXRvJ1xufTtcbmV4cG9ydHMuQXhlcyA9IEF4ZXM7XG5jbGFzcyBFeGFtcGxlTGluZWFyQXhpcyB7XG59XG5jbGFzcyBFeGFtcGxlTG9nQXhpcyB7XG59XG5jbGFzcyBFeGFtcGxlRGF0ZUF4aXMge1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUVhobGN5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlCZUdWekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCTmtSaExGRkJRVUVzUTBGQlF5eEhRVUZITEU5QlFVOHNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRCUVdGd1F5eERRVUZETzBGQlMwUXNkVU5CUjNGRE8wRkJVWEpETEZOQlFWTXNWVUZCVlN4RFFVRkRMRXRCUVcxQ0xFVkJRVVVzUzBGQlZ6dEpRVU5vUkN4SlFVRkpMRk5CUVdkQ0xFTkJRVU03U1VGRGNrSXNVVUZCVVN4TFFVRkxMRVZCUVVVN1VVRkRXQ3hMUVVGTExFdEJRVXM3V1VGQlJTeFRRVUZUTEVkQlFWY3NTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlFVTXNUVUZCVFR0UlFVTjZSQ3hMUVVGTExFdEJRVXM3V1VGQlJTeFRRVUZUTEVkQlFWY3NTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlFVTXNUVUZCVFR0UlFVTjZSQ3hQUVVGUExFTkJRVU1zUTBGQlNTeFRRVUZUTEVkQlFWY3NTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVNNVF6dEpRVU5FTEU5QlFVOHNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU53UXl4RFFVRkRPMEZCUlVRc1RVRkJZU3hKUVVGTExGTkJRVkVzYVVKQlFVODdTVUZ0UnpkQ0xFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCVlR0UlFVTXpRaXhUUVVGVExGRkJRVkU3V1VGRFlpeFBRVUZQTzJkQ1FVTklMRWxCUVVrc1JVRkJSU3hOUVVGTk8yZENRVU5hTEUxQlFVMHNSVUZCVXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU03WVVGRGJFTXNRMEZCUXp0UlFVTk9MRU5CUVVNN1VVRkRSQ3hUUVVGVExGRkJRVkVzUTBGQlF5eFBRVUZsTEVWQlFVVXNRMEZCVXl4RlFVRkZMRXRCUVdFN1dVRkRka1FzVDBGQlR6dG5Ra0ZEU0N4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTzJkQ1FVTjRRaXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4dlFrRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExHOUNRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXh2UWtGQlZTeERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRla1VzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVUVzUTBGQlF5eERRVUZETEc5Q1FVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eHZRa0ZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eHZRa0ZCVlN4RFFVRkRMRTFCUVUwN1owSkJRekZGTEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1owSkJRMjVETEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRlRU1zUTBGQlF6dFJRVU5PTEVOQlFVTTdVVUZEUkN4VFFVRlRMRTlCUVU4c1EwRkJReXhQUVVGblFpeEZRVUZGTEV0QlFXRTdXVUZETlVNc1QwRkJUenRuUWtGRFNDeFBRVUZQTEVWQlFVVXNTMEZCU3p0blFrRkRaQ3hOUVVGTkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJRU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRPVU1zUTBGQlF6dFJRVU5PTEVOQlFVTTdVVUZEUkN4VFFVRlRMRkZCUVZFc1EwRkJReXhQUVVGbExFVkJRVVVzUTBGQlV6dFpRVU40UXl4UFFVRlBPMmRDUVVOSUxFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVY3NTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6dG5Ra0ZETVVRc1NVRkJTU3hGUVVGSExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNiMEpCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkJMRU5CUVVNc1EwRkJReXh2UWtGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc2IwSkJRVlVzUTBGQlF5eExRVUZMTEVOQlFVTTdaMEpCUXpGRkxFbEJRVWtzUlVGQlJ5eERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRzlDUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJRU3hEUVVGRExFTkJRVU1zYjBKQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExHOUNRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVONFJTeFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVOdVF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlFTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJRU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRoUVVNMVJDeERRVUZETzFGQlEwNHNRMEZCUXp0UlFVTkVMRk5CUVZNc1QwRkJUeXhEUVVGRExFOUJRV1VzUlVGQlJTeERRVUZUTzFsQlEzWkRMRTlCUVU4N1owSkJRMGdzVDBGQlR5eEZRVUZMTEU5QlFVOHNRMEZCUVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTzJkQ1FVTnFReXhUUVVGVExFVkJRVWNzVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUVN4TFFVRkxMRU5CUVVFc1EwRkJReXhEUVVGQkxFdEJRVXM3WjBKQlF5OUNMRXRCUVVzc1JVRkJUeXhSUVVGUkxFVkJRVVU3WjBKQlEzUkNMRXRCUVVzc1JVRkJUeXhSUVVGUkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNRMEZCUXp0blFrRkRhRU1zUzBGQlN5eEZRVUZGTzI5Q1FVTklMRXRCUVVzc1JVRkJSVHQzUWtGRFNDeExRVUZMTEVWQlFVY3NUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU03ZDBKQlF6bENMRTFCUVUwc1JVRkJSU3hSUVVGUkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNN2QwSkJRMnhETEZGQlFWRXNSVUZCUlN4VFFVRlRPM0ZDUVVOMFFqdHZRa0ZEUkN4TFFVRkxMRVZCUVVVN2QwSkJRMGdzUzBGQlN5eEZRVUZITEU5QlFVOHNRMEZCUXl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRE8zZENRVU12UWl4TlFVRk5MRVZCUVVVc1VVRkJVU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRPM2RDUVVOdVF5eFJRVUZSTEVWQlFVVXNVMEZCVXp0eFFrRkRkRUk3YVVKQlEwbzdZVUZEU2l4RFFVRkRPMUZCUTA0c1EwRkJRenRSUVVORUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVYzdXVUZEVUN4UFFVRlBMRVZCUVVVN1owSkJRMHdzUTBGQlF5eEZRVUZGTEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRE8yZENRVU4wUWl4RFFVRkRMRVZCUVVVc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTTdZVUZETVVJN1dVRkRSQ3hUUVVGVExFVkJRVVU3WjBKQlExQXNRMEZCUXl4RlFVRkZMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETzJkQ1FVTjJRaXhEUVVGRExFVkJRVVVzVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNN1lVRkRNMEk3VTBGRFNpeERRVUZETzBsQlEwNHNRMEZCUXp0SlFVMUVMRTFCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlZUdEpRVU01UWl4RFFVRkRPMGxCUzBRc1dVRkJXU3hEUVVGRExFTkJRVk1zUlVGQlJTeExRVUZWTEVWQlFVVXNTMEZCV1R0UlFVTTFReXhQUVVGUExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUlVGQlJTeHZRa0ZCYjBJc1EwRkJReXhEUVVGRExFTkJRVU03V1VGREwwUXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeHZRa0ZCYjBJc1EwRkJReXhEUVVGRE8wbEJRelZGTEVOQlFVTTdTVUZMUkN4VFFVRlRMRU5CUVVNc1EwRkJVeXhGUVVGRkxFMUJRV1VzUlVGQlJTeEpRVUZaTEVWQlFVVXNTMEZCVlN4RlFVRkZMRXRCUVZrN1VVRkRlRVVzVFVGQlRTeERRVUZETEZGQlFWRXNSMEZCUnl4eFFrRkJjVUlzUTBGQlF6dFJRVU40UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxGTkJRVk1zUlVGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4TFFVRkxMRXRCUVVzc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlFTeExRVUZMTEVOQlFVRXNRMEZCUXl4RFFVRkJMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZETDBVc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJReTlDTEZOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEyNUVMRU5CUVVNN1NVRkxSQ3hoUVVGaExFTkJRVU1zUTBGQlV5eEZRVUZGTEVsQlFWY3NSVUZCUlN4VFFVRm5RaXhGUVVGRkxFdEJRVmNzUlVGQlJTeExRVUZqTEVWQlFVVXNSMEZCWXp0UlFVTXZSaXhQUVVGUExGTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVNc2FVSkJRV2xDTEVsQlFVa3NZVUZCWVN4RlFVRkRMRVZCUTNaRUxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZSTEVWQlFVVXNSVUZCUlR0WlFVTnNSQ3hQUVVGUExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSU3hUUVVGVExFZEJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU4yUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGTkJRVk1zUlVGQlJTeFRRVUZUTEVkQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0JHTEVOQlFVTXNRMEZCUXl4RFFVTk1MRU5CUVVNN1NVRkRUaXhEUVVGRE8wbEJTMFFzWTBGQll5eERRVUZETEVOQlFWTXNSVUZCUlN4SlFVRlhMRVZCUVVVc1UwRkJaMElzUlVGQlJTeExRVUZYTEVWQlFVVXNTMEZCWXl4RlFVRkZMRWRCUVdNN1VVRkRhRWNzUzBGQlN5eERRVUZETEdOQlFXTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRGJrTXNUVUZCVFN4UlFVRlJMRWRCUVU4c1JVRkJSU3hEUVVGRE8xRkJRM2hDTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXpSU3hQUVVGUExGTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUXl4TFFVRkxMRVZCUVVNc2FVSkJRV2xDTEVsQlFVa3NZVUZCWVN4RlFVRkRMRVZCUTNSRUxFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZSTEVWQlFVVXNSVUZCUlR0WlFVTXZSQ3hOUVVGTkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU12UWl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxGTkJRVk1zUlVGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlFTeFRRVUZUTEV0QlFVc3NRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJRU3hUUVVGVExFTkJRVUVzUTBGQlF5eERRVUZCTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1dVRkRla1VzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkhMRU5CUVVNc1JVRkJSVHRuUWtGRFdpeFJRVUZSTEVOQlFVTXNTVUZCU1N4SFFVRkhMRzlDUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETzJGQlEzQkRPMmxDUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCUnl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTNaRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVkQlFVY3NiMEpCUVZVc1EwRkJReXhIUVVGSExFTkJRVU03WVVGRGJFTTdhVUpCUVUwN1owSkJRMGdzVVVGQlVTeERRVUZETEVsQlFVa3NSMEZCUnl4dlFrRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF6dGhRVU55UXp0WlFVTkVMRTlCUVU4c1UwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRia1FzUTBGQlF5eERRVUZETEVOQlEwd3NRMEZCUXp0SlFVTk9MRU5CUVVNN1NVRlZSQ3hSUVVGUkxFTkJRVU1zUjBGQlZTeEZRVUZGTEUxQlFXVXNSVUZCUlN4SlFVRlhMRVZCUVVVc1QwRkJhMEk3VVVGRGFrVXNUVUZCVFN4RFFVRkRMRWRCUVVjc1IwRkJSeXhMUVVGSExFZEJRVWNzUTBGQlF6dFJRVU53UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1VVRkRiRU1zVFVGQlRTeEhRVUZITEVkQlFVc3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXcERMRTFCUVUwc1UwRkJVeXhIUVVGVkxGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZCTEVkQlFVY3NRMEZCUVN4RFFVRkRMRU5CUVVFc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUlN4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1VVRkRiRU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlF5eHBRa0ZCYVVJc1IwRkJSeXhyUWtGQmEwSXNTVUZCU1N4RlFVRkZMRVZCUVVNc1JVRkJSVHRaUVVNM1JpeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzVTBGQlV5eERRVUZETzFsQlEzUkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFRRVUZUTEVOQlFVTTdXVUZEY0VRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVWQlFVVXNUMEZCVHl4RlFVRkZMRk5CUVZNc1JVRkJSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXp0WlFVTndSaXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNSVUZCUlN4UFFVRlBMRVZCUVVVc1UwRkJVeXhGUVVGRkxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRPMWxCUTNCR0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hUUVVGVExFVkJRVVVzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRja1lzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1QwRkJUeXhGUVVGRkxGTkJRVk1zUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJRenRUUVVONFJpeERRVUZETEVOQlFVTTdTVUZEVUN4RFFVRkRPMGxCUlVRc1NVRkJTU3hEUVVGRExFbEJRVms3VVVGRFlpeE5RVUZOTEVkQlFVY3NSMEZCWXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU4wUXl4TlFVRk5MRTFCUVUwc1IwRkJWeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0UlFVTjZReXhQUVVGUExGTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUXl4TFFVRkxMRVZCUVVNc1pVRkJaU3hGUVVGRExFVkJRVVU3V1VGRGNrTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEU5QlFVOHNSVUZCUlN4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRE8xbEJRMnhFTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVXNVMEZCVXl4RlFVRkZMRWRCUVVjc1EwRkJRenRaUVVOc1JDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1JVRkJSU3hOUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEZkQlFWY3NSVUZCUlN4SFFVRkhMRU5CUVVNN1dVRkRkRVFzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRVZCUVVVc1RVRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeFhRVUZYTEVWQlFVVXNSMEZCUnl4RFFVRkRPMU5CUTNwRUxFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdPMEZCY2xCTkxGTkJRVWtzUjBGQlJ6dEpRVU5XTEUxQlFVMHNSVUZCWjBJc1lVRkJZVHRKUVVOdVF5eEhRVUZITEVWQlFXMUNMRlZCUVZVN1NVRkRhRU1zU1VGQlNTeEZRVUZyUWl4WFFVRlhPMGxCUTJwRExFdEJRVXNzUlVGQmFVSXNXVUZCV1R0SlFVTnNReXhQUVVGUExFVkJRV1VzWTBGQll6dEpRVU53UXl4UFFVRlBMRVZCUVdVc1kwRkJZenRKUVVOd1F5eFBRVUZQTEVWQlFXVXNZMEZCWXp0SlFVTndReXhKUVVGSkxFVkJRV3RDTEUxQlFVMDdRMEZETDBJc1EwRkJRenRCUVhCQ1RpeHZRa0ZwVVVNN1FVRm5RMFFzVFVGQlRTeHBRa0ZCYVVJN1EwRkJSenRCUVRSQ01VSXNUVUZCVFN4alFVRmpPME5CUVVjN1FVRXlRblpDTEUxQlFVMHNaVUZCWlR0RFFVRkhJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm0gPSByZXF1aXJlKFwibWl0aHJpbFwiKTtcbmNvbnN0IFNWR0VsZW1fMSA9IHJlcXVpcmUoXCIuL1NWR0VsZW1cIik7XG5jbGFzcyBDYW52YXMgZXh0ZW5kcyBTVkdFbGVtXzEuU1ZHRWxlbSB7XG4gICAgc3RhdGljIGRlZmF1bHRDb25maWcoY2ZnKSB7XG4gICAgICAgIGNmZy5jYW52YXMgPSB7XG4gICAgICAgICAgICByYW5nZToge1xuICAgICAgICAgICAgICAgIHc6IDEwMCwgd3VuaXQ6ICclJyxcbiAgICAgICAgICAgICAgICBoOiAxMDAsIGh1bml0OiAnJSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGFkanVzdENvbmZpZyhjZmcpIHtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNnID0gbm9kZS5hdHRycy5jZmc7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1jYW52YXMnLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9LCBbXG4gICAgICAgICAgICB0aGlzLnJlY3QoeyB4OiAwLCB5OiAwIH0sIHsgdzogY2cucmFuZ2UudywgaDogY2cucmFuZ2UuaCwgd3VuaXQ6IGNnLnJhbmdlLnd1bml0LCBodW5pdDogY2cucmFuZ2UuaHVuaXQgfSwgJycpXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2FudmFzID0gQ2FudmFzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUTJGdWRtRnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDBOaGJuWmhjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFXVmhMRkZCUVVFc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0QlFVVndReXgxUTBGQmFVUTdRVUZUYWtRc1RVRkJZU3hOUVVGUExGTkJRVkVzYVVKQlFVODdTVUZ0UWk5Q0xFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCVlR0UlFVTXpRaXhIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZwUWp0WlFVTjJRaXhMUVVGTExFVkJRVk03WjBKQlExWXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hMUVVGTExFVkJRVU1zUjBGQlJ6dG5Ra0ZEYWtJc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeExRVUZMTEVWQlFVTXNSMEZCUnp0aFFVTndRanRUUVVOS0xFTkJRVU03U1VGRFRpeERRVUZETzBsQlRVUXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGVk8wbEJRemxDTEVOQlFVTTdTVUZGUkN4SlFVRkpMRU5CUVVNc1NVRkJXVHRSUVVOaUxFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRE8xRkJRekZDTEU5QlFVOHNVMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRExFdEJRVXNzUlVGQlF5eHBRa0ZCYVVJc1JVRkJSU3hMUVVGTExFVkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUXl4TlFVRk5MRVZCUVVNc1JVRkJSVHRaUVVOd1JTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRVZCUTJoQ0xFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkRMRVZCUTNwRkxFVkJRVVVzUTBGRFREdFRRVU5LTEVOQlFVTXNRMEZCUXp0SlFVTlFMRU5CUVVNN1EwRkRTanRCUVRWRFJDeDNRa0UwUTBNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubSA9IHJlcXVpcmUoXCJtaXRocmlsXCIpO1xuY29uc3QgU1ZHRWxlbV8xID0gcmVxdWlyZShcIi4vU1ZHRWxlbVwiKTtcbjtcbmNsYXNzIENoYXJ0IGV4dGVuZHMgU1ZHRWxlbV8xLlNWR0VsZW0ge1xuICAgIHN0YXRpYyBkZWZhdWx0Q29uZmlnKGNmZykge1xuICAgICAgICBjZmcuY2hhcnQgPSB7XG4gICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRleHQ6ICcnLFxuICAgICAgICAgICAgICAgIGhPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgdk9mZnNldDogLTEuNSxcbiAgICAgICAgICAgICAgICB4cG9zOiAnbWlkZGxlJyxcbiAgICAgICAgICAgICAgICB5cG9zOiAndG9wJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY2ZnO1xuICAgIH1cbiAgICBzdGF0aWMgYWRqdXN0Q29uZmlnKGNmZykge1xuICAgIH1cbiAgICBvbnVwZGF0ZShub2RlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGVTaXplKG5vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVUaXRsZVNpemUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kb20pIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBub2RlLmRvbS5sYXN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoYyAmJiBjLmNsaWVudFdpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChDaGFydC5jbGllbnRXaWR0aCAhPT0gYy5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBDaGFydC5jbGllbnRXaWR0aCA9IGMuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIENoYXJ0LmNsaWVudEhlaWdodCA9IGMuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBkcmF3QmFja2dyb3VuZChwbG90QXJlYSkge1xuICAgICAgICBjb25zdCB0bCA9IHBsb3RBcmVhLnRsO1xuICAgICAgICBjb25zdCBiciA9IHBsb3RBcmVhLmJyO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWN0KHsgeDogdGwueCwgeTogdGwueSB9LCB7IHc6IGJyLnggLSB0bC54LCBoOiBici55IC0gdGwueSB9LCAnJyk7XG4gICAgfVxuICAgIGRyYXdUaXRsZShwbG90QXJlYSwgY2ZnKSB7XG4gICAgICAgIGNvbnN0IHRsID0gcGxvdEFyZWEudGw7XG4gICAgICAgIGNvbnN0IGJyID0gcGxvdEFyZWEuYnI7XG4gICAgICAgIGNmZy50aXRsZS5jc3NDbGFzcyA9ICdocy1ncmFwaC1jaGFydC10aXRsZSc7XG4gICAgICAgIHN3aXRjaCAoY2ZnLnRpdGxlLnhwb3MpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICBjZmcudGl0bGUueCA9IHRsLnggKyAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICAgICAgY2ZnLnRpdGxlLnggPSAodGwueCArIGJyLngpIC8gMiArICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICBjZmcudGl0bGUueCA9IGJyLnggKyAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGNmZy50aXRsZS55cG9zKSB7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgIGNmZy50aXRsZS55ID0gdGwueSArICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgICAgICBjZmcudGl0bGUueSA9ICh0bC55ICsgYnIueSkgLyAyICsgJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgIGNmZy50aXRsZS55ID0gYnIueSArICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhY2ZnLnRpdGxlLnZpc2libGUgPyB1bmRlZmluZWQgOiB0aGlzLnRleHQoY2ZnLnRpdGxlLCBjZmcudGl0bGUudGV4dCk7XG4gICAgfVxuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCBjZmcgPSBub2RlLmF0dHJzLmNmZztcbiAgICAgICAgY29uc3QgcGxvdEFyZWEgPSBub2RlLmF0dHJzLnBsb3RBcmVhO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgtY2hhcnQnIH0sIFtcbiAgICAgICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQocGxvdEFyZWEpLFxuICAgICAgICAgICAgdGhpcy5kcmF3VGl0bGUocGxvdEFyZWEsIGNmZylcbiAgICAgICAgXSk7XG4gICAgfVxufVxuZXhwb3J0cy5DaGFydCA9IENoYXJ0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUTJoaGNuUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12UTJoaGNuUXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGblFtTXNVVUZCUVN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlMzSkRMSFZEUVVFMlF6dEJRVTgxUXl4RFFVRkRPMEZCUzBZc1RVRkJZU3hMUVVGTkxGTkJRVkVzYVVKQlFVODdTVUZ6UWpsQ0xFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCVlR0UlFVTXpRaXhIUVVGSExFTkJRVU1zUzBGQlN5eEhRVUZuUWp0WlFVTnlRaXhQUVVGUExFVkJRVVVzU1VGQlNUdFpRVU5pTEV0QlFVc3NSVUZCWVR0blFrRkRaQ3hQUVVGUExFVkJRVVVzU1VGQlNUdG5Ra0ZEWWl4SlFVRkpMRVZCUVVNc1JVRkJSVHRuUWtGRFVDeFBRVUZQTEVWQlFVVXNRMEZCUXp0blFrRkRWaXhQUVVGUExFVkJRVVVzUTBGQlF5eEhRVUZITzJkQ1FVTmlMRWxCUVVrc1JVRkJReXhSUVVGUk8yZENRVU5pTEVsQlFVa3NSVUZCUXl4TFFVRkxPMkZCUTJJN1UwRkRTaXhEUVVGRE8xRkJRMDRzVDBGQlR5eEhRVUZITEVOQlFVTTdTVUZEV0N4RFFVRkRPMGxCVFVRc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZWTzBsQlF6bENMRU5CUVVNN1NVRkxSQ3hSUVVGUkxFTkJRVU1zU1VGQldUdFJRVU5xUWl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlJTOUNMRU5CUVVNN1NVRkZSQ3hsUVVGbExFTkJRVU1zU1VGQlZ6dFJRVVYyUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVU3V1VGRFZpeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF6dFpRVU0zUWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zVjBGQlZ5eEhRVUZETEVOQlFVTXNSVUZCUlR0blFrRkRkRUlzU1VGQlNTeExRVUZMTEVOQlFVTXNWMEZCVnl4TFFVRkxMRU5CUVVNc1EwRkJReXhYUVVGWExFVkJRVVU3YjBKQlEzSkRMRXRCUVVzc1EwRkJReXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETEZkQlFWY3NRMEZCUXp0dlFrRkRiRU1zUzBGQlN5eERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVGRE8ybENRVU4yUXp0aFFVTktPMU5CUTBvN1NVRkRUQ3hEUVVGRE8wbEJSVVFzWTBGQll5eERRVUZETEZGQlFXRTdVVUZEZUVJc1RVRkJUU3hGUVVGRkxFZEJRVWNzVVVGQlVTeERRVUZETEVWQlFVVXNRMEZCUXp0UlFVTjJRaXhOUVVGTkxFVkJRVVVzUjBGQlJ5eFJRVUZSTEVOQlFVTXNSVUZCUlN4RFFVRkRPMUZCUTNaQ0xFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVONFJTeERRVUZETzBsQlJVUXNVMEZCVXl4RFFVRkRMRkZCUVdFc1JVRkJSU3hIUVVGbE8xRkJRM0JETEUxQlFVMHNSVUZCUlN4SFFVRkhMRkZCUVZFc1EwRkJReXhGUVVGRkxFTkJRVU03VVVGRGRrSXNUVUZCVFN4RlFVRkZMRWRCUVVjc1VVRkJVU3hEUVVGRExFVkJRVVVzUTBGQlF6dFJRVU4yUWl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUjBGQlJ5eHpRa0ZCYzBJc1EwRkJRenRSUVVNMVF5eFJRVUZQTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRk8xbEJRMjVDTEV0QlFVc3NUMEZCVHp0blFrRkJTU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGRExFVkJRVVVzUTBGQlF6dG5Ra0ZCUnl4TlFVRk5PMWxCUXk5RExFdEJRVXNzVVVGQlVUdG5Ra0ZCUnl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVOQlFVTXNSMEZCUXl4RlFVRkZMRU5CUVVNN1owSkJRVVVzVFVGQlRUdFpRVU4yUkN4TFFVRkxMRXRCUVVzN1owSkJRVTBzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlF5eEZRVUZGTEVOQlFVTTdaMEpCUVVNc1RVRkJUVHRUUVVOb1JEdFJRVU5FTEZGQlFVOHNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFVkJRVVU3V1VGRGJrSXNTMEZCU3l4TFFVRkxPMmRDUVVGTkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVU1zUlVGQlJTeERRVUZETzJkQ1FVRkhMRTFCUVUwN1dVRkRMME1zUzBGQlN5eFJRVUZSTzJkQ1FVRkhMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4SFFVRkRMRVZCUVVVc1EwRkJRenRuUWtGQlJTeE5RVUZOTzFsQlEzWkVMRXRCUVVzc1VVRkJVVHRuUWtGQlJ5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZETEVWQlFVVXNRMEZCUXp0blFrRkJReXhOUVVGTk8xTkJRMmhFTzFGQlEwUXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTJoR0xFTkJRVU03U1VGRlJDeEpRVUZKTEVOQlFVTXNTVUZCV1R0UlFVTmlMRTFCUVUwc1IwRkJSeXhIUVVGbExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNaRExFMUJRVTBzVVVGQlVTeEhRVUZSTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRekZETEU5QlFVOHNVMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlF5eG5Ra0ZCWjBJc1JVRkJReXhGUVVGRk8xbEJRM1pETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1VVRkJVU3hEUVVGRE8xbEJRemRDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFZEJRVWNzUTBGQlF6dFRRVU5vUXl4RFFVRkRMRU5CUVVNN1NVRkRVQ3hEUVVGRE8wTkJRMG83UVVGb1IwUXNjMEpCWjBkREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubSA9IHJlcXVpcmUoXCJtaXRocmlsXCIpO1xuY29uc3QgaHNkYXRhYl8xID0gcmVxdWlyZShcImhzZGF0YWJcIik7XG5jb25zdCBBeGVzXzEgPSByZXF1aXJlKFwiLi9BeGVzXCIpO1xuY29uc3QgU2NhbGVfMSA9IHJlcXVpcmUoXCIuL1NjYWxlXCIpO1xuY29uc3QgQ2FudmFzXzEgPSByZXF1aXJlKFwiLi9DYW52YXNcIik7XG5jb25zdCBTZXJpZXNfMSA9IHJlcXVpcmUoXCIuL1Nlcmllc1wiKTtcbmNvbnN0IENoYXJ0XzEgPSByZXF1aXJlKFwiLi9DaGFydFwiKTtcbmNvbnN0IEdyaWRfMSA9IHJlcXVpcmUoXCIuL0dyaWRcIik7XG5jb25zdCBMZWdlbmRfMSA9IHJlcXVpcmUoXCIuL0xlZ2VuZFwiKTtcbmNvbnN0IFNWR0VsZW1fMSA9IHJlcXVpcmUoXCIuL1NWR0VsZW1cIik7XG5jb25zdCBoc3V0aWxfMSA9IHJlcXVpcmUoXCJoc3V0aWxcIik7XG5jb25zdCB2aWV3Qm94V2lkdGggPSAxMDAwO1xubGV0IHZpZXdCb3hIZWlnaHQgPSA3MDA7XG5jbGFzcyBHcmFwaCBleHRlbmRzIFNWR0VsZW1fMS5TVkdFbGVtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5tYXJnaW5PZmZzZXQgPSB7XG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIG1ha2VDb25maWcodXNlckNmZykge1xuICAgICAgICBjb25zdCBjZmcgPSB7fTtcbiAgICAgICAgR3JhcGguZGVmYXVsdENvbmZpZyhjZmcpO1xuICAgICAgICBDYW52YXNfMS5DYW52YXMuZGVmYXVsdENvbmZpZyhjZmcpO1xuICAgICAgICBBeGVzXzEuQXhlcy5kZWZhdWx0Q29uZmlnKGNmZyk7XG4gICAgICAgIFNlcmllc18xLlNlcmllcy5kZWZhdWx0Q29uZmlnKGNmZyk7XG4gICAgICAgIEdyaWRfMS5HcmlkLmRlZmF1bHRDb25maWcoY2ZnKTtcbiAgICAgICAgQ2hhcnRfMS5DaGFydC5kZWZhdWx0Q29uZmlnKGNmZyk7XG4gICAgICAgIExlZ2VuZF8xLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKGNmZyk7XG4gICAgICAgIGlmICh1c2VyQ2ZnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHVzZXJDZmcoY2ZnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGluIHVzZXJjZmcnKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2ZnO1xuICAgIH1cbiAgICBzdGF0aWMgZGVmYXVsdENvbmZpZyhjZmcpIHtcbiAgICAgICAgY2ZnLmdyYXBoID0ge1xuICAgICAgICAgICAgbWFyZ2luOiB7XG4gICAgICAgICAgICAgICAgdG9wOiAxMCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAxMCxcbiAgICAgICAgICAgICAgICBib3R0b206IDEwLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAxMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpbWVDb25kOiB7fVxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgYWRqdXN0Q29uZmlnKGNmZykge1xuICAgICAgICBDYW52YXNfMS5DYW52YXMuYWRqdXN0Q29uZmlnKGNmZyk7XG4gICAgICAgIEF4ZXNfMS5BeGVzLmFkanVzdENvbmZpZyhjZmcpO1xuICAgICAgICBTZXJpZXNfMS5TZXJpZXMuYWRqdXN0Q29uZmlnKGNmZyk7XG4gICAgICAgIEdyaWRfMS5HcmlkLmFkanVzdENvbmZpZyhjZmcpO1xuICAgICAgICBDaGFydF8xLkNoYXJ0LmFkanVzdENvbmZpZyhjZmcpO1xuICAgICAgICBMZWdlbmRfMS5MZWdlbmQuYWRqdXN0Q29uZmlnKGNmZyk7XG4gICAgfVxuICAgIGNyZWF0ZVBsb3RBcmVhKGNmZ20pIHtcbiAgICAgICAgY29uc3QgdGwgPSB7XG4gICAgICAgICAgICB4OiBjZmdtLmxlZnQgKyB0aGlzLm1hcmdpbk9mZnNldC5sZWZ0LFxuICAgICAgICAgICAgeTogY2ZnbS50b3AgKyB0aGlzLm1hcmdpbk9mZnNldC50b3BcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYnIgPSB7XG4gICAgICAgICAgICB4OiB2aWV3Qm94V2lkdGggLSBjZmdtLnJpZ2h0IC0gdGhpcy5tYXJnaW5PZmZzZXQucmlnaHQsXG4gICAgICAgICAgICB5OiB2aWV3Qm94SGVpZ2h0IC0gY2ZnbS5ib3R0b20gLSB0aGlzLm1hcmdpbk9mZnNldC5ib3R0b21cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgdGw6IHRsLCBicjogYnIgfTtcbiAgICB9XG4gICAgY3JlYXRlRGF0YShjZmcpIHtcbiAgICAgICAgaWYgKCFjZmcuc2VyaWVzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjZmcuc2VyaWVzLmRhdGEgbm90IHNldCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGNmZy5zZXJpZXMuZGF0YS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NmZy5zZXJpZXMuZGF0YSBub3QgaW5pdGlhbGlzZWQgd2l0aCBhcnJheSBvZiBEYXRhU2V0cycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpbWVDb25kID0gY2ZnLmdyYXBoLnRpbWVDb25kO1xuICAgICAgICByZXR1cm4gY2ZnLnNlcmllcy5kYXRhLm1hcCgoZCkgPT4gKChkIGluc3RhbmNlb2YgaHNkYXRhYl8xLkRhdGEpID8gZCA6IG5ldyBoc2RhdGFiXzEuRGF0YShkKSkuZmlsdGVyKHRpbWVDb25kKSk7XG4gICAgfVxuICAgIGNyZWF0ZVNjYWxlcyhheGVzKSB7XG4gICAgICAgIGlmICghdGhpcy5zY2FsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGVzID0ge1xuICAgICAgICAgICAgICAgIHByaW1hcnk6IHsgeDogbmV3IFNjYWxlXzEuU2NhbGUoYXhlcy5wcmltYXJ5Lnguc2NhbGUpLCB5OiBuZXcgU2NhbGVfMS5TY2FsZShheGVzLnByaW1hcnkueS5zY2FsZSkgfSxcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHsgeDogbmV3IFNjYWxlXzEuU2NhbGUoYXhlcy5zZWNvbmRhcnkueC5zY2FsZSksIHk6IG5ldyBTY2FsZV8xLlNjYWxlKGF4ZXMuc2Vjb25kYXJ5Lnkuc2NhbGUpIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGVzO1xuICAgIH1cbiAgICBzZXRTY2FsZVJhbmdlKHBsb3RBcmVhLCBzY2FsZXMpIHtcbiAgICAgICAgc2NhbGVzLnByaW1hcnkueC5yYW5nZShbcGxvdEFyZWEudGwueCwgcGxvdEFyZWEuYnIueF0pO1xuICAgICAgICBzY2FsZXMucHJpbWFyeS55LnJhbmdlKFtwbG90QXJlYS5ici55LCBwbG90QXJlYS50bC55XSk7XG4gICAgICAgIHNjYWxlcy5zZWNvbmRhcnkueC5yYW5nZShbcGxvdEFyZWEudGwueCwgcGxvdEFyZWEuYnIueF0pO1xuICAgICAgICBzY2FsZXMuc2Vjb25kYXJ5LnkucmFuZ2UoW3Bsb3RBcmVhLmJyLnksIHBsb3RBcmVhLnRsLnldKTtcbiAgICB9XG4gICAgc2V0U2NhbGVEb21haW5zKGNmZywgc2NhbGVzLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBbWzFlMjAsIC0xZTIwXSwgWzFlMjAsIC0xZTIwXV07XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURvbWFpbnMocykge1xuICAgICAgICAgICAgbGV0IGRlZlg7XG4gICAgICAgICAgICBpZiAocy54KSB7XG4gICAgICAgICAgICAgICAgZGF0YVtzLmRhdGFJbmRleF0uZmluZERvbWFpbihzLngsIGRvbWFpbnNbMF0pO1xuICAgICAgICAgICAgICAgIGRlZlggPSBkYXRhW3MuZGF0YUluZGV4XS5jb2xUeXBlKHMueCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb21haW5zWzBdWzBdID0gMDtcbiAgICAgICAgICAgICAgICBkb21haW5zWzBdWzFdID0gZGF0YVtzLmRhdGFJbmRleF0uZXhwb3J0KCkucm93cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMueSkge1xuICAgICAgICAgICAgICAgIGRhdGFbcy5kYXRhSW5kZXhdLmZpbmREb21haW4ocy55LCBkb21haW5zWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzLnlCYXNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YVtzLmRhdGFJbmRleF0uZmluZERvbWFpbihzLnlCYXNlLCBkb21haW5zWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWZYICYmIHNjYWxlcy5wcmltYXJ5Lnguc2NhbGVUeXBlKCkgPT09IEF4ZXNfMS5BeGVzLnR5cGUuYXV0bykge1xuICAgICAgICAgICAgICAgIHNjYWxlcy5wcmltYXJ5Lnguc2NhbGVUeXBlKGRlZlgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNmZy5zZXJpZXMubWFwKHVwZGF0ZURvbWFpbnMpO1xuICAgICAgICBzY2FsZXMucHJpbWFyeS54LnNldEF1dG9Eb21haW4oZG9tYWluc1swXSk7XG4gICAgICAgIHNjYWxlcy5wcmltYXJ5Lnkuc2V0QXV0b0RvbWFpbihkb21haW5zWzFdKTtcbiAgICB9XG4gICAgYWRqdXN0SGVpZ2h0KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuZG9tICYmIG5vZGUuZG9tLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBub2RlLmRvbS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHZpZXdCb3hXaWR0aCAqIHAuY2xpZW50SGVpZ2h0IC8gcC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIGlmICghaXNOYU4odGVtcCkgJiYgdGVtcCAhPT0gdmlld0JveEhlaWdodCkge1xuICAgICAgICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFkanVzdE1hcmdpbnMoY2ZnKSB7XG4gICAgICAgIGNvbnN0IGNmZ20gPSBjZmcuZ3JhcGgubWFyZ2luO1xuICAgICAgICBjb25zdCBtYXJnaW4gPSB7IHQ6IC0xZTYsIGw6IC0xZTYsIGI6IC0xZTYsIHI6IC0xZTYgfTtcbiAgICAgICAgZnVuY3Rpb24gZ2V0QkJveChjc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3MpO1xuICAgICAgICAgICAgY29uc3QgYm94ID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGVsZW1zLCAoZSkgPT4gZS5nZXRCQm94KCkpO1xuICAgICAgICAgICAgaWYgKGJveCAmJiBib3hbMF0pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4udCA9IE1hdGgubWF4KG1hcmdpbi50LCBjZmdtLnRvcCAtIGJveFswXS55KTtcbiAgICAgICAgICAgICAgICBtYXJnaW4ubCA9IE1hdGgubWF4KG1hcmdpbi5sLCBjZmdtLmxlZnQgLSBib3hbMF0ueCk7XG4gICAgICAgICAgICAgICAgbWFyZ2luLmIgPSBNYXRoLm1heChtYXJnaW4uYiwgYm94WzBdLnkgKyBib3hbMF0uaGVpZ2h0ICsgY2ZnbS5ib3R0b20gLSB2aWV3Qm94SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBtYXJnaW4uciA9IE1hdGgubWF4KG1hcmdpbi5yLCBib3hbMF0ueCArIGJveFswXS53aWR0aCArIGNmZ20ucmlnaHQgLSB2aWV3Qm94V2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldEJCb3goJ2hzLWdyYXBoLWF4aXMnKTtcbiAgICAgICAgZ2V0QkJveCgnaHMtZ3JhcGgtY2hhcnQnKTtcbiAgICAgICAgdGhpcy5tYXJnaW5PZmZzZXQudG9wID0gbWFyZ2luLnQ7XG4gICAgICAgIHRoaXMubWFyZ2luT2Zmc2V0LmxlZnQgPSBtYXJnaW4ubDtcbiAgICAgICAgdGhpcy5tYXJnaW5PZmZzZXQuYm90dG9tID0gbWFyZ2luLmI7XG4gICAgICAgIHRoaXMubWFyZ2luT2Zmc2V0LnJpZ2h0ID0gbWFyZ2luLnI7XG4gICAgfVxuICAgIG9udXBkYXRlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hZGp1c3RIZWlnaHQobm9kZSk7XG4gICAgfVxuICAgIG9uY3JlYXRlKG5vZGUpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgZnVuY3Rpb24gKCkgeyBleHBvcnRzLm0ucmVkcmF3KCk7IH0pO1xuICAgICAgICB0aGlzLmFkanVzdEhlaWdodChub2RlKTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG5vZGUuYXR0cnMuY2ZnKVxuICAgICAgICAgICAgLnRoZW4oaHN1dGlsXzEuZGVsYXkoMTApKVxuICAgICAgICAgICAgLnRoZW4odGhpcy5hZGp1c3RNYXJnaW5zLmJpbmQodGhpcykpXG4gICAgICAgICAgICAudGhlbihleHBvcnRzLm0ucmVkcmF3KTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNmZ0ZuID0gbm9kZS5hdHRycy5jZmdGbjtcbiAgICAgICAgY29uc3QgY2ZnID0gR3JhcGgubWFrZUNvbmZpZyhjZmdGbik7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNyZWF0ZURhdGEoY2ZnKTtcbiAgICAgICAgY29uc3QgcGxvdEFyZWEgPSB0aGlzLmNyZWF0ZVBsb3RBcmVhKGNmZy5ncmFwaC5tYXJnaW4pO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSB0aGlzLmNyZWF0ZVNjYWxlcyhjZmcuYXhlcyk7XG4gICAgICAgIHRoaXMuc2V0U2NhbGVSYW5nZShwbG90QXJlYSwgc2NhbGVzKTtcbiAgICAgICAgdGhpcy5zZXRTY2FsZURvbWFpbnMoY2ZnLnNlcmllcywgc2NhbGVzLCBkYXRhKTtcbiAgICAgICAgR3JhcGguYWRqdXN0Q29uZmlnKGNmZyk7XG4gICAgICAgIG5vZGUuYXR0cnMuY2ZnID0gY2ZnO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgnLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHZpZXdCb3g6IGAwIDAgJHtTVkdFbGVtXzEucm91bmQodmlld0JveFdpZHRoKX0gJHtTVkdFbGVtXzEucm91bmQodmlld0JveEhlaWdodCl9YCB9LCBbXG4gICAgICAgICAgICBleHBvcnRzLm0oQ2FudmFzXzEuQ2FudmFzLCB7IGNmZzogY2ZnLmNhbnZhcyB9KSxcbiAgICAgICAgICAgIGV4cG9ydHMubShDaGFydF8xLkNoYXJ0LCB7IGNmZzogY2ZnLmNoYXJ0LCBwbG90QXJlYTogcGxvdEFyZWEgfSksXG4gICAgICAgICAgICBleHBvcnRzLm0oR3JpZF8xLkdyaWQsIHsgY2ZnOiBjZmcuZ3JpZCwgc2NhbGVzOiBzY2FsZXMgfSksXG4gICAgICAgICAgICBleHBvcnRzLm0oU2VyaWVzXzEuU2VyaWVzLCB7IGNmZzogY2ZnLnNlcmllcywgc2NhbGVzOiBzY2FsZXMsIGRhdGE6IGRhdGEgfSksXG4gICAgICAgICAgICBleHBvcnRzLm0oQXhlc18xLkF4ZXMsIHsgY2ZnOiBjZmcuYXhlcywgc2NhbGVzOiBzY2FsZXMgfSksXG4gICAgICAgICAgICBleHBvcnRzLm0oTGVnZW5kXzEuTGVnZW5kLCB7IGNmZzogY2ZnLmxlZ2VuZCB9KVxuICAgICAgICBdKTtcbiAgICB9XG59XG5leHBvcnRzLkdyYXBoID0gR3JhcGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0poY0dndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZSM0poY0dndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUVyUldFc1VVRkJRU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUlhCRExIRkRRVWQxUXp0QlFVTjJReXhwUTBGQmMwTTdRVUZIZEVNc2JVTkJRWFZETzBGQlEzWkRMSEZEUVVOM1F6dEJRVU40UXl4eFEwRkZkME03UVVGRGVFTXNiVU5CUTNWRE8wRkJRM1pETEdsRFFVTnpRenRCUVVOMFF5eHhRMEZEZDBNN1FVRkRlRU1zZFVOQlIzbERPMEZCUTNwRExHMURRVUZ6UXp0QlFVVjBReXhOUVVGTkxGbEJRVmtzUjBGQlZ5eEpRVUZKTEVOQlFVTTdRVUZEYkVNc1NVRkJUU3hoUVVGaExFZEJRVlVzUjBGQlJ5eERRVUZETzBGQmMwUnFReXhOUVVGaExFdEJRVTBzVTBGQlVTeHBRa0ZCVHp0SlFVRnNRenM3VVVGclJsa3NhVUpCUVZrc1IwRkJSenRaUVVOdVFpeEpRVUZKTEVWQlFVa3NRMEZCUXp0WlFVTlVMRXRCUVVzc1JVRkJSeXhEUVVGRE8xbEJRMVFzUjBGQlJ5eEZRVUZMTEVOQlFVTTdXVUZEVkN4TlFVRk5MRVZCUVVVc1EwRkJRenRUUVVOYUxFTkJRVU03U1VFNFNrNHNRMEZCUXp0SlFYQlBWeXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFXTTdVVUZEY0VNc1RVRkJUU3hIUVVGSExFZEJRVlVzUlVGQlJTeERRVUZETzFGQlEzUkNMRXRCUVVzc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZWtJc1pVRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTXhRaXhYUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNoQ0xHVkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRNVUlzVjBGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVONFFpeGhRVUZMTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM3BDTEdWQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRE1VSXNTVUZCU1N4UFFVRlBMRVZCUVVVN1dVRkRWQ3hKUVVGSk8yZENRVU5CTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRoUVVOb1FqdFpRVUZETEU5QlFVMHNRMEZCUXl4RlFVRkZPMmRDUVVOUUxFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dG5Ra0ZEYUVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRaaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVONFFqdFRRVU5LTzFGQlEwUXNUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRaaXhEUVVGRE8wbEJiMEpUTEUxQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJWVHRSUVVOeVF5eEhRVUZITEVOQlFVTXNTMEZCU3l4SFFVRm5RanRaUVVOeVFpeE5RVUZOTEVWQlFVVTdaMEpCUTBvc1IwRkJSeXhGUVVGRkxFVkJRVVU3WjBKQlExQXNTVUZCU1N4RlFVRkZMRVZCUVVVN1owSkJRMUlzVFVGQlRTeEZRVUZGTEVWQlFVVTdaMEpCUTFZc1MwRkJTeXhGUVVGRkxFVkJRVVU3WVVGRFdqdFpRVU5FTEZGQlFWRXNSVUZCUlN4RlFVRkZPMU5CUTJZc1EwRkJRenRKUVVOT0xFTkJRVU03U1VGUFV5eE5RVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVZVN1VVRkRjRU1zWlVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVONlFpeFhRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM1pDTEdWQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGVrSXNWMEZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4aFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzaENMR1ZCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETjBJc1EwRkJRenRKUVZsUExHTkJRV01zUTBGQlF5eEpRVUV5UkR0UlFVTTVSU3hOUVVGTkxFVkJRVVVzUjBGQlJ6dFpRVU5RTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1R0WlFVTnlReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWM3VTBGRGRFTXNRMEZCUXp0UlFVTkdMRTFCUVUwc1JVRkJSU3hIUVVGSE8xbEJRMUFzUTBGQlF5eEZRVUZGTEZsQlFWa3NSMEZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTMEZCU3p0WlFVTjRSQ3hEUVVGRExFVkJRVVVzWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTzFOQlF6VkVMRU5CUVVNN1VVRkRSaXhQUVVGUExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU03U1VGRE9VSXNRMEZCUXp0SlFVVlBMRlZCUVZVc1EwRkJReXhIUVVGUE8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU5zUWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExIbENRVUY1UWl4RFFVRkRMRU5CUVVNN1UwRkRNVU03VVVGRFJDeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVN1dVRkRMMElzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4M1JFRkJkMFFzUTBGQlF5eERRVUZETzFOQlEzcEZPMUZCUTBRc1RVRkJUU3hSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNN1VVRkRjRU1zVDBGQlR5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZqTEVWQlFVVXNSVUZCUlN4RFFVTXhReXhEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEdOQlFVa3NRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NZMEZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRha1VzUTBGQlF6dEpRVVZQTEZsQlFWa3NRMEZCUXl4SlFVRlJPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPMWxCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ6dG5Ra0ZET1VJc1QwRkJUeXhGUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NZVUZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkpMRU5CUVVNc1JVRkJSU3hKUVVGSkxHRkJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdG5Ra0ZEZGtZc1UwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NZVUZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxHRkJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdGhRVU0xUml4RFFVRkRPMU5CUVVNN1VVRkRTQ3hQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEZGtJc1EwRkJRenRKUVU5RUxHRkJRV0VzUTBGQlF5eFJRVUZoTEVWQlFVVXNUVUZCWVR0UlFVTjBReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtRc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzWkVMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42UkN4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE4wUXNRMEZCUXp0SlFWRkVMR1ZCUVdVc1EwRkJReXhIUVVGblFpeEZRVUZGTEUxQlFXRXNSVUZCUlN4SlFVRlhPMUZCUlhoRUxFMUJRVTBzVDBGQlR5eEhRVUZuUWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJUVkVMRk5CUVZNc1lVRkJZU3hEUVVGRExFTkJRVmM3V1VGRE9VSXNTVUZCU1N4SlFVRmpMRU5CUVVNN1dVRkRia0lzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOTUxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6bERMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEZWtNN2FVSkJRVTA3WjBKQlEwZ3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXp0aFFVTXZSVHRaUVVORUxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCVFR0blFrRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRVVU3V1VGREwwUXNTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRk8yZENRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZCUlR0WlFVTnVSU3hKUVVGSkxFbEJRVWtzU1VGQlNTeE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUzBGQlN5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSVHRuUWtGQlJTeE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdZVUZCUlR0UlFVTjBSeXhEUVVGRE8xRkJSVVFzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU03VVVGRE9VSXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRek5ETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNdlF5eERRVUZETzBsQlVVUXNXVUZCV1N4RFFVRkRMRWxCUVZjN1VVRkRjRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zWVVGQllTeEZRVUZGTzFsQlEzQkRMRTFCUVUwc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTJwRExFMUJRVTBzU1VGQlNTeEhRVUZITEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1dVRkJXU3hIUVVGSExFTkJRVU1zUTBGQlF5eFhRVUZYTEVOQlFVTTdXVUZETTBRc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRXRCUVVzc1lVRkJZU3hGUVVGRk8yZENRVU40UXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRE8yRkJRM2hDTzFOQlEwbzdTVUZEVEN4RFFVRkRPMGxCUzBRc1lVRkJZU3hEUVVGRExFZEJRVlU3VVVGRGNFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZET1VJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXp0UlFVVTNReXhUUVVGVExFOUJRVThzUTBGQlF5eEhRVUZYTzFsQlEzaENMRTFCUVUwc1MwRkJTeXhIUVVGSExGRkJRVkVzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU51UkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU1zUTBGQlN5eEZRVUZETEVWQlFVVXNRMEZCUVN4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFpRVU5zUlN4SlFVRkhMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTJRc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJwRUxFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOc1JDeE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRuUWtGRGFrWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVVc1dVRkJXU3hEUVVGRExFTkJRVU03WVVGRGJFWTdVVUZKVEN4RFFVRkRPMUZCUlVRc1QwRkJUeXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETzFGQlEzcENMRTlCUVU4c1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4SFFVRk5MRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGNFTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFZEJRVXNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTndReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0JETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhIUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZUVNc1EwRkJRenRKUVVWRUxGRkJRVkVzUTBGQlF5eEpRVUZYTzFGQlEyaENMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZGTlVJc1EwRkJRenRKUVVWRUxGRkJRVkVzUTBGQlF5eEpRVUZYTzFGQlEyaENMRTFCUVUwc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UlFVRlJMRVZCUVVVc1kwRkJZU3hUUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNNVJDeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM2hDTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTTdZVUZETVVJc1NVRkJTU3hEUVVGRExHTkJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0aFFVTm1MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRoUVVOdVF5eEpRVUZKTEVOQlFVTXNVMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRM2hDTEVOQlFVTTdTVUZIUkN4SlFVRkpMRU5CUVVNc1NVRkJWenRSUVVOYUxFMUJRVTBzUzBGQlN5eEhRVUZUTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRM0pETEUxQlFVMHNSMEZCUnl4SFFVRlZMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZETTBNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOc1F5eE5RVUZOTEZGQlFWRXNSMEZCVVN4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkROVVFzVFVGQlRTeE5RVUZOTEVkQlFWVXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYkVRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRja01zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVVXZReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJRenRSUVVOeVFpeFBRVUZQTEZOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVU1zVlVGQlZTeEZRVUZGTEV0QlFVc3NSVUZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRExFMUJRVTA3V1VGRGRrUXNUMEZCVHl4RlFVRkRMRTlCUVU4c1pVRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eEpRVUZKTEdWQlFVc3NRMEZCUXl4aFFVRmhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVU3V1VGRGNFVXNVMEZCUXl4RFFVRkRMR1ZCUVUwc1JVRkJSU3hGUVVGRkxFZEJRVWNzUlVGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNN1dVRkROVUlzVTBGQlF5eERRVUZETEdGQlFVc3NSVUZCUlN4RlFVRkZMRWRCUVVjc1JVRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eEZRVUZGTEZGQlFWRXNSVUZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRaUVVNNVF5eFRRVUZETEVOQlFVTXNWMEZCU1N4RlFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xbEJRM2hETEZOQlFVTXNRMEZCUXl4bFFVRk5MRVZCUVVVc1JVRkJSU3hIUVVGSExFVkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0WlFVTjJSQ3hUUVVGRExFTkJRVU1zVjBGQlNTeEZRVUZGTEVWQlFVVXNSMEZCUnl4RlFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeEZRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMWxCUTNoRExGTkJRVU1zUTBGQlF5eGxRVUZOTEVWQlFVVXNSVUZCUlN4SFFVRkhMRVZCUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFOQlEyaERMRU5CUVVNc1EwRkJRenRKUVVOUUxFTkJRVU03UTBGRFNqdEJRWEpRUkN4elFrRnhVRU1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBTVkdFbGVtXzEgPSByZXF1aXJlKFwiLi9TVkdFbGVtXCIpO1xuY2xhc3MgR3JpZCBleHRlbmRzIFNWR0VsZW1fMS5TVkdFbGVtIHtcbiAgICBzdGF0aWMgZGVmYXVsdENvbmZpZyhjZmcpIHtcbiAgICAgICAgY2ZnLmdyaWQgPSB7XG4gICAgICAgICAgICBtYWpvcjoge1xuICAgICAgICAgICAgICAgIGhvcjogeyB2aXNpYmxlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgdmVyOiB7IHZpc2libGU6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1pbm9yOiB7XG4gICAgICAgICAgICAgICAgaG9yOiB7IHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgdmVyOiB7IHZpc2libGU6IGZhbHNlIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGFkanVzdENvbmZpZyhjZmcpIHtcbiAgICB9XG4gICAgZHJhd0hvckdyaWQoY2ZnLCBzY2FsZSwgcmFuZ2UsIHRpY2tzKSB7XG4gICAgICAgIHJldHVybiAhY2ZnLnZpc2libGUgPyBleHBvcnRzLm0oJ3N2ZycpIDogZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgtZ3JpZC1ob3InIH0sIHRpY2tzLm1hcmtzLm1hcCgodCkgPT4gdGhpcy5ob3JMaW5lKHJhbmdlWzBdLCByYW5nZVsxXSwgc2NhbGUuY29udmVydCh0KSkpKTtcbiAgICB9XG4gICAgZHJhd1ZlckdyaWQoY2ZnLCBzY2FsZSwgcmFuZ2UsIHRpY2tzKSB7XG4gICAgICAgIHJldHVybiAhY2ZnLnZpc2libGUgPyBleHBvcnRzLm0oJ3N2ZycpIDogZXhwb3J0cy5tKCdzdmcnLCB7IGNsYXNzOiAnaHMtZ3JhcGgtZ3JpZC12ZXInIH0sIHRpY2tzLm1hcmtzLm1hcCgodCkgPT4gdGhpcy52ZXJMaW5lKHNjYWxlLmNvbnZlcnQodCksIHJhbmdlWzBdLCByYW5nZVsxXSkpKTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IG5vZGUuYXR0cnMuY2ZnO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSBub2RlLmF0dHJzLnNjYWxlcztcbiAgICAgICAgY29uc3QgcHMgPSBzY2FsZXMucHJpbWFyeTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnc3ZnJywgeyBjbGFzczogJ2hzLWdyYXBoLWdyaWQnIH0sIFtcbiAgICAgICAgICAgIGV4cG9ydHMubSgnc3ZnJywgeyBjbGFzczogJ2hzLWdyYXBoLWdyaWQtbWlub3InIH0sIFtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdIb3JHcmlkKGNmZy5taW5vci5ob3IsIHBzLnksIHBzLngucmFuZ2UoKSwgcHMueS50aWNrcygpLm1pbm9yKSxcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdWZXJHcmlkKGNmZy5taW5vci52ZXIsIHBzLngsIHBzLnkucmFuZ2UoKSwgcHMueC50aWNrcygpLm1pbm9yKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1ncmlkLW1ham9yJyB9LCBbXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3SG9yR3JpZChjZmcubWFqb3IuaG9yLCBwcy55LCBwcy54LnJhbmdlKCksIHBzLnkudGlja3MoKS5tYWpvciksXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3VmVyR3JpZChjZmcubWFqb3IudmVyLCBwcy54LCBwcy55LnJhbmdlKCksIHBzLngudGlja3MoKS5tYWpvcilcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuR3JpZCA9IEdyaWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0pwWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OUhjbWxrTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJhVUpoTEZGQlFVRXNRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVWx3UXl4MVEwRkJlVU03UVVGNVFucERMRTFCUVdFc1NVRkJTeXhUUVVGUkxHbENRVUZQTzBsQmNVSTNRaXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFWVTdVVUZETTBJc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlowSTdXVUZEY0VJc1MwRkJTeXhGUVVGRk8yZENRVU5JTEVkQlFVY3NSVUZCUlN4RlFVRkZMRTlCUVU4c1JVRkJReXhKUVVGSkxFVkJRVVU3WjBKQlEzSkNMRWRCUVVjc1JVRkJSU3hGUVVGRkxFOUJRVThzUlVGQlF5eEpRVUZKTEVWQlFVVTdZVUZEZUVJN1dVRkRSQ3hMUVVGTExFVkJRVVU3WjBKQlEwZ3NSMEZCUnl4RlFVRkZMRVZCUVVVc1QwRkJUeXhGUVVGRExFdEJRVXNzUlVGQlJUdG5Ra0ZEZEVJc1IwRkJSeXhGUVVGRkxFVkJRVVVzVDBGQlR5eEZRVUZETEV0QlFVc3NSVUZCUlR0aFFVTjZRanRUUVVOS0xFTkJRVU03U1VGRFRpeERRVUZETzBsQlRVUXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGVk8wbEJRemxDTEVOQlFVTTdTVUZMVHl4WFFVRlhMRU5CUVVNc1IwRkJjVUlzUlVGQlJTeExRVUZYTEVWQlFVVXNTMEZCWXl4RlFVRkZMRXRCUVdNN1VVRkRiRVlzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExGTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUXl4dFFrRkJiVUlzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZETVVZc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGRGNrUXNRMEZCUXl4RFFVRkRPMGxCUTFBc1EwRkJRenRKUVV0UExGZEJRVmNzUTBGQlF5eEhRVUZ4UWl4RlFVRkZMRXRCUVZjc1JVRkJSU3hMUVVGakxFVkJRVVVzUzBGQll6dFJRVU5zUml4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlFTeERRVUZETEVOQlFVTXNVMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRExHMUNRVUZ0UWl4RlFVRkZMRVZCUVVVc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVNeFJpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVTnlSQ3hEUVVGRExFTkJRVU03U1VGRFVDeERRVUZETzBsQlIwUXNTVUZCU1N4RFFVRkRMRWxCUVZrN1VVRkRZaXhOUVVGTkxFZEJRVWNzUjBGQlpTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVOMlF5eE5RVUZOTEUxQlFVMHNSMEZCVlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU40UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETzFGQlF6RkNMRTlCUVU4c1UwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUXl4bFFVRmxMRVZCUVVNc1JVRkJSVHRaUVVOMFF5eFRRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRExIRkNRVUZ4UWl4RlFVRkZMRVZCUVVVN1owSkJRM1JETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlJTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXp0aFFVTXhSU3hEUVVGRE8xbEJRMFlzVTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJReXh4UWtGQmNVSXNSVUZCUlN4RlFVRkZPMmRDUVVOMFF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRka1VzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTTdZVUZETVVVc1EwRkJRenRUUVVOTUxFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdRMEZEU2p0QlFUTkZSQ3h2UWtFeVJVTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm0gPSByZXF1aXJlKFwibWl0aHJpbFwiKTtcbjtcbmNsYXNzIExlZ2VuZCB7XG4gICAgc3RhdGljIGRlZmF1bHRDb25maWcoY2ZnKSB7XG4gICAgICAgIGNmZy5sZWdlbmQgPSB7fTtcbiAgICB9XG4gICAgc3RhdGljIGFkanVzdENvbmZpZyhjZmcpIHtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1sZWdlbmQnLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9KTtcbiAgICB9XG59XG5leHBvcnRzLkxlZ2VuZCA9IExlZ2VuZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRHVm5aVzVrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwweGxaMlZ1WkM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRV2RDWVN4UlFVRkJMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdRVUZSYmtNc1EwRkJRenRCUVVWR0xFMUJRV0VzVFVGQlRUdEpRV0ZtTEUxQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJWVHRSUVVNelFpeEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRnBRaXhGUVVNeFFpeERRVUZETzBsQlEwNHNRMEZCUXp0SlFVMUVMRTFCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlZUdEpRVVU1UWl4RFFVRkRPMGxCUlVRc1NVRkJTU3hEUVVGRExFbEJRVms3VVVGRFlpeFBRVUZQTEZOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVU1zYVVKQlFXbENMRVZCUVVVc1MwRkJTeXhGUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1EwRkJRenRKUVVNM1JTeERRVUZETzBOQlEwbzdRVUUzUWtRc2QwSkJOa0pESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBTVkdFbGVtXzEgPSByZXF1aXJlKFwiLi9TVkdFbGVtXCIpO1xuY29uc3QgU2VyaWVzXzEgPSByZXF1aXJlKFwiLi9TZXJpZXNcIik7XG5jb25zdCBoc3V0aWxfMSA9IHJlcXVpcmUoXCJoc3V0aWxcIik7XG5jbGFzcyBQbG90IGV4dGVuZHMgU1ZHRWxlbV8xLlNWR0VsZW0ge1xuICAgIGRyYXdMaW5lKGNsaXBJRCwgZGF0YSwgeCwgeSwgc2NhbGVzLCBzU3R5bGUsIHRpdGxlKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gYHN0cm9rZTogJHtzU3R5bGUubGluZS5jb2xvcn07IHN0cm9rZS13aWR0aDoke3NTdHlsZS5saW5lLndpZHRofTtgO1xuICAgICAgICByZXR1cm4gIXNTdHlsZS5saW5lLnZpc2libGUgPyBleHBvcnRzLm0oJy5pbnZpc2libGUtbGluZScsICcnKSA6IHRoaXMucG9seWxpbmUoZGF0YSwgeCwgeSwgc2NhbGVzLCBjbGlwSUQsIHN0eWxlLCB0aXRsZSk7XG4gICAgfVxuICAgIGRyYXdNYXJrZXIoY2xpcElELCBkYXRhLCB4LCB5LCBzY2FsZXMsIHNTdHlsZSwgdGl0bGUpIHtcbiAgICAgICAgY29uc3QgbXJrID0gU2VyaWVzXzEuU2VyaWVzLm1hcmtlcjtcbiAgICAgICAgbGV0IHN0eWxlID0gYGZpbGw6JHtzU3R5bGUubWFya2VyLmNvbG9yfWA7XG4gICAgICAgIHJldHVybiAhc1N0eWxlLm1hcmtlci52aXNpYmxlID8gZXhwb3J0cy5tKCcuaW52aXNpYmxlLW1hcmtlcicsICcnKSA6IGV4cG9ydHMubSgnc3ZnJywgeyBjbGFzczogJ2hzLWdyYXBoLXNlcmllcy1tYXJrZXJzJyB9LCBkYXRhLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3ggPSBzY2FsZXMueC5jb252ZXJ0KHBbeF0pO1xuICAgICAgICAgICAgY29uc3QgY3kgPSBzY2FsZXMueS5jb252ZXJ0KHBbeV0pO1xuICAgICAgICAgICAgY29uc3QgciA9IHNTdHlsZS5tYXJrZXIuc2l6ZTtcbiAgICAgICAgICAgIHN3aXRjaCAoc1N0eWxlLm1hcmtlci5zaGFwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgbXJrLmNpcmNsZTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2lyY2xlKHsgeDogY3gsIHk6IGN5IH0sIHIsIHN0eWxlLCB0aXRsZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBtcmsuc3F1YXJlOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWN0KHsgeDogY3ggLSByLCB5OiBjeSAtIHIgfSwgeyB3OiAyICogciwgaDogMiAqIHIgfSwgc3R5bGUsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICBjYXNlIG1yay5kaWFtb25kOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFwZShbW2N4IC0gciwgY3ldLCBbY3gsIGN5ICsgcl0sIFtjeCArIHIsIGN5XSwgW2N4LCBjeSAtIHJdXSwgdW5kZWZpbmVkLCBzdHlsZSwgdGl0bGUpO1xuICAgICAgICAgICAgICAgIGNhc2UgbXJrLnVwVHJpYW5nbGU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYXBlKFtbY3ggLSByLCBjeSArIHJdLCBbY3ggKyByLCBjeSArIHJdLCBbY3gsIGN5IC0gcl1dLCB1bmRlZmluZWQsIHN0eWxlLCB0aXRsZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBtcmsuZG93blRyaWFuZ2xlOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFwZShbW2N4IC0gciwgY3kgLSByXSwgW2N4ICsgciwgY3kgLSByXSwgW2N4LCBjeSArIHJdXSwgdW5kZWZpbmVkLCBzdHlsZSwgdGl0bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMubShgLnVua293bi1tYXJrZXItJHtzU3R5bGUubWFya2VyLnNoYXBlfWAsICcnKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBkcmF3TGFiZWwoY2xpcElELCBkYXRhLCB4LCB5LCBsYmwsIHNjYWxlcywgc0RlZikge1xuICAgICAgICBjb25zdCBzU3R5bGUgPSBzRGVmLnN0eWxlO1xuICAgICAgICBjb25zdCBjZmcgPSB7XG4gICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgIGNzc0NsYXNzOiBgYCxcbiAgICAgICAgICAgIHN0eWxlOiBgZmlsbDoke3NTdHlsZS5sYWJlbC5jb2xvcn1gLFxuICAgICAgICAgICAgeHBvczogU1ZHRWxlbV8xLlRleHRIQWxpZ24ubWlkZGxlLFxuICAgICAgICAgICAgeXBvczogU1ZHRWxlbV8xLlRleHRWQWxpZ24uY2VudGVyLFxuICAgICAgICAgICAgaE9mZnNldDogc0RlZi5oT2Zmc2V0LFxuICAgICAgICAgICAgdk9mZnNldDogc0RlZi52T2Zmc2V0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAhc1N0eWxlLm1hcmtlci52aXNpYmxlID8gZXhwb3J0cy5tKCcuaW52aXNpYmxlLW1hcmtlcicsICcnKSA6IGV4cG9ydHMubSgnc3ZnJywgeyBjbGFzczogJ2hzLWdyYXBoLXNlcmllcy1sYWJlbHMnIH0sIGRhdGEubWFwKChwKSA9PiB7XG4gICAgICAgICAgICBjZmcueCA9ICcnICsgc2NhbGVzLnguY29udmVydChwW3hdKTtcbiAgICAgICAgICAgIGNmZy55ID0gJycgKyBzY2FsZXMueS5jb252ZXJ0KHBbeV0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChjZmcsIGhzdXRpbF8xLnJvdW5kKHBbbGJsXSwgMykpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGRyYXdBcmVhKGNsaXBJRCwgZGF0YSwgeCwgeUZvcmUsIHlCYWNrLCBzY2FsZXMsIHNTdHlsZSwgdGl0bGUpIHtcbiAgICAgICAgaWYgKHNTdHlsZS5maWxsLnZpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gYGZpbGw6ICR7c1N0eWxlLmZpbGwuY29sb3J9O2A7XG4gICAgICAgICAgICBjb25zdCBkcmF3Rm9yZSA9IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBkcmF3QmFjayA9IGRhdGEuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb2x5Z29uKGRyYXdGb3JlLCBkcmF3QmFjaywgeCwgeUZvcmUsIHlCYWNrLCBzY2FsZXMsIGNsaXBJRCwgc3R5bGUsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMubSgnLmludmlzaWJsZS1saW5lJywgJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldERlZmF1bHRzKGRhdGEsIHNlcmllcywgc2NhbGVzKSB7XG4gICAgfVxufVxuZXhwb3J0cy5QbG90ID0gUGxvdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVVHeHZkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5UWJHOTBMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlMyRXNVVUZCUVN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlJYQkRMSFZEUVVkNVF6dEJRVWw2UXl4eFEwRkZkME03UVVGRGVFTXNiVU5CUVhORE8wRkJSWFJETEUxQlFYTkNMRWxCUVVzc1UwRkJVU3hwUWtGQlR6dEpRVU4wUXl4UlFVRlJMRU5CUVVNc1RVRkJZU3hGUVVGRkxFbEJRV01zUlVGQlJTeERRVUZSTEVWQlFVVXNRMEZCVVN4RlFVRkZMRTFCUVdNc1JVRkJSU3hOUVVGclFpeEZRVUZGTEV0QlFXRTdVVUZEZWtjc1RVRkJUU3hMUVVGTExFZEJRVWNzVjBGQlZ5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc2EwSkJRV3RDTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU03VVVGRGFrWXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4VFFVRkRMRU5CUVVNc2FVSkJRV2xDTEVWQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03U1VGRGJrZ3NRMEZCUXp0SlFVVkVMRlZCUVZVc1EwRkJReXhOUVVGaExFVkJRVVVzU1VGQll5eEZRVUZGTEVOQlFWRXNSVUZCUlN4RFFVRlJMRVZCUVVVc1RVRkJZeXhGUVVGRkxFMUJRV3RDTEVWQlFVVXNTMEZCWVR0UlFVTXpSeXhOUVVGTkxFZEJRVWNzUjBGQlJ5eGxRVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzUzBGQlN5eEhRVUZITEZGQlFWRXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU14UXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRk5CUVVNc1EwRkJReXh0UWtGQmJVSXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJReXg1UWtGQmVVSXNSVUZCUXl4RlFVTnFSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVlN4RlFVRkZMRVZCUVVVN1dVRkRjRUlzVFVGQlRTeEZRVUZGTEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRiRU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRiRU1zVFVGQlRTeERRVUZETEVkQlFVa3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE9VSXNVVUZCVVN4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUlVGQlJUdG5Ra0ZEZWtJc1MwRkJTeXhIUVVGSExFTkJRVU1zVFVGQlRUdHZRa0ZEV0N4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU4wUkN4TFFVRkxMRWRCUVVjc1EwRkJReXhOUVVGTk8yOUNRVU5ZTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFZEJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0blFrRkRja1VzUzBGQlN5eEhRVUZITEVOQlFVTXNUMEZCVHp0dlFrRkRXaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU5xUnl4TFFVRkxMRWRCUVVjc1EwRkJReXhWUVVGVk8yOUNRVU5tTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1IwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU42Uml4TFFVRkxMRWRCUVVjc1EwRkJReXhaUVVGWk8yOUNRVU5xUWl4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFZEJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dGhRVU0xUmp0WlFVTkVMRTlCUVU4c1UwRkJReXhEUVVGRExHdENRVUZyUWl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNwRUxFTkJRVU1zUTBGQlF5eERRVU5NTEVOQlFVTTdTVUZEVGl4RFFVRkRPMGxCUlVRc1UwRkJVeXhEUVVGRExFMUJRV0VzUlVGQlJTeEpRVUZqTEVWQlFVVXNRMEZCVVN4RlFVRkZMRU5CUVZFc1JVRkJSU3hIUVVGVkxFVkJRVVVzVFVGQll5eEZRVUZGTEVsQlFXTTdVVUZEYmtjc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTXhRaXhOUVVGTkxFZEJRVWNzUjBGQldUdFpRVU5xUWl4SlFVRkpMRVZCUVZFc1JVRkJSVHRaUVVOa0xGRkJRVkVzUlVGQlNTeEZRVUZGTzFsQlEyUXNTMEZCU3l4RlFVRlBMRkZCUVZFc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVTdXVUZEZUVNc1NVRkJTU3hGUVVGUkxHOUNRVUZWTEVOQlFVTXNUVUZCVFR0WlFVTTNRaXhKUVVGSkxFVkJRVkVzYjBKQlFWVXNRMEZCUXl4TlFVRk5PMWxCUXpkQ0xFOUJRVThzUlVGQlN5eEpRVUZKTEVOQlFVTXNUMEZCVHp0WlFVTjRRaXhQUVVGUExFVkJRVXNzU1VGQlNTeERRVUZETEU5QlFVODdVMEZETTBJc1EwRkJRenRSUVVOR0xFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJRU3hEUVVGRExFTkJRVU1zVTBGQlF5eERRVUZETEcxQ1FVRnRRaXhGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVU1zUzBGQlN5eEZRVUZETEhkQ1FVRjNRaXhGUVVGRExFVkJRMmhITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGVExFVkJRVVVzUlVGQlJUdFpRVU51UWl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXhReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNeFF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxHTkJRVXNzUTBGQlV5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53UkN4RFFVRkRMRU5CUVVNc1EwRkRUQ3hEUVVGRE8wbEJRMDRzUTBGQlF6dEpRVVZFTEZGQlFWRXNRMEZCUXl4TlFVRmhMRVZCUVVVc1NVRkJZeXhGUVVGRkxFTkJRVkVzUlVGQlJTeExRVUZaTEVWQlFVVXNTMEZCV1N4RlFVRkZMRTFCUVdNc1JVRkJSU3hOUVVGclFpeEZRVUZGTEV0QlFWazdVVUZETVVnc1NVRkJTU3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTnlRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eFRRVUZUTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU03V1VGRE5VTXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRM1JDTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTjRReXhQUVVGUExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkZMRkZCUVZFc1JVRkJSU3hEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0VFFVTXhSanRoUVVGTk8xbEJRMGdzVTBGQlF5eERRVUZETEdsQ1FVRnBRaXhGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFOQlF6TkNPMGxCUTB3c1EwRkJRenRKUVVsRUxGZEJRVmNzUTBGQlF5eEpRVUZUTEVWQlFVVXNUVUZCWjBJc1JVRkJSU3hOUVVGak8wbEJRM1pFTEVOQlFVTTdRMEZEU2p0QlFXeEZSQ3h2UWtGclJVTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm0gPSByZXF1aXJlKFwibWl0aHJpbFwiKTtcbmNvbnN0IFBsb3RfMSA9IHJlcXVpcmUoXCIuL1Bsb3RcIik7XG5jbGFzcyBQbG90QXJlYSBleHRlbmRzIFBsb3RfMS5QbG90IHtcbiAgICBwbG90KGRhdGEsIHNlcmllcywgc2NhbGVzLCBpLCBjbGlwSUQpIHtcbiAgICAgICAgY29uc3QgeCA9IGRhdGEuY29sTnVtYmVyKHNlcmllcy54KTtcbiAgICAgICAgY29uc3QgeSA9IGRhdGEuY29sTnVtYmVyKHNlcmllcy55KTtcbiAgICAgICAgY29uc3QgeUJhc2UgPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueUJhc2UpO1xuICAgICAgICBjb25zdCB5TWF4ID0gZGF0YS5jb2xOdW1iZXIoJyRzdW0nKTtcbiAgICAgICAgY29uc3QgbWFwUm93ID0gKHJvdykgPT4gKHlNYXggPT09IHVuZGVmaW5lZCkgPyBbXG4gICAgICAgICAgICByb3dbeF0sXG4gICAgICAgICAgICByb3dbeV0gKyByb3dbeUJhc2VdLFxuICAgICAgICAgICAgcm93W3lCYXNlXVxuICAgICAgICBdIDogW1xuICAgICAgICAgICAgcm93W3hdLFxuICAgICAgICAgICAgKHJvd1t5XSArIHJvd1t5QmFzZV0pIC8gcm93W3lNYXhdLFxuICAgICAgICAgICAgcm93W3lCYXNlXSAvIHJvd1t5TWF4XVxuICAgICAgICBdO1xuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCcuZXJyb3InLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcmllcy5tYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBkYXRhLmdldERhdGEoKS5tYXAobWFwUm93KTtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5kcmF3QXJlYShjbGlwSUQsIGQsIDAsIDEsIDIsIHNjYWxlcywgc2VyaWVzLnN0eWxlLCBzZXJpZXMueSldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZCA9IGRhdGEuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmRyYXdBcmVhKGNsaXBJRCwgZCwgeCwgeSwgeUJhc2UsIHNjYWxlcywgc2VyaWVzLnN0eWxlLCBzZXJpZXMueSldO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5QbG90QXJlYSA9IFBsb3RBcmVhO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVUd4dmRFRnlaV0V1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlVHeHZkRUZ5WldFdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUYxUkdFc1VVRkJRU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCU1hCRExHbERRVUZ6UXp0QlFVZDBReXhOUVVGaExGRkJRVk1zVTBGQlVTeFhRVUZKTzBsQlF6bENMRWxCUVVrc1EwRkJReXhKUVVGVExFVkJRVVVzVFVGQlowSXNSVUZCUlN4TlFVRmpMRVZCUVVVc1EwRkJVU3hGUVVGRkxFMUJRV0U3VVVGRGNrVXNUVUZCVFN4RFFVRkRMRWRCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka01zVFVGQlRTeERRVUZETEVkQlFVOHNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtNc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE0wTXNUVUZCVFN4SlFVRkpMRWRCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTnlReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVkQlFWTXNSVUZCUlN4RlFVRkZMRU5CUTNwQ0xFTkJRVU1zU1VGQlNTeExRVUZITEZOQlFWTXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJRenRaUVVOb1FpeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTA0c1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRha0lzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXp0VFFVTmlMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMEVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTk9MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZETDBJc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNN1UwRkRla0lzUTBGQlF6dFJRVU5PTEVsQlFVa3NRMEZCUXl4TFFVRkhMRk5CUVZNc1JVRkJSVHRaUVVGRkxFOUJRVThzVTBGQlF5eERRVUZETEZGQlFWRXNSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRUUVVGRk8xRkJRemRETEVsQlFVa3NUVUZCVFN4RFFVRkRMRWRCUVVjc1JVRkJSVHRaUVVOYUxFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEY2tNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNNVJUdGhRVUZOTzFsQlEwZ3NUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzFsQlEzcENMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRiRVk3U1VGRFRDeERRVUZETzBOQlEwbzdRVUY2UWtRc05FSkJlVUpESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBQbG90XzEgPSByZXF1aXJlKFwiLi9QbG90XCIpO1xuY2xhc3MgUGxvdEJhciBleHRlbmRzIFBsb3RfMS5QbG90IHtcbiAgICBkcmF3QmFyKGNsaXBJRCwgZGF0YSwgeCwgeSwgeTAsIHNjYWxlcywgc1N0eWxlLCBzKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gYGZpbGw6ICR7c1N0eWxlLmJhci5jb2xvcn07YDtcbiAgICAgICAgY29uc3QgaW5kZXggPSAoeCA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgZG9tYWluID0gc2NhbGVzLnguZG9tYWluKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHMgKiBzU3R5bGUuYmFyLm9mZnNldCAqIChkb21haW5bMV0gLSBkb21haW5bMF0pIC8gKDEwMCAqIGRhdGEuZ2V0RGF0YSgpLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gc1N0eWxlLmJhci53aWR0aCAqIChkb21haW5bMV0gLSBkb21haW5bMF0pIC8gKDEwMCAqIGRhdGEuZ2V0RGF0YSgpLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1zZXJpZXMtYmFycycgfSwgZGF0YS5nZXREYXRhKCkubWFwKChwLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByeDAgPSBzY2FsZXMueC5jb252ZXJ0KChpbmRleCA/IGkgOiBwW3hdKSArIG9mZnNldCAtIHdpZHRoIC8gMik7XG4gICAgICAgICAgICBjb25zdCByeDEgPSBzY2FsZXMueC5jb252ZXJ0KChpbmRleCA/IGkgOiBwW3hdKSArIG9mZnNldCArIHdpZHRoIC8gMik7XG4gICAgICAgICAgICBjb25zdCByeTAgPSBzY2FsZXMueS5jb252ZXJ0KHkwID09PSB1bmRlZmluZWQgPyAwIDogcFt5MF0pO1xuICAgICAgICAgICAgY29uc3QgcnkgPSBzY2FsZXMueS5jb252ZXJ0KHBbeV0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjdCh7IHg6IHJ4MCwgeTogcnkwIH0sIHsgaDogcnkgLSByeTAsIHc6IHJ4MSAtIHJ4MCB9LCBzdHlsZSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgc2V0RGVmYXVsdHMoZGF0YSwgc2VyaWVzLCBzY2FsZXMpIHtcbiAgICAgICAgc3VwZXIuc2V0RGVmYXVsdHMoZGF0YSwgc2VyaWVzLCBzY2FsZXMpO1xuICAgICAgICBsZXQgZG9tID0gc2NhbGVzLnkuZG9tYWluKCk7XG4gICAgICAgIGlmIChkb21bMF0gPiAwKSB7XG4gICAgICAgICAgICBkb21bMF0gPSAwO1xuICAgICAgICAgICAgc2NhbGVzLnkuZG9tYWluKGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcmllcy54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNjYWxlcy54LmRvbWFpbihbLTAuNSwgZGF0YS5nZXREYXRhKCkubGVuZ3RoIC0gMC41XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGxvdChkYXRhLCBzZXJpZXMsIHNjYWxlcywgaSwgY2xpcElEKSB7XG4gICAgICAgIGNvbnN0IHggPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueCk7XG4gICAgICAgIGNvbnN0IHkgPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueSk7XG4gICAgICAgIGNvbnN0IHlCYXNlID0gc2VyaWVzLnlCYXNlID8gZGF0YS5jb2xOdW1iZXIoc2VyaWVzLnlCYXNlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnLmVycm9yJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLmRyYXdCYXIoY2xpcElELCBkYXRhLCB4LCB5LCB5QmFzZSwgc2NhbGVzLCBzZXJpZXMuc3R5bGUsIGkpLFxuICAgICAgICBdO1xuICAgIH1cbn1cbmV4cG9ydHMuUGxvdEJhciA9IFBsb3RCYXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVR3h2ZEVKaGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlRYkc5MFFtRnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQmFVUmhMRkZCUVVFc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0QlFVdHdReXhwUTBGQmMwTTdRVUZKZEVNc1RVRkJZU3hQUVVGUkxGTkJRVkVzVjBGQlNUdEpRVU0zUWl4UFFVRlBMRU5CUVVNc1RVRkJZU3hGUVVGRkxFbEJRVk1zUlVGQlJTeERRVUZSTEVWQlFVVXNRMEZCVVN4RlFVRkZMRVZCUVZNc1JVRkJSU3hOUVVGakxFVkJRVVVzVFVGQmEwSXNSVUZCUlN4RFFVRlJPMUZCUTNwSExFMUJRVTBzUzBGQlN5eEhRVUZITEZOQlFWTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF6dFJRVU16UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eFRRVUZUTEVOQlFVTXNRMEZCUXp0UlFVTm9ReXhOUVVGTkxFMUJRVTBzUjBGQll5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xRkJRelZETEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1IwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRE5VWXNUVUZCVFN4TFFVRkxMRWRCUVVrc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVkQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRelZHTEU5QlFVOHNVMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRExFdEJRVXNzUlVGQlF5eHpRa0ZCYzBJc1JVRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUXpsRUxFTkJRVU1zUTBGQlZTeEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZPMWxCUTNKQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZCTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTFCUVUwc1IwRkJSeXhMUVVGTExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYmtVc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVUVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4SFFVRkhMRXRCUVVzc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU51UlN4TlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVjc1UwRkJVeXhEUVVGQkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzaEVMRTFCUVUwc1JVRkJSU3hIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEyeERMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRExFZEJRVWNzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1IwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZETEVkQlFVY3NSMEZCUXl4SFFVRkhMRVZCUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU51UlN4RFFVRkRMRU5CUVVNc1EwRkRUQ3hEUVVGRE8wbEJRMDRzUTBGQlF6dEpRVVZFTEZkQlFWY3NRMEZCUXl4SlFVRlRMRVZCUVVVc1RVRkJaMElzUlVGQlJTeE5RVUZqTzFGQlEyNUVMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVONFF5eEpRVUZMTEVkQlFVY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFGQlF6ZENMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVTmFMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEV0N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTjRRanRSUVVORUxFbEJRVWtzVFVGQlRTeERRVUZETEVOQlFVTXNTMEZCU3l4VFFVRlRMRVZCUVVVN1dVRkRlRUlzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1RVRkJUU3hIUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEZEVRN1NVRkRUQ3hEUVVGRE8wbEJSVVFzU1VGQlNTeERRVUZETEVsQlFWTXNSVUZCUlN4TlFVRm5RaXhGUVVGRkxFMUJRV01zUlVGQlJTeERRVUZSTEVWQlFVVXNUVUZCWVR0UlFVTnlSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51UXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOdVF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGQkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTNKRkxFbEJRVWtzUTBGQlF5eExRVUZITEZOQlFWTXNSVUZCUlR0WlFVRkZMRTlCUVU4c1UwRkJReXhEUVVGRExGRkJRVkVzUlVGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VFFVRkZPMUZCUXpkRExFOUJRVTg3V1VGRFNDeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMU5CUTI1RkxFTkJRVU03U1VGRFRpeERRVUZETzBOQlEwbzdRVUYyUTBRc01FSkJkVU5ESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBQbG90XzEgPSByZXF1aXJlKFwiLi9QbG90XCIpO1xuY2xhc3MgUGxvdExpbmUgZXh0ZW5kcyBQbG90XzEuUGxvdCB7XG4gICAgcGxvdChkYXRhLCBzZXJpZXMsIHNjYWxlcywgaSwgY2xpcElEKSB7XG4gICAgICAgIGNvbnN0IHggPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueCk7XG4gICAgICAgIGNvbnN0IHkgPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueSk7XG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLm0oJy5lcnJvcicsICcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCcuZXJyb3InLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuZHJhd0xpbmUoY2xpcElELCBkYXRhLmdldERhdGEoKSwgeCwgeSwgc2NhbGVzLCBzZXJpZXMuc3R5bGUsIHNlcmllcy55KSxcbiAgICAgICAgICAgIHRoaXMuZHJhd01hcmtlcihjbGlwSUQsIGRhdGEuZ2V0RGF0YSgpLCB4LCB5LCBzY2FsZXMsIHNlcmllcy5zdHlsZSwgc2VyaWVzLnkpXG4gICAgICAgIF07XG4gICAgfVxufVxuZXhwb3J0cy5QbG90TGluZSA9IFBsb3RMaW5lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVUd4dmRFeHBibVV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlVHeHZkRXhwYm1VdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZuUTJFc1VVRkJRU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCU1hCRExHbERRVUZyUXp0QlFVZHNReXhOUVVGaExGRkJRVk1zVTBGQlVTeFhRVUZKTzBsQlF6bENMRWxCUVVrc1EwRkJReXhKUVVGVExFVkJRVVVzVFVGQlowSXNSVUZCUlN4TlFVRmpMRVZCUVVVc1EwRkJVU3hGUVVGRkxFMUJRV0U3VVVGRGNrVXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRia01zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hEUVVGRExFdEJRVWNzVTBGQlV5eEZRVUZGTzFsQlFVVXNUMEZCVHl4VFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFOQlFVVTdVVUZETjBNc1NVRkJTU3hEUVVGRExFdEJRVWNzVTBGQlV5eEZRVUZGTzFsQlFVVXNUMEZCVHl4VFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFOQlFVVTdVVUZETjBNc1QwRkJUenRaUVVOSUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zUzBGQlN5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNMFVzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOb1JpeERRVUZETzBsQlEwNHNRMEZCUXp0RFFVTktPMEZCV0VRc05FSkJWME1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5jb25zdCBQbG90XzEgPSByZXF1aXJlKFwiLi9QbG90XCIpO1xuY2xhc3MgUGxvdE1hcmtlcnMgZXh0ZW5kcyBQbG90XzEuUGxvdCB7XG4gICAgcGxvdChkYXRhLCBzZXJpZXMsIHNjYWxlcywgaSwgY2xpcElEKSB7XG4gICAgICAgIGNvbnN0IHggPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueCk7XG4gICAgICAgIGNvbnN0IHkgPSBkYXRhLmNvbE51bWJlcihzZXJpZXMueSk7XG4gICAgICAgIGNvbnN0IGwgPSBzZXJpZXMubCA/IGRhdGEuY29sTnVtYmVyKHNlcmllcy5sKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnLmVycm9yJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLm0oJy5lcnJvcicsICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5kcmF3TWFya2VyKGNsaXBJRCwgZGF0YS5nZXREYXRhKCksIHgsIHksIHNjYWxlcywgc2VyaWVzLnN0eWxlLCBzZXJpZXMueSksXG4gICAgICAgICAgICAobCA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3TGFiZWwoY2xpcElELCBkYXRhLmdldERhdGEoKSwgeCwgeSwgbCwgc2NhbGVzLCBzZXJpZXMpXG4gICAgICAgIF07XG4gICAgfVxufVxuZXhwb3J0cy5QbG90TWFya2VycyA9IFBsb3RNYXJrZXJzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVUd4dmRFMWhjbXRsY25NdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZVR3h2ZEUxaGNtdGxjbk11ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRnBRMkVzVVVGQlFTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8wRkJTWEJETEdsRFFVRnJRenRCUVVkc1F5eE5RVUZoTEZkQlFWa3NVMEZCVVN4WFFVRkpPMGxCUTJwRExFbEJRVWtzUTBGQlF5eEpRVUZUTEVWQlFVVXNUVUZCWjBJc1JVRkJSU3hOUVVGakxFVkJRVVVzUTBGQlVTeEZRVUZGTEUxQlFXRTdVVUZEY2tVc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGJrTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRia01zVFVGQlRTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTjZSQ3hKUVVGSkxFTkJRVU1zUzBGQlJ5eFRRVUZUTEVWQlFVVTdXVUZCUlN4UFFVRlBMRk5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVMEZCUlR0UlFVTTNReXhKUVVGSkxFTkJRVU1zUzBGQlJ5eFRRVUZUTEVWQlFVVTdXVUZCUlN4UFFVRlBMRk5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVMEZCUlR0UlFVTTNReXhQUVVGUE8xbEJRMGdzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNM1JTeERRVUZETEVOQlFVTXNTMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdaMEpCUTNoQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETzFOQlEzUkZMRU5CUVVNN1NVRkRUaXhEUVVGRE8wTkJRMG83UVVGaVJDeHJRMEZoUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tID0gcmVxdWlyZShcIm1pdGhyaWxcIik7XG5mdW5jdGlvbiByb3VuZChudW0pIHtcbiAgICBjb25zdCByZXN1bHQgPSBudW0udG9GaXhlZCgxKTtcbiAgICBpZiAocmVzdWx0ID09PSAnSW5maW5pdHknKSB7XG4gICAgICAgIHJldHVybiAnMWUyMCc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnJvdW5kID0gcm91bmQ7XG52YXIgVGV4dEhBbGlnbjtcbihmdW5jdGlvbiAoVGV4dEhBbGlnbikge1xuICAgIFRleHRIQWxpZ25bXCJzdGFydFwiXSA9IFwic3RhcnRcIjtcbiAgICBUZXh0SEFsaWduW1wibWlkZGxlXCJdID0gXCJtaWRkbGVcIjtcbiAgICBUZXh0SEFsaWduW1wiZW5kXCJdID0gXCJlbmRcIjtcbn0pKFRleHRIQWxpZ24gPSBleHBvcnRzLlRleHRIQWxpZ24gfHwgKGV4cG9ydHMuVGV4dEhBbGlnbiA9IHt9KSk7XG52YXIgVGV4dFZBbGlnbjtcbihmdW5jdGlvbiAoVGV4dFZBbGlnbikge1xuICAgIFRleHRWQWxpZ25bXCJ0b3BcIl0gPSBcInRvcFwiO1xuICAgIFRleHRWQWxpZ25bXCJjZW50ZXJcIl0gPSBcImNlbnRlclwiO1xuICAgIFRleHRWQWxpZ25bXCJib3R0b21cIl0gPSBcImJvdHRvbVwiO1xufSkoVGV4dFZBbGlnbiA9IGV4cG9ydHMuVGV4dFZBbGlnbiB8fCAoZXhwb3J0cy5UZXh0VkFsaWduID0ge30pKTtcbmNsYXNzIFNWR0VsZW0ge1xuICAgIHRleHQoY2ZnLCB0ZXh0KSB7XG4gICAgICAgIGxldCB5U2hpZnQgPSAwO1xuICAgICAgICBsZXQgaEFsaWduO1xuICAgICAgICBzd2l0Y2ggKGNmZy54cG9zKSB7XG4gICAgICAgICAgICBjYXNlIFRleHRIQWxpZ24uc3RhcnQ6XG4gICAgICAgICAgICAgICAgaEFsaWduID0gY2ZnLnhwb3M7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRleHRIQWxpZ24uZW5kOlxuICAgICAgICAgICAgICAgIGhBbGlnbiA9IGNmZy54cG9zO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUZXh0SEFsaWduLm1pZGRsZTpcbiAgICAgICAgICAgIGRlZmF1bHQ6IGhBbGlnbiA9IFRleHRIQWxpZ24ubWlkZGxlO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoY2ZnLnlwb3MpIHtcbiAgICAgICAgICAgIGNhc2UgVGV4dFZBbGlnbi50b3A6XG4gICAgICAgICAgICAgICAgeVNoaWZ0ID0gMC43O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUZXh0VkFsaWduLmNlbnRlcjpcbiAgICAgICAgICAgICAgICB5U2hpZnQgPSAwLjM1O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUZXh0VkFsaWduLmJvdHRvbTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgeVNoaWZ0ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgICAgIHg6IGNmZy54IHx8ICcnLFxuICAgICAgICAgICAgeTogY2ZnLnkgfHwgJycsXG4gICAgICAgICAgICBkeDogcm91bmQoY2ZnLmhPZmZzZXQgfHwgMCkgKyAnZW0nLFxuICAgICAgICAgICAgZHk6IHJvdW5kKChjZmcudk9mZnNldCB8fCAwKSArIHlTaGlmdCkgKyAnZW0nLFxuICAgICAgICAgICAgc3R5bGU6IGB0ZXh0LWFuY2hvcjoke2hBbGlnbn07ICR7Y2ZnLnN0eWxlIHx8ICcnfWAsXG4gICAgICAgICAgICBjbGFzczogY2ZnLmNzc0NsYXNzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCd0ZXh0JywgcGFyYW0sIHRleHQpO1xuICAgIH1cbiAgICByZWN0KHRsLCBhcmVhLCBzdHlsZSwgdGl0bGUpIHtcbiAgICAgICAgaWYgKGFyZWEudyA8IDApIHtcbiAgICAgICAgICAgIHRsLnggKz0gYXJlYS53O1xuICAgICAgICAgICAgYXJlYS53ID0gLWFyZWEudztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJlYS5oIDwgMCkge1xuICAgICAgICAgICAgdGwueSArPSBhcmVhLmg7XG4gICAgICAgICAgICBhcmVhLmggPSAtYXJlYS5oO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICAgICAgeDogcm91bmQodGwueCksIHk6IHJvdW5kKHRsLnkpLFxuICAgICAgICAgICAgd2lkdGg6IHJvdW5kKGFyZWEudykgKyAoYXJlYS53dW5pdCB8fCAnJyksXG4gICAgICAgICAgICBoZWlnaHQ6IHJvdW5kKGFyZWEuaCkgKyAoYXJlYS5odW5pdCB8fCAnJyksXG4gICAgICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgncmVjdCcsIHBhcmFtKTtcbiAgICB9XG4gICAgY2lyY2xlKGMsIHIsIHN0eWxlLCB0aXRsZSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdjaXJjbGUnLCB7IGN4OiByb3VuZChjLngpLCBjeTogcm91bmQoYy55KSwgcjogcm91bmQociksIHN0eWxlOiBzdHlsZSB9LCBleHBvcnRzLm0oJ3RpdGxlJywgdGl0bGUpKTtcbiAgICB9XG4gICAgY2xpcFJlY3QodGwsIGFyZWEsIGlkKSB7XG4gICAgICAgIGlmIChhcmVhLmggPCAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhhcmVhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgICAgIHg6IHJvdW5kKHRsLngpLCB5OiByb3VuZCh0bC55KSxcbiAgICAgICAgICAgIHdpZHRoOiByb3VuZChNYXRoLmFicyhhcmVhLncpKSArIChhcmVhLnd1bml0IHx8ICcnKSxcbiAgICAgICAgICAgIGhlaWdodDogcm91bmQoTWF0aC5hYnMoYXJlYS5oKSkgKyAoYXJlYS5odW5pdCB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnZGVmcycsIGV4cG9ydHMubSgnY2xpcFBhdGgnLCB7IGlkOiBpZCB9LCBleHBvcnRzLm0oJ3JlY3QnLCBwYXJhbSkpKTtcbiAgICB9XG4gICAgbGluZSh4MCwgeDEsIHkwLCB5MSwgY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICAgICAgICB4MTogcm91bmQoeDApLCB5MTogcm91bmQoeTApLFxuICAgICAgICAgICAgeDI6IHJvdW5kKHgxKSwgeTI6IHJvdW5kKHkxKSxcbiAgICAgICAgICAgIGNsYXNzOiBjc3NDbGFzc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdsaW5lJywgcGFyYW0pO1xuICAgIH1cbiAgICBob3JMaW5lKHgwLCB4MSwgeSwgY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICAgICAgICB4MTogcm91bmQoeDApLCB5MTogcm91bmQoeSksXG4gICAgICAgICAgICB4Mjogcm91bmQoeDEpLCB5Mjogcm91bmQoeSksXG4gICAgICAgICAgICBjbGFzczogY3NzQ2xhc3NcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubSgnbGluZScsIHBhcmFtKTtcbiAgICB9XG4gICAgdmVyTGluZSh4LCB5MCwgeTEsIGNzc0NsYXNzKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICAgICAgeDE6IHJvdW5kKHgpLCB5MTogcm91bmQoeTApLFxuICAgICAgICAgICAgeDI6IHJvdW5kKHgpLCB5Mjogcm91bmQoeTEpLFxuICAgICAgICAgICAgY2xhc3M6IGNzc0NsYXNzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ2xpbmUnLCBwYXJhbSk7XG4gICAgfVxuICAgIHBvbHlsaW5lKGRhdGEsIHgsIHksIHNjYWxlcywgaWQsIHN0eWxlLCB0aXRsZSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdwb2x5bGluZScsIHtcbiAgICAgICAgICAgICdjbGlwLXBhdGgnOiBpZCA/IGB1cmwoIyR7aWR9KWAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgICAgICBwb2ludHM6IGRhdGEubWFwKChyb3cpID0+IGAke3JvdW5kKHNjYWxlcy54LmNvbnZlcnQocm93W3hdKSl9LCR7cm91bmQoc2NhbGVzLnkuY29udmVydChyb3dbeV0pKX1gKS5qb2luKCcgJylcbiAgICAgICAgfSwgZXhwb3J0cy5tKCd0aXRsZScsIHRpdGxlKSk7XG4gICAgfVxuICAgIHBvbHlnb24oZGF0YUZvcmUsIGRhdGFCYWNrLCB4LCB5Rm9yZSwgeUJhY2ssIHNjYWxlcywgaWQsIHN0eWxlLCB0aXRsZSkge1xuICAgICAgICBjb25zdCBpbmRleGVkID0gKHggPT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHN4ID0gKF94KSA9PiByb3VuZChzY2FsZXMueC5jb252ZXJ0KF94KSk7XG4gICAgICAgIGNvbnN0IHN5ID0gKF95KSA9PiByb3VuZChzY2FsZXMueS5jb252ZXJ0KF95KSk7XG4gICAgICAgIGNvbnN0IGNsaXAgPSBpZCA/IGB1cmwoIyR7aWR9KWAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IGRhdGFGb3JlLm1hcCgocm93LCBpKSA9PiBgJHtzeChpbmRleGVkID8gaSA6IHJvd1t4XSl9LCR7c3kocm93W3lGb3JlXSl9YClcbiAgICAgICAgICAgIC5jb25jYXQoZGF0YUJhY2subWFwKChyb3csIGkpID0+IGAke3N4KGluZGV4ZWQgPyAoZGF0YUJhY2subGVuZ3RoIC0gaSAtIDEpIDogcm93W3hdKX0sJHtzeSh5QmFjayA/IHJvd1t5QmFja10gOiAwKX1gKSkuam9pbignICcpO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tKCdwb2x5Z29uJywgeyAnY2xpcC1wYXRoJzogY2xpcCwgc3R5bGU6IHN0eWxlLCBwb2ludHM6IHBvaW50cyB9LCBleHBvcnRzLm0oJ3RpdGxlJywgdGl0bGUpKTtcbiAgICB9XG4gICAgc2hhcGUocG9pbnRzLCBpZCwgc3R5bGUsIHRpdGxlKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3BvbHlsaW5lJywge1xuICAgICAgICAgICAgJ2NsaXAtcGF0aCc6IGlkID8gYHVybCgjJHtpZH0pYCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgICAgIHBvaW50czogcG9pbnRzLm1hcCgocm93KSA9PiBgJHtyb3VuZChyb3dbMF0pfSwke3JvdW5kKHJvd1sxXSl9YCkuam9pbignICcpXG4gICAgICAgIH0sIGV4cG9ydHMubSgndGl0bGUnLCB0aXRsZSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuU1ZHRWxlbSA9IFNWR0VsZW07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMVpIUld4bGJTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlUVmtkRmJHVnRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFXRXNVVUZCUVN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQmVVVndReXhUUVVGblFpeExRVUZMTEVOQlFVVXNSMEZCVlR0SlFVTTNRaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRemxDTEVsQlFVa3NUVUZCVFN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOMlFpeFBRVUZQTEUxQlFVMHNRMEZCUXp0TFFVTnFRanRKUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyeENMRU5CUVVNN1FVRk9SQ3h6UWtGTlF6dEJRVVZFTEVsQlFWa3NWVUZKV0R0QlFVcEVMRmRCUVZrc1ZVRkJWVHRKUVVOc1FpdzJRa0ZCYVVJc1EwRkJRVHRKUVVOcVFpd3JRa0ZCYTBJc1EwRkJRVHRKUVVOc1FpeDVRa0ZCWlN4RFFVRkJPMEZCUTI1Q0xFTkJRVU1zUlVGS1Z5eFZRVUZWTEVkQlFWWXNhMEpCUVZVc1MwRkJWaXhyUWtGQlZTeFJRVWx5UWp0QlFVVkVMRWxCUVZrc1ZVRkpXRHRCUVVwRUxGZEJRVmtzVlVGQlZUdEpRVU5zUWl4NVFrRkJaU3hEUVVGQk8wbEJRMllzSzBKQlFXdENMRU5CUVVFN1NVRkRiRUlzSzBKQlFXdENMRU5CUVVFN1FVRkRkRUlzUTBGQlF5eEZRVXBYTEZWQlFWVXNSMEZCVml4clFrRkJWU3hMUVVGV0xHdENRVUZWTEZGQlNYSkNPMEZCUlVRc1RVRkJjMElzVDBGQlR6dEpRVTE2UWl4SlFVRkpMRU5CUVVNc1IwRkJXU3hGUVVGRkxFbEJRVmM3VVVGRE1VSXNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMllzU1VGQlNTeE5RVUZwUWl4RFFVRkRPMUZCUTNSQ0xGRkJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlR0WlFVTmlMRXRCUVVzc1ZVRkJWU3hEUVVGRExFdEJRVXM3WjBKQlFVY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU03WjBKQlFVTXNUVUZCVFR0WlFVTnFSQ3hMUVVGTExGVkJRVlVzUTBGQlF5eEhRVUZITzJkQ1FVRkxMRTFCUVUwc1IwRkJSeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETzJkQ1FVRkRMRTFCUVUwN1dVRkRha1FzUzBGQlN5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUTNaQ0xFOUJRVThzUTBGQlF5eERRVUZuUWl4TlFVRk5MRWRCUVVjc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF6dFRRVU4wUkR0UlFVTkVMRkZCUVU4c1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU5pTEV0QlFVc3NWVUZCVlN4RFFVRkRMRWRCUVVjN1owSkJRVXNzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXp0blFrRkJReXhOUVVGTk8xbEJRelZETEV0QlFVc3NWVUZCVlN4RFFVRkRMRTFCUVUwN1owSkJRVVVzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXp0blFrRkJReXhOUVVGTk8xbEJRemRETEV0QlFVc3NWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVOMlFqdG5Ra0ZCZDBJc1RVRkJUU3hIUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZCUXl4TlFVRk5PMU5CUXpsRE8xRkJRMFFzVFVGQlRTeExRVUZMTEVkQlFVYzdXVUZEVml4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTzFsQlEyUXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU5rTEVWQlFVVXNSVUZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzU1VGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpPMWxCUXk5Q0xFVkJRVVVzUlVGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhKUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRWxCUVVrN1dVRkRlRU1zUzBGQlN5eEZRVUZGTEdWQlFXVXNUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhMUVVGTExFbEJRVVVzUlVGQlJTeEZRVUZGTzFsQlEyaEVMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVUdFRRVU4wUWl4RFFVRkRPMUZCUTBZc1QwRkJUeXhUUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOc1F5eERRVUZETzBsQlVVUXNTVUZCU1N4RFFVRkRMRVZCUVZFc1JVRkJSU3hKUVVGVExFVkJRVVVzUzBGQldTeEZRVUZGTEV0QlFXRTdVVUZEYWtRc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVTmFMRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm1MRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNCQ08xRkJRMFFzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSVHRaUVVOYUxFVkJRVVVzUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVObUxFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM0JDTzFGQlEwUXNUVUZCVFN4TFFVRkxMRWRCUVVjN1dVRkRWaXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJVU3hEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRjRU1zUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkZMRVZCUVVVc1EwRkJRenRaUVVONFF5eE5RVUZOTEVWQlFVVXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVVc1JVRkJSU3hEUVVGRE8xbEJRM2hETEV0QlFVc3NSVUZCUlN4TFFVRkxPMU5CUTJZc1EwRkJRenRSUVVOR0xFOUJRVThzVTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlVVUXNUVUZCVFN4RFFVRkRMRU5CUVU4c1JVRkJSU3hEUVVGUkxFVkJRVVVzUzBGQldTeEZRVUZGTEV0QlFXRTdVVUZEYWtRc1QwRkJUeXhUUVVGRExFTkJRVU1zVVVGQlVTeEZRVU5pTEVWQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNTMEZCU3l4RlFVRkZMRVZCUXpkRUxGTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUTNCQ0xFTkJRVU03U1VGRFRpeERRVUZETzBsQlVVUXNVVUZCVVN4RFFVRkRMRVZCUVZFc1JVRkJSU3hKUVVGVExFVkJRVVVzUlVGQlV6dFJRVU16UXl4SlFVRkpMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTzFsQlExb3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFRRVU55UWp0UlFVTlBMRTFCUVUwc1MwRkJTeXhIUVVGSE8xbEJRMVlzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVkVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM0JETEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVsQlFVVXNSVUZCUlN4RFFVRkRPMWxCUTJ4RUxFMUJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVVVzUlVGQlJTeERRVUZETzFOQlEzSkVMRU5CUVVNN1VVRkRSaXhQUVVGUExGTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNVMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVTXNSVUZCUlN4VFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTm9SU3hEUVVGRE8wbEJWVVFzU1VGQlNTeERRVUZETEVWQlFWTXNSVUZCUlN4RlFVRlRMRVZCUVVVc1JVRkJVeXhGUVVGRkxFVkJRVk1zUlVGQlJTeFJRVUZuUWp0UlFVTTNSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ6dFpRVU5XTEVWQlFVVXNSVUZCUlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNN1dVRkROVUlzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJTU3hGUVVGRkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXp0WlFVTTVRaXhMUVVGTExFVkJRVVVzVVVGQlVUdFRRVU5zUWl4RFFVRkRPMUZCUTBZc1QwRkJUeXhUUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUXpWQ0xFTkJRVU03U1VGVFJDeFBRVUZQTEVOQlFVTXNSVUZCVXl4RlFVRkZMRVZCUVZNc1JVRkJSU3hEUVVGUkxFVkJRVVVzVVVGQlowSTdVVUZEY0VRc1RVRkJUU3hMUVVGTExFZEJRVWM3V1VGRFZpeEZRVUZGTEVWQlFVVXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpOQ0xFVkJRVVVzUlVGQlJTeExRVUZMTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETTBJc1MwRkJTeXhGUVVGRkxGRkJRVkU3VTBGRGJFSXNRMEZCUXp0UlFVTkdMRTlCUVU4c1UwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTTFRaXhEUVVGRE8wbEJVMFFzVDBGQlR5eERRVUZETEVOQlFWRXNSVUZCUlN4RlFVRlRMRVZCUVVVc1JVRkJVeXhGUVVGRkxGRkJRV2RDTzFGQlEzQkVMRTFCUVUwc1MwRkJTeXhIUVVGSE8xbEJRMVlzUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXp0WlFVTXpRaXhGUVVGRkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hMUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6TkNMRXRCUVVzc1JVRkJSU3hSUVVGUk8xTkJRMnhDTEVOQlFVTTdVVUZEUml4UFFVRlBMRk5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdTVUZETlVJc1EwRkJRenRKUVdORUxGRkJRVkVzUTBGQlF5eEpRVUZqTEVWQlFVVXNRMEZCVVN4RlFVRkZMRU5CUVZFc1JVRkJSU3hOUVVGakxFVkJRVVVzUlVGQlV5eEZRVUZGTEV0QlFXRXNSVUZCUlN4TFFVRmhPMUZCUTJoSExFOUJRVThzVTBGQlF5eERRVUZETEZWQlFWVXNSVUZCUlR0WlFVTnFRaXhYUVVGWExFVkJRVVVzUlVGQlJTeERRVUZCTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTzFsQlF6RkRMRXRCUVVzc1JVRkJSU3hMUVVGTE8xbEJRMW9zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGWkxFVkJRVVVzUlVGQlJTeERRVU01UWl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMU5CUTNwR0xFVkJRVVVzVTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRekZDTEVOQlFVTTdTVUZqUkN4UFFVRlBMRU5CUVVNc1VVRkJhMElzUlVGQlJTeFJRVUZyUWl4RlFVRkZMRU5CUVZFc1JVRkJSU3hMUVVGWkxFVkJRVVVzUzBGQldTeEZRVUZGTEUxQlFXTXNSVUZCUlN4RlFVRlRMRVZCUVVVc1MwRkJZU3hGUVVGRkxFdEJRV0U3VVVGRGVra3NUVUZCVFN4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRExFdEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEYUVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZUTEVWQlFVVXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM1JFTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjBSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVRXNRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTXpReXhOUVVGTkxFMUJRVTBzUjBGRFNpeFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJXU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlEzQkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlFTeERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJRU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXp0aFFVTjJSQ3hOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVZrc1JVRkJSU3hEUVVGUkxFVkJRVVVzUlVGQlJTeERRVU53UXl4SFFVRkhMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVUVzUTBGQlF5eERRVUZCTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkJMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVFc1EwRkJReXhEUVVGQkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGRGJFWXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5pTEU5QlFVOHNVMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hGUVVGRkxGZEJRVmNzUlVGQlJTeEpRVUZKTEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNVMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEyaEhMRU5CUVVNN1NVRmpSQ3hMUVVGTExFTkJRVU1zVFVGQlowSXNSVUZCUlN4RlFVRlRMRVZCUVVVc1MwRkJXU3hGUVVGRkxFdEJRV0U3VVVGRE1VUXNUMEZCVHl4VFFVRkRMRU5CUVVNc1ZVRkJWU3hGUVVGRk8xbEJRMnBDTEZkQlFWY3NSVUZCUlN4RlFVRkZMRU5CUVVFc1EwRkJReXhEUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNN1dVRkRNVU1zUzBGQlN5eEZRVUZGTEV0QlFVczdXVUZEV2l4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFWa3NSVUZCUlN4RlFVRkZMRU5CUTJoRExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXp0VFFVTnFSQ3hGUVVGRkxGTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNNVFpeERRVUZETzBOQlEwbzdRVUV6VFVRc01FSkJNazFESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNkYXRhYl8xID0gcmVxdWlyZShcImhzZGF0YWJcIik7XG5jb25zdCBBeGVzXzEgPSByZXF1aXJlKFwiLi9BeGVzXCIpO1xuY29uc3QgaHN1dGlsXzEgPSByZXF1aXJlKFwiaHN1dGlsXCIpO1xuZnVuY3Rpb24gYWRkVGlja051bWJlcih0LCB2KSB7XG4gICAgdC5sYWJlbHMucHVzaCh7IHBvczogdiwgdGV4dDogJycgKyBNYXRoLnJvdW5kKHYgKiAxMDAwMDAwKSAvIDEwMDAwMDAgfSk7XG59XG5mdW5jdGlvbiBhZGRUaWNrRGF0ZSh0LCB2LCBmbXQpIHtcbiAgICB0LmxhYmVscy5wdXNoKHsgcG9zOiB2LmdldFRpbWUoKSwgdGV4dDogaHN1dGlsXzEuZGF0ZShmbXQsIHYpIH0pO1xufVxuZnVuY3Rpb24gbGluU2NhbGVUaWNrTWFya3MoZG9tLCB0aWNrcywgbnVtVGlja3MpIHtcbiAgICBmdW5jdGlvbiBhZGRUaWNrcyh1bml0LCB0aWNrcykge1xuICAgICAgICBsZXQgZXhwID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMCh1bml0KSkpO1xuICAgICAgICB1bml0ID0gTWF0aC5mbG9vcih1bml0IC8gZXhwKSAqIGV4cDtcbiAgICAgICAgY29uc3QgbWluID0gTWF0aC5mbG9vcihkb21bMF0gLyB1bml0KSAqIHVuaXQ7XG4gICAgICAgIGNvbnN0IG1heCA9IE1hdGguY2VpbChkb21bMV0gLyB1bml0KSAqIHVuaXQ7XG4gICAgICAgIGZvciAobGV0IHYgPSBtaW47IHYgPD0gbWF4OyB2ICs9IHVuaXQpIHtcbiAgICAgICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MsIHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bml0O1xuICAgIH1cbiAgICBjb25zdCBtYWpvclVuaXQgPSBhZGRUaWNrcygoZG9tWzFdIC0gZG9tWzBdKSAvIG51bVRpY2tzLCB0aWNrcy5tYWpvcik7XG4gICAgYWRkVGlja3MobWFqb3JVbml0IC8gbnVtVGlja3MsIHRpY2tzLm1pbm9yKTtcbn1cbmZ1bmN0aW9uIHBlcmNlbnRTY2FsZVRpY2tNYXJrcyhkb20sIHRpY2tzLCBudW1UaWNrcykge1xuICAgIGNvbnN0IGZvcm1hdFBlcmNlbnQgPSAobSkgPT4gbS50ZXh0ID0gYCR7TWF0aC5yb3VuZChtLnBvcykgKiAxMDB9JWA7XG4gICAgbGluU2NhbGVUaWNrTWFya3MoZG9tLCB0aWNrcywgbnVtVGlja3MpO1xuICAgIHRpY2tzLm1ham9yLmxhYmVscy5mb3JFYWNoKGZvcm1hdFBlcmNlbnQpO1xuICAgIHRpY2tzLm1pbm9yLmxhYmVscy5mb3JFYWNoKGZvcm1hdFBlcmNlbnQpO1xufVxuZnVuY3Rpb24gbG9nU2NhbGVUaWNrTWFya3MoZG9tLCB0aWNrcykge1xuICAgIGRvbVswXSA9IE1hdGgubWF4KGRvbVswXSwgMWUtMjApO1xuICAgIGRvbVsxXSA9IE1hdGgubWF4KGRvbVsxXSwgMWUtMjApO1xuICAgIGxldCBkaWYgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZzEwKGRvbVsxXSAtIGRvbVswXSkpKTtcbiAgICBsZXQgbWluID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMChkb21bMF0pKSk7XG4gICAgbGV0IG1heCA9IE1hdGgucG93KDEwLCBNYXRoLmNlaWwoTWF0aC5sb2cxMChkb21bMV0pKSk7XG4gICAgaWYgKGRpZiA+IG1pbikge1xuICAgICAgICBmb3IgKGxldCB2ID0gbWluOyB2IDw9IG1heDsgdiAqPSAxMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMjA7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAxICYmIHYgKiBpIDwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MubWFqb3IsIHYgKiBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaSAlIDEwID09PSAwKSB7IH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpIDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkVGlja051bWJlcih0aWNrcy5taW5vciwgdiAqIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRUaWNrTnVtYmVyKHRpY2tzLm1pbm9yLCB2ICogaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtaW4gPSBNYXRoLmZsb29yKGRvbVswXSAvIGRpZikgKiBkaWY7XG4gICAgICAgIG1heCA9IE1hdGguY2VpbChkb21bMV0gLyBkaWYpICogZGlmO1xuICAgICAgICBpZiAoKG1heCAtIG1pbikgLyBkaWYgPCA0KSB7XG4gICAgICAgICAgICBkaWYgLz0gMjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCB2ID0gbWluOyB2IDw9IG1heDsgdiArPSBkaWYpIHtcbiAgICAgICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MubWFqb3IsIHYpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MubWFqb3IsIG1pbik7XG4gICAgICAgIGFkZFRpY2tOdW1iZXIodGlja3MubWFqb3IsIG1heCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGF0ZVNjYWxlVGlja01hcmtzKGRvbSwgdGlja3MsIGZtdCA9ICclTU0vJURELyVZWScpIHtcbiAgICBmdW5jdGlvbiBtYWpvclRpY2tJbmNyKGQpIHtcbiAgICAgICAgY29uc3QgdW5pdHMgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IG1pbnMgPSBoc3V0aWxfMS5tcy50b01pbnV0ZXMoZCk7XG4gICAgICAgIGNvbnN0IGRheXMgPSBoc3V0aWxfMS5tcy50b0RheXMoZCk7XG4gICAgICAgIGlmIChkYXlzID4gMzY1KSB7XG4gICAgICAgICAgICB1bml0c1swXSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF5cyA+IDI3MCkge1xuICAgICAgICAgICAgdW5pdHNbMV0gPSAzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRheXMgPiAyMCkge1xuICAgICAgICAgICAgdW5pdHNbMV0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRheXMgPiA0KSB7XG4gICAgICAgICAgICB1bml0c1syXSA9IDc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWlucyA+IDMwMCkge1xuICAgICAgICAgICAgdW5pdHNbMl0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbnMgPiA3NSkge1xuICAgICAgICAgICAgdW5pdHNbM10gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbnMgPiA0NSkge1xuICAgICAgICAgICAgdW5pdHNbNF0gPSAxNTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaW5zID4gMTApIHtcbiAgICAgICAgICAgIHVuaXRzWzRdID0gNTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaW5zID4gMikge1xuICAgICAgICAgICAgdW5pdHNbNF0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdW5pdHNbNV0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG4gICAgZnVuY3Rpb24gcm91bmQoZCwgdW5pdHMsIHJuZCkge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBpZiAodW5pdHNbMF0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBEYXRlKHJuZChkLmdldEZ1bGxZZWFyKCkgLyB1bml0c1swXSkgKiB1bml0c1swXSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdHNbMV0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgcm5kKGQuZ2V0TW9udGgoKSAvIHVuaXRzWzFdKSAqIHVuaXRzWzFdLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0c1syXSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIHJuZChkLmdldERhdGUoKSAvIHVuaXRzWzJdKSAqIHVuaXRzWzJdLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0c1szXSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpLCBybmQoZC5nZXRIb3VycygpIC8gdW5pdHNbM10pICogdW5pdHNbM10sIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRzWzRdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSwgZC5nZXREYXRlKCksIGQuZ2V0SG91cnMoKSwgcm5kKGQuZ2V0TWludXRlcygpIC8gdW5pdHNbNF0pICogdW5pdHNbNF0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRzWzVdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSwgZC5nZXREYXRlKCksIGQuZ2V0SG91cnMoKSwgZC5nZXRNaW51dGVzKCksIHJuZChkLmdldFNlY29uZHMoKSAvIHVuaXRzWzVdKSAqIHVuaXRzWzVdLCAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBkYXRlRG9tID0gW1xuICAgICAgICAodHlwZW9mIGRvbVswXSA9PT0gJ251bWJlcicpID8gbmV3IERhdGUoZG9tWzBdKSA6IGRvbVswXSxcbiAgICAgICAgKHR5cGVvZiBkb21bMV0gPT09ICdudW1iZXInKSA/IG5ldyBEYXRlKGRvbVsxXSkgOiBkb21bMV1cbiAgICBdO1xuICAgIGlmIChpc05hTihkYXRlRG9tWzBdLmdldFRpbWUoKSkpIHtcbiAgICAgICAgZGF0ZURvbVswXSA9IG5ldyBEYXRlKCcxLzEvMTk4MCcpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oZGF0ZURvbVsxXS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIGRhdGVEb21bMF0gPSBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBjb25zdCBpbmNyID0gbWFqb3JUaWNrSW5jcihkYXRlRG9tWzFdLmdldFRpbWUoKSAtIGRhdGVEb21bMF0uZ2V0VGltZSgpKTtcbiAgICBjb25zdCBkYXRlMCA9IHJvdW5kKGRhdGVEb21bMF0sIGluY3IsIE1hdGguZmxvb3IpO1xuICAgIGNvbnN0IGRhdGUxID0gcm91bmQoZGF0ZURvbVsxXSwgaW5jciwgTWF0aC5jZWlsKTtcbiAgICBsZXQgZCA9IGRhdGUwO1xuICAgIHdoaWxlIChkIDw9IGRhdGUxKSB7XG4gICAgICAgIGFkZFRpY2tEYXRlKHRpY2tzLm1ham9yLCBkLCBmbXQpO1xuICAgICAgICBkID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpICsgaW5jclswXSwgZC5nZXRNb250aCgpICsgaW5jclsxXSwgZC5nZXREYXRlKCkgKyBpbmNyWzJdLCBkLmdldEhvdXJzKCkgKyBpbmNyWzNdLCBkLmdldE1pbnV0ZXMoKSArIGluY3JbNF0sIGQuZ2V0U2Vjb25kcygpICsgaW5jcls1XSk7XG4gICAgfVxuICAgIDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRpY2tMYWJlbHModHlwZSwgZG9tYWluLCBudW1UaWNrcywgZm10KSB7XG4gICAgY29uc3Qgc29ydCA9IChhLCBiKSA9PiBhLnBvcyAtIGIucG9zO1xuICAgIGZ1bmN0aW9uIHNvcnRUaWNrcygpIHtcbiAgICAgICAgdGlja3MubWlub3IubGFiZWxzLnNvcnQoc29ydCk7XG4gICAgICAgIHRpY2tzLm1ham9yLmxhYmVscy5zb3J0KHNvcnQpO1xuICAgIH1cbiAgICA7XG4gICAgY29uc3QgZG9tID0gW2RvbWFpblswXSwgZG9tYWluWzFdXTtcbiAgICBjb25zdCB0aWNrcyA9IHtcbiAgICAgICAgbWFqb3I6IHsgbWFya3M6IFtdLCBsYWJlbHM6IFtdIH0sXG4gICAgICAgIG1pbm9yOiB7IG1hcmtzOiBbXSwgbGFiZWxzOiBbXSB9XG4gICAgfTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmxvZzpcbiAgICAgICAgICAgIGxvZ1NjYWxlVGlja01hcmtzKGRvbSwgdGlja3MpO1xuICAgICAgICAgICAgc29ydFRpY2tzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmRhdGU6XG4gICAgICAgICAgICBkYXRlU2NhbGVUaWNrTWFya3MoZG9tLCB0aWNrcywgZm10KTtcbiAgICAgICAgICAgIHNvcnRUaWNrcygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5wZXJjZW50OlxuICAgICAgICAgICAgcGVyY2VudFNjYWxlVGlja01hcmtzKGRvbSwgdGlja3MsIG51bVRpY2tzKTtcbiAgICAgICAgICAgIHNvcnRUaWNrcygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5vcmRpbmFsOiBicmVhaztcbiAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLm5vbWluYWw6IGJyZWFrO1xuICAgICAgICBjYXNlIEF4ZXNfMS5BeGVzLnR5cGUuaW5kZXg6XG4gICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5saW5lYXI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBsaW5TY2FsZVRpY2tNYXJrcyhkb20sIHRpY2tzLCBudW1UaWNrcyk7XG4gICAgICAgICAgICBzb3J0VGlja3MoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xufVxuY2xhc3MgU2NhbGUge1xuICAgIGNvbnN0cnVjdG9yKGNmZykge1xuICAgICAgICB0aGlzLmNmZyA9IGNmZztcbiAgICAgICAgdGhpcy50eXBlVmFsID0gQXhlc18xLkF4ZXMudHlwZS5saW5lYXI7XG4gICAgICAgIHRoaXMucmFuZ2VWYWwgPSBbMCwgMV07XG4gICAgICAgIHRoaXMuZG9tVmFsID0gWzAsIDFdO1xuICAgICAgICB0aGlzLmRvbU1pbkF1dG8gPSAwO1xuICAgICAgICB0aGlzLmRvbU1heEF1dG8gPSAwO1xuICAgICAgICB0aGlzLnR5cGVWYWwgPSBjZmcudHlwZTtcbiAgICAgICAgdGhpcy5kb21haW4oY2ZnLmRvbWFpbik7XG4gICAgfVxuICAgIHNldExhYmVsRm9ybWF0KGxhYmVsRm10KSB7XG4gICAgICAgIHRoaXMubGFiZWxGbXQgPSBsYWJlbEZtdDtcbiAgICB9XG4gICAgcmFuZ2Uocikge1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgdGhpcy5yYW5nZVZhbCA9IHI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VWYWw7XG4gICAgfVxuICAgIGRvbWFpbihkb20pIHtcbiAgICAgICAgaWYgKGRvbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NhbGVUeXBlKCkgPT09IEF4ZXNfMS5BeGVzLnR5cGUuZGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9tWzBdID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZG9tWzFdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbVZhbFswXSA9IChkb21bMF0gPT09ICdhdXRvJykgPyAwIDogRGF0ZS5wYXJzZShkb21bMF0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbVZhbFsxXSA9IChkb21bMV0gPT09ICdhdXRvJykgPyAxIDogRGF0ZS5wYXJzZShkb21bMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9tVmFsWzBdID0gKGRvbVswXSA9PT0gJ2F1dG8nKSA/IDAgOiBkb21bMF07XG4gICAgICAgICAgICAgICAgdGhpcy5kb21WYWxbMV0gPSAoZG9tWzFdID09PSAnYXV0bycpID8gMSA6IGRvbVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZG9tWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGlnaHQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbU1pbkF1dG8gPSAyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21NaW5BdXRvID0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhpcy5kb21NaW5BdXRvID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZG9tWzFdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGlnaHQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbU1heEF1dG8gPSAyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21NYXhBdXRvID0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhpcy5kb21NYXhBdXRvID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50eXBlVmFsID09PSBBeGVzXzEuQXhlcy50eXBlLmxvZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9tVmFsWzFdIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbVZhbFsxXSA9IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZG9tVmFsWzBdIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbVZhbFswXSA9IHRoaXMuZG9tVmFsWzFdIC8gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZG9tVmFsO1xuICAgIH1cbiAgICBzY2FsZVR5cGUocykge1xuICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgc3dpdGNoIChzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBoc2RhdGFiXzEuRGF0YS50eXBlLmRhdGU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVZhbCA9IEF4ZXNfMS5BeGVzLnR5cGUuZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBoc2RhdGFiXzEuRGF0YS50eXBlLm5hbWU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVZhbCA9IEF4ZXNfMS5BeGVzLnR5cGUubm9taW5hbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBoc2RhdGFiXzEuRGF0YS50eXBlLnBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVZhbCA9IEF4ZXNfMS5BeGVzLnR5cGUucGVyY2VudDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBoc2RhdGFiXzEuRGF0YS50eXBlLm51bWJlcjpcbiAgICAgICAgICAgICAgICBjYXNlIGhzZGF0YWJfMS5EYXRhLnR5cGUuY3VycmVuY3k6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhpcy50eXBlVmFsID0gQXhlc18xLkF4ZXMudHlwZS5saW5lYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZVZhbDtcbiAgICB9XG4gICAgc2V0QXV0b0RvbWFpbihkb20pIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSBjcmVhdGVUaWNrTGFiZWxzKHRoaXMuc2NhbGVUeXBlKCksIGRvbSwgNCwgdGhpcy5sYWJlbEZtdCk7XG4gICAgICAgIHN3aXRjaCAodGhpcy5kb21NaW5BdXRvKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5kb21WYWxbMF0gPSB0aWNrcy5tYWpvci5sYWJlbHNbMF0gPyB0aWNrcy5tYWpvci5sYWJlbHNbMF0ucG9zIDogZG9tWzBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMuZG9tVmFsWzBdID0gZG9tWzBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5kb21NYXhBdXRvKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5kb21WYWxbMV0gPSB0aWNrcy5tYWpvci5sYWJlbHMubGVuZ3RoID4gMSA/IHRpY2tzLm1ham9yLmxhYmVsc1t0aWNrcy5tYWpvci5sYWJlbHMubGVuZ3RoIC0gMV0ucG9zIDogZG9tWzFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMuZG9tVmFsWzFdID0gZG9tWzFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRpY2tzKG51bVRpY2tzID0gNCkge1xuICAgICAgICBmdW5jdGlvbiBtYXJrc0Zyb21MYWJlbHModGlja3MsIHR5cGUpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5ub21pbmFsOlxuICAgICAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5pbmRleDpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtTGFiZWxzID0gdGlja3MubWFqb3IubGFiZWxzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdGlja3MubWFqb3IubWFya3MgPSBBcnJheShudW1MYWJlbHMgKyAxKS5maWxsKDEpLm1hcCgoZSwgaSkgPT4gaSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tzLm1pbm9yLm1hcmtzID0gdGlja3MubWlub3IubGFiZWxzID8gdGlja3MubWlub3IubGFiZWxzLm1hcCgobCkgPT4gbC5wb3MpIDogW107XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5sb2c6XG4gICAgICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmRhdGU6XG4gICAgICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLnBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLm9yZGluYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmxpbmVhcjpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aWNrcy5tYWpvci5tYXJrcyA9IHRpY2tzLm1ham9yLmxhYmVscyA/IHRpY2tzLm1ham9yLmxhYmVscy5tYXAoKGwpID0+IGwucG9zKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aWNrcy5taW5vci5tYXJrcyA9IHRpY2tzLm1pbm9yLmxhYmVscyA/IHRpY2tzLm1pbm9yLmxhYmVscy5tYXAoKGwpID0+IGwucG9zKSA6IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvbSA9IFt0aGlzLmRvbWFpbigpWzBdLCB0aGlzLmRvbWFpbigpWzFdXTtcbiAgICAgICAgY29uc3QgaW5SYW5nZSA9ICh0KSA9PiB0LnBvcyA+PSBkb21bMF0gJiYgdC5wb3MgPD0gZG9tWzFdO1xuICAgICAgICBjb25zdCB0aWNrcyA9IGNyZWF0ZVRpY2tMYWJlbHModGhpcy5zY2FsZVR5cGUoKSwgdGhpcy5kb21haW4oKSwgbnVtVGlja3MsIHRoaXMubGFiZWxGbXQpO1xuICAgICAgICB0aWNrcy5taW5vci5sYWJlbHMgPSB0aWNrcy5taW5vci5sYWJlbHMuZmlsdGVyKGluUmFuZ2UpO1xuICAgICAgICB0aWNrcy5tYWpvci5sYWJlbHMgPSB0aWNrcy5tYWpvci5sYWJlbHMuZmlsdGVyKGluUmFuZ2UpO1xuICAgICAgICBpZiAodGlja3MubWFqb3IubGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGlja3MubWFqb3IubGFiZWxzID0gdGlja3MubWlub3IubGFiZWxzO1xuICAgICAgICAgICAgdGlja3MubWlub3IubGFiZWxzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgbWFya3NGcm9tTGFiZWxzKHRpY2tzLCB0aGlzLnNjYWxlVHlwZSgpKTtcbiAgICAgICAgcmV0dXJuIHRpY2tzO1xuICAgIH1cbiAgICBjb252ZXJ0KGRvbVZhbCkge1xuICAgICAgICBjb25zdCBkb20gPSB0aGlzLmRvbWFpbigpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucmFuZ2UoKTtcbiAgICAgICAgY29uc3QgZG9tTWluID0gZG9tWzBdO1xuICAgICAgICBjb25zdCBkb21NYXggPSBkb21bMV07XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zY2FsZVR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmxvZzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLmxvZyhkb21WYWwgLyBkb21NaW4pIC8gTWF0aC5sb2coZG9tTWF4IC8gZG9tTWluKSAqIChyYW5nZVsxXSAtIHJhbmdlWzBdKSArIHJhbmdlWzBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLm5vbWluYWw6IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEF4ZXNfMS5BeGVzLnR5cGUucGVyY2VudDpcbiAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5pbmRleDpcbiAgICAgICAgICAgIGNhc2UgQXhlc18xLkF4ZXMudHlwZS5vcmRpbmFsOlxuICAgICAgICAgICAgY2FzZSBBeGVzXzEuQXhlcy50eXBlLmxpbmVhcjpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGRvbVZhbCAtIGRvbU1pbikgLyAoZG9tTWF4IC0gZG9tTWluKSAqIChyYW5nZVsxXSAtIHJhbmdlWzBdKSArIHJhbmdlWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0cy5TY2FsZSA9IFNjYWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVTJOaGJHVXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12VTJOaGJHVXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGTFFTeHhRMEZIZFVNN1FVRkRka01zYVVOQlFYTkRPMEZCUTNSRExHMURRVUZ6UXp0QlFWRjBReXhUUVVGVExHRkJRV0VzUTBGQlF5eERRVUZWTEVWQlFVVXNRMEZCVVR0SlFVTjJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVXNSMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRM1JGTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmRCUVZjc1EwRkJReXhEUVVGVkxFVkJRVVVzUTBGQlRTeEZRVUZGTEVkQlFWVTdTVUZETDBNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVsQlFVa3NSVUZCUXl4aFFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTXpSQ3hEUVVGRE8wRkJTVVFzVTBGQlV5eHBRa0ZCYVVJc1EwRkJReXhIUVVGWkxFVkJRVVVzUzBGQlZ5eEZRVUZGTEZGQlFXVTdTVUZEYWtVc1UwRkJVeXhSUVVGUkxFTkJRVU1zU1VGQlZ5eEZRVUZGTEV0QlFXTTdVVUZEZWtNc1NVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU55UkN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVNc1IwRkJSeXhEUVVGRE8xRkJRMnhETEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGRExFbEJRVWtzUTBGQlF6dFJRVU42UXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEZUVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVVVzU1VGQlNTeEZRVUZGTzFsQlFVVXNZVUZCWVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dFRRVUZGTzFGQlF6ZEVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMmhDTEVOQlFVTTdTVUZEUkN4TlFVRk5MRk5CUVZNc1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NVVUZCVVN4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU4wUlN4UlFVRlJMRU5CUVVNc1UwRkJVeXhIUVVGSExGRkJRVkVzUlVGQlJTeExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRhRVFzUTBGQlF6dEJRVVZFTEZOQlFWTXNjVUpCUVhGQ0xFTkJRVU1zUjBGQldTeEZRVUZGTEV0QlFWY3NSVUZCUlN4UlFVRmxPMGxCUTNKRkxFMUJRVTBzWVVGQllTeEhRVUZITEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1NVRkROVVVzYVVKQlFXbENMRU5CUVVNc1IwRkJSeXhGUVVGRkxFdEJRVXNzUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXp0SlFVTjRReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU03U1VGRE1VTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMEZCUlRsRExFTkJRVU03UVVGRlJDeFRRVUZUTEdsQ1FVRnBRaXhEUVVGRExFZEJRVmtzUlVGQlJTeExRVUZYTzBsQlEyaEVMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTnFReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1NVRkRha01zU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYUVVc1NVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjJSQ3hKUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNSRUxFbEJRVWtzUjBGQlJ5eEhRVUZITEVkQlFVY3NSVUZCUlR0UlFVTllMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGRkxFVkJRVVVzUlVGQlJUdFpRVU0zUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU4wUWl4SlFVRkpMRU5CUVVNc1MwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZETEVOQlFVTXNSMEZCUXl4SFFVRkhMRVZCUVVVN2IwSkJRVVVzWVVGQllTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVRkZPM0ZDUVVOeVJDeEpRVUZKTEVOQlFVTXNSMEZCUXl4RlFVRkZMRXRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVVU3Y1VKQlEyaENMRWxCUVVrc1EwRkJReXhIUVVGRExFVkJRVVVzUlVGQlJUdHZRa0ZCVXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2FVSkJRVVU3Y1VKQlEzSkVMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUzBGQlJ5eERRVUZETEVWQlFVVTdiMEpCUVUwc1lVRkJZU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVUZGTzJGQlF6ZEVPMU5CUTBvN1MwRkRTanRUUVVGTk8xRkJRMGdzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkRMRWRCUVVjc1EwRkJRenRSUVVOcVF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVNc1IwRkJSeXhEUVVGRE8xRkJRMmhETEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVNc1IwRkJSeXhEUVVGRExFZEJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVTnVRaXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlExbzdVVUZEUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJSU3hIUVVGSExFVkJRVVU3V1VGRE9VSXNZVUZCWVN4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEYWtNN1VVRkRSQ3hoUVVGaExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOb1F5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU51UXp0QlFVTk1MRU5CUVVNN1FVRkZSQ3hUUVVGVExHdENRVUZyUWl4RFFVRkRMRWRCUVZVc1JVRkJSU3hMUVVGWExFVkJRVVVzUjBGQlJ5eEhRVUZETEdGQlFXRTdTVUZEYkVVc1UwRkJVeXhoUVVGaExFTkJRVU1zUTBGQlVUdFJRVU16UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETlVJc1RVRkJUU3hKUVVGSkxFZEJRVWtzVjBGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNNVFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4WFFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6RkNMRWxCUVVrc1NVRkJTU3hIUVVGSExFZEJRVWNzUlVGQlZUdFpRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGQlJUdGhRVU53UXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhIUVVGSExFVkJRVXM3V1VGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRVVU3WVVGRGNFTXNTVUZCU1N4SlFVRkpMRWRCUVVjc1JVRkJSU3hGUVVGTk8xbEJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVGRk8yRkJRM0JETEVsQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1JVRkJUenRaUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkJSVHRoUVVOd1F5eEpRVUZKTEVsQlFVa3NSMEZCUnl4SFFVRkhMRVZCUVVzN1dVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUVVVN1lVRkRjRU1zU1VGQlNTeEpRVUZKTEVkQlFVY3NSVUZCUlN4RlFVRk5PMWxCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVRkZPMkZCUTNCRExFbEJRVWtzU1VGQlNTeEhRVUZITEVWQlFVVXNSVUZCVFR0WlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdVMEZCUlR0aFFVTnlReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eEZRVUZGTEVWQlFVMDdXVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlFVVTdZVUZEY0VNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZQTzFsQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVUZGTzJGQlEycENPMWxCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVRkZPMUZCUTNwRExFOUJRVThzUzBGQlN5eERRVUZETzBsQlEycENMRU5CUVVNN1NVRkZSQ3hUUVVGVExFdEJRVXNzUTBGQlF5eERRVUZOTEVWQlFVVXNTMEZCWXl4RlFVRkZMRWRCUVhOQ08xRkJRM3BFTEVsQlFVa3NUVUZCVnl4RFFVRkRPMUZCUTJoQ0xFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMWxCUTFZc1RVRkJUU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTJoRk8yRkJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN1dVRkRha0lzVFVGQlRTeEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTTVSVHRoUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMWxCUTJwQ0xFMUJRVTBzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRek5HTzJGQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3V1VGRGFrSXNUVUZCVFN4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVkQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM3BITzJGQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3V1VGRGFrSXNUVUZCVFN4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hIUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTjZTRHRoUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMWxCUTJwQ0xFMUJRVTBzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFZEJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNwSk8xRkJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVWRUxFMUJRVTBzVDBGQlR5eEhRVUZWTzFGQlEyNUNMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKRkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1VVRkJVU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRM2hGTEVOQlFVTTdTVUZEUml4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dExRVUZGTzBsQlEzWkZMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03UzBGQlJUdEpRVU0zUkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhoUVVGaExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhEUVVGRE8wbEJRM2hGTEUxQlFVMHNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU5zUkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEYWtRc1NVRkJTU3hEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETzBsQlEyUXNUMEZCVHl4RFFVRkRMRWxCUVVVc1MwRkJTeXhGUVVGRk8xRkJRMklzVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEycERMRU5CUVVNc1IwRkJSeXhKUVVGSkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNWMEZCVnl4RlFVRkZMRWRCUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1IwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFZEJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhWUVVGVkxFVkJRVVVzUjBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExGVkJRVlVzUlVGQlJTeEhRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRekZLTzBsQlFVRXNRMEZCUXp0QlFVTk9MRU5CUVVNN1FVRkhSQ3hUUVVGVExHZENRVUZuUWl4RFFVRkRMRWxCUVZjc1JVRkJSU3hOUVVGaExFVkJRVVVzVVVGQlpTeEZRVUZGTEVkQlFWVTdTVUZETjBVc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZYTEVWQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1NVRkRkRVFzVTBGQlV5eFRRVUZUTzFGQlEyUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMnBGTEVOQlFVTTdTVUZCUVN4RFFVRkRPMGxCUTBZc1RVRkJUU3hIUVVGSExFZEJRVmtzUTBGQlV5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVZVc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZETlVRc1RVRkJUU3hMUVVGTExFZEJRVk03VVVGRGFFSXNTMEZCU3l4RlFVRkZMRVZCUVVNc1MwRkJTeXhGUVVGRExFVkJRVVVzUlVGQlJTeE5RVUZOTEVWQlFXVXNSVUZCUlN4RlFVRkRPMUZCUXpGRExFdEJRVXNzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUXl4RlFVRkZMRVZCUVVVc1RVRkJUU3hGUVVGbExFVkJRVVVzUlVGQlF6dExRVU0zUXl4RFFVRkRPMGxCUTBZc1VVRkJUeXhKUVVGSkxFVkJRVVU3VVVGRFZDeExRVUZMTEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSenRaUVVGTkxHbENRVUZwUWl4RFFVRkRMRWRCUVVjc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFpRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMWxCUVVNc1RVRkJUVHRSUVVNeFJTeExRVUZMTEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTVHRaUVVGTExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1JVRkJSU3hMUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRaUVVGRExFMUJRVTA3VVVGRGFFWXNTMEZCU3l4WFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVTg3V1VGQlJTeHhRa0ZCY1VJc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMWxCUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03V1VGQlF5eE5RVUZOTzFGQlEzaEdMRXRCUVVzc1YwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4TlFVRk5PMUZCUXpsQ0xFdEJRVXNzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTk8xRkJRemxDTEV0QlFVc3NWMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRGNrSXNTMEZCU3l4WFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU4wUWp0WlFVRjNRaXhwUWtGQmFVSXNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETzFsQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1MwRkRhRVk3U1VGRFJDeFBRVUZQTEV0QlFVc3NRMEZCUXp0QlFVTnFRaXhEUVVGRE8wRkJUVVFzVFVGQllTeExRVUZMTzBsQlUyUXNXVUZCYjBJc1IwRkJXVHRSUVVGYUxGRkJRVWNzUjBGQlNDeEhRVUZITEVOQlFWTTdVVUZRZUVJc1dVRkJUeXhIUVVGbExGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNaRExHRkJRVkVzUjBGQll5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNMVFpeFhRVUZOTEVkQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6VkNMR1ZCUVZVc1IwRkJXU3hEUVVGRExFTkJRVU03VVVGRGVFSXNaVUZCVlN4SFFVRlpMRU5CUVVNc1EwRkJRenRSUVVrMVFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGVFSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZETlVJc1EwRkJRenRKUVVWTkxHTkJRV01zUTBGQlF5eFJRVUZsTzFGQlEycERMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzVVVGQlVTeERRVUZETzBsQlF6ZENMRU5CUVVNN1NVRkZUU3hMUVVGTExFTkJRVU1zUTBGQlZ6dFJRVU53UWl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVOSUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUTNKQ08xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUTNwQ0xFTkJRVU03U1VGRFRTeE5RVUZOTEVOQlFVTXNSMEZCVnp0UlFVTnlRaXhKUVVGSkxFZEJRVWNzUlVGQlJUdFpRVU5NTEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hMUVVGTExGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZPMmRDUVVOeVF5eEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExGRkJRVkVzU1VGQlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhSUVVGUkxFVkJRVVU3YjBKQlEzcEVMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzVFVGQlRTeERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEY2tVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eE5RVUZOTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVTjRSVHRoUVVOS08ybENRVUZOTzJkQ1FVTkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzVFVGQlRTeERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVONlJDeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5vUlR0WlFVTkVMRkZCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTllMRXRCUVVzc1QwRkJUenR2UWtGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGQlF5eE5RVUZOTzJkQ1FVTXhReXhMUVVGTExFMUJRVTA3YjBKQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03YjBKQlFVTXNUVUZCVFR0blFrRkRNVU1zVDBGQlR5eERRVUZETEVOQlFVOHNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03WVVGRGRFTTdXVUZEUkN4UlFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdG5Ra0ZEV0N4TFFVRkxMRTlCUVU4N2IwSkJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRVU1zVFVGQlRUdG5Ra0ZETVVNc1MwRkJTeXhOUVVGTk8yOUNRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVUZETEUxQlFVMDdaMEpCUXpGRExFOUJRVThzUTBGQlF5eERRVUZQTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGRE8yRkJRM1JETzFOQlEwbzdVVUZEUkN4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFdEJRVXNzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVN1dVRkRhRU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdG5Ra0ZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0aFFVRkZPMWxCUTJwRUxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3WjBKQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQldTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJSU3hIUVVGRExFVkJRVVVzUTBGQlF6dGhRVUZGTzFOQlF6ZEZPMUZCUTBRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEzWkNMRU5CUVVNN1NVRkRUU3hUUVVGVExFTkJRVU1zUTBGQlZ6dFJRVU40UWl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVOSUxGRkJRVkVzUTBGQlF5eEZRVUZGTzJkQ1FVTlFMRXRCUVVzc1kwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTzI5Q1FVRkxMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN2IwSkJRVU1zVFVGQlRUdG5Ra0ZETjBRc1MwRkJTeXhqUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVazdiMEpCUVVzc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenR2UWtGQlF5eE5RVUZOTzJkQ1FVTm9SU3hMUVVGTExHTkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHp0dlFrRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRE8yOUNRVUZETEUxQlFVMDdaMEpCUTJoRkxFdEJRVXNzWTBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1owSkJRM1JDTEV0QlFVc3NZMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03WjBKQlEzaENMRTlCUVU4c1EwRkJReXhEUVVGblFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRmRCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzJGQlF6TkVPMU5CUTBvN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdTVUZEZUVJc1EwRkJRenRKUVZGTkxHRkJRV0VzUTBGQlF5eEhRVUZaTzFGQlF6ZENMRTFCUVUwc1MwRkJTeXhIUVVGVExHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFVkJRVVVzUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU01UlN4UlFVRlJMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVU3V1VGRmNrSXNTMEZCU3l4RFFVRkRPMmRDUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVUZETEUxQlFVMDdXVUZGTVVZc1MwRkJTeXhEUVVGRE8yZENRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVGRExFMUJRVTA3VTBGRE1VTTdVVUZEUkN4UlFVRlJMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVU3V1VGRGNrSXNTMEZCU3l4RFFVRkRPMmRDUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVUZETEUxQlFVMDdXVUZETVVnc1MwRkJTeXhEUVVGRE8yZENRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVGRExFMUJRVTA3VTBGRE1VTTdTVUZEVEN4RFFVRkRPMGxCUzAwc1MwRkJTeXhEUVVGRExGZEJRV2RDTEVOQlFVTTdVVUZETVVJc1UwRkJVeXhsUVVGbExFTkJRVU1zUzBGQlZ5eEZRVUZGTEVsQlFXRTdXVUZETDBNc1VVRkJUeXhKUVVGSkxFVkJRVVU3WjBKQlExUXNTMEZCU3l4WFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dG5Ra0ZEZGtJc1MwRkJTeXhYUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVczdiMEpCUTJoQ0xFMUJRVTBzVTBGQlV5eEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF6dHZRa0ZETlVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRMRk5CUVZNc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlN5eEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTXZSU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlFTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJRenR2UWtGRE5VWXNUVUZCVFR0blFrRkRWaXhMUVVGTExGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVOdVFpeExRVUZMTEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU53UWl4TFFVRkxMRmRCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETzJkQ1FVTjJRaXhMUVVGTExGZEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRPMmRDUVVOMlFpeExRVUZMTEZkQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8yZENRVU4wUWp0dlFrRkRTU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlFTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJRenR2UWtGRE5VWXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVFc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVmNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdZVUZEYmtjN1VVRkRUQ3hEUVVGRE8xRkJRMFFzVFVGQlRTeEhRVUZITEVkQlFWa3NRMEZCVXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFWVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVVc1RVRkJUU3hQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZYTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJoRkxFMUJRVTBzUzBGQlN5eEhRVUZWTEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRSUVVOb1J5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGVFUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEzaEVMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVGRkxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzFsQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUlVGQlJTeERRVUZETzFOQlFVVTdVVUZETVVjc1pVRkJaU3hEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTEV0QlFVc3NRMEZCUXp0SlFVTnFRaXhEUVVGRE8wbEJSMFFzVDBGQlR5eERRVUZETEUxQlFXRTdVVUZEYWtJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUXpGQ0xFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRSUVVNelFpeE5RVUZOTEUxQlFVMHNSMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE9VSXNUVUZCVFN4TlFVRk5MRWRCUVZjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6bENMRWxCUVVrc1RVRkJUU3hEUVVGRE8xRkJRMWdzVVVGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVN1dVRkRja0lzUzBGQlN5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjN1owSkJRMlFzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZET1VZc1RVRkJUVHRaUVVOV0xFdEJRVXNzVjBGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTk8xbEJRemxDTEV0QlFVc3NWMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRGNFSXNTMEZCU3l4WFFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dFpRVU4yUWl4TFFVRkxMRmRCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzFsQlEzSkNMRXRCUVVzc1YwRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEZGtJc1MwRkJTeXhYUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0WlFVTjBRanRuUWtGRFNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVVc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNoR08xRkJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYkVJc1EwRkJRenREUVVOS08wRkJOVWxFTEhOQ1FUUkpReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm0gPSByZXF1aXJlKFwibWl0aHJpbFwiKTtcbmNvbnN0IFNWR0VsZW1fMSA9IHJlcXVpcmUoXCIuL1NWR0VsZW1cIik7XG5jb25zdCBBeGVzXzEgPSByZXF1aXJlKFwiLi9BeGVzXCIpO1xuY29uc3QgUGxvdExpbmVfMSA9IHJlcXVpcmUoXCIuL1Bsb3RMaW5lXCIpO1xuY29uc3QgUGxvdE1hcmtlcnNfMSA9IHJlcXVpcmUoXCIuL1Bsb3RNYXJrZXJzXCIpO1xuY29uc3QgUGxvdEJhcl8xID0gcmVxdWlyZShcIi4vUGxvdEJhclwiKTtcbmNvbnN0IFBsb3RBcmVhXzEgPSByZXF1aXJlKFwiLi9QbG90QXJlYVwiKTtcbmxldCBnQ2xpcElEID0gMDtcbmZ1bmN0aW9uIGNvcHlEZWZhdWx0KHRhcmdldCwgc291cmNlLCBkZWZhdWx0cykge1xuICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3B5RGVmYXVsdCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIGRlZmF1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YXJnZXRba2V5XSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5jbGFzcyBTZXJpZXMgZXh0ZW5kcyBTVkdFbGVtXzEuU1ZHRWxlbSB7XG4gICAgc3RhdGljIGRlZmF1bHRDb25maWcoY2ZnKSB7XG4gICAgICAgIGNmZy5zZXJpZXMgPSBuZXcgU2VyaWVzQ29uZmlnKCk7XG4gICAgfVxuICAgIHN0YXRpYyBhZGp1c3RDb25maWcoY2ZnKSB7XG4gICAgICAgIGNmZy5zZXJpZXMuc2VyaWVzLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgICAgIGlmIChzLnggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNmZy5heGVzLnByaW1hcnkueC50aXRsZS5oT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBjZmcuYXhlcy5wcmltYXJ5Lnguc2NhbGUudHlwZSA9IEF4ZXNfMS5BeGVzLnR5cGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgY2ZnLmdyaWQubWlub3IudmVyLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyYXdDbGlwUmVjdChjbGlwSUQsIHNjYWxlcykge1xuICAgICAgICByZXR1cm4gIWNsaXBJRCA/IGV4cG9ydHMubSgnJykgOiB0aGlzLmNsaXBSZWN0KHsgeDogc2NhbGVzLngucmFuZ2UoKVswXSwgeTogc2NhbGVzLnkucmFuZ2UoKVsxXSB9LCB7XG4gICAgICAgICAgICB3OiBzY2FsZXMueC5yYW5nZSgpWzFdIC0gc2NhbGVzLngucmFuZ2UoKVswXSxcbiAgICAgICAgICAgIGg6IHNjYWxlcy55LnJhbmdlKClbMF0gLSBzY2FsZXMueS5yYW5nZSgpWzFdXG4gICAgICAgIH0sIGNsaXBJRCk7XG4gICAgfVxuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCBjZmcgPSBub2RlLmF0dHJzLmNmZztcbiAgICAgICAgY29uc3Qgc2NhbGVzID0gbm9kZS5hdHRycy5zY2FsZXMucHJpbWFyeTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5vZGUuYXR0cnMuZGF0YTtcbiAgICAgICAgY29uc3QgY2xpcElEID0gY2ZnLmNsaXAgPyAnaHMnICsgZ0NsaXBJRCsrIDogdW5kZWZpbmVkO1xuICAgICAgICBjZmcuc2VyaWVzLm1hcCgocykgPT4ge1xuICAgICAgICAgICAgaWYgKHMubWFwID09PSBTZXJpZXMubWFwLnNoYXJlZCkge1xuICAgICAgICAgICAgICAgIHMueVN1bSA9ICckc3VtJztcbiAgICAgICAgICAgICAgICBkYXRhW3MuZGF0YUluZGV4XS5jb2xBZGQocy55U3VtKTtcbiAgICAgICAgICAgICAgICBkYXRhW3MuZGF0YUluZGV4XS5jb2xJbml0aWFsaXplKHMueVN1bSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjZmcuc2VyaWVzLm1hcCgocykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHQgPSBkYXRhW3MuZGF0YUluZGV4XTtcbiAgICAgICAgICAgIGlmIChzLm1hcCA9PT0gU2VyaWVzLm1hcC5zaGFyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxDb2wgPSBkdC5jb2xOdW1iZXIocy55KTtcbiAgICAgICAgICAgICAgICBkdC5jb2xJbml0aWFsaXplKHMueVN1bSwgKHYsIGksIHJvdykgPT4geyByZXR1cm4gdiArIHJvd1t2YWxDb2xdOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzLm1hcCkge1xuICAgICAgICAgICAgICAgIHMueUJhc2UgPSAnJCcgKyBzLm1hcDtcbiAgICAgICAgICAgICAgICBkdC5jb2xBZGQocy55QmFzZSk7XG4gICAgICAgICAgICAgICAgZHQuY29sSW5pdGlhbGl6ZShzLnlCYXNlLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6ICdocy1ncmFwaC1zZXJpZXMnIH0sIFtcbiAgICAgICAgICAgIHRoaXMuZHJhd0NsaXBSZWN0KGNsaXBJRCwgc2NhbGVzKSxcbiAgICAgICAgICAgIGV4cG9ydHMubSgnc3ZnJywgY2ZnLnNlcmllcy5tYXAoKHMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkdCA9IGRhdGFbcy5kYXRhSW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBTZXJpZXMucGxvdFtzLnR5cGVdIHx8IFNlcmllcy5wbG90LmxpbmU7XG4gICAgICAgICAgICAgICAgdHlwZS5zZXREZWZhdWx0cyhkdCwgcywgc2NhbGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gcy5jb25kID8gZHQuZmlsdGVyKHMuY29uZCkgOiBkdDtcbiAgICAgICAgICAgICAgICBjb25zdCBwbG90ID0gdHlwZS5wbG90KGQsIHMsIHNjYWxlcywgaSwgY2xpcElEKTtcbiAgICAgICAgICAgICAgICBpZiAocy5tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsQ29sID0gZC5jb2xOdW1iZXIocy55KTtcbiAgICAgICAgICAgICAgICAgICAgZC5jb2xJbml0aWFsaXplKHMueUJhc2UsICh2LCBpLCByb3cpID0+IHsgcmV0dXJuIHYgKyByb3dbdmFsQ29sXTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRzLm0oJ3N2ZycsIHsgY2xhc3M6IGBocy1ncmFwaC1zZXJpZXMtJHtpfWAgfSwgcGxvdCk7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgXSk7XG4gICAgfVxufVxuU2VyaWVzLm1hcmtlciA9IHtcbiAgICBjaXJjbGU6IFN5bWJvbCgnY2lyY2xlIG1hcmtlcicpLFxuICAgIHNxdWFyZTogU3ltYm9sKCdzcXVhcmUgbWFya2VyJyksXG4gICAgZGlhbW9uZDogU3ltYm9sKCdkaWFtb25kIG1hcmtlcicpLFxuICAgIHVwVHJpYW5nbGU6IFN5bWJvbCgndXB3YXJkIHRyaWFuZ2xlIG1hcmtlcicpLFxuICAgIGRvd25UcmlhbmdsZTogU3ltYm9sKCdkb3dud2FyZCB0cmlhbmdsZSBtYXJrZXInKVxufTtcblNlcmllcy5wbG90ID0ge1xuICAgIGxpbmU6IG5ldyBQbG90TGluZV8xLlBsb3RMaW5lKCksXG4gICAgbWFya2VyOiBuZXcgUGxvdE1hcmtlcnNfMS5QbG90TWFya2VycygpLFxuICAgIGJhcjogbmV3IFBsb3RCYXJfMS5QbG90QmFyKCksXG4gICAgYXJlYTogbmV3IFBsb3RBcmVhXzEuUGxvdEFyZWEoKVxufTtcblNlcmllcy5tYXAgPSB7XG4gICAgc3RhY2tlZDogJ3N0YWNrZWQnLFxuICAgIHNoYXJlZDogJ3NoYXJlZCdcbn07XG5TZXJpZXMuZGVmYXVsdFN0eWxlID0ge1xuICAgIGxpbmU6IHsgY29sb3I6ICdkZWZhdWx0JywgdmlzaWJsZTogdHJ1ZSwgd2lkdGg6IDIgfSxcbiAgICBtYXJrZXI6IHsgY29sb3I6ICdkZWZhdWx0JywgdmlzaWJsZTogZmFsc2UsIHNpemU6IDEwLCBzaGFwZTogU2VyaWVzLm1hcmtlci5jaXJjbGUgfSxcbiAgICBsYWJlbDogeyBjb2xvcjogJ2RlZmF1bHQnLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIGZpbGw6IHsgY29sb3I6ICdkZWZhdWx0JywgdmlzaWJsZTogZmFsc2UgfSxcbiAgICBiYXI6IHsgY29sb3I6ICdkZWZhdWx0JywgdmlzaWJsZTogZmFsc2UsIHdpZHRoOiA1MCwgb2Zmc2V0OiAzMCB9XG59O1xuU2VyaWVzLmRlZmF1bHRDb2xvcnMgPSBbJyNmMDAnLCAnIzBmMCcsICcjMDBmJywgJyNmZjAnLCAnIzBmZicsICcjZjBmJywgJyMwMDAnLCAnIzQ0NCcsICcjODg4JywgJyNjY2MnXTtcbmV4cG9ydHMuU2VyaWVzID0gU2VyaWVzO1xuY2xhc3MgU2VyaWVzQ29uZmlnIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zZXJpZXNEZWZzID0gW107XG4gICAgICAgIHRoaXMuY2xpcCA9IHRydWU7XG4gICAgfVxuICAgIHNldCBkYXRhKGQpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGQ7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgc2V0IHNlcmllcyhjZmcpIHtcbiAgICAgICAgY29uc3QgZGVmU3R5bGUgPSBTZXJpZXMuZGVmYXVsdFN0eWxlO1xuICAgICAgICBjb25zdCBkZWZDb2xvcnMgPSBTZXJpZXMuZGVmYXVsdENvbG9ycztcbiAgICAgICAgY2ZnLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgICAgIHMudHlwZSA9IHMudHlwZSB8fCAnbGluZSc7XG4gICAgICAgICAgICBzLnN0eWxlID0gcy5zdHlsZSB8fCB7fTtcbiAgICAgICAgICAgIHMuZGF0YUluZGV4ID0gcy5kYXRhSW5kZXggfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBkZWZDb2xvcnNbdGhpcy5zZXJpZXNEZWZzLmxlbmd0aF1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb3B5RGVmYXVsdChzLnN0eWxlLCBkZWZTdHlsZSwgZGVmYXVsdHMpO1xuICAgICAgICAgICAgdGhpcy5zZXJpZXNEZWZzLnB1c2gocyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHMudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgICAgICAgICBzLnN0eWxlLmxpbmUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ21hcmtlcic6XG4gICAgICAgICAgICAgICAgICAgIHMuc3R5bGUubWFya2VyLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdhcmVhJzpcbiAgICAgICAgICAgICAgICAgICAgcy5zdHlsZS5maWxsLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdiYXInOlxuICAgICAgICAgICAgICAgICAgICBzLnN0eWxlLmZpbGwudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IHNlcmllcygpIHsgcmV0dXJuIHRoaXMuc2VyaWVzRGVmczsgfVxufVxuZXhwb3J0cy5TZXJpZXNDb25maWcgPSBTZXJpZXNDb25maWc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMlZ5YVdWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dmMzSmpMMU5sY21sbGN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVc5Q1lTeFJRVUZCTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03UVVGUGNFTXNkVU5CUVhsRE8wRkJRM3BETEdsRFFVRnpRenRCUVVWMFF5eDVRMEZCTUVNN1FVRkRNVU1zSzBOQlFUWkRPMEZCUXpkRExIVkRRVUY1UXp0QlFVTjZReXg1UTBGQk1FTTdRVUZGTVVNc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlJXaENMRk5CUVZNc1YwRkJWeXhEUVVGRExFMUJRVlVzUlVGQlJTeE5RVUZWTEVWQlFVVXNVVUZCV1R0SlFVTnlSQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVlVzUlVGQlJTeEZRVUZGTzFGQlEzWkRMRWxCUVVrc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NVVUZCVVN4RlFVRkZPMWxCUTJwRExFbEJRVWtzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRuUWtGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8yRkJRVVU3V1VGRGNFUXNWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VTBGRGJrUTdZVUZCVFR0WlFVTklMRWxCUVVrc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEZOQlFWTXNSVUZCUlR0blFrRkJSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yRkJRVVU3V1VGRE4wUXNTVUZCU1N4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzVTBGQlV5eEZRVUZGTzJkQ1FVRkZMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1lVRkJSVHRUUVVOc1JUdEpRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTFBc1EwRkJRenRCUVV0RUxFMUJRV0VzVFVGQlR5eFRRVUZSTEdsQ1FVRlBPMGxCTmtZdlFpeE5RVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVZVN1VVRkRNMElzUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRmxCUVZrc1JVRkJSU3hEUVVGRE8wbEJRM0JETEVOQlFVTTdTVUZWUkN4TlFVRk5MRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVlU3VVVGRE1VSXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVN1dVRkRkRU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRuUWtGRGJrSXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU55UXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJSeXhYUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRhRVFzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUjBGQlJ5eExRVUZMTEVOQlFVTTdZVUZEZEVNN1VVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdTVUZGUkN4WlFVRlpMRU5CUVVNc1RVRkJZU3hGUVVGRkxFMUJRV003VVVGRGRFTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJRU3hEUVVGRExFTkJRVU1zVTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVU5xUXl4RlFVRkpMRU5CUVVNc1JVRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlEycEVPMWxCUTBrc1EwRkJReXhGUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRE0wTXNRMEZCUXl4RlFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRPVU1zUlVGRFJDeE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTm9RaXhEUVVGRE8wbEJSVVFzU1VGQlNTeERRVUZETEVsQlFWazdVVUZEWWl4TlFVRk5MRWRCUVVjc1IwRkJhVUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkRla01zVFVGQlRTeE5RVUZOTEVkQlFWY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETzFGQlEycEVMRTFCUVUwc1NVRkJTU3hIUVVGaExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUTNaRExFMUJRVTBzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVFc1EwRkJReXhEUVVGRExFbEJRVWtzUjBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJSWEJFTEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlZ5eEZRVUZGTEVWQlFVVTdXVUZETTBJc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRk8yZENRVU0zUWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF6dG5Ra0ZEYUVJc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnFReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUXpsRE8xRkJRMHdzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFWY3NSVUZCUlN4RlFVRkZPMWxCUXpOQ0xFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRE4wSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhMUVVGSExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkZPMmRDUVVNelFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRha01zUlVGQlJTeERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRXNSVUZCUlN4SFFVRlpMRVZCUVVNc1JVRkJSU3hIUVVGRkxFOUJRVThzUTBGQlF5eEhRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlF6TkdPMWxCUTBRc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTlFMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eEhRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1owSkJRM0pDTEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzJkQ1FVTnVRaXhGUVVGRkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRGFFTTdVVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFOUJRVThzVTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJReXhwUWtGQmFVSXNSVUZCUXl4RlFVRkZPMWxCUTNoRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJRenRaUVVOcVF5eFRRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRk8yZENRVU01UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMmRDUVVNM1FpeE5RVUZOTEVsQlFVa3NSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEY2tRc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8yZENRVU5vUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8yZENRVU42UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0blFrRkRhRVFzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZPMjlDUVVOUUxFMUJRVTBzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTm9ReXhEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGUkxFVkJRVVVzUTBGQlVTeEZRVUZGTEVkQlFWa3NSVUZCUXl4RlFVRkZMRWRCUVVVc1QwRkJUeXhEUVVGRExFZEJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YVVKQlF6TkdPMmRDUVVORUxFOUJRVThzVTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJReXh0UWtGQmJVSXNRMEZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU14UkN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOT0xFTkJRVU1zUTBGQlF6dEpRVU5RTEVOQlFVTTdPMEZCTlVwTkxHRkJRVTBzUjBGQlJ6dEpRVU5hTEUxQlFVMHNSVUZCVlN4TlFVRk5MRU5CUVVNc1pVRkJaU3hEUVVGRE8wbEJRM1pETEUxQlFVMHNSVUZCVlN4TlFVRk5MRU5CUVVNc1pVRkJaU3hEUVVGRE8wbEJRM1pETEU5QlFVOHNSVUZCVXl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTTdTVUZEZUVNc1ZVRkJWU3hGUVVGTkxFMUJRVTBzUTBGQlF5eDNRa0ZCZDBJc1EwRkJRenRKUVVOb1JDeFpRVUZaTEVWQlFVa3NUVUZCVFN4RFFVRkRMREJDUVVFd1FpeERRVUZETzBOQlEzSkVMRU5CUVVNN1FVRlBTeXhYUVVGSkxFZEJRVWM3U1VGRFZpeEpRVUZKTEVWQlFVc3NTVUZCU1N4dFFrRkJVU3hGUVVGRk8wbEJRM1pDTEUxQlFVMHNSVUZCUnl4SlFVRkpMSGxDUVVGWExFVkJRVVU3U1VGRE1VSXNSMEZCUnl4RlFVRk5MRWxCUVVrc2FVSkJRVThzUlVGQlJUdEpRVU4wUWl4SlFVRkpMRVZCUVVzc1NVRkJTU3h0UWtGQlVTeEZRVUZGTzBOQlF6RkNMRU5CUVVNN1FVRkZTeXhWUVVGSExFZEJRVWM3U1VGRFZDeFBRVUZQTEVWQlFVVXNVMEZCVXp0SlFVTnNRaXhOUVVGTkxFVkJRVWNzVVVGQlVUdERRVU53UWl4RFFVRkRPMEZCVFZrc2JVSkJRVmtzUjBGQlpUdEpRVU55UXl4SlFVRkpMRVZCUVVrc1JVRkJSU3hMUVVGTExFVkJRVU1zVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlF6dEpRVU51UkN4TlFVRk5MRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVU1zVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1NVRkJTU3hGUVVGRkxFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVU03U1VGRGFrWXNTMEZCU3l4RlFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRExGTkJRVk1zUlVGQlJTeFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkZPMGxCUXpORExFbEJRVWtzUlVGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUXl4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJUdEpRVU16UXl4SFFVRkhMRVZCUVVzc1JVRkJSU3hMUVVGTExFVkJRVU1zVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVVzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlN4RlFVRkZPME5CUTNKRkxFTkJRVU03UVVGSFdTeHZRa0ZCWVN4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03UVVFdlEyNUlMSGRDUVhOTFF6dEJRWFZIUkN4TlFVRmhMRmxCUVZrN1NVRkJla0k3VVVGRFdTeGxRVUZWTEVkQlFXVXNSVUZCUlN4RFFVRkRPMUZCYlVJM1FpeFRRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCYlVOMlFpeERRVUZETzBsQk4wTkhMRWxCUVZjc1NVRkJTU3hEUVVGRExFTkJRVmM3VVVGRGRrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRmJrSXNRMEZCUXp0SlFVVkVMRWxCUVZjc1NVRkJTVHRSUVVOWUxFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0SlFVTjBRaXhEUVVGRE8wbEJVMFFzU1VGQlZ5eE5RVUZOTEVOQlFVTXNSMEZCWjBJN1VVRkRPVUlzVFVGQlRTeFJRVUZSTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJRenRSUVVOeVF5eE5RVUZOTEZOQlFWTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRE8xRkJRM1pETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGWExFVkJRVVVzUlVGQlJUdFpRVU40UWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NUVUZCVFN4RFFVRkRPMWxCUXpGQ0xFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1NVRkJhVUlzUlVGQlJTeERRVUZETzFsQlEzSkRMRU5CUVVNc1EwRkJReXhUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRMMElzVFVGQlRTeFJRVUZSTEVkQlFVYzdaMEpCUTJJc1MwRkJTeXhGUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJRenRoUVVNeFF5eERRVUZETzFsQlEwWXNWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzVVVGQlVTeEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMWxCUTNwRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM2hDTEZGQlFWRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSVHRuUWtGRFdpeExRVUZMTEUxQlFVMDdiMEpCUTFBc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRenR2UWtGRE5VSXNUVUZCVFR0blFrRkRWaXhMUVVGTExGRkJRVkU3YjBKQlExUXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXp0dlFrRkRPVUlzVFVGQlRUdG5Ra0ZEVml4TFFVRkxMRTFCUVUwN2IwSkJRMUFzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dHZRa0ZETlVJc1RVRkJUVHRuUWtGRFZpeExRVUZMTEV0QlFVczdiMEpCUTA0c1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRenR2UWtGRE5VSXNUVUZCVFR0aFFVTmlPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFVDeERRVUZETzBsQlEwUXNTVUZCVnl4TlFVRk5MRXRCUVdsQ0xFOUJRVThzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1EwRkRPVVE3UVVGMlJFUXNiME5CZFVSREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGhzdXRpbF8xID0gcmVxdWlyZShcImhzdXRpbFwiKTtcbmNvbnN0IGxvZyA9IGhzdXRpbF8xLmxvZygnZDMuZ3JhcGgnKTtcbmNvbnN0IGQzID0gcmVxdWlyZShcImQzXCIpO1xuY29uc3QgbSA9IHJlcXVpcmUoXCJtaXRocmlsXCIpO1xuY2xhc3MgR3JhcGgyIHtcbiAgICBkcmF3KCkge1xuICAgICAgICBsb2cuaW5mbyhkMyk7XG4gICAgfVxufVxuZXhwb3J0cy5HcmFwaDIgPSBHcmFwaDI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laM0poY0dneUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDJRekwyZHlZWEJvTWk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRV1ZCTEcxRFFVRnhRenRCUVVGSExFMUJRVTBzUjBGQlJ5eEhRVUZITEZsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVOeVJTeDVRa0ZCZVVJN1FVRkRla0lzVFVGQlRTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8wRkJSVGRDTEUxQlFXRXNUVUZCVFR0SlFVTm1MRWxCUVVrN1VVRkRRU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUTJwQ0xFTkJRVU03UTBGRFNqdEJRVXBFTEhkQ1FVbERJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBncmFwaDJfMSA9IHJlcXVpcmUoXCIuL2dyYXBoMlwiKTtcbmV4cG9ydHMuZDMgPSB7XG4gICAgR3JhcGg6IGdyYXBoMl8xLkdyYXBoMlxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZaRE12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHhRMEZCY1VNN1FVRkZlRUlzVVVGQlFTeEZRVUZGTEVkQlFVYzdTVUZEWkN4TFFVRkxMRVZCUVVjc1pVRkJUVHREUVVOcVFpeERRVUZESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIEdyYXBoXzEgPSByZXF1aXJlKFwiLi9HcmFwaFwiKTtcbmV4cG9ydHMuR3JhcGggPSBHcmFwaF8xLkdyYXBoO1xudmFyIFNlcmllc18xID0gcmVxdWlyZShcIi4vU2VyaWVzXCIpO1xuZXhwb3J0cy5TZXJpZXMgPSBTZXJpZXNfMS5TZXJpZXM7XG52YXIgQXhlc18xID0gcmVxdWlyZShcIi4vQXhlc1wiKTtcbmV4cG9ydHMuQXhlcyA9IEF4ZXNfMS5BeGVzO1xudmFyIFNjYWxlXzEgPSByZXF1aXJlKFwiLi9TY2FsZVwiKTtcbmV4cG9ydHMuU2NhbGUgPSBTY2FsZV8xLlNjYWxlO1xudmFyIEdyaWRfMSA9IHJlcXVpcmUoXCIuL0dyaWRcIik7XG5leHBvcnRzLkdyaWQgPSBHcmlkXzEuR3JpZDtcbnZhciBMZWdlbmRfMSA9IHJlcXVpcmUoXCIuL0xlZ2VuZFwiKTtcbmV4cG9ydHMuTGVnZW5kID0gTGVnZW5kXzEuTGVnZW5kO1xudmFyIGQzXzEgPSByZXF1aXJlKFwiLi9kM1wiKTtcbmV4cG9ydHMuZDMgPSBkM18xLmQzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHBRMEZCYlVNN1FVRkJNVUlzZDBKQlFVRXNTMEZCU3l4RFFVRkJPMEZCUTJRc2JVTkJSVzlETzBGQlJqTkNMREJDUVVGQkxFMUJRVTBzUTBGQlFUdEJRVWRtTEN0Q1FVRnJRenRCUVVGNlFpeHpRa0ZCUVN4SlFVRkpMRU5CUVVFN1FVRkRZaXhwUTBGQmJVTTdRVUZCTVVJc2QwSkJRVUVzUzBGQlN5eERRVUZCTzBGQlEyUXNLMEpCUVd0RE8wRkJRWHBDTEhOQ1FVRkJMRWxCUVVrc1EwRkJRVHRCUVVOaUxHMURRVUZ2UXp0QlFVRXpRaXd3UWtGQlFTeE5RVUZOTEVOQlFVRTdRVUZEWml3eVFrRkJaME03UVVGQmRrSXNhMEpCUVVFc1JVRkJSU3hEUVVGQkluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IG1pdGhyaWxfMSA9IHJlcXVpcmUoXCIuL21pdGhyaWxcIik7XG5jbGFzcyBDb25maWcge1xuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBub2RlLmF0dHJzLmNvbnRleHQ7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZS5hdHRycy5zb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIW5vZGUuc3RhdGUuY2ZnKSB7XG4gICAgICAgICAgICAgICAgbWl0aHJpbF8xLm0ucmVxdWVzdCh7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBub2RlLmF0dHJzLnNvdXJjZSB9KS50aGVuKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc3RhdGUuY2ZnID0gdHJhbnNsYXRlKHMsIHMucm9vdCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlLnN0YXRlLmNmZyA9IHRyYW5zbGF0ZShub2RlLmF0dHJzLnNvdXJjZSwgbm9kZS5hdHRycy5zb3VyY2Uucm9vdCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IG5vZGUuc3RhdGUuY2ZnO1xuICAgICAgICByZXR1cm4gKGNmZyAmJiBjZmcuY29tcENsYXNzKSA/IG1pdGhyaWxfMS5tKGNmZy5jb21wQ2xhc3MsIE9iamVjdC5hc3NpZ24oY2ZnLmF0dHJzLCBub2RlLmF0dHJzKSkgOiBtaXRocmlsXzEubSgnZGl2JywgJ3dhaXRpbmcnKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbmZpZyA9IENvbmZpZztcbmZ1bmN0aW9uIHRyYW5zbGF0ZShjb25maWcsIHN1YmNmZywgY29udGV4dCkge1xuICAgIGlmIChpc1N5bm9ueW0oY29uZmlnLCBzdWJjZmcpKSB7XG4gICAgICAgIHN1YmNmZyA9IGNvbmZpZ1tzdWJjZmddO1xuICAgIH1cbiAgICBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnZnVuY3Rpb24nXS5pbmRleE9mKHR5cGVvZiBzdWJjZmcpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHN1YmNmZztcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHN1YmNmZy5sZW5ndGggPyBbXSA6IHt9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3Qua2V5cyhzdWJjZmcpO1xuICAgIG9wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgICAgY29uc3QgY2wgPSByZXNvbHZlKG9wdCwgY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmFuc2xhdGUoY29uZmlnLCBzdWJjZmdbb3B0XSwgY29udGV4dCk7XG4gICAgICAgIGlmIChjbCkge1xuICAgICAgICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgICAgICAgICBjb21wQ2xhc3M6IGNsLFxuICAgICAgICAgICAgICAgIGF0dHJzOiBjb250ZW50XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKCFBcnJheS5pc0FycmF5KHN1YmNmZykgJiYgb3B0aW9ucy5sZW5ndGggPT09IDEpID9cbiAgICAgICAgICAgICAgICByZXN1bHQgPSByIDpcbiAgICAgICAgICAgICAgICByZXN1bHRbb3B0XSA9IHI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRbb3B0XSA9IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcmVzb2x2ZShzeW0sIGNvbnRleHQpIHtcbiAgICBsZXQgY2w7XG4gICAgY29udGV4dC5zb21lKChjKSA9PiBjbCA9IGNbc3ltXSk7XG4gICAgcmV0dXJuIGNsO1xufVxuZnVuY3Rpb24gaXNTeW5vbnltKGNvbmZpZywga2V5KSB7IHJldHVybiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBjb25maWdba2V5XTsgfVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDBOdmJtWnBaeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFUSkVRU3gxUTBGQmNVTTdRVUZMY2tNc1RVRkJZU3hOUVVGTk8wbEJRMllzVFVGQlRTeERRVUZETEVsQlFWVTdVVUZEWWl4TlFVRk5MRTlCUVU4c1IwRkJVeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTjZReXhKUVVGSkxFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRXRCUVVzc1VVRkJVU3hGUVVGRk8xbEJRM1pETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlJUdG5Ra0ZCUlN4WFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVXNzUlVGQlF5eEZRVUZGTzI5Q1FVVjBSaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NSMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1owSkJRMjVFTEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUVVVN1UwRkRVanRoUVVGTk8xbEJRMGdzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRWRCUVVjc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRUUVVOc1JqdEpRVU5NTEVOQlFVTTdTVUZEUkN4SlFVRkpMRU5CUVVNc1NVRkJWVHRSUVVOWUxFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRE8xRkJSVE5DTEU5QlFVOHNRMEZCUXl4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4WFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUlVGQlJTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGZEJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1NVRkRhRWdzUTBGQlF6dERRVU5LTzBGQmFrSkVMSGRDUVdsQ1F6dEJRV0ZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRTFCUVZVc1JVRkJSU3hOUVVGVkxFVkJRVVVzVDBGQllUdEpRVVZ3UkN4SlFVRkpMRk5CUVZNc1EwRkJReXhOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEVWQlFVVTdVVUZCUlN4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzB0QlFVVTdTVUZGTTBRc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeFJRVUZSTEVWQlFVVXNVMEZCVXl4RlFVRkZMRlZCUVZVc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVGRkxFOUJRVThzVFVGQlRTeERRVUZETzB0QlFVVTdTVUZETjBZc1NVRkJTU3hOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZGY0VNc1RVRkJUU3hQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVOd1F5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJWU3hGUVVGUkxFVkJRVVU3VVVGRE4wSXNUVUZCVFN4RlFVRkZMRWRCUVU4c1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnlReXhOUVVGTkxFOUJRVThzUjBGQlJ5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxFVkJRVVVzUlVGQlJUdFpRVU5LTEUxQlFVMHNRMEZCUXl4SFFVRkhPMmRDUVVOT0xGTkJRVk1zUlVGQlF5eEZRVUZGTzJkQ1FVTmFMRXRCUVVzc1JVRkJReXhQUVVGUE8yRkJRMmhDTEVOQlFVTTdXVUZEUml4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTTdaMEpCUXpkRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRXaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUTNaQ08yRkJRMGs3V1VGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRE8xTkJRVVU3U1VGRGJrTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRTQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5zUWl4RFFVRkRPMEZCVlVRc1UwRkJVeXhQUVVGUExFTkJRVU1zUjBGQlZTeEZRVUZGTEU5QlFXRTdTVUZEZEVNc1NVRkJTU3hGUVVGTkxFTkJRVU03U1VGRFdDeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGRFTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1FVRkRaQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFRRVUZUTEVOQlFVTXNUVUZCVlN4RlFVRkZMRWRCUVU4c1NVRkJTU3hQUVVGUExFOUJRVThzUjBGQlJ5eExRVUZMTEZGQlFWRXNTVUZCU1N4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcGlsbGFycyA9IHJlcXVpcmUoXCIuL3ZpZXcvUGlsbGFyZWRMYXlvdXRlclwiKTtcbmlmIChwaWxsYXJzKSB7IH1cbmNvbnN0IHRpbGVzID0gcmVxdWlyZShcIi4vdmlldy9UaWxlTGF5b3V0ZXJcIik7XG5pZiAodGlsZXMpIHsgfVxudmFyIExheW91dF8xID0gcmVxdWlyZShcIi4vdmlldy9MYXlvdXRcIik7XG5leHBvcnRzLkxheW91dCA9IExheW91dF8xLkxheW91dDtcbnZhciBUb2tlbnNfMSA9IHJlcXVpcmUoXCIuL3ZpZXcvVG9rZW5zXCIpO1xuZXhwb3J0cy5GSUxMID0gVG9rZW5zXzEuRklMTDtcbmV4cG9ydHMucHggPSBUb2tlbnNfMS5weDtcbmV4cG9ydHMucGMgPSBUb2tlbnNfMS5wYztcbmV4cG9ydHMuTGF5b3V0VG9rZW4gPSBUb2tlbnNfMS5MYXlvdXRUb2tlbjtcbnZhciBMYXlvdXRlcl8xID0gcmVxdWlyZShcIi4vdmlldy9MYXlvdXRlclwiKTtcbmV4cG9ydHMuTGF5b3V0ZXIgPSBMYXlvdXRlcl8xLkxheW91dGVyO1xudmFyIENvbmZpZ18xID0gcmVxdWlyZShcIi4vQ29uZmlnXCIpO1xuZXhwb3J0cy5Db25maWcgPSBDb25maWdfMS5Db25maWc7XG52YXIgbWl0aHJpbF8xID0gcmVxdWlyZShcIi4vbWl0aHJpbFwiKTtcbmV4cG9ydHMubSA9IG1pdGhyaWxfMS5tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGSlFTeHRSRUZCZFVRN1FVRkJUU3hKUVVGSExFOUJRVThzUlVGQlJTeEhRVUZGTzBGQlF6TkZMRFpEUVVGdFJEdEJRVUZWTEVsQlFVY3NTMEZCU3l4RlFVRkZMRWRCUVVVN1FVRkZla1VzZDBOQlFUWkRPMEZCUVhCRExEQkNRVUZCTEUxQlFVMHNRMEZCUVR0QlFVTm1MSGREUVVNMlF6dEJRVVJ3UXl4M1FrRkJRU3hKUVVGSkxFTkJRVUU3UVVGQlJTeHpRa0ZCUVN4RlFVRkZMRU5CUVVFN1FVRkJSU3h6UWtGQlFTeEZRVUZGTEVOQlFVRTdRVUZEV2l3clFrRkJRU3hYUVVGWExFTkJRVUU3UVVGRGNFSXNORU5CUVN0RE8wRkJRWFJETERoQ1FVRkJMRkZCUVZFc1EwRkJRVHRCUVVOcVFpeHRRMEZCZDBNN1FVRkJMMElzTUVKQlFVRXNUVUZCVFN4RFFVRkJPMEZCUTJZc2NVTkJRWGRETzBGQlFTOUNMSE5DUVVGQkxFTkJRVU1zUTBGQlFTSjkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubSA9IHJlcXVpcmUoXCJtaXRocmlsXCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYldsMGFISnBiQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5dGFYUm9jbWxzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJVV0VzVVVGQlFTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IG1pdGhyaWxfMSA9IHJlcXVpcmUoXCIuLi9taXRocmlsXCIpO1xuY29uc3QgTGF5b3V0ZXJfMSA9IHJlcXVpcmUoXCIuL0xheW91dGVyXCIpO1xuY2xhc3MgTGF5b3V0IHtcbiAgICBnZXRDb21wb25lbnRzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuICFBcnJheS5pc0FycmF5KG5vZGUuYXR0cnMuY29udGVudCkgPyBub2RlLmF0dHJzLmNvbnRlbnQgOlxuICAgICAgICAgICAgbm9kZS5hdHRycy5jb250ZW50Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjLmNvbXBDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICBjLmF0dHJzLnJvdXRlID0gbm9kZS5hdHRycy5yb3V0ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pdGhyaWxfMS5tKGMuY29tcENsYXNzLCBjLmF0dHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDU1Mobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5hdHRycy5jc3MgfHwgJyc7XG4gICAgfVxuICAgIG5vcm1hbGl6ZUNvbnRlbnQoY29tcG9uZW50cykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gW21pdGhyaWxfMS5tKCcuaHMtbGVhZicsIG1pdGhyaWxfMS5tLnRydXN0KGNvbXBvbmVudHMpKV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHMubWFwKChjb21wKSA9PiAoY29tcCBpbnN0YW5jZW9mIExheW91dCkgPyBjb21wIDogbWl0aHJpbF8xLm0oTGF5b3V0LCB7IGNvbnRlbnQ6IGNvbXAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbY29tcG9uZW50c107XG4gICAgfVxuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5ub3JtYWxpemVDb250ZW50KHRoaXMuZ2V0Q29tcG9uZW50cyhub2RlKSk7XG4gICAgICAgIGxldCBjc3MgPSBMYXlvdXRlcl8xLkxheW91dGVyLmNyZWF0ZUxheW91dChub2RlLmF0dHJzLCBjb250ZW50KTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICAgICAgICBzdHlsZTogbm9kZS5zdHlsZSxcbiAgICAgICAgICAgIHJvdXRlOiBub2RlLmF0dHJzLnJvdXRlLFxuICAgICAgICAgICAgb25jbGljazogbm9kZS5hdHRycy5vbmNsaWNrXG4gICAgICAgIH07XG4gICAgICAgIG5vZGUuYXR0cnMucm91dGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChub2RlLmF0dHJzLmhyZWYpIHtcbiAgICAgICAgICAgIGF0dHJzLmhyZWYgPSBub2RlLmF0dHJzLmhyZWY7XG4gICAgICAgICAgICBhdHRycy5vbmNyZWF0ZSA9IG1pdGhyaWxfMS5tLnJvdXRlLmxpbms7XG4gICAgICAgICAgICBhdHRycy5vbnVwZGF0ZSA9IG1pdGhyaWxfMS5tLnJvdXRlLmxpbms7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pdGhyaWxfMS5tKGAuaHMtbGF5b3V0ICR7Y3NzfSAke3RoaXMuZ2V0Q1NTKG5vZGUpfWAsIGF0dHJzLCBjb250ZW50Lm1hcCgoYykgPT4gYykpO1xuICAgIH1cbn1cbmV4cG9ydHMuTGF5b3V0ID0gTGF5b3V0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVEdGNWIzVjBMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzWnBaWGN2VEdGNWIzVjBMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQmFVSkJMSGREUVVGelF6dEJRVU4wUXl4NVEwRkJjME03UVVGNVFuUkRMRTFCUVdFc1RVRkJUVHRKUVc5Q1RDeGhRVUZoTEVOQlFVTXNTVUZCVlR0UlFVTTVRaXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlF6TkVMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVzc1JVRkJSU3hGUVVGRk8yZENRVU0zUWl4SlFVRkpMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVU3YjBKQlEySXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNN2IwSkJRMnBETEU5QlFVOHNWMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMmxDUVVOc1F6dHhRa0ZCVFR0dlFrRkRTQ3hQUVVGUExFTkJRVU1zUTBGQlF6dHBRa0ZEV2p0WlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMWdzUTBGQlF6dEpRVkZUTEUxQlFVMHNRMEZCUXl4SlFVRlZPMUZCUTNaQ0xFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRWxCUVVrc1JVRkJSU3hEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZIVHl4blFrRkJaMElzUTBGQlF5eFZRVUUyUXp0UlFVTnNSU3hKUVVGSkxFOUJRVThzVlVGQlZTeExRVUZMTEZGQlFWRXNSVUZCUlR0WlFVTm9ReXhQUVVGUExFTkJRVU1zVjBGQlF5eERRVUZETEZWQlFWVXNSVUZCUlN4WFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTXZRenRSUVVORUxFbEJRVWtzVlVGQlZTeERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRVZCUVVVN1dVRkRja0lzVDBGQlR5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1NVRkJlVUlzUlVGQlVTeEZRVUZGTEVOQlEyeEVMRU5CUVVNc1NVRkJTU3haUVVGWkxFMUJRVTBzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExGZEJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUXl4UFFVRlBMRVZCUVVNc1NVRkJTU3hGUVVGRExFTkJRVU1zUTBGRGFrVXNRMEZCUXp0VFFVTk1PMUZCUlVRc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBsQlEzaENMRU5CUVVNN1NVRnhRa1FzU1VGQlNTeERRVUZETEVsQlFWVTdVVUZEV0N4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJoRkxFbEJRVWtzUjBGQlJ5eEhRVUZITEcxQ1FVRlJMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRja1FzVFVGQlRTeExRVUZMTEVkQlFVODdXVUZEWkN4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXM3V1VGRGFrSXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN6dFpRVU4yUWl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTzFOQlF6bENMRU5CUVVNN1VVRkRSaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4VFFVRlRMRU5CUVVNN1VVRkROMElzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1JVRkJSVHRaUVVOcVFpeExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6ZENMRXRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzVjBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRPVUlzUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4WFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF6dFRRVU5xUXp0UlFVTkVMRTlCUVU4c1YwRkJReXhEUVVGRExHTkJRV01zUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVONlJpeERRVUZETzBOQlEwbzdRVUV6UmtRc2QwSkJNa1pESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgVG9rZW5zXzEgPSByZXF1aXJlKFwiLi9Ub2tlbnNcIik7XG5jbGFzcyBMYXlvdXRlciB7XG4gICAgY29uc3RydWN0b3IoYXJlYURlc2MpIHtcbiAgICAgICAgdGhpcy5hcmVhRGVzYyA9IGFyZWFEZXNjO1xuICAgICAgICB0aGlzLnNwYWNpbmcgPSAwO1xuICAgIH1cbiAgICBzdGF0aWMgdHJhbnNsYXRlKHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2goJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW0uZW5kc1dpdGgoJ3B4JykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2Vuc18xLnB4KHBhcnNlSW50KHBhcmFtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5lbmRzV2l0aCgnJScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbnNfMS5wYyhwYXJzZUludChwYXJhbSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyYW0udG9Mb3dlckNhc2UoKSA9PT0gJ2ZpbGwnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbnNfMS5GSUxMO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXRpYyByZWdpc3RlcihrZXl3b3JkLCBzdHlsZSkge1xuICAgICAgICBMYXlvdXRlci5sYXlvdXRTdHlsZXNba2V5d29yZF0gPSBzdHlsZTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZUxheW91dChhdHRycywgY29tcG9uZW50cykge1xuICAgICAgICBsZXQgY3NzID0gJyc7XG4gICAgICAgIE9iamVjdC5rZXlzKExheW91dGVyLmxheW91dFN0eWxlcykuc29tZShrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGF0dHJzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjc3MgPSBuZXcgTGF5b3V0ZXIubGF5b3V0U3R5bGVzW2tleV0oTGF5b3V0ZXIudHJhbnNsYXRlKGF0dHJzW2tleV0pKS5nZXRTdHlsZXMoY29tcG9uZW50cyk7XG4gICAgICAgICAgICAgICAgYXR0cnNba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjc3M7XG4gICAgfVxuICAgIDtcbn1cbkxheW91dGVyLmxheW91dFN0eWxlcyA9IHt9O1xuZXhwb3J0cy5MYXlvdXRlciA9IExheW91dGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVEdGNWIzVjBaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZkbWxsZHk5TVlYbHZkWFJsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVmxCTEhGRFFVRjNRenRCUVhsQ2VFTXNUVUZCYzBJc1VVRkJVVHRKUVhsRk1VSXNXVUZCYlVJc1VVRkJjMEk3VVVGQmRFSXNZVUZCVVN4SFFVRlNMRkZCUVZFc1EwRkJZenRSUVZKNlF5eFpRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCVVdkRExFTkJRVU03U1VGNlJISkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQmQwSTdVVUZETjBNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTXNSVUZCUlR0WlFVRkZMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVMEZCUlR0UlFVTTNReXhQUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRm5RaXhGUVVGRkxFVkJRVVU3V1VGRGJrTXNTVUZCU1N4UFFVRlBMRXRCUVVzc1MwRkJTeXhSUVVGUkxFVkJRVVU3WjBKQlF6TkNMRWxCUVVrc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0dlFrRkJSU3hQUVVGUExGZEJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGQlJUdG5Ra0ZEZWtRc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZPMjlDUVVGRkxFOUJRVThzVjBGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVUZGTzJkQ1FVTjRSQ3hKUVVGSkxFdEJRVXNzUTBGQlF5eFhRVUZYTEVWQlFVVXNTMEZCUnl4TlFVRk5MRVZCUVVVN2IwSkJRVVVzVDBGQlR5eGhRVUZKTEVOQlFVTTdhVUpCUVVNN1lVRkRjRVE3YVVKQlFVMDdaMEpCUTBnc1QwRkJUeXhMUVVGTExFTkJRVU03WVVGRGFFSTdVVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOUUxFTkJRVU03U1VGWFRTeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVdNc1JVRkJSU3hMUVVGeFFqdFJRVVY0UkN4UlFVRlJMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXp0SlFVTXpReXhEUVVGRE8wbEJWVTBzVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4TFFVRlRMRVZCUVVVc1ZVRkJkVUk3VVVGRGVrUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMklzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZPMWxCUXpGRExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZPMmRDUVVOYUxFZEJRVWNzUjBGQlJ5eEpRVUZKTEZGQlFWRXNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRuUWtGRE0wWXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF6dG5Ra0ZEZGtJc1QwRkJUeXhKUVVGSkxFTkJRVU03WVVGRFpqdFpRVU5FTEU5QlFVOHNTMEZCU3l4RFFVRkRPMUZCUTJwQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwZ3NUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRaaXhEUVVGRE8wbEJWelJETEVOQlFVTTdPMEZCY0VWMlF5eHhRa0ZCV1N4SFFVRjFRaXhGUVVGRkxFTkJRVU03UVVGTWFrUXNORUpCTUVaREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IExheW91dGVyXzEgPSByZXF1aXJlKFwiLi9MYXlvdXRlclwiKTtcbmNvbnN0IFRva2Vuc18xID0gcmVxdWlyZShcIi4vVG9rZW5zXCIpO1xuZXhwb3J0cy5QaWxsYXJMYXlvdXRzID0gW1xuICAgICdjb2x1bW5zJywgJ3Jvd3MnXG5dO1xuY29uc3QgY1BhcmFtcyA9IHtcbiAgICBjb2x1bW5zOiB7XG4gICAgICAgIGNzc0NsYXNzOiAnLmhzLWNvbHVtbi1sYXlvdXQnLFxuICAgICAgICBmaWVsZHM6IFsndG9wJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0JywgJ2hlaWdodCcsICd3aWR0aCddXG4gICAgfSxcbiAgICByb3dzOiB7XG4gICAgICAgIGNzc0NsYXNzOiAnLmhzLXJvdy1sYXlvdXQnLFxuICAgICAgICBmaWVsZHM6IFsnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJywgJ3dpZHRoJywgJ2hlaWdodCddXG4gICAgfVxufTtcbmNsYXNzIFBpbGxhckxheW91dGVyIGV4dGVuZHMgTGF5b3V0ZXJfMS5MYXlvdXRlciB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zLCBhcmVhRGVzYykge1xuICAgICAgICBzdXBlcihhcmVhRGVzYyk7XG4gICAgICAgIHRoaXMuYXJlYURlc2MgPSBhcmVhRGVzYztcbiAgICAgICAgdGhpcy5maWVsZHMgPSBwYXJhbXMuZmllbGRzO1xuICAgICAgICB0aGlzLmNzc0NsYXNzID0gcGFyYW1zLmNzc0NsYXNzO1xuICAgICAgICBsZXQgbiA9IGFyZWFEZXNjLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCBmaXJzdCA9IDA7XG4gICAgICAgIGxldCBsYXN0ID0gMDtcbiAgICAgICAgdGhpcy51bml0ID0gYXJlYURlc2Muc29tZSgoYXJlYSkgPT4gKGFyZWEgaW5zdGFuY2VvZiBUb2tlbnNfMS5QaXhlbFRva2VuKSkgP1xuICAgICAgICAgICAgdGhpcy51bml0UGl4ZWwgOiB0aGlzLnVuaXRQZXJjZW50O1xuICAgICAgICBhcmVhRGVzYy5zb21lKChhcmVhLCBpKSA9PiAoKGFyZWFEZXNjW2ldIGluc3RhbmNlb2YgVG9rZW5zXzEuRGVmaW5lZFRva2VuKSA/ICsrZmlyc3QgPCAwIDogdHJ1ZSkpO1xuICAgICAgICBhcmVhRGVzYy5zb21lKChhcmVhLCBpKSA9PiAoKGFyZWFEZXNjW24gLSBpXSBpbnN0YW5jZW9mIFRva2Vuc18xLkRlZmluZWRUb2tlbikgPyArK2xhc3QgPCAwIDogdHJ1ZSkpO1xuICAgICAgICB0aGlzLmZpcnN0Rml4ZWQgPSBmaXJzdDtcbiAgICAgICAgdGhpcy5sYXN0Rml4ZWQgPSBNYXRoLm1pbihsYXN0LCBhcmVhRGVzYy5sZW5ndGggLSBmaXJzdCk7XG4gICAgfVxuICAgIDtcbiAgICBnZXRTaXplcyhudW0pIHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmZpcnN0Rml4ZWQ7XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxhc3RGaXhlZDtcbiAgICAgICAgY29uc3QgZGVzYyA9IHRoaXMuYXJlYURlc2M7XG4gICAgICAgIGNvbnN0IGxlbiA9IGRlc2MubGVuZ3RoO1xuICAgICAgICByZXR1cm4gWy4uLkFycmF5KG51bSkua2V5cygpXS5tYXAoKGkpID0+IHtcbiAgICAgICAgICAgIGxldCBzaXplID0gbnVsbDtcbiAgICAgICAgICAgIGxldCB0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpID4gbnVtIC0gMSAtIGxhc3QpIHtcbiAgICAgICAgICAgICAgICBzaXplID0gZGVzY1tsZW4gLSAobnVtIC0gaSldLmdldFNpemUoKTtcbiAgICAgICAgICAgICAgICB0ID0gJ2VuZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpIDwgZmlyc3QpIHtcbiAgICAgICAgICAgICAgICBzaXplID0gZGVzY1tpXS5nZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgdCA9ICdzdGFydCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChsZW4gPiAwICYmIGxlbiA9PT0gZmlyc3QpIHtcbiAgICAgICAgICAgICAgICBzaXplID0gZGVzY1tsZW4gLSAxXS5nZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgdCA9ICdzdGFydCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzaXplOiBzaXplLCBjb2RlOiB0LCBmaWVsZHM6IHt9IH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bml0UGVyY2VudChudW0pIHtcbiAgICAgICAgbGV0IGYgPSB0aGlzLmZpZWxkcztcbiAgICAgICAgbGV0IG1heCA9IDEwMC4wO1xuICAgICAgICBsZXQgc3R5bGVzID0gdGhpcy5nZXRTaXplcyhudW0pO1xuICAgICAgICBzdHlsZXMuZm9yRWFjaChzdHlsZSA9PiB7IGlmIChzdHlsZS5zaXplKSB7XG4gICAgICAgICAgICBtYXggPSBtYXggLSBzdHlsZS5zaXplO1xuICAgICAgICAgICAgbnVtLS07XG4gICAgICAgIH0gfSk7XG4gICAgICAgIGxldCBkZWZEaW0gPSBtYXggLyBudW07XG4gICAgICAgIGZ1bmN0aW9uIHBhc3Moc3R5bGVzLCBpeDAsIGl4MSwgYnJlYWtDb25kKSB7XG4gICAgICAgICAgICBsZXQgc3VtRGltID0gMDtcbiAgICAgICAgICAgIHN0eWxlcy5zb21lKHN0eWxlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgc2l6ZSA9IHN0eWxlLnNpemUgfHwgZGVmRGltO1xuICAgICAgICAgICAgICAgIGlmIChicmVha0NvbmQoc3R5bGUuY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tpeDBdID0gc3VtRGltICsgJyUnO1xuICAgICAgICAgICAgICAgIHN1bURpbSArPSBzaXplO1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tpeDFdID0gKDEwMCAtIHN1bURpbSkgKyAnJSc7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2ZbNV1dID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBhc3Moc3R5bGVzLCBmWzJdLCBmWzNdLCAoZSkgPT4gZSA9PT0gJ2VuZCcpO1xuICAgICAgICBwYXNzKHN0eWxlcy5yZXZlcnNlKCksIGZbM10sIGZbMl0sIChlKSA9PiBlICE9PSAnZW5kJyk7XG4gICAgICAgIHJldHVybiBzdHlsZXMucmV2ZXJzZSgpO1xuICAgIH1cbiAgICA7XG4gICAgdW5pdFBpeGVsKG51bSkge1xuICAgICAgICBsZXQgc3R5bGVzID0gdGhpcy5nZXRTaXplcyhudW0pO1xuICAgICAgICBsZXQgZiA9IHRoaXMuZmllbGRzO1xuICAgICAgICBsZXQgZGVmRGltID0gMTAwLjAgLyBudW07XG4gICAgICAgIGxldCBzdW1EaW0gPSAwO1xuICAgICAgICBzdHlsZXMuc29tZSgoc3R5bGUsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChzdHlsZS5jb2RlID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2ZbMl1dID0gc3VtRGltICsgJ3B4JztcbiAgICAgICAgICAgICAgICBzdW1EaW0gKz0gc3R5bGUuc2l6ZSArICh0aGlzLnNwYWNpbmcgfHwgMCkgKyAodGhpcy5zcGFjaW5nIHx8IDApO1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tmWzNdXSA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICBzdHlsZS5maWVsZHNbZls1XV0gPSBzdHlsZS5zaXplICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5maWVsZHNbZlsyXV0gPSAoc3VtRGltID4gMCkgPyAoc3VtRGltICsgJ3B4JykgOiAoaSAqIGRlZkRpbSArICclJyk7XG4gICAgICAgICAgICAgICAgc3VtRGltID0gLTE7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2ZbM11dID0gKDEwMCAtIChpICsgMSkgKiBkZWZEaW0pICsgJyUnO1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tmWzVdXSA9ICdhdXRvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmNvZGUgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBzdW1EaW0gPSAwO1xuICAgICAgICBzdHlsZXMuc2xpY2UoKS5yZXZlcnNlKCkuc29tZSgoc3R5bGUsIGkpID0+IHtcbiAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tmWzNdXSA9IHN1bURpbSArICdweCc7XG4gICAgICAgICAgICBpZiAoc3R5bGUuY29kZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgICAgICBzdW1EaW0gKz0gc3R5bGUuc2l6ZSArICh0aGlzLnNwYWNpbmcgfHwgMCkgKyAodGhpcy5zcGFjaW5nIHx8IDApO1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpZWxkc1tmWzJdXSA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICBzdHlsZS5maWVsZHNbZls1XV0gPSBzdHlsZS5zaXplICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdW1EaW0gPiAwICYmIHN0eWxlLmNvZGUgIT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuZmllbGRzW2ZbNV1dID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxuICAgIDtcbiAgICBnZXRTdHlsZXMoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgZiA9IHRoaXMuZmllbGRzO1xuICAgICAgICBsZXQgc3R5bGVzID0gdGhpcy51bml0KGNvbXBvbmVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tcG9uZW50cy5tYXAoKGMsIGkpID0+IHtcbiAgICAgICAgICAgIGMuc3R5bGUgPSBgJHtmWzBdfTowJTsgJHtmWzFdfTowJTsgYDtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0eWxlc1tpXS5maWVsZHMpLmZvckVhY2goKHN0KSA9PiB7IGMuc3R5bGUgKz0gYCR7c3R9OiAke3N0eWxlc1tpXS5maWVsZHNbc3RdfTtgOyB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNzc0NsYXNzO1xuICAgIH1cbiAgICA7XG59XG47XG5jbGFzcyBDb2x1bW5zIGV4dGVuZHMgUGlsbGFyTGF5b3V0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGFyZWFEZXNjKSB7XG4gICAgICAgIHN1cGVyKGNQYXJhbXNbZXhwb3J0cy5QaWxsYXJMYXlvdXRzWzBdXSwgYXJlYURlc2MpO1xuICAgICAgICB0aGlzLmFyZWFEZXNjID0gYXJlYURlc2M7XG4gICAgfVxuICAgIDtcbn1cbjtcbmNsYXNzIFJvd3MgZXh0ZW5kcyBQaWxsYXJMYXlvdXRlciB7XG4gICAgY29uc3RydWN0b3IoYXJlYURlc2MpIHtcbiAgICAgICAgc3VwZXIoY1BhcmFtc1tleHBvcnRzLlBpbGxhckxheW91dHNbMV1dLCBhcmVhRGVzYyk7XG4gICAgICAgIHRoaXMuYXJlYURlc2MgPSBhcmVhRGVzYztcbiAgICB9XG4gICAgO1xufVxuO1xuTGF5b3V0ZXJfMS5MYXlvdXRlci5yZWdpc3RlcihleHBvcnRzLlBpbGxhckxheW91dHNbMF0sIENvbHVtbnMpO1xuTGF5b3V0ZXJfMS5MYXlvdXRlci5yZWdpc3RlcihleHBvcnRzLlBpbGxhckxheW91dHNbMV0sIFJvd3MpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVUdsc2JHRnlaV1JNWVhsdmRYUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTJhV1YzTDFCcGJHeGhjbVZrVEdGNWIzVjBaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRXlRMEVzZVVOQlFUQkRPMEZCUXpGRExIRkRRVVYzUXp0QlFXZENNMElzVVVGQlFTeGhRVUZoTEVkQlFVYzdTVUZEZWtJc1UwRkJVeXhGUVVGRkxFMUJRVTA3UTBGRGNFSXNRMEZCUXp0QlFVdEdMRTFCUVUwc1QwRkJUeXhIUVVGSE8wbEJRMW9zVDBGQlR5eEZRVUZuUWp0UlFVTnVRaXhSUVVGUkxFVkJRVVVzYlVKQlFXMUNPMUZCUXpkQ0xFMUJRVTBzUlVGQlJTeERRVUZETEV0QlFVc3NSVUZCUlN4UlFVRlJMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeFJRVUZSTEVWQlFVVXNUMEZCVHl4RFFVRkRPMHRCUTJoRk8wbEJRMFFzU1VGQlNTeEZRVUZuUWp0UlFVTm9RaXhSUVVGUkxFVkJRVVVzWjBKQlFXZENPMUZCUXpGQ0xFMUJRVTBzUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlN4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRkxGRkJRVkVzUlVGQlJTeFBRVUZQTEVWQlFVVXNVVUZCVVN4RFFVRkRPMHRCUTJoRk8wTkJRMG9zUTBGQlF6dEJRVTlHTEUxQlFXVXNZMEZCWlN4VFFVRlJMRzFDUVVGUk8wbEJZVEZETEZsQlFWa3NUVUZCYlVJc1JVRkJVeXhSUVVGelFqdFJRVU14UkN4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRWIwSXNZVUZCVVN4SFFVRlNMRkZCUVZFc1EwRkJZenRSUVVVeFJDeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRE5VSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETzFGQlJXaERMRWxCUVVrc1EwRkJReXhIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTmtMRWxCUVVrc1NVRkJTU3hIUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVZrTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFXZENMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeFpRVUZaTEcxQ1FVRlZMRU5CUVVNc1EwRkJReXhEUVVGQkxFTkJRVU03V1VGRE1VVXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXp0UlFVZDBReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCWjBJc1JVRkJSU3hEUVVGUkxFVkJRVVVzUlVGQlJTeERRVU42UXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZqTEhGQ1FVRlpMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlIycEZMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZuUWl4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRM3BETEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEhGQ1FVRlpMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVkQlFVTXNRMEZCUXl4RFFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJXcEZMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzUzBGQlN5eERRVUZETzFGQlEzaENMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWtzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1VVRkJVU3hEUVVGRExFMUJRVTBzUjBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTTFSQ3hEUVVGRE8wbEJRVUVzUTBGQlF6dEpRVk5OTEZGQlFWRXNRMEZCUXl4SFFVRlZPMUZCUTNaQ0xFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNN1VVRkRPVUlzVFVGQlRTeEpRVUZKTEVkQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJRenRSUVVNM1FpeE5RVUZOTEVsQlFVa3NSMEZCU1N4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRelZDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRmVFSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlVTeEZRVUZGTEVWQlFVVTdXVUZETTBNc1NVRkJTU3hKUVVGSkxFZEJRVlVzU1VGQlNTeERRVUZETzFsQlEzWkNMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dFpRVU5pTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJReXhEUVVGRExFZEJRVU1zU1VGQlNTeEZRVUZITzJkQ1FVRkZMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdaMEpCUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF6dGhRVUZGTzJsQ1FVTndSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVWQlFVYzdaMEpCUVVVc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRuUWtGQlF5eERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRPMkZCUVVVN2FVSkJRekZFTEVsQlFVa3NSMEZCUnl4SFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExFdEJRVWNzUzBGQlN5eEZRVUZETzJkQ1FVRkZMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8yZENRVUZETEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1lVRkJSVHRaUVVNMVJTeFBRVUZQTEVWQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJRenRSUVVNeFF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTlFMRU5CUVVNN1NVRkZUeXhYUVVGWExFTkJRVU1zUjBGQlZUdFJRVU14UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEzQkNMRWxCUVVrc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU5vUWl4SlFVRkpMRTFCUVUwc1IwRkJaMElzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVVM1F5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZPMWxCUVVVc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03VTBGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJoR0xFbEJRVWtzVFVGQlRTeEhRVUZITEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNN1VVRkZka0lzVTBGQlV5eEpRVUZKTEVOQlFVTXNUVUZCYlVJc1JVRkJSU3hIUVVGVkxFVkJRVVVzUjBGQlZTeEZRVUZGTEZOQlFXZERPMWxCUTNaR0xFbEJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTm1MRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdaMEpCUTJoQ0xFbEJRVWtzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRWxCUVVrc1RVRkJUU3hEUVVGRE8yZENRVU5vUXl4SlFVRkpMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdiMEpCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03YVVKQlFVVTdaMEpCUXpORExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1RVRkJUU3hIUVVGRExFZEJRVWNzUTBGQlF6dG5Ra0ZETDBJc1RVRkJUU3hKUVVGSkxFbEJRVWtzUTBGQlF6dG5Ra0ZEWml4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGRExFZEJRVWNzUTBGQlF6dG5Ra0ZEY2tNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU03WjBKQlF6VkNMRTlCUVU4c1MwRkJTeXhEUVVGRE8xbEJRMnBDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTFBc1EwRkJRenRSUVVWRUxFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTJ4RUxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRelZFTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRelZDTEVOQlFVTTdTVUZCUVN4RFFVRkRPMGxCUlUwc1UwRkJVeXhEUVVGRExFZEJRVlU3VVVGRGVFSXNTVUZCU1N4TlFVRk5MRWRCUVdkQ0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkROME1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVWd1FpeEpRVUZKTEUxQlFVMHNSMEZCUnl4TFFVRkxMRWRCUVVNc1IwRkJSeXhEUVVGRE8xRkJSM1pDTEVsQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVObUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRGNrSXNTVUZCU1N4TFFVRkxMRU5CUVVNc1NVRkJTU3hMUVVGSExFOUJRVThzUlVGQlJUdG5Ra0ZEZEVJc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhOUVVGTkxFZEJRVVVzU1VGQlNTeERRVUZETzJkQ1FVTnNReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTnFSU3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF6dG5Ra0ZETlVJc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU1zU1VGQlNTeEhRVUZGTEVsQlFVa3NRMEZCUXp0aFFVTjZRenRwUWtGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRXRCUVVzc1NVRkJTU3hGUVVGRk8yZENRVU0xUWl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTnVSU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTFvc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdaMEpCUXpsRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETzJGQlF5OUNPMmxDUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCUnl4TFFVRkxMRVZCUVVVN1owSkJRVVVzVDBGQlR5eEpRVUZKTEVOQlFVTTdZVUZCUlR0WlFVTXZReXhQUVVGUExFdEJRVXNzUTBGQlF6dFJRVU5xUWl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVkSUxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEV0N4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzWkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF6dFpRVU51UXl4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFdEJRVXNzUzBGQlN5eEZRVUZGTzJkQ1FVTjBRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTnFSU3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF6dG5Ra0ZETlVJc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU1zU1VGQlNTeEhRVUZETEVsQlFVa3NRMEZCUXp0aFFVTjRRenRwUWtGQlRUdG5Ra0ZEU0N4SlFVRkpMRTFCUVUwc1IwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3l4UFFVRlBMRVZCUVVVN2IwSkJRM0JETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRPMmxDUVVNdlFqdG5Ra0ZEUkN4UFFVRlBMRWxCUVVrc1EwRkJRenRoUVVObU8xbEJRMFFzVDBGQlR5eExRVUZMTEVOQlFVTTdVVUZEYWtJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeFBRVUZQTEUxQlFVMHNRMEZCUXp0SlFVTnNRaXhEUVVGRE8wbEJRVUVzUTBGQlF6dEpRVkZSTEZOQlFWTXNRMEZCUXl4VlFVRTRRanRSUVVNNVF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRM0JDTEVsQlFVa3NUVUZCVFN4SFFVRm5RaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVOMlJDeFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJZeXhGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTzFsQlEzaERMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEY2tNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCVXl4RlFVRkZMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEVkQlFVY3NSVUZCUlN4TFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6VkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMGdzVDBGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUTNwQ0xFTkJRVU03U1VGQlFTeERRVUZETzBOQlEwdzdRVUZCUVN4RFFVRkRPMEZCZFVSR0xFMUJRVTBzVDBGQlVTeFRRVUZSTEdOQlFXTTdTVUZEYUVNc1dVRkJiVUlzVVVGQmMwSTdVVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExIRkNRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVUZ5UlN4aFFVRlJMRWRCUVZJc1VVRkJVU3hEUVVGak8wbEJRV2xFTEVOQlFVTTdTVUZCUVN4RFFVRkRPME5CUXk5R08wRkJRVUVzUTBGQlF6dEJRWFZFUml4TlFVRk5MRWxCUVVzc1UwRkJVU3hqUVVGak8wbEJRemRDTEZsQlFXMUNMRkZCUVhOQ08xRkJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4eFFrRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkJja1VzWVVGQlVTeEhRVUZTTEZGQlFWRXNRMEZCWXp0SlFVRnBSQ3hEUVVGRE8wbEJRVUVzUTBGQlF6dERRVU12Ump0QlFVRkJMRU5CUVVNN1FVRkZSaXh0UWtGQlVTeERRVUZETEZGQlFWRXNRMEZCUXl4eFFrRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXpkRExHMUNRVUZSTEVOQlFVTXNVVUZCVVN4RFFVRkRMSEZDUVVGaExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVc3NTVUZCU1N4RFFVRkRMRU5CUVVNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IExheW91dGVyXzEgPSByZXF1aXJlKFwiLi9MYXlvdXRlclwiKTtcbmNvbnN0IFRva2Vuc18xID0gcmVxdWlyZShcIi4vVG9rZW5zXCIpO1xuY2xhc3MgVGlsZUxheW91dGVyIGV4dGVuZHMgTGF5b3V0ZXJfMS5MYXlvdXRlciB7XG4gICAgY29uc3RydWN0b3IoYXJlYURlc2MpIHtcbiAgICAgICAgc3VwZXIoYXJlYURlc2MpO1xuICAgICAgICB0aGlzLmFyZWFEZXNjID0gYXJlYURlc2M7XG4gICAgICAgIHRoaXMudW5pdCA9IGFyZWFEZXNjLnNvbWUoKGFyZWEpID0+IChhcmVhIGluc3RhbmNlb2YgVG9rZW5zXzEuUGl4ZWxUb2tlbikpID9cbiAgICAgICAgICAgIHRoaXMudW5pdFBpeGVsIDogdGhpcy51bml0UGVyY2VudDtcbiAgICB9XG4gICAgO1xuICAgIHVuaXRQZXJjZW50KG51bSkge1xuICAgICAgICBjb25zdCBkZXNjID0gdGhpcy5hcmVhRGVzYztcbiAgICAgICAgY29uc3QgZmlsbCA9IHRoaXMuYXJlYURlc2Muc29tZShhID0+IChhIGluc3RhbmNlb2YgVG9rZW5zXzEuRmlsbFRva2VuKSk7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBNYXRoLnNxcnQobnVtKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IE1hdGgucm91bmQocm9vdCk7XG4gICAgICAgIGxldCBjb2xzID0gTWF0aC5mbG9vcihyb290KTtcbiAgICAgICAgaWYgKHJvb3QgPiBjb2xzKSB7XG4gICAgICAgICAgICBjb2xzKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHdpZHRoID0gKGRlc2NbMF0gaW5zdGFuY2VvZiBUb2tlbnNfMS5EZWZpbmVkVG9rZW4pID8gZGVzY1swXS5nZXRTaXplKCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBoZWlnaHQgPSAoZGVzY1sxXSBpbnN0YW5jZW9mIFRva2Vuc18xLkRlZmluZWRUb2tlbikgPyBkZXNjWzFdLmdldFNpemUoKSA6IHdpZHRoO1xuICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMCAvIGNvbHM7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDAgLyByb3dzO1xuICAgICAgICBsZXQgbGVmdCA9IDA7XG4gICAgICAgIGxldCB0b3AgPSAwO1xuICAgICAgICBsZXQgc3R5bGVzID0gWy4uLkFycmF5KG51bSkua2V5cygpXS5tYXAoaSA9PiB7XG4gICAgICAgICAgICBsZXQgciA9ICdhdXRvJztcbiAgICAgICAgICAgIGxldCB3ID0gd2lkdGggKyAnJSc7XG4gICAgICAgICAgICBsZXQgYiA9ICdhdXRvJztcbiAgICAgICAgICAgIGxldCBoID0gaGVpZ2h0ICsgJyUnO1xuICAgICAgICAgICAgaWYgKChsZWZ0ICsgMiAqIHdpZHRoKSA+IDEwMCAmJiBmaWxsKSB7XG4gICAgICAgICAgICAgICAgciA9ICcwJSc7XG4gICAgICAgICAgICAgICAgdyA9ICdhdXRvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodG9wICsgMiAqIGhlaWdodCkgPiAxMDAgJiYgZmlsbCkge1xuICAgICAgICAgICAgICAgIGIgPSAnMCUnO1xuICAgICAgICAgICAgICAgIGggPSAnYXV0byc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IGBcbiAgICAgICAgICAgICAgICB0b3A6ICR7TWF0aC5mbG9vcih0b3ApfSU7IGJvdHRvbToke2J9O1xuICAgICAgICAgICAgICAgIGxlZnQ6ICR7bGVmdH0lOyAgICAgICAgICAgcmlnaHQ6JHtyfTtcbiAgICAgICAgICAgICAgICB3aWR0aDogJHt3fTsgICAgICAgICAgICAgIGhlaWdodDogJHtofTtcbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgICBpZiAoTWF0aC5yb3VuZChsZWZ0ICs9IHdpZHRoKSA+IDEwMCAtIE1hdGguZmxvb3Iod2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgbGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgdG9wICs9IGhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxuICAgIDtcbiAgICB1bml0UGl4ZWwobnVtKSB7XG4gICAgICAgIGNvbnN0IGRlc2MgPSB0aGlzLmFyZWFEZXNjO1xuICAgICAgICBjb25zdCByb290ID0gTWF0aC5zcXJ0KG51bSk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLnJvdW5kKHJvb3QpO1xuICAgICAgICBsZXQgY29scyA9IE1hdGguZmxvb3Iocm9vdCk7XG4gICAgICAgIGlmIChyb290ID4gY29scykge1xuICAgICAgICAgICAgY29scysrO1xuICAgICAgICB9XG4gICAgICAgIGxldCB3aWR0aCA9IChkZXNjWzBdIGluc3RhbmNlb2YgVG9rZW5zXzEuRGVmaW5lZFRva2VuKSA/IGRlc2NbMF0uZ2V0U2l6ZSgpIDogdW5kZWZpbmVkO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gKGRlc2NbMV0gaW5zdGFuY2VvZiBUb2tlbnNfMS5EZWZpbmVkVG9rZW4pID8gZGVzY1sxXS5nZXRTaXplKCkgOiB3aWR0aDtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCAxMDAgLyBjb2xzO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwIC8gcm93cztcbiAgICAgICAgbGV0IGxlZnQgPSAwO1xuICAgICAgICBsZXQgdG9wID0gMDtcbiAgICAgICAgbGV0IHN0eWxlcyA9IFsuLi5BcnJheShudW0pLmtleXMoKV0ubWFwKGkgPT4ge1xuICAgICAgICAgICAgbGV0IHIgPSAnYXV0byc7XG4gICAgICAgICAgICBsZXQgdyA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIGxldCBiID0gJ2F1dG8nO1xuICAgICAgICAgICAgbGV0IGggPSBoZWlnaHQgKyAncHgnO1xuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBgXG4gICAgICAgICAgICAgICAgdG9wOiAke01hdGguZmxvb3IodG9wKX0lOyBib3R0b206JHtifTtcbiAgICAgICAgICAgICAgICBsZWZ0OiAke2xlZnR9JTsgICAgICAgICAgIHJpZ2h0OiR7cn07XG4gICAgICAgICAgICAgICAgd2lkdGg6ICR7d307ICAgICAgICAgICAgICBoZWlnaHQ6ICR7aH07XG4gICAgICAgICAgICBgO1xuICAgICAgICAgICAgaWYgKE1hdGgucm91bmQobGVmdCArPSB3aWR0aCkgPiAxMDAgLSBNYXRoLmZsb29yKHdpZHRoKSkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSAwO1xuICAgICAgICAgICAgICAgIHRvcCArPSBoZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbiAgICA7XG4gICAgZ2V0U3R5bGVzKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IHN0eWxlcyA9IHRoaXMudW5pdChjb21wb25lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbXBvbmVudHMubWFwKChjLCBpKSA9PiB7XG4gICAgICAgICAgICBjLnN0eWxlID0gc3R5bGVzW2ldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICcuaHMtdGlsZS1sYXlvdXQnO1xuICAgIH1cbiAgICA7XG59XG47XG5MYXlvdXRlcl8xLkxheW91dGVyLnJlZ2lzdGVyKCd0aWxlcycsIFRpbGVMYXlvdXRlcik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lWR2xzWlV4aGVXOTFkR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1pwWlhjdlZHbHNaVXhoZVc5MWRHVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQk9FUkJMSGxEUVVFd1F6dEJRVU14UXl4eFEwRkhkME03UVVGUGVFTXNUVUZCVFN4WlFVRmhMRk5CUVZFc2JVSkJRVkU3U1VGUkwwSXNXVUZCYlVJc1VVRkJjMEk3VVVGRGNrTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJSRVFzWVVGQlVTeEhRVUZTTEZGQlFWRXNRMEZCWXp0UlFVbHlReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGblFpeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWxCUVVrc1dVRkJXU3h0UWtGQlZTeERRVUZETEVOQlFVTXNRMEZCUVN4RFFVRkRPMWxCUXpGRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03U1VGRE1VTXNRMEZCUXp0SlFVRkJMRU5CUVVNN1NVRkZUU3hYUVVGWExFTkJRVU1zUjBGQlZUdFJRVU14UWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzFGQlF6TkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFWa3NhMEpCUVZNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGREwwUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTTFRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRemxDTEVsQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZET1VJc1NVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEZRVUZGTzFsQlFVVXNTVUZCU1N4RlFVRkZMRU5CUVVNN1UwRkJSVHRSUVVNMVFpeEpRVUZKTEV0QlFVc3NSMEZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQldTeHhRa0ZCV1N4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETzFGQlF6bEZMRWxCUVVrc1RVRkJUU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMSEZDUVVGWkxFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNN1VVRkZNVVVzUzBGQlN5eEhRVUZKTEV0QlFVc3NTVUZCU3l4SFFVRkhMRWRCUVVNc1NVRkJTU3hEUVVGRE8xRkJRelZDTEUxQlFVMHNSMEZCUnl4TlFVRk5MRWxCUVVrc1IwRkJSeXhIUVVGRExFbEJRVWtzUTBGQlF6dFJRVU0xUWl4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFlpeEpRVUZKTEVkQlFVY3NSMEZCU1N4RFFVRkRMRU5CUVVNN1VVRkZZaXhKUVVGSkxFMUJRVTBzUjBGQlJ5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8xbEJRM2hETEVsQlFVa3NRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJRenRaUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NSMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRja01zU1VGQlNTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRPMWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzVFVGQlRTeEhRVUZETEVkQlFVY3NRMEZCUXp0WlFVTjBReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNSMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTzJkQ1FVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03WjBKQlFVTXNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJRenRoUVVGRk8xbEJRemRFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVN1owSkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0blFrRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETzJGQlFVVTdXVUZETjBRc1RVRkJUU3hMUVVGTExFZEJRVWM3ZFVKQlEwZ3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zWVVGQllTeERRVUZETzNkQ1FVTTFRaXhKUVVGSkxITkNRVUZ6UWl4RFFVRkRPM2xDUVVNeFFpeERRVUZETERCQ1FVRXdRaXhEUVVGRE8yRkJRM2hETEVOQlFVTTdXVUZEUml4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEpRVUZKTEV0QlFVc3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZPMmRDUVVGRkxFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUVVNc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF6dGhRVUZGTzFsQlEyNUdMRTlCUVU4c1MwRkJTeXhEUVVGRE8xRkJRMmhDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBvc1QwRkJUeXhOUVVGTkxFTkJRVU03U1VGRGJFSXNRMEZCUXp0SlFVRkJMRU5CUVVNN1NVRkZUU3hUUVVGVExFTkJRVU1zUjBGQlZUdFJRVU40UWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzFGQlJUTkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkROVUlzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU01UWl4SlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUXpsQ0xFbEJRVWtzU1VGQlNTeEhRVUZITEVsQlFVa3NSVUZCUlR0WlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGRE8xTkJRVVU3VVVGRE5VSXNTVUZCU1N4TFFVRkxMRWRCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFWa3NjVUpCUVZrc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTTVSU3hKUVVGSkxFMUJRVTBzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3h4UWtGQldTeERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJSVEZGTEV0QlFVc3NSMEZCU1N4TFFVRkxMRWxCUVVzc1IwRkJSeXhIUVVGRExFbEJRVWtzUTBGQlF6dFJRVU0xUWl4TlFVRk5MRWRCUVVjc1RVRkJUU3hKUVVGSkxFZEJRVWNzUjBGQlF5eEpRVUZKTEVOQlFVTTdVVUZETlVJc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEySXNTVUZCU1N4SFFVRkhMRWRCUVVrc1EwRkJReXhEUVVGRE8xRkJSV0lzU1VGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdFpRVU40UXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU03V1VGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRWRCUVVNc1NVRkJTU3hEUVVGRE8xbEJRM1JETEVsQlFVa3NRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJRenRaUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEUxQlFVMHNSMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRka01zVFVGQlRTeExRVUZMTEVkQlFVYzdkVUpCUTBnc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNZVUZCWVN4RFFVRkRPM2RDUVVNMVFpeEpRVUZKTEhOQ1FVRnpRaXhEUVVGRE8zbENRVU14UWl4RFFVRkRMREJDUVVFd1FpeERRVUZETzJGQlEzaERMRU5CUVVNN1dVRkRSaXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SlFVRkpMRXRCUVVzc1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRk8yZENRVUZGTEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRVU1zUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXp0aFFVRkZPMWxCUTI1R0xFOUJRVThzUzBGQlN5eERRVUZETzFGQlEyaENMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMG9zVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVGQkxFTkJRVU03U1VGUlVTeFRRVUZUTEVOQlFVTXNWVUZCT0VJN1VVRkRPVU1zU1VGQlNTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZETVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFXTXNSVUZCUlN4RFFVRlJMRVZCUVVVc1JVRkJSVHRaUVVONFF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU40UWl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFOUJRVThzYVVKQlFXbENMRU5CUVVNN1NVRkROMElzUTBGQlF6dEpRVUZCTEVOQlFVTTdRMEZEVER0QlFVRkJMRU5CUVVNN1FVRkhSaXh0UWtGQlVTeERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRVZCUVVVc1dVRkJXU3hEUVVGRExFTkJRVU1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY2xhc3MgTGF5b3V0VG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKHNpemUpIHtcbiAgICAgICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICB9XG4gICAgZ2V0U2l6ZSgpIHsgcmV0dXJuIHRoaXMuc2l6ZTsgfVxufVxuZXhwb3J0cy5MYXlvdXRUb2tlbiA9IExheW91dFRva2VuO1xuY2xhc3MgRGVmaW5lZFRva2VuIGV4dGVuZHMgTGF5b3V0VG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKHNpemUpIHsgc3VwZXIoc2l6ZSk7IH1cbn1cbmV4cG9ydHMuRGVmaW5lZFRva2VuID0gRGVmaW5lZFRva2VuO1xuY2xhc3MgRmlsbFRva2VuIGV4dGVuZHMgTGF5b3V0VG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigtMSk7IH1cbn1cbmV4cG9ydHMuRmlsbFRva2VuID0gRmlsbFRva2VuO1xuY2xhc3MgUGl4ZWxUb2tlbiBleHRlbmRzIERlZmluZWRUb2tlbiB7XG4gICAgY29uc3RydWN0b3Ioc2l6ZSkgeyBzdXBlcihzaXplKTsgfVxufVxuZXhwb3J0cy5QaXhlbFRva2VuID0gUGl4ZWxUb2tlbjtcbmNsYXNzIFBlcmNlbnRUb2tlbiBleHRlbmRzIERlZmluZWRUb2tlbiB7XG4gICAgY29uc3RydWN0b3Ioc2l6ZSkgeyBzdXBlcihzaXplKTsgfVxufVxuZXhwb3J0cy5QZXJjZW50VG9rZW4gPSBQZXJjZW50VG9rZW47XG5mdW5jdGlvbiBweChweCkgeyByZXR1cm4gbmV3IFBpeGVsVG9rZW4ocHgpOyB9XG5leHBvcnRzLnB4ID0gcHg7XG5mdW5jdGlvbiBwYyhwYykgeyByZXR1cm4gbmV3IFBlcmNlbnRUb2tlbihwYyk7IH1cbmV4cG9ydHMucGMgPSBwYztcbmV4cG9ydHMuRklMTCA9IG5ldyBGaWxsVG9rZW4oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVZHOXJaVzV6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1pwWlhjdlZHOXJaVzV6TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJVVUVzVFVGQmMwSXNWMEZCVnp0SlFVTTNRaXhaUVVGdlFpeEpRVUZaTzFGQlFWb3NVMEZCU1N4SFFVRktMRWxCUVVrc1EwRkJVVHRKUVVGSExFTkJRVU03U1VGRE4wSXNUMEZCVHl4TFFVRkxMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdRMEZEZWtNN1FVRklSQ3hyUTBGSFF6dEJRVXRFTEUxQlFYTkNMRmxCUVdFc1UwRkJVU3hYUVVGWE8wbEJRMnhFTEZsQlFWa3NTVUZCV1N4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRMEZETjBNN1FVRkdSQ3h2UTBGRlF6dEJRVXRFTEUxQlFXRXNVMEZCVlN4VFFVRlJMRmRCUVZjN1NVRkRkRU1zWjBKQlFXZENMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0RFFVTXZRanRCUVVaRUxEaENRVVZETzBGQlMwUXNUVUZCWVN4VlFVRlhMRk5CUVZFc1dVRkJXVHRKUVVONFF5eFpRVUZaTEVsQlFWY3NTVUZCU1N4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBOQlF6VkRPMEZCUmtRc1owTkJSVU03UVVGTFJDeE5RVUZoTEZsQlFXRXNVMEZCVVN4WlFVRlpPMGxCUXpGRExGbEJRVmtzU1VGQlZ5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UTBGRE5VTTdRVUZHUkN4dlEwRkZRenRCUVUxRUxGTkJRV2RDTEVWQlFVVXNRMEZCUXl4RlFVRlRMRWxCUVUwc1QwRkJUeXhKUVVGSkxGVkJRVlVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkJPVVFzWjBKQlFUaEVPMEZCVFRsRUxGTkJRV2RDTEVWQlFVVXNRMEZCUXl4RlFVRlRMRWxCUVUwc1QwRkJUeXhKUVVGSkxGbEJRVmtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkJhRVVzWjBKQlFXZEZPMEZCUzI1RUxGRkJRVUVzU1VGQlNTeEhRVUZITEVsQlFVa3NVMEZCVXl4RlFVRkZMRU5CUVVNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNob3J0Q2hlY2tTdW0ocykge1xuICAgIHZhciBjaGsgPSAweDEyMzQ1Njc4O1xuICAgIHZhciBsZW4gPSBzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNoayArPSAocy5jaGFyQ29kZUF0KGkpICogKGkgKyAxKSk7XG4gICAgfVxuICAgIHJldHVybiAoY2hrICYgMHhmZmZmZmZmZikudG9TdHJpbmcoMTYpO1xufVxuZXhwb3J0cy5zaG9ydENoZWNrU3VtID0gc2hvcnRDaGVja1N1bTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVEyaGxZMnR6ZFcwdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZRMmhsWTJ0emRXMHVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGUlF5eFRRVUZuUWl4aFFVRmhMRU5CUVVNc1EwRkJVVHRKUVVOdVF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4VlFVRlZMRU5CUVVNN1NVRkRja0lzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVOdVFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMUZCUXpGQ0xFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVOMFF6dEpRVU5FTEU5QlFVOHNRMEZCUXl4SFFVRkhMRWRCUVVjc1ZVRkJWU3hEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUXpGRExFTkJRVU03UVVGUVJDeHpRMEZQUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbW9udGhTdHIgPSBbXG4gICAgWydKYW4nLCAnSmFudWFyeSddLCBbJ0ZlYicsICdGZWJydWFyeSddLCBbJ01hcicsICdNYXJjaCddLCBbJ0FwcicsICdBcHJpbCddLCBbJ01heScsICdNYXknXSwgWydKdW4nLCAnSnVuZSddLFxuICAgIFsnSnVsJywgJ0p1bHknXSwgWydBdWcnLCAnQXVndXN0J10sIFsnU2VwJywgJ1NlcHRlbWJlciddLCBbJ09jdCcsICdPY3RvYmVyJ10sIFsnTm92JywgJ05vdmVtYmVyJ10sIFsnRGVjJywgJ0RlY2VtYmVyJ11cbl07XG5jb25zdCBkYXlTdHIgPSBbXG4gICAgWydTdW4nLCAnU3VuZGF5J10sIFsnTW9uJywgJ01vbmRheSddLCBbJ1R1ZScsICdUdWVzZGF5J10sIFsnV2VkJywgJ1dlZG5lc2RheSddLCBbJ1RodScsICdUaHVyc2RheSddLCBbJ0ZyaScsICdGcmlkYXknXSwgWydTYXQnLCAnU2F0dXJkYXknXVxuXTtcbmZ1bmN0aW9uIGZvcm1hdE51bWJlcihudW1iZXIsIGRpZ2l0cykge1xuICAgIHZhciByID0gJycgKyBudW1iZXI7XG4gICAgd2hpbGUgKHIubGVuZ3RoIDwgZGlnaXRzKSB7XG4gICAgICAgIHIgPSBcIjBcIiArIHI7XG4gICAgfVxuICAgIHJldHVybiByO1xufVxuZnVuY3Rpb24gZGF0ZShmb3JtYXRTdHJpbmcsIGRhdGUgPSBuZXcgRGF0ZSgpKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgZm9ybWF0U3RyaW5nICE9PSAnc3RyaW5nJyB8fCBpc05hTihkYXRlLmdldFRpbWUoKSkpID9cbiAgICAgICAgJ2ludmFsaWQnIDpcbiAgICAgICAgZm9ybWF0U3RyaW5nXG4gICAgICAgICAgICAucmVwbGFjZSgvJVlZWVkvZywgJycgKyBkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICAgICAgICAucmVwbGFjZSgvJVlZL2csICcnICsgKGRhdGUuZ2V0RnVsbFllYXIoKSAlIDEwMCkpXG4gICAgICAgICAgICAucmVwbGFjZSgvJU1NTU0vZywgbW9udGhTdHJbZGF0ZS5nZXRNb250aCgpXVsxXSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lTU1NL2csIG1vbnRoU3RyW2RhdGUuZ2V0TW9udGgoKV1bMF0pXG4gICAgICAgICAgICAucmVwbGFjZSgvJU1NL2csIGZvcm1hdE51bWJlcihkYXRlLmdldE1vbnRoKCkgKyAxLCAyKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lTS9nLCAnJyArIChkYXRlLmdldE1vbnRoKCkgKyAxKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lRERERC9nLCBkYXlTdHJbZGF0ZS5nZXREYXkoKV1bMV0pXG4gICAgICAgICAgICAucmVwbGFjZSgvJURERC9nLCBkYXlTdHJbZGF0ZS5nZXREYXkoKV1bMF0pXG4gICAgICAgICAgICAucmVwbGFjZSgvJUREL2csIGZvcm1hdE51bWJlcihkYXRlLmdldERhdGUoKSwgMikpXG4gICAgICAgICAgICAucmVwbGFjZSgvJUQvZywgJycgKyBkYXRlLmdldERhdGUoKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8laGgvZywgZm9ybWF0TnVtYmVyKGRhdGUuZ2V0SG91cnMoKSwgMikpXG4gICAgICAgICAgICAucmVwbGFjZSgvJWgvZywgJycgKyBkYXRlLmdldEhvdXJzKCkpXG4gICAgICAgICAgICAucmVwbGFjZSgvJW1tL2csIGZvcm1hdE51bWJlcihkYXRlLmdldE1pbnV0ZXMoKSwgMikpXG4gICAgICAgICAgICAucmVwbGFjZSgvJW0vZywgJycgKyBkYXRlLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lc3MvZywgZm9ybWF0TnVtYmVyKGRhdGUuZ2V0U2Vjb25kcygpLCAyKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lampqL2csIGZvcm1hdE51bWJlcihkYXRlLmdldE1pbGxpc2Vjb25kcygpLCAzKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lamovZywgZm9ybWF0TnVtYmVyKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLyAxMCwgMikpXG4gICAgICAgICAgICAucmVwbGFjZSgvJWovZywgZm9ybWF0TnVtYmVyKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLyAxMDAsIDEpKTtcbn1cbmV4cG9ydHMuZGF0ZSA9IGRhdGU7XG5leHBvcnRzLm1zID0ge1xuICAgIGZyb21NaW51dGVzOiAobWluKSA9PiAxMDAwICogNjAgKiBtaW4sXG4gICAgZnJvbUhvdXJzOiAoaCkgPT4gMTAwMCAqIDYwICogNjAgKiBoLFxuICAgIGZyb21EYXlzOiAoZCkgPT4gMTAwMCAqIDYwICogNjAgKiAyNCAqIGQsXG4gICAgZnJvbVdlZWtzOiAodykgPT4gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcgKiB3LFxuICAgIHRvTWludXRlczogKG1zKSA9PiBtcyAvICgxMDAwICogNjApLFxuICAgIHRvSG91cnM6IChtcykgPT4gbXMgLyAoMTAwMCAqIDYwICogNjApLFxuICAgIHRvRGF5czogKG1zKSA9PiBtcyAvICgxMDAwICogNjAgKiA2MCAqIDI0KSxcbiAgICB0b1dlZWtzOiAobXMpID0+IG1zIC8gKDEwMDAgKiA2MCAqIDYwICogMjQgKiA3KVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVJHRjBaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5RVlYUmxMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlpVRXNUVUZCVFN4UlFVRlJMRWRCUVVjN1NVRkRZaXhEUVVGRExFdEJRVXNzUlVGQlJTeFRRVUZUTEVOQlFVTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hWUVVGVkxFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NSVUZCUlN4TlFVRk5MRU5CUVVNN1NVRkROVWNzUTBGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhMUVVGTExFVkJRVVVzVVVGQlVTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRVZCUVVVc1YwRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eExRVUZMTEVWQlFVVXNVMEZCVXl4RFFVRkRMRVZCUVVVc1EwRkJReXhMUVVGTExFVkJRVVVzVlVGQlZTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRVZCUVVVc1ZVRkJWU3hEUVVGRE8wTkJRVU1zUTBGQlF6dEJRVWMxU0N4TlFVRk5MRTFCUVUwc1IwRkJSenRKUVVOWUxFTkJRVU1zUzBGQlN5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RlFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxGRkJRVkVzUTBGQlF5eEZRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRk5CUVZNc1EwRkJReXhGUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEZkQlFWY3NRMEZCUXl4RlFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxGVkJRVlVzUTBGQlF5eEZRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRkZCUVZFc1EwRkJReXhGUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEZWQlFWVXNRMEZCUXp0RFFVRkRMRU5CUVVNN1FVRkhNMGtzVTBGQlV5eFpRVUZaTEVOQlFVTXNUVUZCWVN4RlFVRkZMRTFCUVdFN1NVRkRPVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkRMRTFCUVUwc1EwRkJRenRKUVVOc1FpeFBRVUZQTEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1RVRkJUU3hGUVVGRk8xRkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkJSVHRKUVVNeFF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTmlMRU5CUVVNN1FVRmpSQ3hUUVVGblFpeEpRVUZKTEVOQlFVTXNXVUZCYlVJc1JVRkJSU3hKUVVGSkxFZEJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVTdTVUZEY2tRc1QwRkJUeXhEUVVGRExFOUJRVThzV1VGQldTeExRVUZMTEZGQlFWRXNTVUZCU1N4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJoRkxGTkJRVk1zUTBGQlFTeERRVUZETzFGQlExWXNXVUZCV1R0aFFVTlFMRTlCUVU4c1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeEhRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRoUVVONFF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkpMRVZCUVVVc1IwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNSMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRoUVVNNVF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkhMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVOb1JDeFBRVUZQTEVOQlFVTXNUMEZCVHl4RlFVRkpMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVOb1JDeFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkpMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVkQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRM0JFTEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVrc1JVRkJSU3hIUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRM2hETEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVjc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRelZETEU5QlFVOHNRMEZCUXl4UFFVRlBMRVZCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRelZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVrc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVOcVJDeFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkpMRVZCUVVVc1IwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdZVUZEYmtNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlNTeFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEyeEVMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVWNzUlVGQlJTeEhRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRoUVVOdVF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkpMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRjRVFzVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCU1N4RlFVRkZMRWRCUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzJGQlEzUkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVWtzV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU53UkN4UFFVRlBMRU5CUVVNc1QwRkJUeXhGUVVGSkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRE1VUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJTU3haUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNSVUZCUlN4SFFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU0xUkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGSExGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRWRCUVVNc1IwRkJSeXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZWtVc1EwRkJRenRCUVhSQ1JDeHZRa0Z6UWtNN1FVRkhXU3hSUVVGQkxFVkJRVVVzUjBGQlJ6dEpRVU5rTEZkQlFWY3NSVUZCU3l4RFFVRkRMRWRCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeEhRVUZETEVWQlFVVXNSMEZCUXl4SFFVRkhPMGxCUXpORExGTkJRVk1zUlVGQlR5eERRVUZETEVOQlFWRXNSVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hIUVVGRExFVkJRVVVzUjBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXp0SlFVTTFReXhSUVVGUkxFVkJRVkVzUTBGQlF5eERRVUZSTEVWQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1IwRkJReXhGUVVGRkxFZEJRVU1zUlVGQlJTeEhRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRPMGxCUXk5RExGTkJRVk1zUlVGQlR5eERRVUZETEVOQlFWRXNSVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hIUVVGRExFVkJRVVVzUjBGQlF5eEZRVUZGTEVkQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1IwRkJReXhEUVVGRE8wbEJRMnBFTEZOQlFWTXNSVUZCVHl4RFFVRkRMRVZCUVZNc1JVRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNMVF5eFBRVUZQTEVWQlFWTXNRMEZCUXl4RlFVRlRMRVZCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVsQlFVa3NSMEZCUXl4RlFVRkZMRWRCUVVNc1JVRkJSU3hEUVVGRE8wbEJReTlETEUxQlFVMHNSVUZCVlN4RFFVRkRMRVZCUVZNc1JVRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkRMRVZCUVVVc1IwRkJReXhGUVVGRkxFZEJRVU1zUlVGQlJTeERRVUZETzBsQlEyeEVMRTlCUVU4c1JVRkJVeXhEUVVGRExFVkJRVk1zUlVGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGRExFVkJRVVVzUjBGQlF5eEZRVUZGTEVkQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJRenREUVVOMlJDeERRVUZESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gcm91bmQobiwgZCA9IDApIHtcbiAgICBjb25zdCBmID0gTWF0aC5wb3coMTAsIGQpO1xuICAgIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4gKiBmKSAvIGY7XG4gICAgcmV0dXJuICcnICsgcjtcbn1cbmV4cG9ydHMucm91bmQgPSByb3VuZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRuVnRZbVZ5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwwNTFiV0psY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVmRETEZOQlFXZENMRXRCUVVzc1EwRkJReXhEUVVGUkxFVkJRVVVzUTBGQlF5eEhRVUZETEVOQlFVTTdTVUZQYUVNc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVrSXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhEUVVGRE8wbEJRelZDTEU5QlFVOHNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJRenRCUVVObUxFTkJRVU03UVVGV1JDeHpRa0ZWUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHByb21pc2VzXzEgPSByZXF1aXJlKFwiLi9wcm9taXNlc1wiKTtcbmV4cG9ydHMudGltZW91dCA9IHByb21pc2VzXzEudGltZW91dDtcbmV4cG9ydHMuZGVsYXkgPSBwcm9taXNlc18xLmRlbGF5O1xudmFyIHByb21pc2VzXzIgPSByZXF1aXJlKFwiLi9wcm9taXNlc1wiKTtcbmV4cG9ydHMuUGFjZSA9IHByb21pc2VzXzIuUGFjZTtcbnZhciBwcm9taXNlc18zID0gcmVxdWlyZShcIi4vcHJvbWlzZXNcIik7XG5leHBvcnRzLnByb21pc2VDaGFpbiA9IHByb21pc2VzXzMucHJvbWlzZUNoYWluO1xudmFyIENoZWNrc3VtXzEgPSByZXF1aXJlKFwiLi9DaGVja3N1bVwiKTtcbmV4cG9ydHMuc2hvcnRDaGVja1N1bSA9IENoZWNrc3VtXzEuc2hvcnRDaGVja1N1bTtcbnZhciBEYXRlXzEgPSByZXF1aXJlKFwiLi9EYXRlXCIpO1xuZXhwb3J0cy5kYXRlID0gRGF0ZV8xLmRhdGU7XG5leHBvcnRzLm1zID0gRGF0ZV8xLm1zO1xudmFyIE51bWJlcl8xID0gcmVxdWlyZShcIi4vTnVtYmVyXCIpO1xuZXhwb3J0cy5yb3VuZCA9IE51bWJlcl8xLnJvdW5kO1xudmFyIGxvZ18xID0gcmVxdWlyZShcIi4vbG9nXCIpO1xuZXhwb3J0cy5sb2cgPSBsb2dfMS5sb2c7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4MVEwRkJhMFE3UVVGQmVrTXNOa0pCUVVFc1QwRkJUeXhEUVVGQk8wRkJRVVVzTWtKQlFVRXNTMEZCU3l4RFFVRkJPMEZCUTNaQ0xIVkRRVUZyUkR0QlFVRjZReXd3UWtGQlFTeEpRVUZKTEVOQlFVRTdRVUZEWWl4MVEwRkJhMFE3UVVGQmVrTXNhME5CUVVFc1dVRkJXU3hEUVVGQk8wRkJRM0pDTEhWRFFVRnJSRHRCUVVGNlF5eHRRMEZCUVN4aFFVRmhMRU5CUVVFN1FVRkRkRUlzSzBKQlFUaERPMEZCUVhKRExITkNRVUZCTEVsQlFVa3NRMEZCUVR0QlFVRkZMRzlDUVVGQkxFVkJRVVVzUTBGQlFUdEJRVU5xUWl4dFEwRkJaMFE3UVVGQmRrTXNlVUpCUVVFc1MwRkJTeXhEUVVGQk8wRkJRMlFzTmtKQlFUWkRPMEZCUVhCRExHOUNRVUZCTEVkQlFVY3NRMEZCUVNKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgRGF0ZV8xID0gcmVxdWlyZShcIi4vRGF0ZVwiKTtcbmNvbnN0IERFQlVHID0gU3ltYm9sKCdERUJVRycpO1xuY29uc3QgSU5GTyA9IFN5bWJvbCgnSU5GTycpO1xuY29uc3QgV0FSTiA9IFN5bWJvbCgnV0FSTicpO1xuY29uc3QgRVJST1IgPSBTeW1ib2woJ0VSUk9SJyk7XG5sZXQgZ0xvZ0ZpbGU7XG47XG5jb25zdCBnTGV2ZWxzID0ge1xuICAgIFtERUJVR106IHsgaW1wb3J0YW5jZTogMCwgc3ltOiBERUJVRywgZGVzYzogJ0RFQlVHJyB9LFxuICAgIFtJTkZPXTogeyBpbXBvcnRhbmNlOiAxLCBzeW06IElORk8sIGRlc2M6ICdJTkZPJyB9LFxuICAgIFtXQVJOXTogeyBpbXBvcnRhbmNlOiAyLCBzeW06IFdBUk4sIGRlc2M6ICdXQVJOJyB9LFxuICAgIFtFUlJPUl06IHsgaW1wb3J0YW5jZTogMywgc3ltOiBFUlJPUiwgZGVzYzogJ0VSUk9SJyB9XG59O1xubGV0IGdHbG9iYWxMZXZlbCA9IGdMZXZlbHNbSU5GT107XG5jb25zdCBkZWZEYXRlRm9ybWF0ID0gJyVZWVlZJU1NJUREICVoaDolbW06JXNzLiVqamonO1xubGV0IGdEYXRlRm9ybWF0ID0gZGVmRGF0ZUZvcm1hdDtcbmxldCBnQ29sb3JzID0gdHJ1ZTtcbmNvbnN0IGNvbG9yID0ge1xuICAgIHJlZDogJ1xceDFiWzMxbScsXG4gICAgeWVsbG93OiAnXFx4MWJbMzNtJyxcbiAgICBibHVlOiAnXFx4MWJbMzZtJyxcbiAgICBncmVlbjogJ1xceDFiWzMybScsXG4gICAgYm9sZDogJ1xceDFiWzFtJyxcbiAgICBjbGVhcjogJ1xceDFiWzBtJ1xufTtcbmV4cG9ydHMubG9nID0gY3JlYXRlKCcnLCAoZmlsZW5hbWUsIG1zZykgPT4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCksIChwYXRoKSA9PiBQcm9taXNlLnJlc29sdmUocGF0aC5pbmRleE9mKCcvJykgPj0gMCA/IGZhbHNlIDogdHJ1ZSkpO1xuZnVuY3Rpb24gY3JlYXRlKF9wcmVmaXgsIGxvZ1RvRmlsZSwgcGF0aEV4aXN0cykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgIGxldmVsOiB1bmRlZmluZWQsXG4gICAgICAgIHByZWZpeDogX3ByZWZpeCxcbiAgICAgICAgbG9nVG9GaWxlOiBsb2dUb0ZpbGUsXG4gICAgICAgIHBhdGhFeGlzdHM6IHBhdGhFeGlzdHNcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGxldmVsKG5ld0xldmVsU3ltLCBzZXRHbG9iYWxMZXZlbCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBuZXdMZXZlbCA9IGdMZXZlbHNbbmV3TGV2ZWxTeW1dIHx8IGdHbG9iYWxMZXZlbDtcbiAgICAgICAgbGV0IG9sZExldmVsID0gY29udGV4dC5sZXZlbCB8fCBnR2xvYmFsTGV2ZWw7XG4gICAgICAgIGlmIChuZXdMZXZlbFN5bSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdMZXZlbCA9IG9sZExldmVsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5ld0xldmVsU3ltID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250ZXh0LmxldmVsID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGdMZXZlbHNbbmV3TGV2ZWxTeW1dKSB7XG4gICAgICAgICAgICBpZiAoc2V0R2xvYmFsTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBnR2xvYmFsTGV2ZWwgPSBuZXdMZXZlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGV2ZWwgPSBuZXdMZXZlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBuZXcgJHtzZXRHbG9iYWxMZXZlbCA/ICdnbG9iYWwnIDogY29udGV4dC5wcmVmaXh9IGxvZyBsZXZlbCAke25ld0xldmVsLmRlc2MudG9VcHBlckNhc2UoKX0gKHdhcyAke29sZExldmVsLmRlc2MudG9VcHBlckNhc2UoKX0pYDtcbiAgICAgICAgICAgIG91dCgobmV3TGV2ZWwuc3ltID09PSBvbGRMZXZlbC5zeW0pID8gREVCVUcgOiBJTkZPLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3V0KEVSUk9SLCBgdW5rb3duIGxldmVsICR7bmV3TGV2ZWxTeW0udG9TdHJpbmcoKX07IGxvZyBsZXZlbCByZW1haW5zICR7b2xkTGV2ZWwuc3ltLnRvU3RyaW5nKCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0xldmVsLnN5bTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVidWcobXNnLCBsb2cyRmlsZSA9IHRydWUpIHsgcmV0dXJuIG91dChERUJVRywgbXNnLCBsb2cyRmlsZSk7IH1cbiAgICBmdW5jdGlvbiBpbmZvKG1zZywgbG9nMkZpbGUgPSB0cnVlKSB7IHJldHVybiBvdXQoSU5GTywgbXNnLCBsb2cyRmlsZSk7IH1cbiAgICBmdW5jdGlvbiB3YXJuKG1zZywgbG9nMkZpbGUgPSB0cnVlKSB7IHJldHVybiBvdXQoV0FSTiwgbXNnLCBsb2cyRmlsZSk7IH1cbiAgICBmdW5jdGlvbiBlcnJvcihtc2csIGxvZzJGaWxlID0gdHJ1ZSkgeyByZXR1cm4gb3V0KEVSUk9SLCBtc2csIGxvZzJGaWxlKTsgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdChmbXRTdHIpIHtcbiAgICAgICAgaWYgKGZtdFN0ciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZ0RhdGVGb3JtYXQgPSBkZWZEYXRlRm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZtdFN0cikge1xuICAgICAgICAgICAgZ0RhdGVGb3JtYXQgPSBmbXRTdHI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdEYXRlRm9ybWF0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVmaXgocHJmKSB7XG4gICAgICAgIGlmIChwcmYpIHtcbiAgICAgICAgICAgIGNvbnRleHQucHJlZml4ID0gcHJmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0LnByZWZpeDtcbiAgICB9XG4gICAgZnVuY3Rpb24gb3V0KGx2bCwgbXNnLCBsb2cyRmlsZSA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgY29sb3JzID0geyBbRVJST1JdOiBjb2xvci5yZWQgKyBjb2xvci5ib2xkLCBbV0FSTl06IGNvbG9yLnllbGxvdyArIGNvbG9yLmJvbGQsIFtERUJVR106IGNvbG9yLmJsdWUsIFtJTkZPXTogY29sb3IuZ3JlZW4gfTtcbiAgICAgICAgbGV0IGRlc2MgPSBnTGV2ZWxzW2x2bF07XG4gICAgICAgIGNvbnN0IGZpbHRlckxldmVsID0gY29udGV4dC5sZXZlbCB8fCBnR2xvYmFsTGV2ZWw7XG4gICAgICAgIGlmIChkZXNjLmltcG9ydGFuY2UgPj0gZmlsdGVyTGV2ZWwuaW1wb3J0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVN0ciA9IERhdGVfMS5kYXRlKGdEYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIGxldCBsaW5lID0gKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSA/IG1zZyA6IGluc3BlY3QobXNnLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0xpbmUgPSAoZGF0ZVN0ciArICcgJyArIGNvbnRleHQucHJlZml4ICsgZGVzYy5kZXNjICsgJyAnICsgbGluZSk7XG4gICAgICAgICAgICBjb25zdCBjb2xvckxpbmUgPSBgJHtjb2xvcnNbbHZsXSB8fCAnJ30gJHtkYXRlU3RyfSAke2NvbnRleHQucHJlZml4fSAke2Rlc2MuZGVzY30gJHtjb2xvci5jbGVhcn0gJHtsaW5lfWA7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhnQ29sb3JzID8gY29sb3JMaW5lIDogbG9nTGluZSk7XG4gICAgICAgICAgICBpZiAobXNnICYmIG1zZy5zdGFjaykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZy5zdGFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ0xvZ0ZpbGUgJiYgbG9nMkZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5sb2dUb0ZpbGUoRGF0ZV8xLmRhdGUoZ0xvZ0ZpbGUpLCBsb2dMaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvZ0ZpbGUoZmlsZSkge1xuICAgICAgICBpZiAoZmlsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZ0xvZ0ZpbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gaW5mbyhcImRpc2FibGluZyBsb2dmaWxlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEYXRlXzEuZGF0ZShnTG9nRmlsZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpbGUuaW5kZXhPZignLycpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnBhdGhFeGlzdHMoZmlsZSlcbiAgICAgICAgICAgICAgICAudGhlbigoZXhpc3RzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZ0xvZ0ZpbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3YXJuKGBwYXRoICcke2ZpbGV9JyBkb2Vzbid0IGV4aXN0czsgbG9nZmlsZSBkaXNhYmxlZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnTG9nRmlsZSA9IGZpbGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZm8oXCJub3cgbG9nZ2luZyB0byBmaWxlIFwiICsgRGF0ZV8xLmRhdGUoZmlsZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdMb2dGaWxlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihgY2hlY2tpbmcgcGF0aCAke2ZpbGV9OyBsb2dmaWxlIGRpc2FibGVkYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaWxlID09PSAnJykge1xuICAgICAgICAgICAgZmlsZSA9ICdsb2ctJVlZWVktJU1NLSVERC50eHQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICB9XG4gICAgICAgIGdMb2dGaWxlID0gZmlsZTtcbiAgICAgICAgcmV0dXJuIGluZm8oZ0xvZ0ZpbGUgPyBgbm93IGxvZ2dpbmcgdG8gZmlsZSAke0RhdGVfMS5kYXRlKGdMb2dGaWxlKX1gIDogJ2xvZ2ZpbGUgZGlzYmFsZWQnKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29uZmlnKGNmZykge1xuICAgICAgICBsZXQgY29sb3JzID0gdHJ1ZTtcbiAgICAgICAgaWYgKGNmZy5jb2xvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZ0NvbG9ycyA9IGNvbG9ycyA9IGNmZy5jb2xvcnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNmZy5mb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9ybWF0KGNmZy5mb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZmcubGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV2ZWwoY2ZnLmxldmVsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNwZWN0KG1zZywgZGVwdGggPSAxLCBpbmRlbnQgPSAnJykge1xuICAgICAgICBpZiAoZGVwdGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlcHRoID0gOTk5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtc2cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1zZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiAnZnVuY3Rpb24nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGAnJHttc2d9J2A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoZGVwdGggPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChtc2cubGVuZ3RoID09PSB1bmRlZmluZWQpID8gJ3suLi59JyA6ICdbLi4uXSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobXNnLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBbJHttc2cubWFwKChlKSA9PiAoZSA9PT0gdW5kZWZpbmVkKSA/ICcnIDogaW5zcGVjdChlLCBkZXB0aCAtIDEsIGluZGVudCkpLmpvaW4oJywgJyl9XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ3tcXG4nICsgT2JqZWN0LmtleXMobXNnKS5tYXAoayA9PiBgICAgJHtpbmRlbnR9JHtrfTogJHtpbnNwZWN0KG1zZ1trXSwgZGVwdGggLSAxLCBpbmRlbnQgKyAnICAgJyl9YCkuam9pbignLFxcbicpICsgYFxcbiR7aW5kZW50fX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtc2cudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgY29uc3QgbmV3TG9nID0gZnVuY3Rpb24gKHByZWZpeCwgbG9nVG9GaWxlID0gY29udGV4dC5sb2dUb0ZpbGUsIHBhdGhFeGlzdHMgPSBjb250ZXh0LnBhdGhFeGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZShwcmVmaXgsIGxvZ1RvRmlsZSwgcGF0aEV4aXN0cyk7XG4gICAgfTtcbiAgICBuZXdMb2cuREVCVUcgPSBERUJVRztcbiAgICBuZXdMb2cuSU5GTyA9IElORk87XG4gICAgbmV3TG9nLldBUk4gPSBXQVJOO1xuICAgIG5ld0xvZy5FUlJPUiA9IEVSUk9SO1xuICAgIG5ld0xvZy5sZXZlbCA9IGxldmVsO1xuICAgIG5ld0xvZy5kZWJ1ZyA9IGRlYnVnO1xuICAgIG5ld0xvZy5pbmZvID0gaW5mbztcbiAgICBuZXdMb2cud2FybiA9IHdhcm47XG4gICAgbmV3TG9nLmVycm9yID0gZXJyb3I7XG4gICAgbmV3TG9nLmZvcm1hdCA9IGZvcm1hdDtcbiAgICBuZXdMb2cucHJlZml4ID0gcHJlZml4O1xuICAgIG5ld0xvZy5vdXQgPSBvdXQ7XG4gICAgbmV3TG9nLmxvZ0ZpbGUgPSBsb2dGaWxlO1xuICAgIG5ld0xvZy5jb25maWcgPSBjb25maWc7XG4gICAgbmV3TG9nLmluc3BlY3QgPSBpbnNwZWN0O1xuICAgIHJldHVybiBuZXdMb2c7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwyeHZaeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFTdEZRU3hwUTBGQmEwTTdRVUZIYkVNc1RVRkJUU3hMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUnpsQ0xFMUJRVTBzU1VGQlNTeEhRVUZMTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVjNVFpeE5RVUZOTEVsQlFVa3NSMEZCU3l4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGSE9VSXNUVUZCVFN4TFFVRkxMRWRCUVVrc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlJ5OUNMRWxCUVVrc1VVRkJaMElzUTBGQlF6dEJRVTA0UXl4RFFVRkRPMEZCUjNCRkxFMUJRVTBzVDBGQlR5eEhRVUZITzBsQlExb3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJTeXhGUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hKUVVGSkxFVkJRVVVzVDBGQlR5eEZRVUZETzBsQlEzUkVMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVTBzUlVGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hKUVVGSkxFVkJRVWNzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUXp0SlFVTnlSQ3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZOTEVWQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzU1VGQlNTeEZRVUZITEVsQlFVa3NSVUZCUlN4TlFVRk5MRVZCUVVNN1NVRkRja1FzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCU3l4RlFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4SlFVRkpMRVZCUVVVc1QwRkJUeXhGUVVGRE8wTkJRM3BFTEVOQlFVTTdRVUZIUml4SlFVRkpMRmxCUVZrc1IwRkJZU3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZITTBNc1RVRkJUU3hoUVVGaExFZEJRVWNzT0VKQlFUaENMRU5CUVVNN1FVRkRja1FzU1VGQlNTeFhRVUZYTEVkQlFVOHNZVUZCWVN4RFFVRkRPMEZCUjNCRExFbEJRVWtzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVZHVRaXhOUVVGTkxFdEJRVXNzUjBGQlJ6dEpRVU5XTEVkQlFVY3NSVUZCU3l4VlFVRlZPMGxCUTJ4Q0xFMUJRVTBzUlVGQlJTeFZRVUZWTzBsQlEyeENMRWxCUVVrc1JVRkJTU3hWUVVGVk8wbEJRMnhDTEV0QlFVc3NSVUZCUnl4VlFVRlZPMGxCUTJ4Q0xFbEJRVWtzUlVGQlNTeFRRVUZUTzBsQlEycENMRXRCUVVzc1JVRkJSeXhUUVVGVE8wTkJRM0JDTEVOQlFVTTdRVUZ4U1Zjc1VVRkJRU3hIUVVGSExFZEJRVmNzVFVGQlRTeERRVUZETEVWQlFVVXNSVUZEYUVNc1EwRkJReXhSUVVGbExFVkJRVVVzUjBGQlZTeEZRVUZyUWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNSVUZGTTBVc1EwRkJReXhKUVVGWExFVkJRVzFDTEVWQlFVVXNRMEZCUVN4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVVc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVOMlJpeERRVUZETzBGQlJVWXNVMEZCVXl4TlFVRk5MRU5CUVVNc1QwRkJZeXhGUVVGRkxGTkJRV2xDTEVWQlFVVXNWVUZCYVVJN1NVRkRhRVVzVFVGQlRTeFBRVUZQTEVkQlFVYzdVVUZEV2l4TFFVRkxMRVZCUVd0Q0xGTkJRVk03VVVGRGFFTXNUVUZCVFN4RlFVRk5MRTlCUVU4N1VVRkRia0lzVTBGQlV5eEZRVUZaTEZOQlFWTTdVVUZET1VJc1ZVRkJWU3hGUVVGVkxGVkJRVlU3UzBGRGFrTXNRMEZCUXp0SlFVVkdMRk5CUVZNc1MwRkJTeXhEUVVGRExGZEJRVzFDTEVWQlFVVXNZMEZCWXl4SFFVRkRMRXRCUVVzN1VVRkRjRVFzU1VGQlNTeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxGbEJRVmtzUTBGQlF6dFJRVU53UkN4SlFVRkpMRkZCUVZFc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eEpRVUZKTEZsQlFWa3NRMEZCUXp0UlFVTTNReXhKUVVGSkxGZEJRVmNzUzBGQlN5eFRRVUZUTEVWQlFVVTdXVUZETTBJc1VVRkJVU3hIUVVGSExGRkJRVkVzUTBGQlF6dFRRVU4yUWp0aFFVRk5MRWxCUVVrc1YwRkJWeXhMUVVGTExFbEJRVWtzUlVGQlJUdFpRVU0zUWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhIUVVGSExGTkJRVk1zUTBGQlF6dFRRVU0zUWp0aFFVRk5MRWxCUVVrc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTzFsQlF6ZENMRWxCUVVrc1kwRkJZeXhGUVVGRk8yZENRVUZGTEZsQlFWa3NSMEZCUnl4UlFVRlJMRU5CUVVNN1lVRkJSVHRwUWtGRE5VSTdaMEpCUVVVc1QwRkJUeXhEUVVGRExFdEJRVXNzUjBGQlJ5eFJRVUZSTEVOQlFVTTdZVUZCUlR0WlFVTnFSQ3hOUVVGTkxFZEJRVWNzUjBGQlJ5eFBRVUZQTEdOQlFXTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4alFVRmpMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEZOQlFWTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUjBGQlJ5eERRVUZETzFsQlF6ZEpMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEV0QlFVc3NVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlFTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU14UkR0aFFVRk5PMWxCUTBnc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJTeG5Ra0ZCWjBJc1YwRkJWeXhEUVVGRExGRkJRVkVzUlVGQlJTeDFRa0ZCZFVJc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1UwRkRkRWM3VVVGRFJDeFBRVUZQTEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNN1NVRkRlRUlzUTBGQlF6dEpRVVZFTEZOQlFWTXNTMEZCU3l4RFFVRkRMRWRCUVU4c1JVRkJSU3hSUVVGUkxFZEJRVU1zU1VGQlNTeEpRVUZ2UWl4UFFVRlBMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVVzUjBGQlJ5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNMVJpeFRRVUZUTEVsQlFVa3NRMEZCUXl4SFFVRlBMRVZCUVVVc1VVRkJVU3hIUVVGRExFbEJRVWtzU1VGQmIwSXNUMEZCVHl4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFZEJRVWNzUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRNVVlzVTBGQlV5eEpRVUZKTEVOQlFVTXNSMEZCVHl4RlFVRkZMRkZCUVZFc1IwRkJReXhKUVVGSkxFbEJRVzlDTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpGR0xGTkJRVk1zUzBGQlN5eERRVUZETEVkQlFVOHNSVUZCUlN4UlFVRlJMRWRCUVVNc1NVRkJTU3hKUVVGdlFpeFBRVUZQTEVkQlFVY3NRMEZCUXl4TFFVRkxMRVZCUVVVc1IwRkJSeXhGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVTFSaXhUUVVGVExFMUJRVTBzUTBGQlF5eE5RVUZqTzFGQlF6RkNMRWxCUVVrc1RVRkJUU3hMUVVGTExFbEJRVWtzUlVGQlJUdFpRVUZGTEZkQlFWY3NSMEZCUnl4aFFVRmhMRU5CUVVNN1UwRkJSVHRoUVVOb1JDeEpRVUZKTEUxQlFVMHNSVUZCVFR0WlFVRkZMRmRCUVZjc1IwRkJSeXhOUVVGTkxFTkJRVU03VTBGQlJUdFJRVU01UXl4UFFVRlBMRmRCUVZjc1EwRkJRenRKUVVOMlFpeERRVUZETzBsQlJVUXNVMEZCVXl4TlFVRk5MRU5CUVVNc1IwRkJWenRSUVVOMlFpeEpRVUZKTEVkQlFVY3NSVUZCUlR0WlFVRkZMRTlCUVU4c1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETzFOQlFVVTdVVUZEYkVNc1QwRkJUeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETzBsQlF6RkNMRU5CUVVNN1NVRkZSQ3hUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUZWTEVWQlFVVXNSMEZCVHl4RlFVRkZMRkZCUVZFc1IwRkJReXhKUVVGSk8xRkJRek5ETEUxQlFVMHNUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzFGQlF6VklMRWxCUVVrc1NVRkJTU3hIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjRRaXhOUVVGTkxGZEJRVmNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4SlFVRkpMRmxCUVZrc1EwRkJRenRSUVVOc1JDeEpRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWxCUVVrc1YwRkJWeXhEUVVGRExGVkJRVlVzUlVGQlJUdFpRVU16UXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhYUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdXVUZEYkVNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eFBRVUZQTEVkQlFVY3NTMEZCU3l4UlFVRlJMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6VkVMRTFCUVUwc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eEhRVUZITEVkQlFVY3NSMEZCUnl4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRekZGTEUxQlFVMHNVMEZCVXl4SFFVRkhMRWRCUVVjc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZGTEVWQlFVVXNTVUZCU1N4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdXVUZEZUVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZETVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEV0QlFVc3NSVUZCUlR0blFrRkJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVGRk8xbEJRMnBFTEVsQlFVa3NVVUZCVVN4SlFVRkpMRkZCUVZFc1JVRkJSVHRuUWtGRGRFSXNUMEZCVHl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRoUVVOeVJEdFRRVU5LTzFGQlEwUXNUMEZCVHl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBsQlEzUkRMRU5CUVVNN1NVRkZSQ3hUUVVGVExFOUJRVThzUTBGQlF5eEpRVUZaTzFGQlEzcENMRWxCUVVrc1NVRkJTU3hMUVVGTExFbEJRVWtzUlVGQlJUdFpRVU5tTEZGQlFWRXNSMEZCUnl4VFFVRlRMRU5CUVVNN1dVRkRja0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dFRRVU53UXp0aFFVRk5MRWxCUVVrc1NVRkJTU3hMUVVGTExGTkJRVk1zUlVGQlJUdFpRVU16UWl4UFFVRlBMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRNVU03WVVGQlRTeEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVVVzUTBGQlF5eEZRVUZGTzFsQlF6ZENMRTlCUVU4c1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTTdhVUpCUXpGQ0xFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFXTXNSVUZCUlN4RlFVRkZPMmRDUVVOeVFpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPMjlDUVVOVUxGRkJRVkVzUjBGQlJ5eFRRVUZUTEVOQlFVTTdiMEpCUTNKQ0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNTVUZCU1N4dlEwRkJiME1zUTBGQlF5eERRVUZETzJsQ1FVTnNSVHRuUWtGRFJDeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPMmRDUVVOb1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUjBGQlJ5eFhRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOeVJDeERRVUZETEVOQlFVTTdhVUpCUTBRc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlJUdG5Ra0ZEVWl4UlFVRlJMRWRCUVVjc1UwRkJVeXhEUVVGRE8yZENRVU55UWl4UFFVRlBMRXRCUVVzc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4dlFrRkJiMElzUTBGQlF5eERRVUZETzFsQlF6VkVMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRMVk3WVVGQlRTeEpRVUZKTEVsQlFVa3NTMEZCU3l4RlFVRkZMRVZCUVVVN1dVRkRjRUlzU1VGQlNTeEhRVUZITEhWQ1FVRjFRaXhEUVVGRE8xTkJRMnhETzJGQlFVMDdVMEZEVGp0UlFVTkVMRkZCUVZFc1IwRkJReXhKUVVGSkxFTkJRVU03VVVGRFpDeFBRVUZQTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVFc1EwRkJReXhEUVVGRExIVkNRVUYxUWl4WFFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dEpRVU40Uml4RFFVRkRPMGxCUlVRc1UwRkJVeXhOUVVGTkxFTkJRVU1zUjBGQmNVUTdVVUZEYWtVc1NVRkJTU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEyeENMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUzBGQlJ5eFRRVUZUTEVWQlFVVTdXVUZCUlN4UFFVRlBMRWRCUVVjc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTTdVMEZCUlR0UlFVTTVSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eE5RVUZOTEV0QlFVY3NVMEZCVXl4RlFVRkZPMWxCUVVVc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0VFFVRkZPMUZCUTI1RUxFbEJRVWtzUjBGQlJ5eERRVUZETEV0QlFVc3NTMEZCUnl4VFFVRlRMRVZCUVVjN1dVRkJSU3hMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMU5CUVVVN1NVRkRja1FzUTBGQlF6dEpRVVZFTEZOQlFWTXNUMEZCVHl4RFFVRkRMRWRCUVU4c1JVRkJSU3hMUVVGTExFZEJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNSMEZCUXl4RlFVRkZPMUZCUTNoRExFbEJRVWtzUzBGQlN5eExRVUZITEVsQlFVa3NSVUZCWjBJN1dVRkJSU3hMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETzFOQlFVVTdVVUZEYUVRc1NVRkJTU3hIUVVGSExFdEJRVXNzU1VGQlNTeEZRVUZuUWp0WlFVRkZMRTlCUVU4c1RVRkJUU3hEUVVGRE8xTkJRVVU3VVVGRGJFUXNTVUZCU1N4SFFVRkhMRXRCUVVzc1UwRkJVeXhGUVVGWE8xbEJRVVVzVDBGQlR5eFhRVUZYTEVOQlFVTTdVMEZCUlR0UlFVTjJSQ3hKUVVGSkxFOUJRVThzUjBGQlJ5eExRVUZMTEZWQlFWVXNSVUZCUnp0WlFVRkZMRTlCUVU4c1ZVRkJWU3hEUVVGRE8xTkJRVVU3VVVGRGRFUXNTVUZCU1N4UFFVRlBMRWRCUVVjc1MwRkJTeXhSUVVGUkxFVkJRVXM3V1VGQlJTeFBRVUZQTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNN1UwRkJSVHRSUVVOMFJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4TFFVRkxMRkZCUVZFc1JVRkJTenRaUVVNMVFpeEpRVUZKTEV0QlFVc3NSMEZCUXl4RFFVRkRMRVZCUVVVN1owSkJRVVVzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRXRCUVVjc1UwRkJVeXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRE8yRkJRVVU3V1VGRGNFVXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hMUVVGTExGTkJRVk1zUlVGQlJUdG5Ra0ZCUlN4UFFVRlBMRWxCUVVrc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUXl4RlFVRkZMRU5CUVVFc1EwRkJReXhEUVVGRExFdEJRVWNzVTBGQlV5eERRVUZETEVOQlFVRXNRMEZCUXl4RFFVRkJMRVZCUVVVc1EwRkJRU3hEUVVGRExFTkJRVUVzVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRWRCUVVNc1EwRkJReXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU03WVVGQlJUdFpRVU0xU0N4UFFVRlBMRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1MwRkRja1FzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFZEJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNSMEZCUXl4TFFVRkxMRU5CUTNwRExFVkJRVVVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhMUVVGTExFMUJRVTBzUjBGQlJ5eERRVUZETzFOQlEzQkRPMUZCUTBRc1QwRkJUeXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTVUZETVVJc1EwRkJRenRKUVVWRUxFMUJRVTBzVFVGQlRTeEhRVUZQTEZWQlFWTXNUVUZCWVN4RlFVRkZMRmxCUVd0Q0xFOUJRVThzUTBGQlF5eFRRVUZUTEVWQlFVVXNZVUZCYTBJc1QwRkJUeXhEUVVGRExGVkJRVlU3VVVGRGFFZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXp0SlFVTnFSQ3hEUVVGRExFTkJRVU03U1VGRFJpeE5RVUZOTEVOQlFVTXNTMEZCU3l4SFFVRk5MRXRCUVVzc1EwRkJRenRKUVVONFFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4SFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOMlFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4SFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOMlFpeE5RVUZOTEVOQlFVTXNTMEZCU3l4SFFVRk5MRXRCUVVzc1EwRkJRenRKUVVONFFpeE5RVUZOTEVOQlFVTXNTMEZCU3l4SFFVRk5MRXRCUVVzc1EwRkJRenRKUVVONFFpeE5RVUZOTEVOQlFVTXNTMEZCU3l4SFFVRk5MRXRCUVVzc1EwRkJRenRKUVVONFFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4SFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOMlFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4SFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOMlFpeE5RVUZOTEVOQlFVTXNTMEZCU3l4SFFVRk5MRXRCUVVzc1EwRkJRenRKUVVONFFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkxMRTFCUVUwc1EwRkJRenRKUVVONlFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkxMRTFCUVUwc1EwRkJRenRKUVVONlFpeE5RVUZOTEVOQlFVTXNSMEZCUnl4SFFVRlJMRWRCUVVjc1EwRkJRenRKUVVOMFFpeE5RVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkpMRTlCUVU4c1EwRkJRenRKUVVNeFFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkxMRTFCUVUwc1EwRkJRenRKUVVONlFpeE5RVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkpMRTlCUVU4c1EwRkJRenRKUVVNeFFpeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTnNRaXhEUVVGREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gdGltZW91dChtcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7IHNldFRpbWVvdXQocmVqZWN0LCBtcyk7IH0pO1xufVxuZXhwb3J0cy50aW1lb3V0ID0gdGltZW91dDtcbmZ1bmN0aW9uIGRlbGF5KG1zKSB7XG4gICAgcmV0dXJuIChhcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHJlc29sdmUoYXJncyk7IH0sIG1zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZGVsYXkgPSBkZWxheTtcbmNsYXNzIFBhY2Uge1xuICAgIGNvbnN0cnVjdG9yKHBhY2UgPSAxMDAsIG1heENvbmN1cnJlbnQgPSAtMSkge1xuICAgICAgICB0aGlzLm1heENvbmN1cnJlbnQgPSAtMTtcbiAgICAgICAgdGhpcy53YWl0VW50aWwgPSAwO1xuICAgICAgICB0aGlzLndhaXRDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuYmVpbmdDYWxsZWQgPSAwO1xuICAgICAgICB0aGlzLnBhY2UgPSBwYWNlICsgNTtcbiAgICAgICAgdGhpcy5tYXhDb25jdXJyZW50ID0gbWF4Q29uY3VycmVudDtcbiAgICB9XG4gICAgZ2V0V2FpdENvdW50KCkgeyByZXR1cm4gdGhpcy53YWl0Q291bnQ7IH1cbiAgICBnZXRDYWxsaW5nQ291bnQoKSB7IHJldHVybiB0aGlzLmJlaW5nQ2FsbGVkOyB9XG4gICAgYWRkKGZuKSB7XG4gICAgICAgIGNvbnN0IGFkZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAodGhpcy53YWl0VW50aWwgPCBhZGRUaW1lKSB7XG4gICAgICAgICAgICB0aGlzLndhaXRVbnRpbCA9IGFkZFRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMud2FpdFVudGlsIC0gYWRkVGltZTtcbiAgICAgICAgdGhpcy53YWl0VW50aWwgKz0gdGhpcy5wYWNlICsgNTtcbiAgICAgICAgdGhpcy53YWl0Q291bnQrKztcbiAgICAgICAgcmV0dXJuIGRlbGF5KGRpZmYpKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRMb29wID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhDb25jdXJyZW50IDwgMCB8fCB0aGlzLmJlaW5nQ2FsbGVkIDwgdGhpcy5tYXhDb25jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHdhaXRMb29wLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdhaXRMb29wKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMud2FpdENvdW50LS07XG4gICAgICAgICAgICB0aGlzLmJlaW5nQ2FsbGVkKys7XG4gICAgICAgICAgICByZXR1cm4gZm4oRGF0ZS5ub3coKSAtIGFkZFRpbWUpO1xuICAgICAgICB9KSlcbiAgICAgICAgICAgIC50aGVuKChyZXQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmVpbmdDYWxsZWQtLTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGFjZSA9IFBhY2U7XG5mdW5jdGlvbiBwcm9taXNlQ2hhaW4odGFza3MsIGluaXRpYWxSZXN1bHQgPSBbXSkge1xuICAgIHJldHVybiB0YXNrcy5yZWR1Y2UoKGNoYWluLCB0YXNrKSA9PiBjaGFpbi50aGVuKChfcmVzdWx0cykgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2soX3Jlc3VsdHMpKS50aGVuKChyKSA9PiB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2gocik7XG4gICAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9KSksIFByb21pc2UucmVzb2x2ZShpbml0aWFsUmVzdWx0KSk7XG59XG5leHBvcnRzLnByb21pc2VDaGFpbiA9IHByb21pc2VDaGFpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNISnZiV2x6WlhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZjSEp2YldselpYTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPenRCUVZkQkxGTkJRV2RDTEU5QlFVOHNRMEZCUXl4RlFVRlRPMGxCUXpkQ0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRVVVzUjBGQlJ5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZWtVc1EwRkJRenRCUVVaRUxEQkNRVVZETzBGQmRVSkVMRk5CUVdkQ0xFdEJRVXNzUTBGQlF5eEZRVUZUTzBsQlF6TkNMRTlCUVU4c1EwRkJTU3hKUVVGUExFVkJRV0VzUlVGQlJUdFJRVU0zUWl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zVDBGQmMwSXNSVUZCUlN4RlFVRkZPMWxCUXpGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkROME1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVUN4RFFVRkRMRU5CUVVNN1FVRkRUaXhEUVVGRE8wRkJUa1FzYzBKQlRVTTdRVUZoUkN4TlFVRmhMRWxCUVVrN1NVRlpZaXhaUVVGWkxFbEJRVWtzUjBGQlF5eEhRVUZITEVWQlFVVXNZVUZCWVN4SFFVRkRMRU5CUVVNc1EwRkJRenRSUVZnNVFpeHJRa0ZCWVN4SFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSWEpDTEdOQlFWTXNSMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRjRUlzWTBGQlV5eEhRVUZUTEVOQlFVTXNRMEZCUXp0UlFVTndRaXhuUWtGQlZ5eEhRVUZQTEVOQlFVTXNRMEZCUXp0UlFWRjRRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NSMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRia0lzU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4aFFVRmhMRU5CUVVNN1NVRkRka01zUTBGQlF6dEpRVVZFTEZsQlFWa3NTMEZCVVN4UFFVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6VkRMR1ZCUVdVc1MwRkJTeXhQUVVGUExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCVVRsRExFZEJRVWNzUTBGQlF5eEZRVUZwUXp0UlFVVnFReXhOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRNMElzU1VGQlNTeEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRTlCUVU4c1JVRkJSVHRaUVVGRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NUMEZCVHl4RFFVRkRPMU5CUVVVN1VVRkRNMFFzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhQUVVGUExFTkJRVU03VVVGRGRFTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1NVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTm9ReXhKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdVVUZGYWtJc1QwRkJUeXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdZVUZEYmtJc1NVRkJTU3hEUVVGRExFZEJRVk1zUlVGQlJUdFpRVVZpTEUxQlFVMHNTVUZCU1N4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3WjBKQlEzaENMRTFCUVUwc1VVRkJVU3hIUVVGSExFZEJRVWNzUlVGQlJUdHZRa0ZEYkVJc1NVRkJTU3hKUVVGSkxFTkJRVU1zWVVGQllTeEhRVUZITEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVWQlFVVTdkMEpCUTJwRkxFOUJRVThzUlVGQlJTeERRVUZETzNGQ1FVTmlPM2xDUVVGTk8zZENRVU5JTEZWQlFWVXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03Y1VKQlF6VkNPMmRDUVVOTUxFTkJRVU1zUTBGQlF6dG5Ra0ZEUml4UlFVRlJMRVZCUVVVc1EwRkJRenRaUVVObUxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJVZ3NTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRMnBDTEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOdVFpeFBRVUZQTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVVUZET1VJc1EwRkJReXhEUVVGQkxFTkJRVU03WVVGRFRDeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRlBMRVZCUVVVc1JVRkJSVHRaUVVOa0xFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0WlFVTnVRaXhQUVVGUExFZEJRVWNzUTBGQlF6dFJRVU5tTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTFBc1EwRkJRenREUVVOS08wRkJla1JFTEc5Q1FYbEVRenRCUVZWRUxGTkJRV2RDTEZsQlFWa3NRMEZCU1N4TFFVRnhReXhGUVVGRkxHZENRVUZyUWl4RlFVRkZPMGxCUTNaR0xFOUJRVThzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRXRCUVd0Q0xFVkJRVVVzU1VGQkswSXNSVUZCWjBJc1JVRkJSU3hEUVVWMFJpeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1VVRkJXU3hGUVVGRkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVjc1JVRkJSU3hGUVVGRk8xRkJSWFJGTEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGFrSXNUMEZCVHl4UlFVRlJMRU5CUVVNN1NVRkRjRUlzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZEU0N4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVU5xUXl4RFFVRkRPMEZCUTA0c1EwRkJRenRCUVZaRUxHOURRVlZESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgVG9nZ2xlQnV0dG9uXzEgPSByZXF1aXJlKFwiLi9Ub2dnbGVCdXR0b25cIik7XG5jbGFzcyBCdXR0b24gZXh0ZW5kcyBUb2dnbGVCdXR0b25fMS5Ub2dnbGVCdXR0b24ge1xuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIG5vZGUuYXR0cnMuZGVzYy5pdGVtcyA9IFtub2RlLmF0dHJzLmRlc2MubmFtZSB8fCAnYnV0dG9uJ107XG4gICAgICAgIHN1cGVyLm9uaW5pdChub2RlKTtcbiAgICAgICAgVG9nZ2xlQnV0dG9uXzEuVG9nZ2xlQnV0dG9uLmVuc3VyZVNlbGVjdGVkKG5vZGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuQnV0dG9uID0gQnV0dG9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUW5WMGRHOXVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDBKMWRIUnZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFXZERRU3hwUkVGQk9FTTdRVUZsT1VNc1RVRkJZU3hOUVVGUExGTkJRVkVzTWtKQlFWazdTVUZEY0VNc1RVRkJUU3hEUVVGRExFbEJRVmM3VVVGRFpDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETTBRc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTnVRaXd5UWtGQldTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOMFF5eERRVUZETzBOQlEwbzdRVUZPUkN4M1FrRk5ReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuY2xhc3MgQ29sbGFwc2libGUge1xuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIG5vZGUuc3RhdGUgPSB7XG4gICAgICAgICAgICBpbml0aWFsOiB0cnVlLFxuICAgICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdG9nZ2xlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbm9kZS5zdGF0ZS5leHBhbmRlZCA9ICFub2RlLnN0YXRlLmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIG5vZGUuc3RhdGUuaW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICB2aWV3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgY3NzID0gbm9kZS5hdHRycy5jc3M7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBub2RlLmF0dHJzLmNvbXBvbmVudHM7XG4gICAgICAgIGNvbnN0IHByZUFycm93ID0gbm9kZS5hdHRycy5wcmVBcnJvdztcbiAgICAgICAgY29uc3QgcG9zdEFycm93ID0gbm9kZS5hdHRycy5wb3N0QXJyb3c7XG4gICAgICAgIGlmIChub2RlLnN0YXRlLmluaXRpYWwgJiYgbm9kZS5hdHRycy5pc0V4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUuZXhwYW5kZWQgPSBub2RlLmF0dHJzLmlzRXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwQ1NTID0gbm9kZS5zdGF0ZS5leHBhbmRlZCA/ICdocy1jb2xsYXBzaWJsZS1leHBhbmRlZCcgOiAnJztcbiAgICAgICAgcmV0dXJuIGhzbGF5b3V0XzEubShgLmhzLWNvbGxhcHNpYmxlICR7Y3NzfWAsIFtcbiAgICAgICAgICAgIGhzbGF5b3V0XzEubSgnLmhzLWNvbGxhcHNpYmxlLXRpdGxlJywgeyBvbmNsaWNrOiBub2RlLnN0YXRlLnRvZ2dsZSB9LCBbXG4gICAgICAgICAgICAgICAgIXByZUFycm93ID8gaHNsYXlvdXRfMS5tKCcnKSA6IGhzbGF5b3V0XzEubShgLmhzLWNvbGxhcHNpYmxlLXByZSAuaHMtY29sbGFwc2libGUtYXJyb3ctJHtub2RlLnN0YXRlLmV4cGFuZGVkID8gJ2Rvd24nIDogJ3JpZ2h0J31gKSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzWzBdLFxuICAgICAgICAgICAgICAgICFwb3N0QXJyb3cgPyBoc2xheW91dF8xLm0oJycpIDogaHNsYXlvdXRfMS5tKGAuaHMtY29sbGFwc2libGUtcG9zdCAuaHMtY29sbGFwc2libGUtYXJyb3ctJHtub2RlLnN0YXRlLmV4cGFuZGVkID8gJ2Rvd24nIDogJ2xlZnQnfWApLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjb21wb25lbnRzWzFdID8gaHNsYXlvdXRfMS5tKGAuaHMtY29sbGFwc2libGUtY29udGVudCAke2V4cENTU31gLCBjb21wb25lbnRzWzFdLm1hcCgoYykgPT4gaHNsYXlvdXRfMS5tKCcnLCBjKSkpIDogdW5kZWZpbmVkXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29sbGFwc2libGUgPSBDb2xsYXBzaWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVEyOXNiR0Z3YzJsaWJHVXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12UTI5c2JHRndjMmxpYkdVdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZwUkVFc2RVTkJRVzlETzBGQlJYQkRMRTFCUVdFc1YwRkJWenRKUVVOd1FpeE5RVUZOTEVOQlFVTXNTVUZCVlR0UlFVTmlMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWM3V1VGRFZDeFBRVUZQTEVWQlFVVXNTVUZCU1R0WlFVTmlMRkZCUVZFc1JVRkJSU3hMUVVGTE8xbEJRMllzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlR0blFrRkRWQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETzJkQ1FVTXpReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRMMElzUTBGQlF6dFRRVU5LTEVOQlFVTTdTVUZEVGl4RFFVRkRPMGxCUTBRc1NVRkJTU3hEUVVGRExFbEJRVlU3VVVGRFdDeE5RVUZOTEVkQlFVY3NSMEZCVlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU5zUXl4TlFVRk5MRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTjZReXhOUVVGTkxGRkJRVkVzUjBGQlN5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJRenRSUVVOMlF5eE5RVUZOTEZOQlFWTXNSMEZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU40UXl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJWU3hMUVVGSExGTkJRVk1zUlVGQlJUdFpRVU42UkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJRenRUUVVNdlF6dFJRVU5FTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZCTEVOQlFVTXNRMEZCUVN4NVFrRkJlVUlzUTBGQlFTeERRVUZETEVOQlFVRXNSVUZCUlN4RFFVRkRPMUZCUTJoRkxFOUJRVThzV1VGQlF5eERRVUZETEcxQ1FVRnRRaXhIUVVGSExFVkJRVVVzUlVGQlJUdFpRVU12UWl4WlFVRkRMRU5CUVVNc2RVSkJRWFZDTEVWQlFVVXNSVUZCUlN4UFFVRlBMRVZCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVTXNSVUZCUlR0blFrRkRja1FzUTBGQlF5eFJRVUZSTEVOQlFVRXNRMEZCUXl4RFFVRkRMRmxCUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCUXl4RFFVRkRMRFpEUVVFMlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJRU3hEUVVGRExFTkJRVUVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRuUWtGRGVrY3NWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRFlpeERRVUZETEZOQlFWTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1dVRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRkRMRU5CUVVNc09FTkJRVGhETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGQkxFTkJRVU1zUTBGQlFTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8yRkJRemRITEVOQlFVTTdXVUZEUml4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEZsQlFVTXNRMEZCUXl3eVFrRkJNa0lzVFVGQlRTeEZRVUZGTEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVFc1dVRkJReXhEUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk03VTBGRE1VY3NRMEZCUXl4RFFVRkRPMGxCUTFBc1EwRkJRenREUVVOS08wRkJOMEpFTEd0RFFUWkNReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuY2xhc3MgTGFiZWwge1xuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCBjc3MgPSBub2RlLmF0dHJzLmNzcyB8fCAnJztcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBub2RlLmF0dHJzLnN0eWxlIHx8ICcnO1xuICAgICAgICBjb25zdCB0ZXh0ID0gbm9kZS5hdHRycy50ZXh0IHx8ICd1bnNwZWNpZmllZCc7XG4gICAgICAgIHJldHVybiBoc2xheW91dF8xLm0oYC5ocy1sYWJlbCAke2Nzc31gLCB7IHN0eWxlOiBzdHlsZSB9LCBoc2xheW91dF8xLm0udHJ1c3QodGV4dCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuTGFiZWwgPSBMYWJlbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRHRmlaV3d1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlRHRmlaV3d1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRm5RMEVzZFVOQlFYZERPMEZCV1hoRExFMUJRV0VzUzBGQlN6dEpRVU5rTEVsQlFVa3NRMEZCUXl4SlFVRlhPMUZCUTFvc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRMnBETEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVTnlReXhOUVVGTkxFbEJRVWtzUjBGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1NVRkJTU3hoUVVGaExFTkJRVU03VVVGREwwTXNUMEZCVHl4WlFVRkRMRU5CUVVNc1lVRkJZU3hIUVVGSExFVkJRVVVzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSU3haUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRha1VzUTBGQlF6dERRVU5LTzBGQlVFUXNjMEpCVDBNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IFJhZGlvQnV0dG9uXzEgPSByZXF1aXJlKFwiLi9SYWRpb0J1dHRvblwiKTtcbmNsYXNzIE1lbnUgZXh0ZW5kcyBSYWRpb0J1dHRvbl8xLlJhZGlvQnV0dG9uIHtcbiAgICB2aWV3KG5vZGUpIHsgcmV0dXJuIFJhZGlvQnV0dG9uXzEuUmFkaW9CdXR0b24udmlld0dyb3VwKCcuaHMtbWVudScsIG5vZGUpOyB9XG59XG5leHBvcnRzLk1lbnUgPSBNZW51O1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVFdWdWRTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlOWlc1MUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCZDBSQkxDdERRVUUyUXp0QlFVMDNReXhOUVVGaExFbEJRVXNzVTBGQlVTeDVRa0ZCVnp0SlFVTnFReXhKUVVGSkxFTkJRVU1zU1VGQlZ5eEpRVUZYTEU5QlFVOHNlVUpCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenREUVVNdlJUdEJRVVpFTEc5Q1FVVkRPMEZCUVVFc1EwRkJReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuY29uc3QgVG9vbGJhckJ1dHRvbl8xID0gcmVxdWlyZShcIi4vVG9vbGJhckJ1dHRvblwiKTtcbmNsYXNzIE1vZGFsIHtcbiAgICBvbmluaXQobm9kZSkge1xuICAgICAgICBub2RlLnN0YXRlLmlkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCk7XG4gICAgICAgIG5vZGUuc3RhdGUuc2hvd01vZGFsID0gZmFsc2U7XG4gICAgfVxuICAgIHZpZXcobm9kZSkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyID0gKCkgPT4ge1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5zaG93TW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgaHNsYXlvdXRfMS5tLnJlZHJhdygpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkaXNtaXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5zaG93TW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChub2RlLmF0dHJzLmRpc21pc3MpIHtcbiAgICAgICAgICAgICAgICBub2RlLmF0dHJzLmRpc21pc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdyA9IG5vZGUuYXR0cnMud2lkdGggfHwgJ2F1dG8nO1xuICAgICAgICBjb25zdCBoID0gbm9kZS5hdHRycy5oZWlnaHQgfHwgJ2F1dG8nO1xuICAgICAgICBjb25zdCBhdHRycyA9IHsgc3R5bGU6IGB3aWR0aDoke3d9OyBoZWlnaHQ6JHtofTtgIH07XG4gICAgICAgIGlmIChub2RlLmF0dHJzLnNldFRyaWdnZXIpIHtcbiAgICAgICAgICAgIG5vZGUuYXR0cnMuc2V0VHJpZ2dlcih0cmlnZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGByZXF1aXJlZCBhdHRyaWJ1dGUgZnVuY3Rpb24gJ3NldFRyaWdnZXInIGlzIG5vdCBkZWZpbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFub2RlLnN0YXRlLnNob3dNb2RhbCA/IGhzbGF5b3V0XzEubSgnc3BhbicpIDogaHNsYXlvdXRfMS5tKCcuaHMtbW9kYWwtZnJhbWUnLCBbXG4gICAgICAgICAgICBoc2xheW91dF8xLm0oJy5ocy1tb2RhbC1iYWNrZ3JvdW5kJywgeyBvbmNsaWNrOiBkaXNtaXNzIH0sICcnKSxcbiAgICAgICAgICAgIGhzbGF5b3V0XzEubSgnLmhzLW1vZGFsLWZvcmVncm91bmQnLCBhdHRycywgIW5vZGUuYXR0cnMuY29udGVudCA/ICdtb2RhbCBwYW5lJyA6IFtcbiAgICAgICAgICAgICAgICBub2RlLmF0dHJzLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgaHNsYXlvdXRfMS5tKFRvb2xiYXJCdXR0b25fMS5Ub29sYmFyQnV0dG9uLCB7IG9uY2xpY2s6IGRpc21pc3MsIHN5bWJvbHM6IFRvb2xiYXJCdXR0b25fMS5Ub29sYmFyQnV0dG9uLmdldFN5bWJvbCgnY3Jvc3MnKSB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSk7XG4gICAgfVxufVxuZXhwb3J0cy5Nb2RhbCA9IE1vZGFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVFc5a1lXd3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12VFc5a1lXd3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGdlEwRXNkVU5CUVc5RE8wRkJRM0JETEcxRVFVRm5SRHRCUVVWb1JDeE5RVUZoTEV0QlFVczdTVUZEWkN4TlFVRk5MRU5CUVVNc1NVRkJWVHRSUVVOaUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4SFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJReTlETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExFdEJRVXNzUTBGQlF6dEpRVU5xUXl4RFFVRkRPMGxCUTBRc1NVRkJTU3hEUVVGRExFbEJRVlU3VVVGRFdDeE5RVUZOTEU5QlFVOHNSMEZCUnl4SFFVRkhMRVZCUVVVN1dVRkRha0lzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRelZDTEZsQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVObUxFTkJRVU1zUTBGQlF6dFJRVU5HTEUxQlFVMHNUMEZCVHl4SFFVRkhMRWRCUVVjc1JVRkJSVHRaUVVOcVFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1IwRkJSeXhMUVVGTExFTkJRVU03V1VGRE4wSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUlVGQlJUdG5Ra0ZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzJGQlFVVTdVVUZEY2tRc1EwRkJReXhEUVVGRE8xRkJRMFlzVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVXNzVFVGQlRTeERRVUZETzFGQlEzUkRMRTFCUVUwc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4SlFVRkpMRTFCUVUwc1EwRkJRenRSUVVOMFF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hUUVVGVExFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRPMUZCUTI1RUxFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRlZMRVZCUVVVN1dVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRUUVVGRk8yRkJRM3BFTzFsQlFVVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXg1UkVGQmVVUXNRMEZCUXl4RFFVRkRPMU5CUVVVN1VVRkRhRVlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGQkxFTkJRVU1zUTBGQlF5eFpRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVU1zUTBGQlF5eHBRa0ZCYVVJc1JVRkJSVHRaUVVNelJDeFpRVUZETEVOQlFVTXNjMEpCUVhOQ0xFVkJRVVVzUlVGQlJTeFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRE8xbEJRMnhFTEZsQlFVTXNRMEZCUXl4elFrRkJjMElzUlVGQlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlFTeERRVUZETEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGFrVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUE8yZENRVU5zUWl4WlFVRkRMRU5CUVVNc05rSkJRV0VzUlVGQlJTeEZRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRExEWkNRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFTkJRVU03WVVGRGJrWXNRMEZCUXp0VFFVTk1MRU5CUVVNc1EwRkJRenRKUVVOUUxFTkJRVU03UTBGRFNqdEJRVE5DUkN4elFrRXlRa01pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNsYXlvdXRfMSA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmNvbnN0IGhzbGF5b3V0XzIgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5jb25zdCBTZWxlY3Rvcl8xID0gcmVxdWlyZShcIi4vU2VsZWN0b3JcIik7XG5jb25zdCBTZWxlY3Rvcl8yID0gcmVxdWlyZShcIi4vU2VsZWN0b3JcIik7XG5jbGFzcyBPcHRpb25zQnV0dG9uIGV4dGVuZHMgU2VsZWN0b3JfMS5TZWxlY3RvciB7XG4gICAgb25pbml0KG5vZGUpIHtcbiAgICAgICAgU2VsZWN0b3JfMS5TZWxlY3Rvci5pbml0KG5vZGUsIFNlbGVjdG9yXzIuYW55SXRlbXMpO1xuICAgIH1cbiAgICBzdGF0aWMgdmlld0dyb3VwKGNzcywgbm9kZSkge1xuICAgICAgICBjc3MgPSBgJHtjc3N9ICR7bm9kZS5hdHRycy5jc3MgfHwgJyd9YDtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBub2RlLmF0dHJzLnN0eWxlIHx8ICcnO1xuICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKGNzcywgeyBzdHlsZTogc3R5bGUgfSwgaHNsYXlvdXRfMS5tKGhzbGF5b3V0XzIuTGF5b3V0LCB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG5vZGUuc3RhdGUuaXRlbXMubWFwKChsLCBpKSA9PiBTZWxlY3Rvcl8xLlNlbGVjdG9yLnJlbmRlckl0ZW0obm9kZSwgaSkpXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7IHJldHVybiBPcHRpb25zQnV0dG9uLnZpZXdHcm91cCgnLmhzLW9wdGlvbnMtYnV0dG9ucycsIG5vZGUpOyB9XG59XG5leHBvcnRzLk9wdGlvbnNCdXR0b24gPSBPcHRpb25zQnV0dG9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVDNCMGFXOXVjMEoxZEhSdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlQY0hScGIyNXpRblYwZEc5dUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCSzBKQkxIVkRRVUY1UXp0QlFVTjZReXgxUTBGQmVVTTdRVUZEZWtNc2VVTkJRVEpETzBGQlF6TkRMSGxEUVVFeVF6dEJRV3RDTTBNc1RVRkJZU3hoUVVGakxGTkJRVkVzYlVKQlFWRTdTVUZEZGtNc1RVRkJUU3hEUVVGRExFbEJRVlU3VVVGRFlpeHRRa0ZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzYlVKQlFWRXNRMEZCUXl4RFFVRkRPMGxCUTJ4RExFTkJRVU03U1VGRFJDeE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVZVc1JVRkJSU3hKUVVGWE8xRkJRM0JETEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJRenRSUVVOMlF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZGY2tNc1QwRkJUeXhaUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVTXNTMEZCU3l4RlFVRkRMRXRCUVVzc1JVRkJReXhGUVVGRkxGbEJRVU1zUTBGQlF5eHBRa0ZCVFN4RlFVRkZPMWxCUTI1RExFOUJRVThzUlVGQlJTeEZRVUZGTzFsQlExZ3NUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVZFc1JVRkJSU3hEUVVGUkxFVkJRVVVzUlVGQlJTeERRVUZETEcxQ1FVRlJMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTjBSaXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5TTEVOQlFVTTdTVUZEUkN4SlFVRkpMRU5CUVVNc1NVRkJWeXhKUVVGWExFOUJRVThzWVVGQllTeERRVUZETEZOQlFWTXNRMEZCUXl4eFFrRkJjVUlzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1EwRkROVVk3UVVGa1JDeHpRMEZqUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNsYXlvdXRfMSA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmNvbnN0IGhzbGF5b3V0XzIgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5jb25zdCBTZWxlY3Rvcl8xID0gcmVxdWlyZShcIi4vU2VsZWN0b3JcIik7XG5jbGFzcyBSYWRpb0J1dHRvbiBleHRlbmRzIFNlbGVjdG9yXzEuU2VsZWN0b3Ige1xuICAgIHN0YXRpYyB2aWV3R3JvdXAoY3NzLCBub2RlKSB7XG4gICAgICAgIGNzcyA9IGAke2Nzc30gJHtub2RlLmF0dHJzLmNzcyB8fCAnJ31gO1xuICAgICAgICBjb25zdCBzdHlsZSA9IG5vZGUuYXR0cnMuc3R5bGUgfHwgJyc7XG4gICAgICAgIHJldHVybiBoc2xheW91dF8xLm0oY3NzLCB7IHN0eWxlOiBzdHlsZSB9LCBoc2xheW91dF8xLm0oaHNsYXlvdXRfMi5MYXlvdXQsIHtcbiAgICAgICAgICAgIGNvbHVtbnM6IFtdLFxuICAgICAgICAgICAgY29udGVudDogbm9kZS5zdGF0ZS5pdGVtcy5tYXAoKGwsIGkpID0+IFNlbGVjdG9yXzEuU2VsZWN0b3IucmVuZGVySXRlbShub2RlLCBpKSlcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBvbmluaXQobm9kZSkge1xuICAgICAgICBzdXBlci5vbmluaXQobm9kZSk7XG4gICAgICAgIFNlbGVjdG9yXzEuU2VsZWN0b3IuZW5zdXJlU2VsZWN0ZWQobm9kZSk7XG4gICAgfVxuICAgIG9udXBkYXRlKG5vZGUpIHtcbiAgICAgICAgc3VwZXIub251cGRhdGUobm9kZSk7XG4gICAgICAgIFNlbGVjdG9yXzEuU2VsZWN0b3IuZW5zdXJlU2VsZWN0ZWQobm9kZSk7XG4gICAgfVxuICAgIHZpZXcobm9kZSkgeyByZXR1cm4gUmFkaW9CdXR0b24udmlld0dyb3VwKCcuaHMtcmFkaW8tYnV0dG9ucycsIG5vZGUpOyB9XG59XG5leHBvcnRzLlJhZGlvQnV0dG9uID0gUmFkaW9CdXR0b247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVbUZrYVc5Q2RYUjBiMjR1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdlVtRmthVzlDZFhSMGIyNHVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGcFEwRXNkVU5CUVRSRE8wRkJRelZETEhWRFFVRTBRenRCUVVNMVF5eDVRMEZCT0VNN1FVRnJRamxETEUxQlFXRXNWMEZCV1N4VFFVRlJMRzFDUVVGUk8wbEJRM0pETEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJWU3hGUVVGRkxFbEJRVmM3VVVGRGNFTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRE8xRkJRM1pETEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVVnlReXhQUVVGUExGbEJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUXl4TFFVRkxMRVZCUVVNc1MwRkJTeXhGUVVGRExFVkJRVVVzV1VGQlF5eERRVUZETEdsQ1FVRk5MRVZCUVVVN1dVRkRia01zVDBGQlR5eEZRVUZGTEVWQlFVVTdXVUZEV0N4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNiVUpCUVZFc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNSR0xFTkJRVU1zUTBGQlF5eERRVUZETzBsQlExSXNRMEZCUXp0SlFVTkVMRTFCUVUwc1EwRkJReXhKUVVGWE8xRkJRMlFzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOdVFpeHRRa0ZCVVN4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU5zUXl4RFFVRkRPMGxCUTBRc1VVRkJVU3hEUVVGRExFbEJRVmM3VVVGRGFFSXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU55UWl4dFFrRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTnNReXhEUVVGRE8wbEJRMFFzU1VGQlNTeERRVUZETEVsQlFWY3NTVUZCVnl4UFFVRlBMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zYlVKQlFXMUNMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBOQlEzaEdPMEZCYmtKRUxHdERRVzFDUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNsYXlvdXRfMSA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmZ1bmN0aW9uIG9uZU9mSXRlbXMoaXRlbXMsIHRpdGxlKSB7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSAoaXRlbS50aXRsZSA9PT0gdGl0bGUpO1xuICAgIH0pO1xuICAgIGlmICghaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKSkge1xuICAgICAgICBpdGVtc1swXS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKVswXTtcbn1cbmV4cG9ydHMub25lT2ZJdGVtcyA9IG9uZU9mSXRlbXM7XG5mdW5jdGlvbiBhbnlJdGVtcyhpdGVtcywgdGl0bGUpIHtcbiAgICBpdGVtc1t0aXRsZV0uaXNTZWxlY3RlZCA9ICFpdGVtc1t0aXRsZV0uaXNTZWxlY3RlZDtcbiAgICByZXR1cm4gaXRlbXNbdGl0bGVdO1xufVxuZXhwb3J0cy5hbnlJdGVtcyA9IGFueUl0ZW1zO1xuY2xhc3MgU2VsZWN0b3Ige1xuICAgIHN0YXRpYyB1cGRhdGVJdGVtcyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbm9kZS5hdHRycy5kZXNjLml0ZW1zIHx8IFtdO1xuICAgICAgICBpdGVtcy5tYXAoKGl0bSwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5vZGUuc3RhdGUuaXRlbXNbaXRtXSB8fCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0bSxcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUuaXRlbXNbaV0gPSBpdGVtO1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5pdGVtc1tpdG1dID0gaXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBpbml0KG5vZGUsIG1vZGVsID0gb25lT2ZJdGVtcykge1xuICAgICAgICBub2RlLnN0YXRlID0ge1xuICAgICAgICAgICAgdXBkYXRlTW9kZWw6IG1vZGVsLFxuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgZXZlbnRzOiB7fSxcbiAgICAgICAgICAgIGl0ZW1DbGlja2VkOiAoaXRlbSkgPT4gaXRlbSxcbiAgICAgICAgICAgIGRlZmF1bHRJdGVtOiBub2RlLmF0dHJzLmRlc2MuZGVmYXVsdEl0ZW1cbiAgICAgICAgfTtcbiAgICAgICAgbm9kZS5zdGF0ZS5ldmVudHMubW91c2VEb3duID0gbm9kZS5hdHRycy5kZXNjLm1vdXNlRG93bjtcbiAgICAgICAgbm9kZS5zdGF0ZS5ldmVudHMubW91c2VVcCA9IG5vZGUuYXR0cnMuZGVzYy5tb3VzZVVwO1xuICAgICAgICBub2RlLmF0dHJzLmRlc2MuY2xpY2tlZCA9IG5vZGUuYXR0cnMuZGVzYy5jbGlja2VkIHx8ICgoaXRlbSkgPT4gY29uc29sZS5sb2coYG1pc3NpbmcgY2xpY2tlZCgpIGZ1bmN0aW9uIGZvciBzZWxlY3RvciBpdGVtICR7aXRlbX1gKSk7XG4gICAgICAgIG5vZGUuc3RhdGUuZXZlbnRzLmNsaWNrZWQgPSBub2RlLmF0dHJzLmRlc2MuY2xpY2tlZDtcbiAgICAgICAgU2VsZWN0b3IudXBkYXRlSXRlbXMobm9kZSk7XG4gICAgfVxuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIFNlbGVjdG9yLmluaXQobm9kZSk7XG4gICAgfVxuICAgIG9udXBkYXRlKG5vZGUpIHtcbiAgICAgICAgU2VsZWN0b3IudXBkYXRlSXRlbXMobm9kZSk7XG4gICAgfVxuICAgIHN0YXRpYyBlbnN1cmVTZWxlY3RlZChub2RlKSB7XG4gICAgICAgIGlmICghbm9kZS5zdGF0ZS5pdGVtcy5zb21lKChpKSA9PiBpLmlzU2VsZWN0ZWQpICYmIG5vZGUuc3RhdGUuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhdGUuZGVmYXVsdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBub2RlLnN0YXRlLml0ZW1zW25vZGUuc3RhdGUuZGVmYXVsdEl0ZW1dLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5zdGF0ZS5pdGVtc1swXS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcmVuZGVySXRlbShub2RlLCBpKSB7XG4gICAgICAgIGNvbnN0IHJlYWN0b3IgPSAoY2FsbGJhY2spID0+ICh0aXRsZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS51cGRhdGVNb2RlbChub2RlLnN0YXRlLml0ZW1zLCB0aXRsZSk7XG4gICAgICAgICAgICB0aXRsZSA9IG5vZGUuc3RhdGUuaXRlbUNsaWNrZWQodGl0bGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRpdGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGkgPCAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgaWxsZWdhbCByZW5kZXIgaW5kZXggJHtpfSAke25vZGUuc3RhdGUuaXRlbXMubWFwKChpKSA9PiBpLnRpdGxlKS5qb2luKCd8Jyl9YCk7XG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtID0gbm9kZS5zdGF0ZS5pdGVtc1tpXTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSBpdGVtLnRpdGxlIHx8ICcnO1xuICAgICAgICBjb25zdCBpdGVtQ3NzID0gaXRlbS5jc3MgfHwgJyc7XG4gICAgICAgIHJldHVybiByZW5kZXJTZWxlY3RhYmxlKHtcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgIGNzczogaXRlbUNzcyxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IG5vZGUuc3RhdGUuaXRlbXNbdGl0bGVdID8gbm9kZS5zdGF0ZS5pdGVtc1t0aXRsZV0uaXNTZWxlY3RlZCA6IGZhbHNlLFxuICAgICAgICAgICAgbW91c2VEb3duOiBub2RlLnN0YXRlLmV2ZW50cy5tb3VzZURvd24sXG4gICAgICAgICAgICBtb3VzZVVwOiBub2RlLnN0YXRlLmV2ZW50cy5tb3VzZVVwLFxuICAgICAgICAgICAgY2xpY2tlZDogcmVhY3Rvcihub2RlLnN0YXRlLmV2ZW50cy5jbGlja2VkKVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlNlbGVjdG9yID0gU2VsZWN0b3I7XG47XG5mdW5jdGlvbiByZW5kZXJTZWxlY3RhYmxlKGQpIHtcbiAgICBjb25zdCBvbmNsaWNrID0gZC5jbGlja2VkID8gKCkgPT4geyBkLmNsaWNrZWQoZC50aXRsZSk7IH0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb25tb3VzZWRvd24gPSBkLm1vdXNlRG93biA/ICgpID0+IHsgZC5tb3VzZURvd24oZC50aXRsZSk7IH0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb25tb3VzZXVwID0gZC5tb3VzZVVwID8gKCkgPT4geyBkLm1vdXNlVXAoZC50aXRsZSk7IH0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGhzbGF5b3V0XzEubShgLmhzLXNlbGVjdGFibGUgJHtkLmNzcyB8fCAnJ30gJHtkLmlzU2VsZWN0ZWQgPyAnaHMtc2VsZWN0ZWQnIDogJyd9YCwgeyBzdHlsZTogZC5zdHlsZSwgb25jbGljazogb25jbGljaywgb25tb3VzZWRvd246IG9ubW91c2Vkb3duLCBvbm1vdXNldXA6IG9ubW91c2V1cCB9LCBkLnRpdGxlKTtcbn1cbmV4cG9ydHMucmVuZGVyU2VsZWN0YWJsZSA9IHJlbmRlclNlbGVjdGFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMlZzWldOMGIzSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12VTJWc1pXTjBiM0l1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRnhRa0VzZFVOQlFXOURPMEZCSzBOd1F5eFRRVUZuUWl4VlFVRlZMRU5CUVVNc1MwRkJjMElzUlVGQlJTeExRVUZaTzBsQlF6TkVMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEpRVUZ0UWl4RlFVRkZMRVZCUVVVN1VVRkRiRU1zU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFdEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTTdTVUZETTBNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFNDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVzFDTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUlVGQlJUdFJRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETzB0QlFVVTdTVUZETVVZc1QwRkJUeXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCYlVJc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0pGTEVOQlFVTTdRVUZPUkN4blEwRk5RenRCUVUxRUxGTkJRV2RDTEZGQlFWRXNRMEZCUXl4TFFVRnpRaXhGUVVGRkxFdEJRVms3U1VGRGVrUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExGVkJRVlVzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU03U1VGRGJrUXNUMEZCVHl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGVFSXNRMEZCUXp0QlFVaEVMRFJDUVVkRE8wRkJjVUpFTEUxQlFYTkNMRkZCUVZFN1NVRkxNVUlzVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRlZPMUZCUTNwQ0xFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZETVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFWVXNSVUZCUlN4RFFVRlJMRVZCUVVVc1JVRkJSVHRaUVVNdlFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1R0blFrRkRiRU1zUzBGQlN5eEZRVUZGTEVkQlFVYzdaMEpCUTFZc1ZVRkJWU3hGUVVGRkxFdEJRVXM3WVVGRGNFSXNRMEZCUXp0WlFVTkdMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVNelFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZEYWtNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFVDeERRVUZETzBsQlYwUXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGWExFVkJRVVVzUzBGQlN5eEhRVUZETEZWQlFWVTdVVUZEY2tNc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQmEwSTdXVUZEZUVJc1YwRkJWeXhGUVVGRkxFdEJRVXM3V1VGRGJFSXNTMEZCU3l4RlFVRnZRaXhGUVVGRk8xbEJRek5DTEUxQlFVMHNSVUZCUlN4RlFVRkZPMWxCUTFZc1YwRkJWeXhGUVVGRkxFTkJRVU1zU1VGQlZ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpPMWxCUTJ4RExGZEJRVmNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWE8xTkJRek5ETEVOQlFVTTdVVUZEUml4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETzFGQlEzaEVMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNSMEZCU3l4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZEZEVRc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMR2RFUVVGblJDeEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRhRW9zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhIUVVGTExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRSUVVOMFJDeFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJReTlDTEVOQlFVTTdTVUZGUkN4TlFVRk5MRU5CUVVNc1NVRkJWenRSUVVOa0xGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRlRUlzUTBGQlF6dEpRVU5FTEZGQlFWRXNRMEZCUXl4SlFVRlhPMUZCUTJoQ0xGRkJRVkVzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRMMElzUTBGQlF6dEpRVTlUTEUxQlFVMHNRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJWenRSUVVOMlF5eEpRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCWjBJc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRVZCUVVVN1dVRkRlRVlzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1JVRkJSVHRuUWtGRGVFSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETzJGQlF6bEVPMmxDUVVGTk8yZENRVU5JTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNN1lVRkRla003VTBGRFNqdEpRVU5NTEVOQlFVTTdTVUZSVXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVmNzUlVGQlJTeERRVUZSTzFGQlF6ZERMRTFCUVUwc1QwRkJUeXhIUVVGSExFTkJRVU1zVVVGQk1rSXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGWkxFVkJRVVVzUlVGQlJUdFpRVU01UkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU5vUkN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRkRU1zU1VGQlNTeFBRVUZQTEZGQlFWRXNTMEZCU3l4VlFVRlZMRVZCUVVVN1owSkJRMmhETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVOdVFqdFJRVU5NTEVOQlFVTXNRMEZCUXp0UlFVTkdMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJUdFpRVUZGTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkxMRVZCUVVNc1JVRkJSU3hEUVVGQkxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVGRk8xRkJRMnBJTEUxQlFVMHNTVUZCU1N4SFFVRnJRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOb1JDeE5RVUZOTEV0QlFVc3NSMEZCVlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU4wUXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVY3ZRaXhQUVVGUExHZENRVUZuUWl4RFFVRkRPMWxCUTNCQ0xFdEJRVXNzUlVGQlJTeExRVUZMTzFsQlExb3NSMEZCUnl4RlFVRkZMRTlCUVU4N1dVRkZXaXhWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTenRaUVVNdlJTeFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV6dFpRVU4wUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHp0WlFVTnNReXhQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF6dFRRVU01UXl4RFFVRkRMRU5CUVVNN1NVRkRVQ3hEUVVGRE8wTkJSVW83UVVFNVJrUXNORUpCT0VaRE8wRkJRVUVzUTBGQlF6dEJRVkZHTEZOQlFXZENMR2RDUVVGblFpeERRVUZETEVOQlFXZENPMGxCUXpkRExFMUJRVTBzVDBGQlR5eEhRVUZUTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGSExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU03U1VGREwwVXNUVUZCVFN4WFFVRlhMRWRCUVVzc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlFTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXp0SlFVTXZSU3hOUVVGTkxGTkJRVk1zUjBGQlR5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkJMRU5CUVVNc1EwRkJSeXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRE8wbEJReTlGTEU5QlFVOHNXVUZCUXl4RFFVRkRMR3RDUVVGclFpeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZCTEVOQlFVTXNRMEZCUVN4aFFVRmhMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVU4wUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUXl4UFFVRlBMRVZCUVVVc1YwRkJWeXhGUVVGRExGZEJRVmNzUlVGQlJTeFRRVUZUTEVWQlFVTXNVMEZCVXl4RlFVRkZMRVZCUTJwR0xFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlExWXNRMEZCUXp0QlFVTk9MRU5CUVVNN1FVRlNSQ3cwUTBGUlF5SjkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGhzbGF5b3V0XzEgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5jbGFzcyBTbGlkZXIge1xuICAgIG9uaW5pdChub2RlKSB7XG4gICAgICAgIG5vZGUuc3RhdGUgPSB7XG4gICAgICAgICAgICByYW5nZTogW10sXG4gICAgICAgICAgICB2YWx1ZTogMC41LFxuICAgICAgICAgICAgbW91c2U6IC0xLFxuICAgICAgICAgICAgc2xpZGVyOiAwLFxuICAgICAgICAgICAgbm90aWZpZWQ6ICcnLFxuICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICB2aWV3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgaWQgPSBub2RlLmF0dHJzLmlkO1xuICAgICAgICBjb25zdCBjc3MgPSBub2RlLmF0dHJzLmNzcyB8fCAnJztcbiAgICAgICAgbm9kZS5zdGF0ZS5yYW5nZSA9IG5vZGUuYXR0cnMucmFuZ2UgfHwgW107XG4gICAgICAgIG5vZGUuc3RhdGUub25jaGFuZ2UgPSBub2RlLmF0dHJzLm9uY2hhbmdlO1xuICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKGAuaHMtc2xpZGVyICR7Y3NzfWAsIHtcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIG9ubW91c2Vkb3duOiAoZSkgPT4gbW91c2Vkb3duKGUsIG5vZGUpLFxuICAgICAgICAgICAgb25tb3VzZW1vdmU6IChlKSA9PiBtb3VzZW1vdmUoZSwgbm9kZSksXG4gICAgICAgICAgICBvbm1vdXNldXA6IChlKSA9PiBtb3VzZXVwKGUsIG5vZGUpLFxuICAgICAgICAgICAgb25tb3VzZW91dDogKGUpID0+IG1vdXNlb3V0KGUsIG5vZGUpXG4gICAgICAgIH0sIFtyZW5kZXJTbGlkZXIobm9kZSldKTtcbiAgICB9XG59XG5leHBvcnRzLlNsaWRlciA9IFNsaWRlcjtcbmZ1bmN0aW9uIHJlbmRlclNsaWRlcihub2RlKSB7XG4gICAgcmV0dXJuIGhzbGF5b3V0XzEubSgnLmhzLXNsaWRlci1zbG90JywgW1xuICAgICAgICBoc2xheW91dF8xLm0oJy5ocy1zbGlkZXItbWFya2VycycsIG5vZGUuc3RhdGUucmFuZ2UubWFwKHJlbmRlck1hcmtlcikpLFxuICAgICAgICBoc2xheW91dF8xLm0oJy5ocy1zbGlkZXItaGFuZGxlJywgeyBzdHlsZTogYGxlZnQ6JHsxMDAgKiBub2RlLnN0YXRlLnZhbHVlfSVgIH0pXG4gICAgXSk7XG59XG5mdW5jdGlvbiByZW5kZXJNYXJrZXIodmFsdWUsIGksIG1hcmtlcnMpIHtcbiAgICBjb25zdCBzaGFyZSA9IGkgLyAobWFya2Vycy5sZW5ndGggLSAxKTtcbiAgICBjb25zdCBsZWZ0ID0gbWFya2Vycy5sZW5ndGggPCAyID8gMCA6IDEwMCAqIHNoYXJlO1xuICAgIHJldHVybiBoc2xheW91dF8xLm0oJy5ocy1zbGlkZXItbWFya2VyJywgeyBzdHlsZTogYGxlZnQ6ICR7bGVmdH0lYCB9LCByZW5kZXJMYWJlbCh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gcmVuZGVyTGFiZWwodmFsdWUpIHtcbiAgICByZXR1cm4gaHNsYXlvdXRfMS5tKCcuaHMtc2xpZGVyLWxhYmVsJywgdmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0VGFyZ2V0T2Zmc2V0KGUpIHtcbiAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgbGV0IGxlZnRPZmZzZXQgPSAwO1xuICAgIHdoaWxlICh0YXJnZXQuY2xhc3NOYW1lLnRyaW0oKSAhPT0gZS5jdXJyZW50VGFyZ2V0LmNsYXNzTmFtZS50cmltKCkpIHtcbiAgICAgICAgbGVmdE9mZnNldCArPSB0YXJnZXQub2Zmc2V0TGVmdDtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0T2Zmc2V0IC0gdGFyZ2V0Lmxhc3RDaGlsZC5vZmZzZXRMZWZ0O1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUoZSwgbm9kZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHNsb3RXaWR0aCA9IGUuY3VycmVudFRhcmdldC5sYXN0Q2hpbGQuY2xpZW50V2lkdGg7XG4gICAgbm9kZS5zdGF0ZS52YWx1ZSA9IChlLmNsaWVudFggLSBub2RlLnN0YXRlLm1vdXNlKSAvIHNsb3RXaWR0aCArIG5vZGUuc3RhdGUuc2xpZGVyO1xuICAgIHJldHVybiBub3RpZnkobm9kZSk7XG59XG5mdW5jdGlvbiBtb3VzZWRvd24oZSwgbm9kZSkge1xuICAgIGNvbnN0IG9mZnNldCA9IGdldFRhcmdldE9mZnNldChlKTtcbiAgICBub2RlLnN0YXRlLm1vdXNlID0gZS5jbGllbnRYO1xuICAgIGlmIChbJ2hzLXNsaWRlcicsICdocy1zbGlkZXItc2xvdCddLmluZGV4T2YoZS50YXJnZXQuY2xhc3NOYW1lLnRyaW0oKSkgPj0gMCkge1xuICAgICAgICBjb25zdCBzbG90V2lkdGggPSBlLmN1cnJlbnRUYXJnZXQubGFzdENoaWxkLmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBoYW5kbGVXaWR0aCA9IGUuY3VycmVudFRhcmdldC5sYXN0Q2hpbGQubGFzdENoaWxkLmNsaWVudFdpZHRoO1xuICAgICAgICBub2RlLnN0YXRlLm1vdXNlIC09IGhhbmRsZVdpZHRoIC8gMjtcbiAgICAgICAgbm9kZS5zdGF0ZS52YWx1ZSA9IChlLm9mZnNldFggLSBoYW5kbGVXaWR0aCAvIDIgKyBvZmZzZXQpIC8gc2xvdFdpZHRoO1xuICAgIH1cbiAgICBub2RlLnN0YXRlLnNsaWRlciA9IG5vZGUuc3RhdGUudmFsdWU7XG4gICAgZ2V0VmFsdWUoZSwgbm9kZSk7XG59XG5mdW5jdGlvbiBtb3VzZW1vdmUoZSwgbm9kZSkge1xuICAgIGlmIChub2RlLnN0YXRlLm1vdXNlID4gMCkge1xuICAgICAgICBnZXRWYWx1ZShlLCBub2RlKTtcbiAgICAgICAgaWYgKG5vZGUuc3RhdGUudmFsdWUgPiAxIHx8IG5vZGUuc3RhdGUudmFsdWUgPCAwKSB7XG4gICAgICAgICAgICBtb3VzZXVwKGUsIG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gbW91c2V1cChlLCBub2RlKSB7XG4gICAgaWYgKG5vZGUuc3RhdGUubW91c2UgPiAwKSB7XG4gICAgICAgIG5vZGUuc3RhdGUudmFsdWUgPSBnZXRWYWx1ZShlLCBub2RlKTtcbiAgICAgICAgbm9kZS5zdGF0ZS5tb3VzZSA9IC0xO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1vdXNlb3V0KGUsIG5vZGUpIHtcbiAgICBpZiAobm9kZS5zdGF0ZS5tb3VzZSA+IDAgJiYgZS50YXJnZXQuY2xhc3NOYW1lLnRyaW0oKSA9PT0gJ2hzLXNsaWRlcicpIHtcbiAgICAgICAgbW91c2V1cChlLCBub2RlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBub3RpZnkobm9kZSkge1xuICAgIGlmICgobm9kZS5zdGF0ZS5yYW5nZS5sZW5ndGggPiAxKSAmJiAodHlwZW9mIG5vZGUuc3RhdGUucmFuZ2VbMF0gPT09ICdzdHJpbmcnKSkge1xuICAgICAgICBjb25zdCB2ID0gTWF0aC5mbG9vcihub2RlLnN0YXRlLnZhbHVlICogKG5vZGUuc3RhdGUucmFuZ2UubGVuZ3RoIC0gMSkgKyAwLjUpO1xuICAgICAgICBpZiAobm9kZS5zdGF0ZS5ub3RpZmllZCAhPT0gbm9kZS5zdGF0ZS5yYW5nZVt2XSkge1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5vbmNoYW5nZShub2RlLnN0YXRlLnJhbmdlW3ZdKTtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUubm90aWZpZWQgPSBub2RlLnN0YXRlLnJhbmdlW3ZdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2IC8gKG5vZGUuc3RhdGUucmFuZ2UubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBudW1SYW5nZSA9IG5vZGUuc3RhdGUucmFuZ2U7XG4gICAgICAgIGNvbnN0IHYgPSBNYXRoLmZsb29yKChudW1SYW5nZVswXSAqICgxIC0gbm9kZS5zdGF0ZS52YWx1ZSkgKyBudW1SYW5nZVsxXSAqIG5vZGUuc3RhdGUudmFsdWUpICogMTAwKSAvIDEwMDtcbiAgICAgICAgbm9kZS5zdGF0ZS5vbmNoYW5nZShNYXRoLm1pbihub2RlLnN0YXRlLnJhbmdlWzFdLCBNYXRoLm1heChub2RlLnN0YXRlLnJhbmdlWzBdLCB2KSkpO1xuICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZS52YWx1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMnhwWkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dmMzSmpMMU5zYVdSbGNpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVRCRFFTeDFRMEZCYjBNN1FVRnZRbkJETEUxQlFXRXNUVUZCVFR0SlFVTm1MRTFCUVUwc1EwRkJReXhKUVVGVk8xRkJRMklzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnp0WlFVTlVMRXRCUVVzc1JVRkJaU3hGUVVGRk8xbEJRM1JDTEV0QlFVc3NSVUZCUlN4SFFVRkhPMWxCUTFZc1MwRkJTeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFpRVU5VTEUxQlFVMHNSVUZCUXl4RFFVRkRPMWxCUTFJc1VVRkJVU3hGUVVGRExFVkJRVVU3V1VGRFdDeFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVVc1EwRkJRenRUUVVOeVFpeERRVUZETzBsQlEwNHNRMEZCUXp0SlFVTkVMRWxCUVVrc1EwRkJReXhKUVVGWE8xRkJRMW9zVFVGQlRTeEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU03VVVGRGVrSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUTJwRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVTXhReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU14UXl4UFFVRlBMRmxCUVVNc1EwRkJReXhqUVVGakxFZEJRVWNzUlVGQlJTeEZRVUZGTzFsQlF6RkNMRVZCUVVVc1JVRkJReXhGUVVGRk8xbEJRMHdzVjBGQlZ5eEZRVUZETEVOQlFVTXNRMEZCU3l4RlFVRkZMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXp0WlFVTjZReXhYUVVGWExFVkJRVU1zUTBGQlF5eERRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETzFsQlEzcERMRk5CUVZNc1JVRkJReXhEUVVGRExFTkJRVXNzUlVGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU03V1VGRGRrTXNWVUZCVlN4RlFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGSExFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJRenRUUVVNelF5eEZRVU5FTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UWl4RFFVRkRPME5CUjBvN1FVRXpRa1FzZDBKQk1rSkRPMEZCUlVRc1UwRkJVeXhaUVVGWkxFTkJRVU1zU1VGQlZUdEpRVU0xUWl4UFFVRlBMRmxCUVVNc1EwRkJReXhwUWtGQmFVSXNSVUZCUlR0UlFVTjRRaXhaUVVGRExFTkJRVU1zYjBKQlFXOUNMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xRkJRek5FTEZsQlFVTXNRMEZCUXl4dFFrRkJiVUlzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4UlFVRlJMRWRCUVVjc1IwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNN1MwRkRja1VzUTBGQlF5eERRVUZETzBGQlExQXNRMEZCUXp0QlFVVkVMRk5CUVZNc1dVRkJXU3hEUVVGRExFdEJRVzlDTEVWQlFVVXNRMEZCVVN4RlFVRkZMRTlCUVcxQ08wbEJRM0pGTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRja01zVFVGQlRTeEpRVUZKTEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGRExFdEJRVXNzUTBGQlF6dEpRVU0zUXl4UFFVRlBMRmxCUVVNc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJSU3hUUVVGVExFbEJRVWtzUjBGQlJ5eEZRVUZETEVWQlFVVXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGFrWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1YwRkJWeXhEUVVGRExFdEJRVzlDTzBsQlEzSkRMRTlCUVU4c1dVRkJReXhEUVVGRExHdENRVUZyUWl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM2hETEVOQlFVTTdRVUZKUkN4VFFVRlRMR1ZCUVdVc1EwRkJReXhEUVVGTE8wbEJRekZDTEVsQlFVa3NUVUZCVFN4SFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRE1VSXNTVUZCU1N4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMjVDTEU5QlFVOHNUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJUdFJRVU5xUlN4VlFVRlZMRWxCUVVrc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dFJRVU5vUXl4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU01UWp0SlFVTkVMRTlCUVU4c1ZVRkJWU3hIUVVGSExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNWVUZCVlN4RFFVRkRPMEZCUTNCRUxFTkJRVU03UVVGRlJDeFRRVUZUTEZGQlFWRXNRMEZCUXl4RFFVRkxMRVZCUVVVc1NVRkJWVHRKUVVNdlFpeERRVUZETEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1NVRkRjRUlzUTBGQlF5eERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMGxCUTI1Q0xFMUJRVTBzVTBGQlV5eEhRVUZITEVOQlFVTXNRMEZCUXl4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUTBGQlF6dEpRVU40UkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEYkVZc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEZUVJc1EwRkJRenRCUVVWRUxGTkJRVk1zVTBGQlV5eERRVUZETEVOQlFVc3NSVUZCUlN4SlFVRlZPMGxCUTJoRExFMUJRVTBzVFVGQlRTeEhRVUZITEdWQlFXVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOc1F5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETzBsQlF6ZENMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzWjBKQlFXZENMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zU1VGQlJTeERRVUZETEVWQlFVVTdVVUZEZGtVc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETEdGQlFXRXNRMEZCUXl4VFFVRlRMRU5CUVVNc1YwRkJWeXhEUVVGRE8xRkJRM2hFTEUxQlFVMHNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhoUVVGaExFTkJRVU1zVTBGQlV5eERRVUZETEZOQlFWTXNRMEZCUXl4WFFVRlhMRU5CUVVNN1VVRkRjRVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWxCUVVrc1YwRkJWeXhIUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5zUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRWRCUVVjc1YwRkJWeXhIUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNSMEZCUnl4VFFVRlRMRU5CUVVNN1MwRkRka1U3U1VGRFJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXp0SlFVTnlReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNSQ0xFTkJRVU03UVVGRlJDeFRRVUZUTEZOQlFWTXNRMEZCUXl4RFFVRkxMRVZCUVVVc1NVRkJWVHRKUVVOb1F5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGRExFTkJRVU1zUlVGQlJUdFJRVU53UWl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEyeENMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZCUlR0TFFVTXhSVHRCUVVOTUxFTkJRVU03UVVGRlJDeFRRVUZUTEU5QlFVOHNRMEZCUXl4RFFVRkxMRVZCUVVVc1NVRkJWVHRKUVVNNVFpeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGRExFTkJRVU1zUlVGQlJUdFJRVU53UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM0pETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzB0QlEzcENPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zVVVGQlVTeERRVUZETEVOQlFVc3NSVUZCUlN4SlFVRlZPMGxCUXk5Q0xFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExGZEJRVmNzUlVGQlJUdFJRVU5xUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzB0QlEzQkNPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zVFVGQlRTeERRVUZETEVsQlFWVTdTVUZEZEVJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVa3NVVUZCVVN4RFFVRkRMRVZCUVVVN1VVRkRNMFVzVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU16UlN4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeExRVUZMTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzFsQlF6ZERMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZWtNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVkQlFWY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEY2tRN1VVRkZSQ3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0TFFVTXhRenRUUVVGTk8xRkJRMGdzVFVGQlRTeFJRVUZSTEVkQlFYRkNMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETzFGQlEzQkVMRTFCUVUwc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJReXhIUVVGSExFTkJRVU03VVVGRGFFY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCVXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGVExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnlSeXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRPMHRCUXpOQ08wRkJRMHdzUTBGQlF5SjkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGhzbGF5b3V0XzEgPSByZXF1aXJlKFwiaHNsYXlvdXRcIik7XG5jb25zdCBTZWxlY3Rvcl8xID0gcmVxdWlyZShcIi4vU2VsZWN0b3JcIik7XG5jbGFzcyBUb2dnbGVCdXR0b24gZXh0ZW5kcyBTZWxlY3Rvcl8xLlNlbGVjdG9yIHtcbiAgICBvbmluaXQobm9kZSkge1xuICAgICAgICBzdXBlci5vbmluaXQobm9kZSk7XG4gICAgICAgIG5vZGUuc3RhdGUubW91c2VEb3duQ1NTID0gJyc7XG4gICAgICAgIG5vZGUuc3RhdGUuZXZlbnRzLm1vdXNlRG93biA9ICgpID0+IG5vZGUuc3RhdGUubW91c2VEb3duQ1NTID0gJy5ocy1idXR0b24tcHJlc3NlZCc7XG4gICAgICAgIG5vZGUuc3RhdGUuZXZlbnRzLm1vdXNlVXAgPSAoKSA9PiBub2RlLnN0YXRlLm1vdXNlRG93bkNTUyA9ICcnO1xuICAgICAgICBub2RlLnN0YXRlLml0ZW1DbGlja2VkID0gKHRpdGxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpID0gbm9kZS5zdGF0ZS5pdGVtcy5tYXAoKGkpID0+IGkudGl0bGUpLmluZGV4T2YodGl0bGUpO1xuICAgICAgICAgICAgY29uc3QgbmV3VGl0bGUgPSBub2RlLnN0YXRlLml0ZW1zWyhpICsgMSkgJSBub2RlLnN0YXRlLml0ZW1zLmxlbmd0aF0udGl0bGU7XG4gICAgICAgICAgICBub2RlLnN0YXRlLml0ZW1zW3RpdGxlXS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBub2RlLnN0YXRlLml0ZW1zW25ld1RpdGxlXS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBuZXdUaXRsZTtcbiAgICAgICAgfTtcbiAgICAgICAgU2VsZWN0b3JfMS5TZWxlY3Rvci5lbnN1cmVTZWxlY3RlZChub2RlKTtcbiAgICB9XG4gICAgb251cGRhdGUobm9kZSkge1xuICAgICAgICBzdXBlci5vbnVwZGF0ZShub2RlKTtcbiAgICAgICAgU2VsZWN0b3JfMS5TZWxlY3Rvci5lbnN1cmVTZWxlY3RlZChub2RlKTtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGNzcyA9IG5vZGUuYXR0cnMuY3NzIHx8ICcnO1xuICAgICAgICBjb25zdCBzdHlsZSA9IG5vZGUuYXR0cnMuc3R5bGUgfHwgJyc7XG4gICAgICAgIGNvbnN0IGkgPSBub2RlLnN0YXRlLml0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaS5pc1NlbGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIGhzbGF5b3V0XzEubShgLmhzLXRvZ2dsZS1idXR0b24gJHtjc3N9ICR7bm9kZS5zdGF0ZS5tb3VzZURvd25DU1N9YCwgeyBzdHlsZTogc3R5bGUgfSwgaHNsYXlvdXRfMS5tKCdzcGFuJywgU2VsZWN0b3JfMS5TZWxlY3Rvci5yZW5kZXJJdGVtKG5vZGUsIGkpKSk7XG4gICAgfVxufVxuZXhwb3J0cy5Ub2dnbGVCdXR0b24gPSBUb2dnbGVCdXR0b247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lWRzluWjJ4bFFuVjBkRzl1TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwxUnZaMmRzWlVKMWRIUnZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFXbERRU3gxUTBGQmIwUTdRVUZEY0VRc2VVTkJRWE5FTzBGQmJVSjBSQ3hOUVVGaExGbEJRV0VzVTBGQlVTeHRRa0ZCVVR0SlFVTjBReXhOUVVGTkxFTkJRVU1zU1VGQlZUdFJRVU5pTEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGJrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFZEJRVWNzUlVGQlJTeERRVUZETzFGQlF6ZENMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NSMEZCUnl4dlFrRkJiMElzUTBGQlF6dFJRVU51Uml4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUldwRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkZMRU5CUVVNc1MwRkJXU3hGUVVGUExFVkJRVVU3V1VGRE1VTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJaMElzUlVGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTTFSU3hOUVVGTkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRla1VzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zVlVGQlZTeEhRVUZITEV0QlFVc3NRMEZCUXp0WlFVTXpReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETzFsQlF6ZERMRTlCUVU4c1VVRkJVU3hEUVVGRE8xRkJRM0JDTEVOQlFVTXNRMEZCUXp0UlFVTkdMRzFDUVVGUkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTJ4RExFTkJRVU03U1VGRFJDeFJRVUZSTEVOQlFVTXNTVUZCVnp0UlFVTm9RaXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTNKQ0xHMUNRVUZSTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZEUkN4SlFVRkpMRU5CUVVNc1NVRkJWenRSUVVOYUxFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU5xUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN1VVRkRja01zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCWjBJc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMUZCUlhwRkxFOUJRVThzV1VGQlF5eERRVUZETEhGQ1FVRnhRaXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRVZCUVVVc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlF5eExRVUZMTEVWQlFVTXNSVUZCUlN4WlFVRkRMRU5CUVVNc1RVRkJUU3hGUVVOd1JpeHRRa0ZCVVN4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlF5OUNMRU5CUVVNc1EwRkJRenRKUVVOUUxFTkJRVU03UTBGRFNqdEJRVGRDUkN4dlEwRTJRa01pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNsYXlvdXRfMSA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmV4cG9ydHMuQnV0dG9uU3ltYm9scyA9IHtcbiAgICBjcm9zczogeyBzeW06ICcmdGltZXM7JyB9LFxuICAgIG1pbnVzOiB7IHN5bTogJyZtaW51czsnIH0sXG4gICAgcGx1czogeyBzeW06ICcrJyB9LFxuICAgIGRMZWZ0OiB7IHN5bTogJyZsYXF1bzsnIH0sXG4gICAgZFJpZ2h0OiB7IHN5bTogJyZyYXF1bzsnIH0sXG4gICAgbGVmdDogeyBzeW06ICcmbHNhcXVvOycgfSxcbiAgICByaWdodDogeyBzeW06ICcmcnNhcXVvOycgfSxcbiAgICBsZWZ0VHJpOiB7IHN5bTogJyZsdHJpZjsnIH0sXG4gICAgcmlnaHRUcmk6IHsgc3ltOiAnJnJ0cmlmOycgfSxcbiAgICB1cFRyaTogeyBzeW06ICcmdXRyaWY7JyB9LFxuICAgIGRvd25Ucmk6IHsgc3ltOiAnJmR0cmlmOycgfSxcbiAgICB1cDogeyBzeW06ICcmYW5kOycgfSxcbiAgICBkb3duOiB7IHN5bTogJyZvcjsnIH0sXG4gICAgbEFycm93OiB7IHN5bTogJyZsYXJyOycgfSxcbiAgICByQXJyb3c6IHsgc3ltOiAnJnJhcnI7JyB9LFxuICAgIHVBcnJvdzogeyBzeW06ICcmdWFycjsnIH0sXG4gICAgZEFycm93OiB7IHN5bTogJyZkYXJyOycgfSxcbiAgICBlbXB0eTogeyBzeW06ICcmIzk2NzU7JyB9LFxuICAgIGVtcHR5U2xhc2g6IHsgc3ltOiAnJmVtcHR5OycgfSxcbiAgICBvU2xhc2g6IHsgc3ltOiAnJm9zbGFzaDsnIH0sXG4gICAgbzogeyBzeW06ICcmb21pY3JvbjsnIH0sXG4gICAgbGluZXMzOiB7IHN5bTogJyZlcXVpdjsnIH0sXG4gICAgc3VtOiB7IHN5bTogJyZTaWdtYTsnIH0sXG4gICAgZWxsaXBzaXM6IHsgc3ltOiAnJmhlbGxpcDsnIH0sXG4gICAgdmVydEVsbGlwczogeyBzeW06ICcmIzgyODU7JyB9LFxuICAgIGJ1bGxldDogeyBzeW06ICcmYnVsbDsnIH0sXG4gICAgZW50ZXI6IHsgc3ltOiAnJmNyYXJyOycgfSxcbiAgICBhZ2FpbjogeyBzeW06ICcmIzg2MzU7JyB9LFxuICAgIHN0YXJ0OiB7IHN5bTogJyYjODY4OTsnIH0sXG4gICAgZW5kOiB7IHN5bTogJyYjODY5MDsnIH1cbn07XG5jbGFzcyBUb29sYmFyQnV0dG9uIHtcbiAgICBzdGF0aWMgZ2V0U3ltYm9sKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuQnV0dG9uU3ltYm9sc1tuYW1lXSA/IGV4cG9ydHMuQnV0dG9uU3ltYm9sc1tuYW1lXS5zeW0gOiAnJztcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZS5hdHRycy5zeW1ib2xzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGhzbGF5b3V0XzEubSgnLmhzLWNvcm5lci1idXR0b24nLCB7IG9uY2xpY2s6IG5vZGUuYXR0cnMub25jbGljayB9LCBoc2xheW91dF8xLm0udHJ1c3Qobm9kZS5hdHRycy5zeW1ib2xzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKCcuaHMtY29ybmVyLWJ1dHRvbicsIHsgb25jbGljazogbm9kZS5hdHRycy5vbmNsaWNrIH0sIG5vZGUuYXR0cnMuc3ltYm9scy5tYXAoKHN5bSkgPT4gaHNsYXlvdXRfMS5tLnRydXN0KHN5bSkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuVG9vbGJhckJ1dHRvbiA9IFRvb2xiYXJCdXR0b247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lWRzl2YkdKaGNrSjFkSFJ2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OVViMjlzWW1GeVFuVjBkRzl1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJNa1ZCTEhWRFFVRnZRenRCUVVWMlFpeFJRVUZCTEdGQlFXRXNSMEZCUnp0SlFVTjZRaXhMUVVGTExFVkJRVThzUlVGQlJTeEhRVUZITEVWQlFVVXNVMEZCVXl4RlFVRkZPMGxCUXpsQ0xFdEJRVXNzUlVGQlR5eEZRVUZGTEVkQlFVY3NSVUZCUlN4VFFVRlRMRVZCUVVNN1NVRkROMElzU1VGQlNTeEZRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJRenRKUVVOMlFpeExRVUZMTEVWQlFVOHNSVUZCUlN4SFFVRkhMRVZCUVVVc1UwRkJVeXhGUVVGRE8wbEJRemRDTEUxQlFVMHNSVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hUUVVGVExFVkJRVU03U1VGRE4wSXNTVUZCU1N4RlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxGVkJRVlVzUlVGQlF6dEpRVU01UWl4TFFVRkxMRVZCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzVlVGQlZTeEZRVUZETzBsQlF6bENMRTlCUVU4c1JVRkJTeXhGUVVGRkxFZEJRVWNzUlVGQlJTeFRRVUZUTEVWQlFVTTdTVUZETjBJc1VVRkJVU3hGUVVGSkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEZOQlFWTXNSVUZCUXp0SlFVTTNRaXhMUVVGTExFVkJRVThzUlVGQlJTeEhRVUZITEVWQlFVVXNVMEZCVXl4RlFVRkRPMGxCUXpkQ0xFOUJRVThzUlVGQlN5eEZRVUZGTEVkQlFVY3NSVUZCUlN4VFFVRlRMRVZCUVVNN1NVRkROMElzUlVGQlJTeEZRVUZWTEVWQlFVVXNSMEZCUnl4RlFVRkZMRTlCUVU4c1JVRkJRenRKUVVNelFpeEpRVUZKTEVWQlFWRXNSVUZCUlN4SFFVRkhMRVZCUVVVc1RVRkJUU3hGUVVGRE8wbEJRekZDTEUxQlFVMHNSVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hSUVVGUkxFVkJRVU03U1VGRE5VSXNUVUZCVFN4RlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxGRkJRVkVzUlVGQlF6dEpRVU0xUWl4TlFVRk5MRVZCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzVVVGQlVTeEZRVUZETzBsQlF6VkNMRTFCUVUwc1JVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeFJRVUZSTEVWQlFVTTdTVUZETlVJc1MwRkJTeXhGUVVGUExFVkJRVVVzUjBGQlJ5eEZRVUZGTEZOQlFWTXNSVUZCUXp0SlFVTTNRaXhWUVVGVkxFVkJRVVVzUlVGQlJTeEhRVUZITEVWQlFVVXNVMEZCVXl4RlFVRkRPMGxCUXpkQ0xFMUJRVTBzUlVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4VlFVRlZMRVZCUVVNN1NVRkRPVUlzUTBGQlF5eEZRVUZYTEVWQlFVVXNSMEZCUnl4RlFVRkZMRmRCUVZjc1JVRkJRenRKUVVNdlFpeE5RVUZOTEVWQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1UwRkJVeXhGUVVGRE8wbEJRemRDTEVkQlFVY3NSVUZCVXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hUUVVGVExFVkJRVU03U1VGRE4wSXNVVUZCVVN4RlFVRkpMRVZCUVVVc1IwRkJSeXhGUVVGRkxGVkJRVlVzUlVGQlF6dEpRVU01UWl4VlFVRlZMRVZCUVVVc1JVRkJSU3hIUVVGSExFVkJRVVVzVTBGQlV5eEZRVUZETzBsQlF6ZENMRTFCUVUwc1JVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeFJRVUZSTEVWQlFVTTdTVUZETlVJc1MwRkJTeXhGUVVGUExFVkJRVVVzUjBGQlJ5eEZRVUZGTEZOQlFWTXNSVUZCUXp0SlFVTTNRaXhMUVVGTExFVkJRVThzUlVGQlJTeEhRVUZITEVWQlFVVXNVMEZCVXl4RlFVRkRPMGxCUXpkQ0xFdEJRVXNzUlVGQlR5eEZRVUZGTEVkQlFVY3NSVUZCUlN4VFFVRlRMRVZCUVVNN1NVRkROMElzUjBGQlJ5eEZRVUZUTEVWQlFVVXNSMEZCUnl4RlFVRkZMRk5CUVZNc1JVRkJRenREUVVOb1F5eERRVUZETzBGQlJVWXNUVUZCWVN4aFFVRmhPMGxCUlhSQ0xFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCVnp0UlFVTjRRaXhQUVVGUExIRkNRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExIRkNRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZETjBRc1EwRkJRenRKUVVORUxFbEJRVWtzUTBGQlF5eEpRVUZWTzFGQlExZ3NTVUZCU1N4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eExRVUZMTEZGQlFWRXNSVUZCUlR0WlFVTjRReXhQUVVGUExGbEJRVU1zUTBGQlF5eHRRa0ZCYlVJc1JVRkRlRUlzUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGREwwSXNXVUZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVTTVRaXhEUVVGRE8xTkJRMHc3WVVGQlRUdFpRVU5JTEU5QlFVOHNXVUZCUXl4RFFVRkRMRzFDUVVGdFFpeEZRVU53UWl4RlFVRkZMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVTXZRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZCTEZsQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGRE1VUXNRMEZCUXp0VFFVTk1PMGxCUTB3c1EwRkJRenREUVVOS08wRkJiRUpFTEhORFFXdENReUo5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dF8xID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuZnVuY3Rpb24gZW1waGFzaXplKGl0ZW0sIG1hdGNoKSB7XG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKG1hdGNoLCAnZ2knKTtcbiAgICBjb25zdCBkZWNvcmF0aW9ucyA9IGl0ZW1cbiAgICAgICAgLnJlcGxhY2UocmUsIChtKSA9PiBgPGI+JHttfTwvYj5gKVxuICAgICAgICAuc3BsaXQoJzwnKVxuICAgICAgICAubWFwKChzKSA9PiB7XG4gICAgICAgIGlmIChzLnN0YXJ0c1dpdGgoJy9iPicpKSB7XG4gICAgICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKCdzcGFuJywgeyBuYW1lOiBpdGVtIH0sIHMuc2xpY2UoMykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHMuc3RhcnRzV2l0aCgnYj4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGhzbGF5b3V0XzEubSgnYicsIHsgbmFtZTogaXRlbSB9LCBzLnNsaWNlKDIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoc2xheW91dF8xLm0oJ3NwYW4nLCB7IG5hbWU6IGl0ZW0gfSwgcyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaHNsYXlvdXRfMS5tKCdzcGFuJywgZGVjb3JhdGlvbnMpO1xufVxuY2xhc3MgR2V0TGlzdCB7XG4gICAgY29uc3RydWN0b3IobGlzdCwgbWFwKSB7XG4gICAgICAgIHRoaXMubGlzdCA9IFtdO1xuICAgICAgICBpZiAodHlwZW9mIGxpc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBoc2xheW91dF8xLm0ucmVxdWVzdCh7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBsaXN0IH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHRoaXMuY2FwdHVyZUxpc3QoZGF0YSwgbWFwKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhcHR1cmVMaXN0KGxpc3QsIG1hcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FwdHVyZUxpc3QobGlzdCwgbWFwKSB7XG4gICAgICAgIHRoaXMubGlzdCA9IG1hcCA/IG1hcChsaXN0KSA6IGxpc3Q7XG4gICAgfVxufVxuY2xhc3MgVHlwZUFoZWFkIHtcbiAgICBvbmluaXQobm9kZSkge1xuICAgICAgICBub2RlLnN0YXRlLmlucHV0Tm9kZSA9ICcnO1xuICAgICAgICBub2RlLnN0YXRlLmhpZGVQb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgbm9kZS5zdGF0ZS52YWx1ZSA9ICcnO1xuICAgICAgICBub2RlLnN0YXRlLnR5cGVBaGVhZExpc3QgPSBbXTtcbiAgICAgICAgbm9kZS5zdGF0ZS5vbnN1Ym1pdCA9IG5vZGUuYXR0cnMub25zdWJtaXQ7XG4gICAgICAgIG5vZGUuc3RhdGUubGlzdCA9IG5vZGUuYXR0cnMubGlzdDtcbiAgICB9XG4gICAgdmlldyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGdsID0gbmV3IEdldExpc3Qobm9kZS5zdGF0ZS5saXN0KTtcbiAgICAgICAgY29uc3Qgbm9zdWJtaXQgPSAoKSA9PiBjb25zb2xlLmxvZygnbm8gc3VibWl0IGZ1bmN0aW9uIGRlZmluZWQnKTtcbiAgICAgICAgY29uc3Qgc3VibWl0ID0gKHYpID0+IHtcbiAgICAgICAgICAgIG5vZGUuc3RhdGUuaW5wdXROb2RlLnNldFNlbGVjdGlvblJhbmdlKDAsIG5vZGUuc3RhdGUuaW5wdXROb2RlLnZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICBub2RlLnN0YXRlLmhpZGVQb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlLm9uc3VibWl0ID8gbm9kZS5zdGF0ZS5vbnN1Ym1pdCh2KSA6IG5vc3VibWl0KCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlbGVjdCA9IChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgIG5vZGUuc3RhdGUuaW5wdXROb2RlLnZhbHVlID0gZS50YXJnZXQuYXR0cmlidXRlcy5uYW1lLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1Ym1pdChlLnRhcmdldC5hdHRyaWJ1dGVzLm5hbWUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbnB1dCA9IChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZS5zdGF0ZS5pbnB1dE5vZGUgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gbm9kZS5zdGF0ZS52YWx1ZSA9IG4udmFsdWU7XG4gICAgICAgICAgICBjb25zdCB3aXRoaW5JbnB1dCA9IG5ldyBSZWdFeHAoYCR7aW5wdXR9YCwgJ2dpJyk7XG4gICAgICAgICAgICBjb25zdCBiZWdpbm5pbmdPZklucHV0ID0gbmV3IFJlZ0V4cChgXiR7aW5wdXR9YCwgJ2dpJyk7XG4gICAgICAgICAgICBub2RlLnN0YXRlLnR5cGVBaGVhZExpc3QgPSBnbC5saXN0LmZpbHRlcigobCkgPT4gbC5tYXRjaCh3aXRoaW5JbnB1dCkpO1xuICAgICAgICAgICAgbi52YWx1ZSA9IG5vZGUuc3RhdGUudHlwZUFoZWFkTGlzdC5maWx0ZXIoKGwpID0+IGwubWF0Y2goYmVnaW5uaW5nT2ZJbnB1dCkpWzBdIHx8IGlucHV0O1xuICAgICAgICAgICAgbm9kZS5zdGF0ZS5oaWRlUG9wZG93biA9IG4udmFsdWUubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgbGV0IHBvcyA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIG4uc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBuLnZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGtleVByZXNzZWQgPSAoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbiA9IG5vZGUuc3RhdGUuaW5wdXROb2RlID0gZS50YXJnZXQ7XG4gICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgc3VibWl0KG4udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZS5jb2RlID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gbi5maXJzdENoaWxkLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbi52YWx1ZSA9IGlucHV0LnNsaWNlKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW5wdXROb2RlID0ge1xuICAgICAgICAgICAgY29udGVudGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IG5vZGUuYXR0cnMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IG5vZGUuYXR0cnMuYXV0b2ZvY3VzIHx8IHRydWUsXG4gICAgICAgICAgICBvbmtleWRvd246IGtleVByZXNzZWQsXG4gICAgICAgICAgICBvbmlucHV0OiBpbnB1dFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaHNsYXlvdXRfMS5tKCcuaHMtZm9ybScsIFtcbiAgICAgICAgICAgIGhzbGF5b3V0XzEubShgaW5wdXQuaHMtdHlwZWFoZWFkLWlucHV0JHtub2RlLnN0YXRlLnZhbHVlID8gJy5ocy10eXBlYWhlYWQtdmFsdWUnIDogJy5ocy10eXBlYWhlYWQtcGxhY2Vob2xkZXInfWAsIGlucHV0Tm9kZSwgaHNsYXlvdXRfMS5tLnRydXN0KG5vZGUuc3RhdGUudmFsdWUgPyBub2RlLnN0YXRlLnZhbHVlIDogbm9kZS5hdHRycy5wbGFjZWhvbGRlcikpLFxuICAgICAgICAgICAgbm9kZS5zdGF0ZS5oaWRlUG9wZG93biA/IHVuZGVmaW5lZCA6XG4gICAgICAgICAgICAgICAgaHNsYXlvdXRfMS5tKCcuaHMtdHlwZWFoZWFkLWxpc3QnLCBub2RlLnN0YXRlLnR5cGVBaGVhZExpc3QubWFwKChsKSA9PiBoc2xheW91dF8xLm0oJycsIHsgb25jbGljazogc2VsZWN0IH0sIGVtcGhhc2l6ZShsLCBub2RlLnN0YXRlLnZhbHVlKSkpKVxuICAgICAgICBdKTtcbiAgICB9XG59XG5leHBvcnRzLlR5cGVBaGVhZCA9IFR5cGVBaGVhZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVZIbHdaVUZvWldGa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dmMzSmpMMVI1Y0dWQmFHVmhaQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFUQkRRU3gxUTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhUUVVGVExFTkJRVU1zU1VGQlZ5eEZRVUZGTEV0QlFWazdTVUZEZUVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMjVETEUxQlFVMHNWMEZCVnl4SFFVRkhMRWxCUVVrN1UwRkRia0lzVDBGQlR5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXp0VFFVTjRReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETzFOQlExWXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFVkJRVVU3VVVGRFpDeEpRVUZKTEVOQlFVTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVU3V1VGRGNrSXNUMEZCVHl4WlFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVU1zU1VGQlNTeEZRVUZETEVsQlFVa3NSVUZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTTNRenRoUVVGTkxFbEJRVWtzUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVNelFpeFBRVUZQTEZsQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJReXhKUVVGSkxFVkJRVU1zU1VGQlNTeEZRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlF6RkRPMkZCUVUwN1dVRkRTQ3hQUVVGUExGbEJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUXl4SlFVRkpMRVZCUVVNc1NVRkJTU3hGUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEY0VNN1NVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5RTEU5QlFVOHNXVUZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dEJRVU5zUXl4RFFVRkRPMEZCUlVRc1RVRkJUU3hQUVVGUE8wbEJTMVFzV1VGQldTeEpRVUZ2UWl4RlFVRkZMRWRCUVRKQ08xRkJTblJFTEZOQlFVa3NSMEZCV1N4RlFVRkZMRU5CUVVNN1VVRkxkRUlzU1VGQlNTeFBRVUZQTEVsQlFVa3NTMEZCU3l4UlFVRlJMRVZCUVVVN1dVRkRNVUlzV1VGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hMUVVGTExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4RFFVRkRPMmxDUVVOMFF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRlZMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGRFUTdZVUZCVFR0WlFVTklMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUXk5Q08wbEJRMHdzUTBGQlF6dEpRVlpQTEZkQlFWY3NRMEZCUXl4SlFVRlZMRVZCUVVVc1IwRkJkVUk3VVVGRGJrUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVUVzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzBsQlEzUkRMRU5CUVVNN1EwRlRTanRCUVVWRUxFMUJRV0VzVTBGQlV6dEpRVU5zUWl4TlFVRk5MRU5CUVVNc1NVRkJWVHRSUVVOaUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNeFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRE9VSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEzUkNMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWVVGQllTeEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTTVRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU14UXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVOMFF5eERRVUZETzBsQlEwUXNTVUZCU1N4RFFVRkRMRWxCUVZVN1VVRkRXQ3hOUVVGTkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEzaERMRTFCUVUwc1VVRkJVU3hIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc05FSkJRVFJDTEVOQlFVTXNRMEZCUXp0UlFVTnFSU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFWRXNSVUZCUlN4RlFVRkZPMWxCUTNoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkROMFVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRemxDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVUVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRSUVVOd1JTeERRVUZETEVOQlFVTTdVVUZEUml4TlFVRk5MRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVXNzUlVGQlJTeEZRVUZGTzFsQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVN1owSkJReTlDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzJkQ1FVTTFSQ3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzJGQlF6RkRPMUZCUVVFc1EwRkJReXhEUVVGRE8xRkJRMGdzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkxMRVZCUVVVc1JVRkJSVHRaUVVOd1FpeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUXpGRExFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdXVUZEZWtNc1RVRkJUU3hYUVVGWExFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU5xUkN4TlFVRk5MR2RDUVVGblFpeEhRVUZITEVsQlFVa3NUVUZCVFN4RFFVRkRMRWxCUVVrc1MwRkJTeXhGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdXVUZEZGtRc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eGhRVUZoTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTTVSU3hEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1lVRkJZU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRPMWxCUXk5R0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeExRVUZITEVOQlFVTXNRMEZCUXp0WlFVTTFReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUTNaQ0xFTkJRVU1zUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNM1F5eERRVUZETEVOQlFVTTdVVUZEUml4TlFVRk5MRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVXNzUlVGQlJTeEZRVUZGTzFsQlEzcENMRTFCUVUwc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03V1VGRE1VTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hMUVVGTExFOUJRVThzUlVGQlJUdG5Ra0ZEY0VJc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0aFFVTnVRanRwUWtGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRXRCUVVzc1YwRkJWeXhGUVVGRk8yZENRVU12UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXp0blFrRkRhRU1zU1VGQlNTeExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSVHR2UWtGRGJFSXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVNMVFqdGhRVU5LTzFGQlEwd3NRMEZCUXl4RFFVRkRPMUZCUTBZc1RVRkJUU3hUUVVGVExFZEJRVWM3V1VGRFpDeGxRVUZsTEVWQlFVTXNTVUZCU1R0WlFVTndRaXhYUVVGWExFVkJRVXNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhPMWxCUTNSRExGTkJRVk1zUlVGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1NVRkJTU3hKUVVGSk8xbEJRelZETEZOQlFWTXNSVUZCVHl4VlFVRlZPMWxCUXpGQ0xFOUJRVThzUlVGQlV5eExRVUZMTzFOQlEzaENMRU5CUVVNN1VVRkZSaXhQUVVGUExGbEJRVU1zUTBGQlF5eFZRVUZWTEVWQlFVVTdXVUZEYWtJc1dVRkJReXhEUVVGRExESkNRVUV5UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlFTeERRVUZETEVOQlFVRXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF5eERRVUZETERKQ1FVRXlRaXhGUVVGRkxFVkJReTlHTEZOQlFWTXNSVUZEVkN4WlFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkJMRU5CUVVNc1EwRkJRU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZEZEVVN1dVRkRSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUVN4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03WjBKQlF5OUNMRmxCUVVNc1EwRkJReXh2UWtGQmIwSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1JVRkJSU3hEUVVNNVJDeFpRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1QwRkJUeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRka1VzUTBGQlF5eERRVUZETzBsQlExQXNRMEZCUXp0RFFVTktPMEZCTjBSRUxEaENRVFpFUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIE1lbnVfMSA9IHJlcXVpcmUoXCIuL01lbnVcIik7XG5leHBvcnRzLk1lbnUgPSBNZW51XzEuTWVudTtcbnZhciBCdXR0b25fMSA9IHJlcXVpcmUoXCIuL0J1dHRvblwiKTtcbmV4cG9ydHMuQnV0dG9uID0gQnV0dG9uXzEuQnV0dG9uO1xudmFyIExhYmVsXzEgPSByZXF1aXJlKFwiLi9MYWJlbFwiKTtcbmV4cG9ydHMuTGFiZWwgPSBMYWJlbF8xLkxhYmVsO1xudmFyIFNsaWRlcl8xID0gcmVxdWlyZShcIi4vU2xpZGVyXCIpO1xuZXhwb3J0cy5TbGlkZXIgPSBTbGlkZXJfMS5TbGlkZXI7XG52YXIgUmFkaW9CdXR0b25fMSA9IHJlcXVpcmUoXCIuL1JhZGlvQnV0dG9uXCIpO1xuZXhwb3J0cy5SYWRpb0J1dHRvbiA9IFJhZGlvQnV0dG9uXzEuUmFkaW9CdXR0b247XG52YXIgT3B0aW9uc0J1dHRvbl8xID0gcmVxdWlyZShcIi4vT3B0aW9uc0J1dHRvblwiKTtcbmV4cG9ydHMuT3B0aW9uc0J1dHRvbiA9IE9wdGlvbnNCdXR0b25fMS5PcHRpb25zQnV0dG9uO1xudmFyIFRvZ2dsZUJ1dHRvbl8xID0gcmVxdWlyZShcIi4vVG9nZ2xlQnV0dG9uXCIpO1xuZXhwb3J0cy5Ub2dnbGVCdXR0b24gPSBUb2dnbGVCdXR0b25fMS5Ub2dnbGVCdXR0b247XG52YXIgVG9vbGJhckJ1dHRvbl8xID0gcmVxdWlyZShcIi4vVG9vbGJhckJ1dHRvblwiKTtcbmV4cG9ydHMuVG9vbGJhckJ1dHRvbiA9IFRvb2xiYXJCdXR0b25fMS5Ub29sYmFyQnV0dG9uO1xudmFyIFRvb2xiYXJCdXR0b25fMiA9IHJlcXVpcmUoXCIuL1Rvb2xiYXJCdXR0b25cIik7XG5leHBvcnRzLkJ1dHRvblN5bWJvbHMgPSBUb29sYmFyQnV0dG9uXzIuQnV0dG9uU3ltYm9scztcbnZhciBDb2xsYXBzaWJsZV8xID0gcmVxdWlyZShcIi4vQ29sbGFwc2libGVcIik7XG5leHBvcnRzLkNvbGxhcHNpYmxlID0gQ29sbGFwc2libGVfMS5Db2xsYXBzaWJsZTtcbnZhciBNb2RhbF8xID0gcmVxdWlyZShcIi4vTW9kYWxcIik7XG5leHBvcnRzLk1vZGFsID0gTW9kYWxfMS5Nb2RhbDtcbnZhciBUeXBlQWhlYWRfMSA9IHJlcXVpcmUoXCIuL1R5cGVBaGVhZFwiKTtcbmV4cG9ydHMuVHlwZUFoZWFkID0gVHlwZUFoZWFkXzEuVHlwZUFoZWFkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGUFFTd3JRa0ZCYzBNN1FVRkJOMElzYzBKQlFVRXNTVUZCU1N4RFFVRkJPMEZCUldJc2JVTkJRWGRETzBGQlFTOUNMREJDUVVGQkxFMUJRVTBzUTBGQlFUdEJRVU5tTEdsRFFVRjFRenRCUVVFNVFpeDNRa0ZCUVN4TFFVRkxMRU5CUVVFN1FVRkRaQ3h0UTBGQmQwTTdRVUZCTDBJc01FSkJRVUVzVFVGQlRTeERRVUZCTzBGQlEyWXNOa05CUVRaRE8wRkJRWEJETEc5RFFVRkJMRmRCUVZjc1EwRkJRVHRCUVVOd1FpeHBSRUZCSzBNN1FVRkJkRU1zZDBOQlFVRXNZVUZCWVN4RFFVRkJPMEZCUTNSQ0xDdERRVUU0UXp0QlFVRnlReXh6UTBGQlFTeFpRVUZaTEVOQlFVRTdRVUZEY2tJc2FVUkJRU3RETzBGQlFYUkRMSGREUVVGQkxHRkJRV0VzUTBGQlFUdEJRVU4wUWl4cFJFRkJLME03UVVGQmRFTXNkME5CUVVFc1lVRkJZU3hEUVVGQk8wRkJRM1JDTERaRFFVRTJRenRCUVVGd1F5eHZRMEZCUVN4WFFVRlhMRU5CUVVFN1FVRkRjRUlzYVVOQlFYVkRPMEZCUVRsQ0xIZENRVUZCTEV0QlFVc3NRMEZCUVR0QlFVTmtMSGxEUVVFeVF6dEJRVUZzUXl4blEwRkJRU3hUUVVGVExFTkJRVUVpZlE9PSIsIjsoZnVuY3Rpb24oKSB7XG5cInVzZSBzdHJpY3RcIlxuZnVuY3Rpb24gVm5vZGUodGFnLCBrZXksIGF0dHJzMCwgY2hpbGRyZW4sIHRleHQsIGRvbSkge1xuXHRyZXR1cm4ge3RhZzogdGFnLCBrZXk6IGtleSwgYXR0cnM6IGF0dHJzMCwgY2hpbGRyZW46IGNoaWxkcmVuLCB0ZXh0OiB0ZXh0LCBkb206IGRvbSwgZG9tU2l6ZTogdW5kZWZpbmVkLCBzdGF0ZTogdW5kZWZpbmVkLCBfc3RhdGU6IHVuZGVmaW5lZCwgZXZlbnRzOiB1bmRlZmluZWQsIGluc3RhbmNlOiB1bmRlZmluZWQsIHNraXA6IGZhbHNlfVxufVxuVm5vZGUubm9ybWFsaXplID0gZnVuY3Rpb24obm9kZSkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgcmV0dXJuIFZub2RlKFwiW1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgVm5vZGUubm9ybWFsaXplQ2hpbGRyZW4obm9kZSksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuXHRpZiAobm9kZSAhPSBudWxsICYmIHR5cGVvZiBub2RlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gVm5vZGUoXCIjXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBub2RlID09PSBmYWxzZSA/IFwiXCIgOiBub2RlLCB1bmRlZmluZWQsIHVuZGVmaW5lZClcblx0cmV0dXJuIG5vZGVcbn1cblZub2RlLm5vcm1hbGl6ZUNoaWxkcmVuID0gZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdGNoaWxkcmVuW2ldID0gVm5vZGUubm9ybWFsaXplKGNoaWxkcmVuW2ldKVxuXHR9XG5cdHJldHVybiBjaGlsZHJlblxufVxudmFyIHNlbGVjdG9yUGFyc2VyID0gLyg/OihefCN8XFwuKShbXiNcXC5cXFtcXF1dKykpfChcXFsoLis/KSg/Olxccyo9XFxzKihcInwnfCkoKD86XFxcXFtcIidcXF1dfC4pKj8pXFw1KT9cXF0pL2dcbnZhciBzZWxlY3RvckNhY2hlID0ge31cbnZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eVxuZnVuY3Rpb24gaXNFbXB0eShvYmplY3QpIHtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgaWYgKGhhc093bi5jYWxsKG9iamVjdCwga2V5KSkgcmV0dXJuIGZhbHNlXG5cdHJldHVybiB0cnVlXG59XG5mdW5jdGlvbiBjb21waWxlU2VsZWN0b3Ioc2VsZWN0b3IpIHtcblx0dmFyIG1hdGNoLCB0YWcgPSBcImRpdlwiLCBjbGFzc2VzID0gW10sIGF0dHJzID0ge31cblx0d2hpbGUgKG1hdGNoID0gc2VsZWN0b3JQYXJzZXIuZXhlYyhzZWxlY3RvcikpIHtcblx0XHR2YXIgdHlwZSA9IG1hdGNoWzFdLCB2YWx1ZSA9IG1hdGNoWzJdXG5cdFx0aWYgKHR5cGUgPT09IFwiXCIgJiYgdmFsdWUgIT09IFwiXCIpIHRhZyA9IHZhbHVlXG5cdFx0ZWxzZSBpZiAodHlwZSA9PT0gXCIjXCIpIGF0dHJzLmlkID0gdmFsdWVcblx0XHRlbHNlIGlmICh0eXBlID09PSBcIi5cIikgY2xhc3Nlcy5wdXNoKHZhbHVlKVxuXHRcdGVsc2UgaWYgKG1hdGNoWzNdWzBdID09PSBcIltcIikge1xuXHRcdFx0dmFyIGF0dHJWYWx1ZSA9IG1hdGNoWzZdXG5cdFx0XHRpZiAoYXR0clZhbHVlKSBhdHRyVmFsdWUgPSBhdHRyVmFsdWUucmVwbGFjZSgvXFxcXChbXCInXSkvZywgXCIkMVwiKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdGlmIChtYXRjaFs0XSA9PT0gXCJjbGFzc1wiKSBjbGFzc2VzLnB1c2goYXR0clZhbHVlKVxuXHRcdFx0ZWxzZSBhdHRyc1ttYXRjaFs0XV0gPSBhdHRyVmFsdWUgPT09IFwiXCIgPyBhdHRyVmFsdWUgOiBhdHRyVmFsdWUgfHwgdHJ1ZVxuXHRcdH1cblx0fVxuXHRpZiAoY2xhc3Nlcy5sZW5ndGggPiAwKSBhdHRycy5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpXG5cdHJldHVybiBzZWxlY3RvckNhY2hlW3NlbGVjdG9yXSA9IHt0YWc6IHRhZywgYXR0cnM6IGF0dHJzfVxufVxuZnVuY3Rpb24gZXhlY1NlbGVjdG9yKHN0YXRlLCBhdHRycywgY2hpbGRyZW4pIHtcblx0dmFyIGhhc0F0dHJzID0gZmFsc2UsIGNoaWxkTGlzdCwgdGV4dFxuXHR2YXIgY2xhc3NOYW1lID0gYXR0cnMuY2xhc3NOYW1lIHx8IGF0dHJzLmNsYXNzXG5cdGlmICghaXNFbXB0eShzdGF0ZS5hdHRycykgJiYgIWlzRW1wdHkoYXR0cnMpKSB7XG5cdFx0dmFyIG5ld0F0dHJzID0ge31cblx0XHRmb3IodmFyIGtleSBpbiBhdHRycykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGF0dHJzLCBrZXkpKSB7XG5cdFx0XHRcdG5ld0F0dHJzW2tleV0gPSBhdHRyc1trZXldXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF0dHJzID0gbmV3QXR0cnNcblx0fVxuXHRmb3IgKHZhciBrZXkgaW4gc3RhdGUuYXR0cnMpIHtcblx0XHRpZiAoaGFzT3duLmNhbGwoc3RhdGUuYXR0cnMsIGtleSkpIHtcblx0XHRcdGF0dHJzW2tleV0gPSBzdGF0ZS5hdHRyc1trZXldXG5cdFx0fVxuXHR9XG5cdGlmIChjbGFzc05hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChhdHRycy5jbGFzcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRhdHRycy5jbGFzcyA9IHVuZGVmaW5lZFxuXHRcdFx0YXR0cnMuY2xhc3NOYW1lID0gY2xhc3NOYW1lXG5cdFx0fVxuXHRcdGlmIChzdGF0ZS5hdHRycy5jbGFzc05hbWUgIT0gbnVsbCkge1xuXHRcdFx0YXR0cnMuY2xhc3NOYW1lID0gc3RhdGUuYXR0cnMuY2xhc3NOYW1lICsgXCIgXCIgKyBjbGFzc05hbWVcblx0XHR9XG5cdH1cblx0Zm9yICh2YXIga2V5IGluIGF0dHJzKSB7XG5cdFx0aWYgKGhhc093bi5jYWxsKGF0dHJzLCBrZXkpICYmIGtleSAhPT0gXCJrZXlcIikge1xuXHRcdFx0aGFzQXR0cnMgPSB0cnVlXG5cdFx0XHRicmVha1xuXHRcdH1cblx0fVxuXHRpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGNoaWxkcmVuWzBdICE9IG51bGwgJiYgY2hpbGRyZW5bMF0udGFnID09PSBcIiNcIikge1xuXHRcdHRleHQgPSBjaGlsZHJlblswXS5jaGlsZHJlblxuXHR9IGVsc2Uge1xuXHRcdGNoaWxkTGlzdCA9IGNoaWxkcmVuXG5cdH1cblx0cmV0dXJuIFZub2RlKHN0YXRlLnRhZywgYXR0cnMua2V5LCBoYXNBdHRycyA/IGF0dHJzIDogdW5kZWZpbmVkLCBjaGlsZExpc3QsIHRleHQpXG59XG5mdW5jdGlvbiBoeXBlcnNjcmlwdChzZWxlY3Rvcikge1xuXHQvLyBCZWNhdXNlIHNsb3BweSBtb2RlIHN1Y2tzXG5cdHZhciBhdHRycyA9IGFyZ3VtZW50c1sxXSwgc3RhcnQgPSAyLCBjaGlsZHJlblxuXHRpZiAoc2VsZWN0b3IgPT0gbnVsbCB8fCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHNlbGVjdG9yICE9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHNlbGVjdG9yLnZpZXcgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHRocm93IEVycm9yKFwiVGhlIHNlbGVjdG9yIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgY29tcG9uZW50LlwiKTtcblx0fVxuXHRpZiAodHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dmFyIGNhY2hlZCA9IHNlbGVjdG9yQ2FjaGVbc2VsZWN0b3JdIHx8IGNvbXBpbGVTZWxlY3RvcihzZWxlY3Rvcilcblx0fVxuXHRpZiAoYXR0cnMgPT0gbnVsbCkge1xuXHRcdGF0dHJzID0ge31cblx0fSBlbHNlIGlmICh0eXBlb2YgYXR0cnMgIT09IFwib2JqZWN0XCIgfHwgYXR0cnMudGFnICE9IG51bGwgfHwgQXJyYXkuaXNBcnJheShhdHRycykpIHtcblx0XHRhdHRycyA9IHt9XG5cdFx0c3RhcnQgPSAxXG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IHN0YXJ0ICsgMSkge1xuXHRcdGNoaWxkcmVuID0gYXJndW1lbnRzW3N0YXJ0XVxuXHRcdGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIGNoaWxkcmVuID0gW2NoaWxkcmVuXVxuXHR9IGVsc2Uge1xuXHRcdGNoaWxkcmVuID0gW11cblx0XHR3aGlsZSAoc3RhcnQgPCBhcmd1bWVudHMubGVuZ3RoKSBjaGlsZHJlbi5wdXNoKGFyZ3VtZW50c1tzdGFydCsrXSlcblx0fVxuXHR2YXIgbm9ybWFsaXplZCA9IFZub2RlLm5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKVxuXHRpZiAodHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGV4ZWNTZWxlY3RvcihjYWNoZWQsIGF0dHJzLCBub3JtYWxpemVkKVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBWbm9kZShzZWxlY3RvciwgYXR0cnMua2V5LCBhdHRycywgbm9ybWFsaXplZClcblx0fVxufVxuaHlwZXJzY3JpcHQudHJ1c3QgPSBmdW5jdGlvbihodG1sKSB7XG5cdGlmIChodG1sID09IG51bGwpIGh0bWwgPSBcIlwiXG5cdHJldHVybiBWbm9kZShcIjxcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGh0bWwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxufVxuaHlwZXJzY3JpcHQuZnJhZ21lbnQgPSBmdW5jdGlvbihhdHRyczEsIGNoaWxkcmVuKSB7XG5cdHJldHVybiBWbm9kZShcIltcIiwgYXR0cnMxLmtleSwgYXR0cnMxLCBWbm9kZS5ub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbiksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxufVxudmFyIG0gPSBoeXBlcnNjcmlwdFxuLyoqIEBjb25zdHJ1Y3RvciAqL1xudmFyIFByb21pc2VQb2x5ZmlsbCA9IGZ1bmN0aW9uKGV4ZWN1dG9yKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlUG9seWZpbGwpKSB0aHJvdyBuZXcgRXJyb3IoXCJQcm9taXNlIG11c3QgYmUgY2FsbGVkIHdpdGggYG5ld2BcIilcblx0aWYgKHR5cGVvZiBleGVjdXRvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpXG5cdHZhciBzZWxmID0gdGhpcywgcmVzb2x2ZXJzID0gW10sIHJlamVjdG9ycyA9IFtdLCByZXNvbHZlQ3VycmVudCA9IGhhbmRsZXIocmVzb2x2ZXJzLCB0cnVlKSwgcmVqZWN0Q3VycmVudCA9IGhhbmRsZXIocmVqZWN0b3JzLCBmYWxzZSlcblx0dmFyIGluc3RhbmNlID0gc2VsZi5faW5zdGFuY2UgPSB7cmVzb2x2ZXJzOiByZXNvbHZlcnMsIHJlamVjdG9yczogcmVqZWN0b3JzfVxuXHR2YXIgY2FsbEFzeW5jID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiID8gc2V0SW1tZWRpYXRlIDogc2V0VGltZW91dFxuXHRmdW5jdGlvbiBoYW5kbGVyKGxpc3QsIHNob3VsZEFic29yYikge1xuXHRcdHJldHVybiBmdW5jdGlvbiBleGVjdXRlKHZhbHVlKSB7XG5cdFx0XHR2YXIgdGhlblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKHNob3VsZEFic29yYiAmJiB2YWx1ZSAhPSBudWxsICYmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpICYmIHR5cGVvZiAodGhlbiA9IHZhbHVlLnRoZW4pID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IHNlbGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIHcvIGl0c2VsZlwiKVxuXHRcdFx0XHRcdGV4ZWN1dGVPbmNlKHRoZW4uYmluZCh2YWx1ZSkpXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Y2FsbEFzeW5jKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCFzaG91bGRBYnNvcmIgJiYgbGlzdC5sZW5ndGggPT09IDApIGNvbnNvbGUuZXJyb3IoXCJQb3NzaWJsZSB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb246XCIsIHZhbHVlKVxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSBsaXN0W2ldKHZhbHVlKVxuXHRcdFx0XHRcdFx0cmVzb2x2ZXJzLmxlbmd0aCA9IDAsIHJlamVjdG9ycy5sZW5ndGggPSAwXG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5zdGF0ZSA9IHNob3VsZEFic29yYlxuXHRcdFx0XHRcdFx0aW5zdGFuY2UucmV0cnkgPSBmdW5jdGlvbigpIHtleGVjdXRlKHZhbHVlKX1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3RDdXJyZW50KGUpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIGV4ZWN1dGVPbmNlKHRoZW4pIHtcblx0XHR2YXIgcnVucyA9IDBcblx0XHRmdW5jdGlvbiBydW4oZm4pIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0XHRpZiAocnVucysrID4gMCkgcmV0dXJuXG5cdFx0XHRcdGZuKHZhbHVlKVxuXHRcdFx0fVxuXHRcdH1cblx0XHR2YXIgb25lcnJvciA9IHJ1bihyZWplY3RDdXJyZW50KVxuXHRcdHRyeSB7dGhlbihydW4ocmVzb2x2ZUN1cnJlbnQpLCBvbmVycm9yKX0gY2F0Y2ggKGUpIHtvbmVycm9yKGUpfVxuXHR9XG5cdGV4ZWN1dGVPbmNlKGV4ZWN1dG9yKVxufVxuUHJvbWlzZVBvbHlmaWxsLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0aW9uKSB7XG5cdHZhciBzZWxmID0gdGhpcywgaW5zdGFuY2UgPSBzZWxmLl9pbnN0YW5jZVxuXHRmdW5jdGlvbiBoYW5kbGUoY2FsbGJhY2ssIGxpc3QsIG5leHQsIHN0YXRlKSB7XG5cdFx0bGlzdC5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIG5leHQodmFsdWUpXG5cdFx0XHRlbHNlIHRyeSB7cmVzb2x2ZU5leHQoY2FsbGJhY2sodmFsdWUpKX0gY2F0Y2ggKGUpIHtpZiAocmVqZWN0TmV4dCkgcmVqZWN0TmV4dChlKX1cblx0XHR9KVxuXHRcdGlmICh0eXBlb2YgaW5zdGFuY2UucmV0cnkgPT09IFwiZnVuY3Rpb25cIiAmJiBzdGF0ZSA9PT0gaW5zdGFuY2Uuc3RhdGUpIGluc3RhbmNlLnJldHJ5KClcblx0fVxuXHR2YXIgcmVzb2x2ZU5leHQsIHJlamVjdE5leHRcblx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZVBvbHlmaWxsKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge3Jlc29sdmVOZXh0ID0gcmVzb2x2ZSwgcmVqZWN0TmV4dCA9IHJlamVjdH0pXG5cdGhhbmRsZShvbkZ1bGZpbGxlZCwgaW5zdGFuY2UucmVzb2x2ZXJzLCByZXNvbHZlTmV4dCwgdHJ1ZSksIGhhbmRsZShvblJlamVjdGlvbiwgaW5zdGFuY2UucmVqZWN0b3JzLCByZWplY3ROZXh0LCBmYWxzZSlcblx0cmV0dXJuIHByb21pc2Vcbn1cblByb21pc2VQb2x5ZmlsbC5wcm90b3R5cGUuY2F0Y2ggPSBmdW5jdGlvbihvblJlamVjdGlvbikge1xuXHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0aW9uKVxufVxuUHJvbWlzZVBvbHlmaWxsLnJlc29sdmUgPSBmdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlUG9seWZpbGwpIHJldHVybiB2YWx1ZVxuXHRyZXR1cm4gbmV3IFByb21pc2VQb2x5ZmlsbChmdW5jdGlvbihyZXNvbHZlKSB7cmVzb2x2ZSh2YWx1ZSl9KVxufVxuUHJvbWlzZVBvbHlmaWxsLnJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZVBvbHlmaWxsKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge3JlamVjdCh2YWx1ZSl9KVxufVxuUHJvbWlzZVBvbHlmaWxsLmFsbCA9IGZ1bmN0aW9uKGxpc3QpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlUG9seWZpbGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0dmFyIHRvdGFsID0gbGlzdC5sZW5ndGgsIGNvdW50ID0gMCwgdmFsdWVzID0gW11cblx0XHRpZiAobGlzdC5sZW5ndGggPT09IDApIHJlc29sdmUoW10pXG5cdFx0ZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdChmdW5jdGlvbihpKSB7XG5cdFx0XHRcdGZ1bmN0aW9uIGNvbnN1bWUodmFsdWUpIHtcblx0XHRcdFx0XHRjb3VudCsrXG5cdFx0XHRcdFx0dmFsdWVzW2ldID0gdmFsdWVcblx0XHRcdFx0XHRpZiAoY291bnQgPT09IHRvdGFsKSByZXNvbHZlKHZhbHVlcylcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobGlzdFtpXSAhPSBudWxsICYmICh0eXBlb2YgbGlzdFtpXSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgbGlzdFtpXSA9PT0gXCJmdW5jdGlvblwiKSAmJiB0eXBlb2YgbGlzdFtpXS50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRsaXN0W2ldLnRoZW4oY29uc3VtZSwgcmVqZWN0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgY29uc3VtZShsaXN0W2ldKVxuXHRcdFx0fSkoaSlcblx0XHR9XG5cdH0pXG59XG5Qcm9taXNlUG9seWZpbGwucmFjZSA9IGZ1bmN0aW9uKGxpc3QpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlUG9seWZpbGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsaXN0W2ldLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KVxuXHRcdH1cblx0fSlcbn1cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdGlmICh0eXBlb2Ygd2luZG93LlByb21pc2UgPT09IFwidW5kZWZpbmVkXCIpIHdpbmRvdy5Qcm9taXNlID0gUHJvbWlzZVBvbHlmaWxsXG5cdHZhciBQcm9taXNlUG9seWZpbGwgPSB3aW5kb3cuUHJvbWlzZVxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsLlByb21pc2UgPT09IFwidW5kZWZpbmVkXCIpIGdsb2JhbC5Qcm9taXNlID0gUHJvbWlzZVBvbHlmaWxsXG5cdHZhciBQcm9taXNlUG9seWZpbGwgPSBnbG9iYWwuUHJvbWlzZVxufSBlbHNlIHtcbn1cbnZhciBidWlsZFF1ZXJ5U3RyaW5nID0gZnVuY3Rpb24ob2JqZWN0KSB7XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIFwiXCJcblx0dmFyIGFyZ3MgPSBbXVxuXHRmb3IgKHZhciBrZXkwIGluIG9iamVjdCkge1xuXHRcdGRlc3RydWN0dXJlKGtleTAsIG9iamVjdFtrZXkwXSlcblx0fVxuXHRyZXR1cm4gYXJncy5qb2luKFwiJlwiKVxuXHRmdW5jdGlvbiBkZXN0cnVjdHVyZShrZXkwLCB2YWx1ZSkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRkZXN0cnVjdHVyZShrZXkwICsgXCJbXCIgKyBpICsgXCJdXCIsIHZhbHVlW2ldKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgT2JqZWN0XVwiKSB7XG5cdFx0XHRmb3IgKHZhciBpIGluIHZhbHVlKSB7XG5cdFx0XHRcdGRlc3RydWN0dXJlKGtleTAgKyBcIltcIiArIGkgKyBcIl1cIiwgdmFsdWVbaV0pXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2UgYXJncy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkwKSArICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBcIlwiID8gXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpIDogXCJcIikpXG5cdH1cbn1cbnZhciBGSUxFX1BST1RPQ09MX1JFR0VYID0gbmV3IFJlZ0V4cChcIl5maWxlOi8vXCIsIFwiaVwiKVxudmFyIF84ID0gZnVuY3Rpb24oJHdpbmRvdywgUHJvbWlzZSkge1xuXHR2YXIgY2FsbGJhY2tDb3VudCA9IDBcblx0dmFyIG9uY29tcGxldGlvblxuXHRmdW5jdGlvbiBzZXRDb21wbGV0aW9uQ2FsbGJhY2soY2FsbGJhY2spIHtvbmNvbXBsZXRpb24gPSBjYWxsYmFja31cblx0ZnVuY3Rpb24gZmluYWxpemVyKCkge1xuXHRcdHZhciBjb3VudCA9IDBcblx0XHRmdW5jdGlvbiBjb21wbGV0ZSgpIHtpZiAoLS1jb3VudCA9PT0gMCAmJiB0eXBlb2Ygb25jb21wbGV0aW9uID09PSBcImZ1bmN0aW9uXCIpIG9uY29tcGxldGlvbigpfVxuXHRcdHJldHVybiBmdW5jdGlvbiBmaW5hbGl6ZShwcm9taXNlMCkge1xuXHRcdFx0dmFyIHRoZW4wID0gcHJvbWlzZTAudGhlblxuXHRcdFx0cHJvbWlzZTAudGhlbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb3VudCsrXG5cdFx0XHRcdHZhciBuZXh0ID0gdGhlbjAuYXBwbHkocHJvbWlzZTAsIGFyZ3VtZW50cylcblx0XHRcdFx0bmV4dC50aGVuKGNvbXBsZXRlLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0Y29tcGxldGUoKVxuXHRcdFx0XHRcdGlmIChjb3VudCA9PT0gMCkgdGhyb3cgZVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRyZXR1cm4gZmluYWxpemUobmV4dClcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlMFxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiBub3JtYWxpemUoYXJncywgZXh0cmEpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHZhciB1cmwgPSBhcmdzXG5cdFx0XHRhcmdzID0gZXh0cmEgfHwge31cblx0XHRcdGlmIChhcmdzLnVybCA9PSBudWxsKSBhcmdzLnVybCA9IHVybFxuXHRcdH1cblx0XHRyZXR1cm4gYXJnc1xuXHR9XG5cdGZ1bmN0aW9uIHJlcXVlc3QoYXJncywgZXh0cmEpIHtcblx0XHR2YXIgZmluYWxpemUgPSBmaW5hbGl6ZXIoKVxuXHRcdGFyZ3MgPSBub3JtYWxpemUoYXJncywgZXh0cmEpXG5cdFx0dmFyIHByb21pc2UwID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRpZiAoYXJncy5tZXRob2QgPT0gbnVsbCkgYXJncy5tZXRob2QgPSBcIkdFVFwiXG5cdFx0XHRhcmdzLm1ldGhvZCA9IGFyZ3MubWV0aG9kLnRvVXBwZXJDYXNlKClcblx0XHRcdHZhciB1c2VCb2R5ID0gKGFyZ3MubWV0aG9kID09PSBcIkdFVFwiIHx8IGFyZ3MubWV0aG9kID09PSBcIlRSQUNFXCIpID8gZmFsc2UgOiAodHlwZW9mIGFyZ3MudXNlQm9keSA9PT0gXCJib29sZWFuXCIgPyBhcmdzLnVzZUJvZHkgOiB0cnVlKVxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzLnNlcmlhbGl6ZSAhPT0gXCJmdW5jdGlvblwiKSBhcmdzLnNlcmlhbGl6ZSA9IHR5cGVvZiBGb3JtRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcmdzLmRhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSA/IGZ1bmN0aW9uKHZhbHVlKSB7cmV0dXJuIHZhbHVlfSA6IEpTT04uc3RyaW5naWZ5XG5cdFx0XHRpZiAodHlwZW9mIGFyZ3MuZGVzZXJpYWxpemUgIT09IFwiZnVuY3Rpb25cIikgYXJncy5kZXNlcmlhbGl6ZSA9IGRlc2VyaWFsaXplXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3MuZXh0cmFjdCAhPT0gXCJmdW5jdGlvblwiKSBhcmdzLmV4dHJhY3QgPSBleHRyYWN0XG5cdFx0XHRhcmdzLnVybCA9IGludGVycG9sYXRlKGFyZ3MudXJsLCBhcmdzLmRhdGEpXG5cdFx0XHRpZiAodXNlQm9keSkgYXJncy5kYXRhID0gYXJncy5zZXJpYWxpemUoYXJncy5kYXRhKVxuXHRcdFx0ZWxzZSBhcmdzLnVybCA9IGFzc2VtYmxlKGFyZ3MudXJsLCBhcmdzLmRhdGEpXG5cdFx0XHR2YXIgeGhyID0gbmV3ICR3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKSxcblx0XHRcdFx0YWJvcnRlZCA9IGZhbHNlLFxuXHRcdFx0XHRfYWJvcnQgPSB4aHIuYWJvcnRcblx0XHRcdHhoci5hYm9ydCA9IGZ1bmN0aW9uIGFib3J0KCkge1xuXHRcdFx0XHRhYm9ydGVkID0gdHJ1ZVxuXHRcdFx0XHRfYWJvcnQuY2FsbCh4aHIpXG5cdFx0XHR9XG5cdFx0XHR4aHIub3BlbihhcmdzLm1ldGhvZCwgYXJncy51cmwsIHR5cGVvZiBhcmdzLmFzeW5jID09PSBcImJvb2xlYW5cIiA/IGFyZ3MuYXN5bmMgOiB0cnVlLCB0eXBlb2YgYXJncy51c2VyID09PSBcInN0cmluZ1wiID8gYXJncy51c2VyIDogdW5kZWZpbmVkLCB0eXBlb2YgYXJncy5wYXNzd29yZCA9PT0gXCJzdHJpbmdcIiA/IGFyZ3MucGFzc3dvcmQgOiB1bmRlZmluZWQpXG5cdFx0XHRpZiAoYXJncy5zZXJpYWxpemUgPT09IEpTT04uc3RyaW5naWZ5ICYmIHVzZUJvZHkgJiYgIShhcmdzLmhlYWRlcnMgJiYgYXJncy5oZWFkZXJzLmhhc093blByb3BlcnR5KFwiQ29udGVudC1UeXBlXCIpKSkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIilcblx0XHRcdH1cblx0XHRcdGlmIChhcmdzLmRlc2VyaWFsaXplID09PSBkZXNlcmlhbGl6ZSAmJiAhKGFyZ3MuaGVhZGVycyAmJiBhcmdzLmhlYWRlcnMuaGFzT3duUHJvcGVydHkoXCJBY2NlcHRcIikpKSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQWNjZXB0XCIsIFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC8qXCIpXG5cdFx0XHR9XG5cdFx0XHRpZiAoYXJncy53aXRoQ3JlZGVudGlhbHMpIHhoci53aXRoQ3JlZGVudGlhbHMgPSBhcmdzLndpdGhDcmVkZW50aWFsc1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZ3MuaGVhZGVycykgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwoYXJncy5oZWFkZXJzLCBrZXkpKSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgYXJncy5oZWFkZXJzW2tleV0pXG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGFyZ3MuY29uZmlnID09PSBcImZ1bmN0aW9uXCIpIHhociA9IGFyZ3MuY29uZmlnKHhociwgYXJncykgfHwgeGhyXG5cdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIERvbid0IHRocm93IGVycm9ycyBvbiB4aHIuYWJvcnQoKS5cblx0XHRcdFx0aWYoYWJvcnRlZCkgcmV0dXJuXG5cdFx0XHRcdGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR2YXIgcmVzcG9uc2UgPSAoYXJncy5leHRyYWN0ICE9PSBleHRyYWN0KSA/IGFyZ3MuZXh0cmFjdCh4aHIsIGFyZ3MpIDogYXJncy5kZXNlcmlhbGl6ZShhcmdzLmV4dHJhY3QoeGhyLCBhcmdzKSlcblx0XHRcdFx0XHRcdGlmICgoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCkgfHwgeGhyLnN0YXR1cyA9PT0gMzA0IHx8IEZJTEVfUFJPVE9DT0xfUkVHRVgudGVzdChhcmdzLnVybCkpIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShjYXN0KGFyZ3MudHlwZSwgcmVzcG9uc2UpKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlcnJvciA9IG5ldyBFcnJvcih4aHIucmVzcG9uc2VUZXh0KVxuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gcmVzcG9uc2UpIGVycm9yW2tleV0gPSByZXNwb25zZVtrZXldXG5cdFx0XHRcdFx0XHRcdHJlamVjdChlcnJvcilcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJlamVjdChlKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHVzZUJvZHkgJiYgKGFyZ3MuZGF0YSAhPSBudWxsKSkgeGhyLnNlbmQoYXJncy5kYXRhKVxuXHRcdFx0ZWxzZSB4aHIuc2VuZCgpXG5cdFx0fSlcblx0XHRyZXR1cm4gYXJncy5iYWNrZ3JvdW5kID09PSB0cnVlID8gcHJvbWlzZTAgOiBmaW5hbGl6ZShwcm9taXNlMClcblx0fVxuXHRmdW5jdGlvbiBqc29ucChhcmdzLCBleHRyYSkge1xuXHRcdHZhciBmaW5hbGl6ZSA9IGZpbmFsaXplcigpXG5cdFx0YXJncyA9IG5vcm1hbGl6ZShhcmdzLCBleHRyYSlcblx0XHR2YXIgcHJvbWlzZTAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdHZhciBjYWxsYmFja05hbWUgPSBhcmdzLmNhbGxiYWNrTmFtZSB8fCBcIl9taXRocmlsX1wiICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMWUxNikgKyBcIl9cIiArIGNhbGxiYWNrQ291bnQrK1xuXHRcdFx0dmFyIHNjcmlwdCA9ICR3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKVxuXHRcdFx0JHdpbmRvd1tjYWxsYmFja05hbWVdID0gZnVuY3Rpb24oZGF0YSkge1xuXHRcdFx0XHRzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpXG5cdFx0XHRcdHJlc29sdmUoY2FzdChhcmdzLnR5cGUsIGRhdGEpKVxuXHRcdFx0XHRkZWxldGUgJHdpbmRvd1tjYWxsYmFja05hbWVdXG5cdFx0XHR9XG5cdFx0XHRzY3JpcHQub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpXG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJKU09OUCByZXF1ZXN0IGZhaWxlZFwiKSlcblx0XHRcdFx0ZGVsZXRlICR3aW5kb3dbY2FsbGJhY2tOYW1lXVxuXHRcdFx0fVxuXHRcdFx0aWYgKGFyZ3MuZGF0YSA9PSBudWxsKSBhcmdzLmRhdGEgPSB7fVxuXHRcdFx0YXJncy51cmwgPSBpbnRlcnBvbGF0ZShhcmdzLnVybCwgYXJncy5kYXRhKVxuXHRcdFx0YXJncy5kYXRhW2FyZ3MuY2FsbGJhY2tLZXkgfHwgXCJjYWxsYmFja1wiXSA9IGNhbGxiYWNrTmFtZVxuXHRcdFx0c2NyaXB0LnNyYyA9IGFzc2VtYmxlKGFyZ3MudXJsLCBhcmdzLmRhdGEpXG5cdFx0XHQkd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChzY3JpcHQpXG5cdFx0fSlcblx0XHRyZXR1cm4gYXJncy5iYWNrZ3JvdW5kID09PSB0cnVlPyBwcm9taXNlMCA6IGZpbmFsaXplKHByb21pc2UwKVxuXHR9XG5cdGZ1bmN0aW9uIGludGVycG9sYXRlKHVybCwgZGF0YSkge1xuXHRcdGlmIChkYXRhID09IG51bGwpIHJldHVybiB1cmxcblx0XHR2YXIgdG9rZW5zID0gdXJsLm1hdGNoKC86W15cXC9dKy9naSkgfHwgW11cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGtleSA9IHRva2Vuc1tpXS5zbGljZSgxKVxuXHRcdFx0aWYgKGRhdGFba2V5XSAhPSBudWxsKSB7XG5cdFx0XHRcdHVybCA9IHVybC5yZXBsYWNlKHRva2Vuc1tpXSwgZGF0YVtrZXldKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdXJsXG5cdH1cblx0ZnVuY3Rpb24gYXNzZW1ibGUodXJsLCBkYXRhKSB7XG5cdFx0dmFyIHF1ZXJ5c3RyaW5nID0gYnVpbGRRdWVyeVN0cmluZyhkYXRhKVxuXHRcdGlmIChxdWVyeXN0cmluZyAhPT0gXCJcIikge1xuXHRcdFx0dmFyIHByZWZpeCA9IHVybC5pbmRleE9mKFwiP1wiKSA8IDAgPyBcIj9cIiA6IFwiJlwiXG5cdFx0XHR1cmwgKz0gcHJlZml4ICsgcXVlcnlzdHJpbmdcblx0XHR9XG5cdFx0cmV0dXJuIHVybFxuXHR9XG5cdGZ1bmN0aW9uIGRlc2VyaWFsaXplKGRhdGEpIHtcblx0XHR0cnkge3JldHVybiBkYXRhICE9PSBcIlwiID8gSlNPTi5wYXJzZShkYXRhKSA6IG51bGx9XG5cdFx0Y2F0Y2ggKGUpIHt0aHJvdyBuZXcgRXJyb3IoZGF0YSl9XG5cdH1cblx0ZnVuY3Rpb24gZXh0cmFjdCh4aHIpIHtyZXR1cm4geGhyLnJlc3BvbnNlVGV4dH1cblx0ZnVuY3Rpb24gY2FzdCh0eXBlMCwgZGF0YSkge1xuXHRcdGlmICh0eXBlb2YgdHlwZTAgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ZGF0YVtpXSA9IG5ldyB0eXBlMChkYXRhW2ldKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHJldHVybiBuZXcgdHlwZTAoZGF0YSlcblx0XHR9XG5cdFx0cmV0dXJuIGRhdGFcblx0fVxuXHRyZXR1cm4ge3JlcXVlc3Q6IHJlcXVlc3QsIGpzb25wOiBqc29ucCwgc2V0Q29tcGxldGlvbkNhbGxiYWNrOiBzZXRDb21wbGV0aW9uQ2FsbGJhY2t9XG59XG52YXIgcmVxdWVzdFNlcnZpY2UgPSBfOCh3aW5kb3csIFByb21pc2VQb2x5ZmlsbClcbnZhciBjb3JlUmVuZGVyZXIgPSBmdW5jdGlvbigkd2luZG93KSB7XG5cdHZhciAkZG9jID0gJHdpbmRvdy5kb2N1bWVudFxuXHR2YXIgJGVtcHR5RnJhZ21lbnQgPSAkZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxuXHR2YXIgbmFtZVNwYWNlID0ge1xuXHRcdHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuXHRcdG1hdGg6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiXG5cdH1cblx0dmFyIG9uZXZlbnRcblx0ZnVuY3Rpb24gc2V0RXZlbnRDYWxsYmFjayhjYWxsYmFjaykge3JldHVybiBvbmV2ZW50ID0gY2FsbGJhY2t9XG5cdGZ1bmN0aW9uIGdldE5hbWVTcGFjZSh2bm9kZSkge1xuXHRcdHJldHVybiB2bm9kZS5hdHRycyAmJiB2bm9kZS5hdHRycy54bWxucyB8fCBuYW1lU3BhY2Vbdm5vZGUudGFnXVxuXHR9XG5cdC8vY3JlYXRlXG5cdGZ1bmN0aW9uIGNyZWF0ZU5vZGVzKHBhcmVudCwgdm5vZGVzLCBzdGFydCwgZW5kLCBob29rcywgbmV4dFNpYmxpbmcsIG5zKSB7XG5cdFx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcblx0XHRcdHZhciB2bm9kZSA9IHZub2Rlc1tpXVxuXHRcdFx0aWYgKHZub2RlICE9IG51bGwpIHtcblx0XHRcdFx0Y3JlYXRlTm9kZShwYXJlbnQsIHZub2RlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiBjcmVhdGVOb2RlKHBhcmVudCwgdm5vZGUsIGhvb2tzLCBucywgbmV4dFNpYmxpbmcpIHtcblx0XHR2YXIgdGFnID0gdm5vZGUudGFnXG5cdFx0aWYgKHR5cGVvZiB0YWcgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHZub2RlLnN0YXRlID0ge31cblx0XHRcdGlmICh2bm9kZS5hdHRycyAhPSBudWxsKSBpbml0TGlmZWN5Y2xlKHZub2RlLmF0dHJzLCB2bm9kZSwgaG9va3MpXG5cdFx0XHRzd2l0Y2ggKHRhZykge1xuXHRcdFx0XHRjYXNlIFwiI1wiOiByZXR1cm4gY3JlYXRlVGV4dChwYXJlbnQsIHZub2RlLCBuZXh0U2libGluZylcblx0XHRcdFx0Y2FzZSBcIjxcIjogcmV0dXJuIGNyZWF0ZUhUTUwocGFyZW50LCB2bm9kZSwgbmV4dFNpYmxpbmcpXG5cdFx0XHRcdGNhc2UgXCJbXCI6IHJldHVybiBjcmVhdGVGcmFnbWVudChwYXJlbnQsIHZub2RlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKVxuXHRcdFx0XHRkZWZhdWx0OiByZXR1cm4gY3JlYXRlRWxlbWVudChwYXJlbnQsIHZub2RlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHJldHVybiBjcmVhdGVDb21wb25lbnQocGFyZW50LCB2bm9kZSwgaG9va3MsIG5zLCBuZXh0U2libGluZylcblx0fVxuXHRmdW5jdGlvbiBjcmVhdGVUZXh0KHBhcmVudCwgdm5vZGUsIG5leHRTaWJsaW5nKSB7XG5cdFx0dm5vZGUuZG9tID0gJGRvYy5jcmVhdGVUZXh0Tm9kZSh2bm9kZS5jaGlsZHJlbilcblx0XHRpbnNlcnROb2RlKHBhcmVudCwgdm5vZGUuZG9tLCBuZXh0U2libGluZylcblx0XHRyZXR1cm4gdm5vZGUuZG9tXG5cdH1cblx0ZnVuY3Rpb24gY3JlYXRlSFRNTChwYXJlbnQsIHZub2RlLCBuZXh0U2libGluZykge1xuXHRcdHZhciBtYXRjaDEgPSB2bm9kZS5jaGlsZHJlbi5tYXRjaCgvXlxccyo/PChcXHcrKS9pbSkgfHwgW11cblx0XHR2YXIgcGFyZW50MSA9IHtjYXB0aW9uOiBcInRhYmxlXCIsIHRoZWFkOiBcInRhYmxlXCIsIHRib2R5OiBcInRhYmxlXCIsIHRmb290OiBcInRhYmxlXCIsIHRyOiBcInRib2R5XCIsIHRoOiBcInRyXCIsIHRkOiBcInRyXCIsIGNvbGdyb3VwOiBcInRhYmxlXCIsIGNvbDogXCJjb2xncm91cFwifVttYXRjaDFbMV1dIHx8IFwiZGl2XCJcblx0XHR2YXIgdGVtcCA9ICRkb2MuY3JlYXRlRWxlbWVudChwYXJlbnQxKVxuXHRcdHRlbXAuaW5uZXJIVE1MID0gdm5vZGUuY2hpbGRyZW5cblx0XHR2bm9kZS5kb20gPSB0ZW1wLmZpcnN0Q2hpbGRcblx0XHR2bm9kZS5kb21TaXplID0gdGVtcC5jaGlsZE5vZGVzLmxlbmd0aFxuXHRcdHZhciBmcmFnbWVudCA9ICRkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpXG5cdFx0dmFyIGNoaWxkXG5cdFx0d2hpbGUgKGNoaWxkID0gdGVtcC5maXJzdENoaWxkKSB7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZClcblx0XHR9XG5cdFx0aW5zZXJ0Tm9kZShwYXJlbnQsIGZyYWdtZW50LCBuZXh0U2libGluZylcblx0XHRyZXR1cm4gZnJhZ21lbnRcblx0fVxuXHRmdW5jdGlvbiBjcmVhdGVGcmFnbWVudChwYXJlbnQsIHZub2RlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKSB7XG5cdFx0dmFyIGZyYWdtZW50ID0gJGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KClcblx0XHRpZiAodm5vZGUuY2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdFx0dmFyIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW5cblx0XHRcdGNyZWF0ZU5vZGVzKGZyYWdtZW50LCBjaGlsZHJlbiwgMCwgY2hpbGRyZW4ubGVuZ3RoLCBob29rcywgbnVsbCwgbnMpXG5cdFx0fVxuXHRcdHZub2RlLmRvbSA9IGZyYWdtZW50LmZpcnN0Q2hpbGRcblx0XHR2bm9kZS5kb21TaXplID0gZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGhcblx0XHRpbnNlcnROb2RlKHBhcmVudCwgZnJhZ21lbnQsIG5leHRTaWJsaW5nKVxuXHRcdHJldHVybiBmcmFnbWVudFxuXHR9XG5cdGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQocGFyZW50LCB2bm9kZSwgaG9va3MsIG5zLCBuZXh0U2libGluZykge1xuXHRcdHZhciB0YWcgPSB2bm9kZS50YWdcblx0XHR2YXIgYXR0cnMyID0gdm5vZGUuYXR0cnNcblx0XHR2YXIgaXMgPSBhdHRyczIgJiYgYXR0cnMyLmlzXG5cdFx0bnMgPSBnZXROYW1lU3BhY2Uodm5vZGUpIHx8IG5zXG5cdFx0dmFyIGVsZW1lbnQgPSBucyA/XG5cdFx0XHRpcyA/ICRkb2MuY3JlYXRlRWxlbWVudE5TKG5zLCB0YWcsIHtpczogaXN9KSA6ICRkb2MuY3JlYXRlRWxlbWVudE5TKG5zLCB0YWcpIDpcblx0XHRcdGlzID8gJGRvYy5jcmVhdGVFbGVtZW50KHRhZywge2lzOiBpc30pIDogJGRvYy5jcmVhdGVFbGVtZW50KHRhZylcblx0XHR2bm9kZS5kb20gPSBlbGVtZW50XG5cdFx0aWYgKGF0dHJzMiAhPSBudWxsKSB7XG5cdFx0XHRzZXRBdHRycyh2bm9kZSwgYXR0cnMyLCBucylcblx0XHR9XG5cdFx0aW5zZXJ0Tm9kZShwYXJlbnQsIGVsZW1lbnQsIG5leHRTaWJsaW5nKVxuXHRcdGlmICh2bm9kZS5hdHRycyAhPSBudWxsICYmIHZub2RlLmF0dHJzLmNvbnRlbnRlZGl0YWJsZSAhPSBudWxsKSB7XG5cdFx0XHRzZXRDb250ZW50RWRpdGFibGUodm5vZGUpXG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKHZub2RlLnRleHQgIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAodm5vZGUudGV4dCAhPT0gXCJcIikgZWxlbWVudC50ZXh0Q29udGVudCA9IHZub2RlLnRleHRcblx0XHRcdFx0ZWxzZSB2bm9kZS5jaGlsZHJlbiA9IFtWbm9kZShcIiNcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHZub2RlLnRleHQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKV1cblx0XHRcdH1cblx0XHRcdGlmICh2bm9kZS5jaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRcdHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuXG5cdFx0XHRcdGNyZWF0ZU5vZGVzKGVsZW1lbnQsIGNoaWxkcmVuLCAwLCBjaGlsZHJlbi5sZW5ndGgsIGhvb2tzLCBudWxsLCBucylcblx0XHRcdFx0c2V0TGF0ZUF0dHJzKHZub2RlKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZWxlbWVudFxuXHR9XG5cdGZ1bmN0aW9uIGluaXRDb21wb25lbnQodm5vZGUsIGhvb2tzKSB7XG5cdFx0dmFyIHNlbnRpbmVsXG5cdFx0aWYgKHR5cGVvZiB2bm9kZS50YWcudmlldyA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR2bm9kZS5zdGF0ZSA9IE9iamVjdC5jcmVhdGUodm5vZGUudGFnKVxuXHRcdFx0c2VudGluZWwgPSB2bm9kZS5zdGF0ZS52aWV3XG5cdFx0XHRpZiAoc2VudGluZWwuJCRyZWVudHJhbnRMb2NrJCQgIT0gbnVsbCkgcmV0dXJuICRlbXB0eUZyYWdtZW50XG5cdFx0XHRzZW50aW5lbC4kJHJlZW50cmFudExvY2skJCA9IHRydWVcblx0XHR9IGVsc2Uge1xuXHRcdFx0dm5vZGUuc3RhdGUgPSB2b2lkIDBcblx0XHRcdHNlbnRpbmVsID0gdm5vZGUudGFnXG5cdFx0XHRpZiAoc2VudGluZWwuJCRyZWVudHJhbnRMb2NrJCQgIT0gbnVsbCkgcmV0dXJuICRlbXB0eUZyYWdtZW50XG5cdFx0XHRzZW50aW5lbC4kJHJlZW50cmFudExvY2skJCA9IHRydWVcblx0XHRcdHZub2RlLnN0YXRlID0gKHZub2RlLnRhZy5wcm90b3R5cGUgIT0gbnVsbCAmJiB0eXBlb2Ygdm5vZGUudGFnLnByb3RvdHlwZS52aWV3ID09PSBcImZ1bmN0aW9uXCIpID8gbmV3IHZub2RlLnRhZyh2bm9kZSkgOiB2bm9kZS50YWcodm5vZGUpXG5cdFx0fVxuXHRcdHZub2RlLl9zdGF0ZSA9IHZub2RlLnN0YXRlXG5cdFx0aWYgKHZub2RlLmF0dHJzICE9IG51bGwpIGluaXRMaWZlY3ljbGUodm5vZGUuYXR0cnMsIHZub2RlLCBob29rcylcblx0XHRpbml0TGlmZWN5Y2xlKHZub2RlLl9zdGF0ZSwgdm5vZGUsIGhvb2tzKVxuXHRcdHZub2RlLmluc3RhbmNlID0gVm5vZGUubm9ybWFsaXplKHZub2RlLl9zdGF0ZS52aWV3LmNhbGwodm5vZGUuc3RhdGUsIHZub2RlKSlcblx0XHRpZiAodm5vZGUuaW5zdGFuY2UgPT09IHZub2RlKSB0aHJvdyBFcnJvcihcIkEgdmlldyBjYW5ub3QgcmV0dXJuIHRoZSB2bm9kZSBpdCByZWNlaXZlZCBhcyBhcmd1bWVudFwiKVxuXHRcdHNlbnRpbmVsLiQkcmVlbnRyYW50TG9jayQkID0gbnVsbFxuXHR9XG5cdGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudChwYXJlbnQsIHZub2RlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKSB7XG5cdFx0aW5pdENvbXBvbmVudCh2bm9kZSwgaG9va3MpXG5cdFx0aWYgKHZub2RlLmluc3RhbmNlICE9IG51bGwpIHtcblx0XHRcdHZhciBlbGVtZW50ID0gY3JlYXRlTm9kZShwYXJlbnQsIHZub2RlLmluc3RhbmNlLCBob29rcywgbnMsIG5leHRTaWJsaW5nKVxuXHRcdFx0dm5vZGUuZG9tID0gdm5vZGUuaW5zdGFuY2UuZG9tXG5cdFx0XHR2bm9kZS5kb21TaXplID0gdm5vZGUuZG9tICE9IG51bGwgPyB2bm9kZS5pbnN0YW5jZS5kb21TaXplIDogMFxuXHRcdFx0aW5zZXJ0Tm9kZShwYXJlbnQsIGVsZW1lbnQsIG5leHRTaWJsaW5nKVxuXHRcdFx0cmV0dXJuIGVsZW1lbnRcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHR2bm9kZS5kb21TaXplID0gMFxuXHRcdFx0cmV0dXJuICRlbXB0eUZyYWdtZW50XG5cdFx0fVxuXHR9XG5cdC8vdXBkYXRlXG5cdGZ1bmN0aW9uIHVwZGF0ZU5vZGVzKHBhcmVudCwgb2xkLCB2bm9kZXMsIHJlY3ljbGluZywgaG9va3MsIG5leHRTaWJsaW5nLCBucykge1xuXHRcdGlmIChvbGQgPT09IHZub2RlcyB8fCBvbGQgPT0gbnVsbCAmJiB2bm9kZXMgPT0gbnVsbCkgcmV0dXJuXG5cdFx0ZWxzZSBpZiAob2xkID09IG51bGwpIGNyZWF0ZU5vZGVzKHBhcmVudCwgdm5vZGVzLCAwLCB2bm9kZXMubGVuZ3RoLCBob29rcywgbmV4dFNpYmxpbmcsIG5zKVxuXHRcdGVsc2UgaWYgKHZub2RlcyA9PSBudWxsKSByZW1vdmVOb2RlcyhvbGQsIDAsIG9sZC5sZW5ndGgsIHZub2Rlcylcblx0XHRlbHNlIHtcblx0XHRcdGlmIChvbGQubGVuZ3RoID09PSB2bm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBpc1Vua2V5ZWQgPSBmYWxzZVxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICh2bm9kZXNbaV0gIT0gbnVsbCAmJiBvbGRbaV0gIT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0aXNVbmtleWVkID0gdm5vZGVzW2ldLmtleSA9PSBudWxsICYmIG9sZFtpXS5rZXkgPT0gbnVsbFxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlzVW5rZXllZCkge1xuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAob2xkW2ldID09PSB2bm9kZXNbaV0pIGNvbnRpbnVlXG5cdFx0XHRcdFx0XHRlbHNlIGlmIChvbGRbaV0gPT0gbnVsbCAmJiB2bm9kZXNbaV0gIT0gbnVsbCkgY3JlYXRlTm9kZShwYXJlbnQsIHZub2Rlc1tpXSwgaG9va3MsIG5zLCBnZXROZXh0U2libGluZyhvbGQsIGkgKyAxLCBuZXh0U2libGluZykpXG5cdFx0XHRcdFx0XHRlbHNlIGlmICh2bm9kZXNbaV0gPT0gbnVsbCkgcmVtb3ZlTm9kZXMob2xkLCBpLCBpICsgMSwgdm5vZGVzKVxuXHRcdFx0XHRcdFx0ZWxzZSB1cGRhdGVOb2RlKHBhcmVudCwgb2xkW2ldLCB2bm9kZXNbaV0sIGhvb2tzLCBnZXROZXh0U2libGluZyhvbGQsIGkgKyAxLCBuZXh0U2libGluZyksIHJlY3ljbGluZywgbnMpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZWN5Y2xpbmcgPSByZWN5Y2xpbmcgfHwgaXNSZWN5Y2xhYmxlKG9sZCwgdm5vZGVzKVxuXHRcdFx0aWYgKHJlY3ljbGluZykge1xuXHRcdFx0XHR2YXIgcG9vbCA9IG9sZC5wb29sXG5cdFx0XHRcdG9sZCA9IG9sZC5jb25jYXQob2xkLnBvb2wpXG5cdFx0XHR9XG5cdFx0XHR2YXIgb2xkU3RhcnQgPSAwLCBzdGFydCA9IDAsIG9sZEVuZCA9IG9sZC5sZW5ndGggLSAxLCBlbmQgPSB2bm9kZXMubGVuZ3RoIC0gMSwgbWFwXG5cdFx0XHR3aGlsZSAob2xkRW5kID49IG9sZFN0YXJ0ICYmIGVuZCA+PSBzdGFydCkge1xuXHRcdFx0XHR2YXIgbyA9IG9sZFtvbGRTdGFydF0sIHYgPSB2bm9kZXNbc3RhcnRdXG5cdFx0XHRcdGlmIChvID09PSB2ICYmICFyZWN5Y2xpbmcpIG9sZFN0YXJ0KyssIHN0YXJ0Kytcblx0XHRcdFx0ZWxzZSBpZiAobyA9PSBudWxsKSBvbGRTdGFydCsrXG5cdFx0XHRcdGVsc2UgaWYgKHYgPT0gbnVsbCkgc3RhcnQrK1xuXHRcdFx0XHRlbHNlIGlmIChvLmtleSA9PT0gdi5rZXkpIHtcblx0XHRcdFx0XHR2YXIgc2hvdWxkUmVjeWNsZSA9IChwb29sICE9IG51bGwgJiYgb2xkU3RhcnQgPj0gb2xkLmxlbmd0aCAtIHBvb2wubGVuZ3RoKSB8fCAoKHBvb2wgPT0gbnVsbCkgJiYgcmVjeWNsaW5nKVxuXHRcdFx0XHRcdG9sZFN0YXJ0KyssIHN0YXJ0Kytcblx0XHRcdFx0XHR1cGRhdGVOb2RlKHBhcmVudCwgbywgdiwgaG9va3MsIGdldE5leHRTaWJsaW5nKG9sZCwgb2xkU3RhcnQsIG5leHRTaWJsaW5nKSwgc2hvdWxkUmVjeWNsZSwgbnMpXG5cdFx0XHRcdFx0aWYgKHJlY3ljbGluZyAmJiBvLnRhZyA9PT0gdi50YWcpIGluc2VydE5vZGUocGFyZW50LCB0b0ZyYWdtZW50KG8pLCBuZXh0U2libGluZylcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR2YXIgbyA9IG9sZFtvbGRFbmRdXG5cdFx0XHRcdFx0aWYgKG8gPT09IHYgJiYgIXJlY3ljbGluZykgb2xkRW5kLS0sIHN0YXJ0Kytcblx0XHRcdFx0XHRlbHNlIGlmIChvID09IG51bGwpIG9sZEVuZC0tXG5cdFx0XHRcdFx0ZWxzZSBpZiAodiA9PSBudWxsKSBzdGFydCsrXG5cdFx0XHRcdFx0ZWxzZSBpZiAoby5rZXkgPT09IHYua2V5KSB7XG5cdFx0XHRcdFx0XHR2YXIgc2hvdWxkUmVjeWNsZSA9IChwb29sICE9IG51bGwgJiYgb2xkRW5kID49IG9sZC5sZW5ndGggLSBwb29sLmxlbmd0aCkgfHwgKChwb29sID09IG51bGwpICYmIHJlY3ljbGluZylcblx0XHRcdFx0XHRcdHVwZGF0ZU5vZGUocGFyZW50LCBvLCB2LCBob29rcywgZ2V0TmV4dFNpYmxpbmcob2xkLCBvbGRFbmQgKyAxLCBuZXh0U2libGluZyksIHNob3VsZFJlY3ljbGUsIG5zKVxuXHRcdFx0XHRcdFx0aWYgKHJlY3ljbGluZyB8fCBzdGFydCA8IGVuZCkgaW5zZXJ0Tm9kZShwYXJlbnQsIHRvRnJhZ21lbnQobyksIGdldE5leHRTaWJsaW5nKG9sZCwgb2xkU3RhcnQsIG5leHRTaWJsaW5nKSlcblx0XHRcdFx0XHRcdG9sZEVuZC0tLCBzdGFydCsrXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgYnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0d2hpbGUgKG9sZEVuZCA+PSBvbGRTdGFydCAmJiBlbmQgPj0gc3RhcnQpIHtcblx0XHRcdFx0dmFyIG8gPSBvbGRbb2xkRW5kXSwgdiA9IHZub2Rlc1tlbmRdXG5cdFx0XHRcdGlmIChvID09PSB2ICYmICFyZWN5Y2xpbmcpIG9sZEVuZC0tLCBlbmQtLVxuXHRcdFx0XHRlbHNlIGlmIChvID09IG51bGwpIG9sZEVuZC0tXG5cdFx0XHRcdGVsc2UgaWYgKHYgPT0gbnVsbCkgZW5kLS1cblx0XHRcdFx0ZWxzZSBpZiAoby5rZXkgPT09IHYua2V5KSB7XG5cdFx0XHRcdFx0dmFyIHNob3VsZFJlY3ljbGUgPSAocG9vbCAhPSBudWxsICYmIG9sZEVuZCA+PSBvbGQubGVuZ3RoIC0gcG9vbC5sZW5ndGgpIHx8ICgocG9vbCA9PSBudWxsKSAmJiByZWN5Y2xpbmcpXG5cdFx0XHRcdFx0dXBkYXRlTm9kZShwYXJlbnQsIG8sIHYsIGhvb2tzLCBnZXROZXh0U2libGluZyhvbGQsIG9sZEVuZCArIDEsIG5leHRTaWJsaW5nKSwgc2hvdWxkUmVjeWNsZSwgbnMpXG5cdFx0XHRcdFx0aWYgKHJlY3ljbGluZyAmJiBvLnRhZyA9PT0gdi50YWcpIGluc2VydE5vZGUocGFyZW50LCB0b0ZyYWdtZW50KG8pLCBuZXh0U2libGluZylcblx0XHRcdFx0XHRpZiAoby5kb20gIT0gbnVsbCkgbmV4dFNpYmxpbmcgPSBvLmRvbVxuXHRcdFx0XHRcdG9sZEVuZC0tLCBlbmQtLVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGlmICghbWFwKSBtYXAgPSBnZXRLZXlNYXAob2xkLCBvbGRFbmQpXG5cdFx0XHRcdFx0aWYgKHYgIT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0dmFyIG9sZEluZGV4ID0gbWFwW3Yua2V5XVxuXHRcdFx0XHRcdFx0aWYgKG9sZEluZGV4ICE9IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG1vdmFibGUgPSBvbGRbb2xkSW5kZXhdXG5cdFx0XHRcdFx0XHRcdHZhciBzaG91bGRSZWN5Y2xlID0gKHBvb2wgIT0gbnVsbCAmJiBvbGRJbmRleCA+PSBvbGQubGVuZ3RoIC0gcG9vbC5sZW5ndGgpIHx8ICgocG9vbCA9PSBudWxsKSAmJiByZWN5Y2xpbmcpXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZU5vZGUocGFyZW50LCBtb3ZhYmxlLCB2LCBob29rcywgZ2V0TmV4dFNpYmxpbmcob2xkLCBvbGRFbmQgKyAxLCBuZXh0U2libGluZyksIHJlY3ljbGluZywgbnMpXG5cdFx0XHRcdFx0XHRcdGluc2VydE5vZGUocGFyZW50LCB0b0ZyYWdtZW50KG1vdmFibGUpLCBuZXh0U2libGluZylcblx0XHRcdFx0XHRcdFx0b2xkW29sZEluZGV4XS5za2lwID0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRpZiAobW92YWJsZS5kb20gIT0gbnVsbCkgbmV4dFNpYmxpbmcgPSBtb3ZhYmxlLmRvbVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZhciBkb20gPSBjcmVhdGVOb2RlKHBhcmVudCwgdiwgaG9va3MsIG5zLCBuZXh0U2libGluZylcblx0XHRcdFx0XHRcdFx0bmV4dFNpYmxpbmcgPSBkb21cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZW5kLS1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZW5kIDwgc3RhcnQpIGJyZWFrXG5cdFx0XHR9XG5cdFx0XHRjcmVhdGVOb2RlcyhwYXJlbnQsIHZub2Rlcywgc3RhcnQsIGVuZCArIDEsIGhvb2tzLCBuZXh0U2libGluZywgbnMpXG5cdFx0XHRyZW1vdmVOb2RlcyhvbGQsIG9sZFN0YXJ0LCBvbGRFbmQgKyAxLCB2bm9kZXMpXG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIHVwZGF0ZU5vZGUocGFyZW50LCBvbGQsIHZub2RlLCBob29rcywgbmV4dFNpYmxpbmcsIHJlY3ljbGluZywgbnMpIHtcblx0XHR2YXIgb2xkVGFnID0gb2xkLnRhZywgdGFnID0gdm5vZGUudGFnXG5cdFx0aWYgKG9sZFRhZyA9PT0gdGFnKSB7XG5cdFx0XHR2bm9kZS5zdGF0ZSA9IG9sZC5zdGF0ZVxuXHRcdFx0dm5vZGUuX3N0YXRlID0gb2xkLl9zdGF0ZVxuXHRcdFx0dm5vZGUuZXZlbnRzID0gb2xkLmV2ZW50c1xuXHRcdFx0aWYgKCFyZWN5Y2xpbmcgJiYgc2hvdWxkTm90VXBkYXRlKHZub2RlLCBvbGQpKSByZXR1cm5cblx0XHRcdGlmICh0eXBlb2Ygb2xkVGFnID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGlmICh2bm9kZS5hdHRycyAhPSBudWxsKSB7XG5cdFx0XHRcdFx0aWYgKHJlY3ljbGluZykge1xuXHRcdFx0XHRcdFx0dm5vZGUuc3RhdGUgPSB7fVxuXHRcdFx0XHRcdFx0aW5pdExpZmVjeWNsZSh2bm9kZS5hdHRycywgdm5vZGUsIGhvb2tzKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHVwZGF0ZUxpZmVjeWNsZSh2bm9kZS5hdHRycywgdm5vZGUsIGhvb2tzKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN3aXRjaCAob2xkVGFnKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIiNcIjogdXBkYXRlVGV4dChvbGQsIHZub2RlKTsgYnJlYWtcblx0XHRcdFx0XHRjYXNlIFwiPFwiOiB1cGRhdGVIVE1MKHBhcmVudCwgb2xkLCB2bm9kZSwgbmV4dFNpYmxpbmcpOyBicmVha1xuXHRcdFx0XHRcdGNhc2UgXCJbXCI6IHVwZGF0ZUZyYWdtZW50KHBhcmVudCwgb2xkLCB2bm9kZSwgcmVjeWNsaW5nLCBob29rcywgbmV4dFNpYmxpbmcsIG5zKTsgYnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OiB1cGRhdGVFbGVtZW50KG9sZCwgdm5vZGUsIHJlY3ljbGluZywgaG9va3MsIG5zKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHVwZGF0ZUNvbXBvbmVudChwYXJlbnQsIG9sZCwgdm5vZGUsIGhvb2tzLCBuZXh0U2libGluZywgcmVjeWNsaW5nLCBucylcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRyZW1vdmVOb2RlKG9sZCwgbnVsbClcblx0XHRcdGNyZWF0ZU5vZGUocGFyZW50LCB2bm9kZSwgaG9va3MsIG5zLCBuZXh0U2libGluZylcblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gdXBkYXRlVGV4dChvbGQsIHZub2RlKSB7XG5cdFx0aWYgKG9sZC5jaGlsZHJlbi50b1N0cmluZygpICE9PSB2bm9kZS5jaGlsZHJlbi50b1N0cmluZygpKSB7XG5cdFx0XHRvbGQuZG9tLm5vZGVWYWx1ZSA9IHZub2RlLmNoaWxkcmVuXG5cdFx0fVxuXHRcdHZub2RlLmRvbSA9IG9sZC5kb21cblx0fVxuXHRmdW5jdGlvbiB1cGRhdGVIVE1MKHBhcmVudCwgb2xkLCB2bm9kZSwgbmV4dFNpYmxpbmcpIHtcblx0XHRpZiAob2xkLmNoaWxkcmVuICE9PSB2bm9kZS5jaGlsZHJlbikge1xuXHRcdFx0dG9GcmFnbWVudChvbGQpXG5cdFx0XHRjcmVhdGVIVE1MKHBhcmVudCwgdm5vZGUsIG5leHRTaWJsaW5nKVxuXHRcdH1cblx0XHRlbHNlIHZub2RlLmRvbSA9IG9sZC5kb20sIHZub2RlLmRvbVNpemUgPSBvbGQuZG9tU2l6ZVxuXHR9XG5cdGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KHBhcmVudCwgb2xkLCB2bm9kZSwgcmVjeWNsaW5nLCBob29rcywgbmV4dFNpYmxpbmcsIG5zKSB7XG5cdFx0dXBkYXRlTm9kZXMocGFyZW50LCBvbGQuY2hpbGRyZW4sIHZub2RlLmNoaWxkcmVuLCByZWN5Y2xpbmcsIGhvb2tzLCBuZXh0U2libGluZywgbnMpXG5cdFx0dmFyIGRvbVNpemUgPSAwLCBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuXG5cdFx0dm5vZGUuZG9tID0gbnVsbFxuXHRcdGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldXG5cdFx0XHRcdGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLmRvbSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0aWYgKHZub2RlLmRvbSA9PSBudWxsKSB2bm9kZS5kb20gPSBjaGlsZC5kb21cblx0XHRcdFx0XHRkb21TaXplICs9IGNoaWxkLmRvbVNpemUgfHwgMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZG9tU2l6ZSAhPT0gMSkgdm5vZGUuZG9tU2l6ZSA9IGRvbVNpemVcblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gdXBkYXRlRWxlbWVudChvbGQsIHZub2RlLCByZWN5Y2xpbmcsIGhvb2tzLCBucykge1xuXHRcdHZhciBlbGVtZW50ID0gdm5vZGUuZG9tID0gb2xkLmRvbVxuXHRcdG5zID0gZ2V0TmFtZVNwYWNlKHZub2RlKSB8fCBuc1xuXHRcdGlmICh2bm9kZS50YWcgPT09IFwidGV4dGFyZWFcIikge1xuXHRcdFx0aWYgKHZub2RlLmF0dHJzID09IG51bGwpIHZub2RlLmF0dHJzID0ge31cblx0XHRcdGlmICh2bm9kZS50ZXh0ICE9IG51bGwpIHtcblx0XHRcdFx0dm5vZGUuYXR0cnMudmFsdWUgPSB2bm9kZS50ZXh0IC8vRklYTUUgaGFuZGxlMCBtdWx0aXBsZSBjaGlsZHJlblxuXHRcdFx0XHR2bm9kZS50ZXh0ID0gdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHVwZGF0ZUF0dHJzKHZub2RlLCBvbGQuYXR0cnMsIHZub2RlLmF0dHJzLCBucylcblx0XHRpZiAodm5vZGUuYXR0cnMgIT0gbnVsbCAmJiB2bm9kZS5hdHRycy5jb250ZW50ZWRpdGFibGUgIT0gbnVsbCkge1xuXHRcdFx0c2V0Q29udGVudEVkaXRhYmxlKHZub2RlKVxuXHRcdH1cblx0XHRlbHNlIGlmIChvbGQudGV4dCAhPSBudWxsICYmIHZub2RlLnRleHQgIT0gbnVsbCAmJiB2bm9kZS50ZXh0ICE9PSBcIlwiKSB7XG5cdFx0XHRpZiAob2xkLnRleHQudG9TdHJpbmcoKSAhPT0gdm5vZGUudGV4dC50b1N0cmluZygpKSBvbGQuZG9tLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdm5vZGUudGV4dFxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmIChvbGQudGV4dCAhPSBudWxsKSBvbGQuY2hpbGRyZW4gPSBbVm5vZGUoXCIjXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBvbGQudGV4dCwgdW5kZWZpbmVkLCBvbGQuZG9tLmZpcnN0Q2hpbGQpXVxuXHRcdFx0aWYgKHZub2RlLnRleHQgIT0gbnVsbCkgdm5vZGUuY2hpbGRyZW4gPSBbVm5vZGUoXCIjXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB2bm9kZS50ZXh0LCB1bmRlZmluZWQsIHVuZGVmaW5lZCldXG5cdFx0XHR1cGRhdGVOb2RlcyhlbGVtZW50LCBvbGQuY2hpbGRyZW4sIHZub2RlLmNoaWxkcmVuLCByZWN5Y2xpbmcsIGhvb2tzLCBudWxsLCBucylcblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50KHBhcmVudCwgb2xkLCB2bm9kZSwgaG9va3MsIG5leHRTaWJsaW5nLCByZWN5Y2xpbmcsIG5zKSB7XG5cdFx0aWYgKHJlY3ljbGluZykge1xuXHRcdFx0aW5pdENvbXBvbmVudCh2bm9kZSwgaG9va3MpXG5cdFx0fSBlbHNlIHtcblx0XHRcdHZub2RlLmluc3RhbmNlID0gVm5vZGUubm9ybWFsaXplKHZub2RlLl9zdGF0ZS52aWV3LmNhbGwodm5vZGUuc3RhdGUsIHZub2RlKSlcblx0XHRcdGlmICh2bm9kZS5pbnN0YW5jZSA9PT0gdm5vZGUpIHRocm93IEVycm9yKFwiQSB2aWV3IGNhbm5vdCByZXR1cm4gdGhlIHZub2RlIGl0IHJlY2VpdmVkIGFzIGFyZ3VtZW50XCIpXG5cdFx0XHRpZiAodm5vZGUuYXR0cnMgIT0gbnVsbCkgdXBkYXRlTGlmZWN5Y2xlKHZub2RlLmF0dHJzLCB2bm9kZSwgaG9va3MpXG5cdFx0XHR1cGRhdGVMaWZlY3ljbGUodm5vZGUuX3N0YXRlLCB2bm9kZSwgaG9va3MpXG5cdFx0fVxuXHRcdGlmICh2bm9kZS5pbnN0YW5jZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAob2xkLmluc3RhbmNlID09IG51bGwpIGNyZWF0ZU5vZGUocGFyZW50LCB2bm9kZS5pbnN0YW5jZSwgaG9va3MsIG5zLCBuZXh0U2libGluZylcblx0XHRcdGVsc2UgdXBkYXRlTm9kZShwYXJlbnQsIG9sZC5pbnN0YW5jZSwgdm5vZGUuaW5zdGFuY2UsIGhvb2tzLCBuZXh0U2libGluZywgcmVjeWNsaW5nLCBucylcblx0XHRcdHZub2RlLmRvbSA9IHZub2RlLmluc3RhbmNlLmRvbVxuXHRcdFx0dm5vZGUuZG9tU2l6ZSA9IHZub2RlLmluc3RhbmNlLmRvbVNpemVcblx0XHR9XG5cdFx0ZWxzZSBpZiAob2xkLmluc3RhbmNlICE9IG51bGwpIHtcblx0XHRcdHJlbW92ZU5vZGUob2xkLmluc3RhbmNlLCBudWxsKVxuXHRcdFx0dm5vZGUuZG9tID0gdW5kZWZpbmVkXG5cdFx0XHR2bm9kZS5kb21TaXplID0gMFxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHZub2RlLmRvbSA9IG9sZC5kb21cblx0XHRcdHZub2RlLmRvbVNpemUgPSBvbGQuZG9tU2l6ZVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiBpc1JlY3ljbGFibGUob2xkLCB2bm9kZXMpIHtcblx0XHRpZiAob2xkLnBvb2wgIT0gbnVsbCAmJiBNYXRoLmFicyhvbGQucG9vbC5sZW5ndGggLSB2bm9kZXMubGVuZ3RoKSA8PSBNYXRoLmFicyhvbGQubGVuZ3RoIC0gdm5vZGVzLmxlbmd0aCkpIHtcblx0XHRcdHZhciBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZFswXSAmJiBvbGRbMF0uY2hpbGRyZW4gJiYgb2xkWzBdLmNoaWxkcmVuLmxlbmd0aCB8fCAwXG5cdFx0XHR2YXIgcG9vbENoaWxkcmVuTGVuZ3RoID0gb2xkLnBvb2xbMF0gJiYgb2xkLnBvb2xbMF0uY2hpbGRyZW4gJiYgb2xkLnBvb2xbMF0uY2hpbGRyZW4ubGVuZ3RoIHx8IDBcblx0XHRcdHZhciB2bm9kZXNDaGlsZHJlbkxlbmd0aCA9IHZub2Rlc1swXSAmJiB2bm9kZXNbMF0uY2hpbGRyZW4gJiYgdm5vZGVzWzBdLmNoaWxkcmVuLmxlbmd0aCB8fCAwXG5cdFx0XHRpZiAoTWF0aC5hYnMocG9vbENoaWxkcmVuTGVuZ3RoIC0gdm5vZGVzQ2hpbGRyZW5MZW5ndGgpIDw9IE1hdGguYWJzKG9sZENoaWxkcmVuTGVuZ3RoIC0gdm5vZGVzQ2hpbGRyZW5MZW5ndGgpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cdGZ1bmN0aW9uIGdldEtleU1hcCh2bm9kZXMsIGVuZCkge1xuXHRcdHZhciBtYXAgPSB7fSwgaSA9IDBcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVuZDsgaSsrKSB7XG5cdFx0XHR2YXIgdm5vZGUgPSB2bm9kZXNbaV1cblx0XHRcdGlmICh2bm9kZSAhPSBudWxsKSB7XG5cdFx0XHRcdHZhciBrZXkyID0gdm5vZGUua2V5XG5cdFx0XHRcdGlmIChrZXkyICE9IG51bGwpIG1hcFtrZXkyXSA9IGlcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1hcFxuXHR9XG5cdGZ1bmN0aW9uIHRvRnJhZ21lbnQodm5vZGUpIHtcblx0XHR2YXIgY291bnQwID0gdm5vZGUuZG9tU2l6ZVxuXHRcdGlmIChjb3VudDAgIT0gbnVsbCB8fCB2bm9kZS5kb20gPT0gbnVsbCkge1xuXHRcdFx0dmFyIGZyYWdtZW50ID0gJGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KClcblx0XHRcdGlmIChjb3VudDAgPiAwKSB7XG5cdFx0XHRcdHZhciBkb20gPSB2bm9kZS5kb21cblx0XHRcdFx0d2hpbGUgKC0tY291bnQwKSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb20ubmV4dFNpYmxpbmcpXG5cdFx0XHRcdGZyYWdtZW50Lmluc2VydEJlZm9yZShkb20sIGZyYWdtZW50LmZpcnN0Q2hpbGQpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZnJhZ21lbnRcblx0XHR9XG5cdFx0ZWxzZSByZXR1cm4gdm5vZGUuZG9tXG5cdH1cblx0ZnVuY3Rpb24gZ2V0TmV4dFNpYmxpbmcodm5vZGVzLCBpLCBuZXh0U2libGluZykge1xuXHRcdGZvciAoOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodm5vZGVzW2ldICE9IG51bGwgJiYgdm5vZGVzW2ldLmRvbSAhPSBudWxsKSByZXR1cm4gdm5vZGVzW2ldLmRvbVxuXHRcdH1cblx0XHRyZXR1cm4gbmV4dFNpYmxpbmdcblx0fVxuXHRmdW5jdGlvbiBpbnNlcnROb2RlKHBhcmVudCwgZG9tLCBuZXh0U2libGluZykge1xuXHRcdGlmIChuZXh0U2libGluZyAmJiBuZXh0U2libGluZy5wYXJlbnROb2RlKSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGRvbSwgbmV4dFNpYmxpbmcpXG5cdFx0ZWxzZSBwYXJlbnQuYXBwZW5kQ2hpbGQoZG9tKVxuXHR9XG5cdGZ1bmN0aW9uIHNldENvbnRlbnRFZGl0YWJsZSh2bm9kZSkge1xuXHRcdHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuXG5cdFx0aWYgKGNoaWxkcmVuICE9IG51bGwgJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGNoaWxkcmVuWzBdLnRhZyA9PT0gXCI8XCIpIHtcblx0XHRcdHZhciBjb250ZW50ID0gY2hpbGRyZW5bMF0uY2hpbGRyZW5cblx0XHRcdGlmICh2bm9kZS5kb20uaW5uZXJIVE1MICE9PSBjb250ZW50KSB2bm9kZS5kb20uaW5uZXJIVE1MID0gY29udGVudFxuXHRcdH1cblx0XHRlbHNlIGlmICh2bm9kZS50ZXh0ICE9IG51bGwgfHwgY2hpbGRyZW4gIT0gbnVsbCAmJiBjaGlsZHJlbi5sZW5ndGggIT09IDApIHRocm93IG5ldyBFcnJvcihcIkNoaWxkIG5vZGUgb2YgYSBjb250ZW50ZWRpdGFibGUgbXVzdCBiZSB0cnVzdGVkXCIpXG5cdH1cblx0Ly9yZW1vdmVcblx0ZnVuY3Rpb24gcmVtb3ZlTm9kZXModm5vZGVzLCBzdGFydCwgZW5kLCBjb250ZXh0KSB7XG5cdFx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcblx0XHRcdHZhciB2bm9kZSA9IHZub2Rlc1tpXVxuXHRcdFx0aWYgKHZub2RlICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKHZub2RlLnNraXApIHZub2RlLnNraXAgPSBmYWxzZVxuXHRcdFx0XHRlbHNlIHJlbW92ZU5vZGUodm5vZGUsIGNvbnRleHQpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIHJlbW92ZU5vZGUodm5vZGUsIGNvbnRleHQpIHtcblx0XHR2YXIgZXhwZWN0ZWQgPSAxLCBjYWxsZWQgPSAwXG5cdFx0aWYgKHZub2RlLmF0dHJzICYmIHR5cGVvZiB2bm9kZS5hdHRycy5vbmJlZm9yZXJlbW92ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gdm5vZGUuYXR0cnMub25iZWZvcmVyZW1vdmUuY2FsbCh2bm9kZS5zdGF0ZSwgdm5vZGUpXG5cdFx0XHRpZiAocmVzdWx0ICE9IG51bGwgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0ZXhwZWN0ZWQrK1xuXHRcdFx0XHRyZXN1bHQudGhlbihjb250aW51YXRpb24sIGNvbnRpbnVhdGlvbilcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2bm9kZS50YWcgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZub2RlLl9zdGF0ZS5vbmJlZm9yZXJlbW92ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gdm5vZGUuX3N0YXRlLm9uYmVmb3JlcmVtb3ZlLmNhbGwodm5vZGUuc3RhdGUsIHZub2RlKVxuXHRcdFx0aWYgKHJlc3VsdCAhPSBudWxsICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdGV4cGVjdGVkKytcblx0XHRcdFx0cmVzdWx0LnRoZW4oY29udGludWF0aW9uLCBjb250aW51YXRpb24pXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnRpbnVhdGlvbigpXG5cdFx0ZnVuY3Rpb24gY29udGludWF0aW9uKCkge1xuXHRcdFx0aWYgKCsrY2FsbGVkID09PSBleHBlY3RlZCkge1xuXHRcdFx0XHRvbnJlbW92ZSh2bm9kZSlcblx0XHRcdFx0aWYgKHZub2RlLmRvbSkge1xuXHRcdFx0XHRcdHZhciBjb3VudDAgPSB2bm9kZS5kb21TaXplIHx8IDFcblx0XHRcdFx0XHRpZiAoY291bnQwID4gMSkge1xuXHRcdFx0XHRcdFx0dmFyIGRvbSA9IHZub2RlLmRvbVxuXHRcdFx0XHRcdFx0d2hpbGUgKC0tY291bnQwKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZU5vZGVGcm9tRE9NKGRvbS5uZXh0U2libGluZylcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVtb3ZlTm9kZUZyb21ET00odm5vZGUuZG9tKVxuXHRcdFx0XHRcdGlmIChjb250ZXh0ICE9IG51bGwgJiYgdm5vZGUuZG9tU2l6ZSA9PSBudWxsICYmICFoYXNJbnRlZ3JhdGlvbk1ldGhvZHModm5vZGUuYXR0cnMpICYmIHR5cGVvZiB2bm9kZS50YWcgPT09IFwic3RyaW5nXCIpIHsgLy9UT0RPIHRlc3QgY3VzdG9tIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRpZiAoIWNvbnRleHQucG9vbCkgY29udGV4dC5wb29sID0gW3Zub2RlXVxuXHRcdFx0XHRcdFx0ZWxzZSBjb250ZXh0LnBvb2wucHVzaCh2bm9kZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gcmVtb3ZlTm9kZUZyb21ET00obm9kZSkge1xuXHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGVcblx0XHRpZiAocGFyZW50ICE9IG51bGwpIHBhcmVudC5yZW1vdmVDaGlsZChub2RlKVxuXHR9XG5cdGZ1bmN0aW9uIG9ucmVtb3ZlKHZub2RlKSB7XG5cdFx0aWYgKHZub2RlLmF0dHJzICYmIHR5cGVvZiB2bm9kZS5hdHRycy5vbnJlbW92ZSA9PT0gXCJmdW5jdGlvblwiKSB2bm9kZS5hdHRycy5vbnJlbW92ZS5jYWxsKHZub2RlLnN0YXRlLCB2bm9kZSlcblx0XHRpZiAodHlwZW9mIHZub2RlLnRhZyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKHR5cGVvZiB2bm9kZS5fc3RhdGUub25yZW1vdmUgPT09IFwiZnVuY3Rpb25cIikgdm5vZGUuX3N0YXRlLm9ucmVtb3ZlLmNhbGwodm5vZGUuc3RhdGUsIHZub2RlKVxuXHRcdFx0aWYgKHZub2RlLmluc3RhbmNlICE9IG51bGwpIG9ucmVtb3ZlKHZub2RlLmluc3RhbmNlKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgY2hpbGQgPSBjaGlsZHJlbltpXVxuXHRcdFx0XHRcdGlmIChjaGlsZCAhPSBudWxsKSBvbnJlbW92ZShjaGlsZClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvL2F0dHJzMlxuXHRmdW5jdGlvbiBzZXRBdHRycyh2bm9kZSwgYXR0cnMyLCBucykge1xuXHRcdGZvciAodmFyIGtleTIgaW4gYXR0cnMyKSB7XG5cdFx0XHRzZXRBdHRyKHZub2RlLCBrZXkyLCBudWxsLCBhdHRyczJba2V5Ml0sIG5zKVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiBzZXRBdHRyKHZub2RlLCBrZXkyLCBvbGQsIHZhbHVlLCBucykge1xuXHRcdHZhciBlbGVtZW50ID0gdm5vZGUuZG9tXG5cdFx0aWYgKGtleTIgPT09IFwia2V5XCIgfHwga2V5MiA9PT0gXCJpc1wiIHx8IChvbGQgPT09IHZhbHVlICYmICFpc0Zvcm1BdHRyaWJ1dGUodm5vZGUsIGtleTIpKSAmJiB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiIHx8IGlzTGlmZWN5Y2xlTWV0aG9kKGtleTIpKSByZXR1cm5cblx0XHR2YXIgbnNMYXN0SW5kZXggPSBrZXkyLmluZGV4T2YoXCI6XCIpXG5cdFx0aWYgKG5zTGFzdEluZGV4ID4gLTEgJiYga2V5Mi5zdWJzdHIoMCwgbnNMYXN0SW5kZXgpID09PSBcInhsaW5rXCIpIHtcblx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsIGtleTIuc2xpY2UobnNMYXN0SW5kZXggKyAxKSwgdmFsdWUpXG5cdFx0fVxuXHRcdGVsc2UgaWYgKGtleTJbMF0gPT09IFwib1wiICYmIGtleTJbMV0gPT09IFwiblwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB1cGRhdGVFdmVudCh2bm9kZSwga2V5MiwgdmFsdWUpXG5cdFx0ZWxzZSBpZiAoa2V5MiA9PT0gXCJzdHlsZVwiKSB1cGRhdGVTdHlsZShlbGVtZW50LCBvbGQsIHZhbHVlKVxuXHRcdGVsc2UgaWYgKGtleTIgaW4gZWxlbWVudCAmJiAhaXNBdHRyaWJ1dGUoa2V5MikgJiYgbnMgPT09IHVuZGVmaW5lZCAmJiAhaXNDdXN0b21FbGVtZW50KHZub2RlKSkge1xuXHRcdFx0aWYgKGtleTIgPT09IFwidmFsdWVcIikge1xuXHRcdFx0XHR2YXIgbm9ybWFsaXplZDAgPSBcIlwiICsgdmFsdWUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHRcdFx0XHQvL3NldHRpbmcgaW5wdXRbdmFsdWVdIHRvIHNhbWUgdmFsdWUgYnkgdHlwaW5nIG9uIGZvY3VzZWQgZWxlbWVudCBtb3ZlcyBjdXJzb3IgdG8gZW5kIGluIENocm9tZVxuXHRcdFx0XHRpZiAoKHZub2RlLnRhZyA9PT0gXCJpbnB1dFwiIHx8IHZub2RlLnRhZyA9PT0gXCJ0ZXh0YXJlYVwiKSAmJiB2bm9kZS5kb20udmFsdWUgPT09IG5vcm1hbGl6ZWQwICYmIHZub2RlLmRvbSA9PT0gJGRvYy5hY3RpdmVFbGVtZW50KSByZXR1cm5cblx0XHRcdFx0Ly9zZXR0aW5nIHNlbGVjdFt2YWx1ZV0gdG8gc2FtZSB2YWx1ZSB3aGlsZSBoYXZpbmcgc2VsZWN0IG9wZW4gYmxpbmtzIHNlbGVjdCBkcm9wZG93biBpbiBDaHJvbWVcblx0XHRcdFx0aWYgKHZub2RlLnRhZyA9PT0gXCJzZWxlY3RcIikge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0aWYgKHZub2RlLmRvbS5zZWxlY3RlZEluZGV4ID09PSAtMSAmJiB2bm9kZS5kb20gPT09ICRkb2MuYWN0aXZlRWxlbWVudCkgcmV0dXJuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChvbGQgIT09IG51bGwgJiYgdm5vZGUuZG9tLnZhbHVlID09PSBub3JtYWxpemVkMCAmJiB2bm9kZS5kb20gPT09ICRkb2MuYWN0aXZlRWxlbWVudCkgcmV0dXJuXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vc2V0dGluZyBvcHRpb25bdmFsdWVdIHRvIHNhbWUgdmFsdWUgd2hpbGUgaGF2aW5nIHNlbGVjdCBvcGVuIGJsaW5rcyBzZWxlY3QgZHJvcGRvd24gaW4gQ2hyb21lXG5cdFx0XHRcdGlmICh2bm9kZS50YWcgPT09IFwib3B0aW9uXCIgJiYgb2xkICE9IG51bGwgJiYgdm5vZGUuZG9tLnZhbHVlID09PSBub3JtYWxpemVkMCkgcmV0dXJuXG5cdFx0XHR9XG5cdFx0XHQvLyBJZiB5b3UgYXNzaWduIGFuIGlucHV0IHR5cGUxIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBJRSAxMSB3aXRoIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiwgYW4gZXJyb3IwIHdpbGwgb2NjdXIuXG5cdFx0XHRpZiAodm5vZGUudGFnID09PSBcImlucHV0XCIgJiYga2V5MiA9PT0gXCJ0eXBlXCIpIHtcblx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5MiwgdmFsdWUpXG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0ZWxlbWVudFtrZXkyXSA9IHZhbHVlXG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdFx0aWYgKHZhbHVlKSBlbGVtZW50LnNldEF0dHJpYnV0ZShrZXkyLCBcIlwiKVxuXHRcdFx0XHRlbHNlIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleTIpXG5cdFx0XHR9XG5cdFx0XHRlbHNlIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleTIgPT09IFwiY2xhc3NOYW1lXCIgPyBcImNsYXNzXCIgOiBrZXkyLCB2YWx1ZSlcblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gc2V0TGF0ZUF0dHJzKHZub2RlKSB7XG5cdFx0dmFyIGF0dHJzMiA9IHZub2RlLmF0dHJzXG5cdFx0aWYgKHZub2RlLnRhZyA9PT0gXCJzZWxlY3RcIiAmJiBhdHRyczIgIT0gbnVsbCkge1xuXHRcdFx0aWYgKFwidmFsdWVcIiBpbiBhdHRyczIpIHNldEF0dHIodm5vZGUsIFwidmFsdWVcIiwgbnVsbCwgYXR0cnMyLnZhbHVlLCB1bmRlZmluZWQpXG5cdFx0XHRpZiAoXCJzZWxlY3RlZEluZGV4XCIgaW4gYXR0cnMyKSBzZXRBdHRyKHZub2RlLCBcInNlbGVjdGVkSW5kZXhcIiwgbnVsbCwgYXR0cnMyLnNlbGVjdGVkSW5kZXgsIHVuZGVmaW5lZClcblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gdXBkYXRlQXR0cnModm5vZGUsIG9sZCwgYXR0cnMyLCBucykge1xuXHRcdGlmIChhdHRyczIgIT0gbnVsbCkge1xuXHRcdFx0Zm9yICh2YXIga2V5MiBpbiBhdHRyczIpIHtcblx0XHRcdFx0c2V0QXR0cih2bm9kZSwga2V5Miwgb2xkICYmIG9sZFtrZXkyXSwgYXR0cnMyW2tleTJdLCBucylcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG9sZCAhPSBudWxsKSB7XG5cdFx0XHRmb3IgKHZhciBrZXkyIGluIG9sZCkge1xuXHRcdFx0XHRpZiAoYXR0cnMyID09IG51bGwgfHwgIShrZXkyIGluIGF0dHJzMikpIHtcblx0XHRcdFx0XHRpZiAoa2V5MiA9PT0gXCJjbGFzc05hbWVcIikga2V5MiA9IFwiY2xhc3NcIlxuXHRcdFx0XHRcdGlmIChrZXkyWzBdID09PSBcIm9cIiAmJiBrZXkyWzFdID09PSBcIm5cIiAmJiAhaXNMaWZlY3ljbGVNZXRob2Qoa2V5MikpIHVwZGF0ZUV2ZW50KHZub2RlLCBrZXkyLCB1bmRlZmluZWQpXG5cdFx0XHRcdFx0ZWxzZSBpZiAoa2V5MiAhPT0gXCJrZXlcIikgdm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShrZXkyKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIGlzRm9ybUF0dHJpYnV0ZSh2bm9kZSwgYXR0cikge1xuXHRcdHJldHVybiBhdHRyID09PSBcInZhbHVlXCIgfHwgYXR0ciA9PT0gXCJjaGVja2VkXCIgfHwgYXR0ciA9PT0gXCJzZWxlY3RlZEluZGV4XCIgfHwgYXR0ciA9PT0gXCJzZWxlY3RlZFwiICYmIHZub2RlLmRvbSA9PT0gJGRvYy5hY3RpdmVFbGVtZW50XG5cdH1cblx0ZnVuY3Rpb24gaXNMaWZlY3ljbGVNZXRob2QoYXR0cikge1xuXHRcdHJldHVybiBhdHRyID09PSBcIm9uaW5pdFwiIHx8IGF0dHIgPT09IFwib25jcmVhdGVcIiB8fCBhdHRyID09PSBcIm9udXBkYXRlXCIgfHwgYXR0ciA9PT0gXCJvbnJlbW92ZVwiIHx8IGF0dHIgPT09IFwib25iZWZvcmVyZW1vdmVcIiB8fCBhdHRyID09PSBcIm9uYmVmb3JldXBkYXRlXCJcblx0fVxuXHRmdW5jdGlvbiBpc0F0dHJpYnV0ZShhdHRyKSB7XG5cdFx0cmV0dXJuIGF0dHIgPT09IFwiaHJlZlwiIHx8IGF0dHIgPT09IFwibGlzdFwiIHx8IGF0dHIgPT09IFwiZm9ybVwiIHx8IGF0dHIgPT09IFwid2lkdGhcIiB8fCBhdHRyID09PSBcImhlaWdodFwiLy8gfHwgYXR0ciA9PT0gXCJ0eXBlXCJcblx0fVxuXHRmdW5jdGlvbiBpc0N1c3RvbUVsZW1lbnQodm5vZGUpe1xuXHRcdHJldHVybiB2bm9kZS5hdHRycy5pcyB8fCB2bm9kZS50YWcuaW5kZXhPZihcIi1cIikgPiAtMVxuXHR9XG5cdGZ1bmN0aW9uIGhhc0ludGVncmF0aW9uTWV0aG9kcyhzb3VyY2UpIHtcblx0XHRyZXR1cm4gc291cmNlICE9IG51bGwgJiYgKHNvdXJjZS5vbmNyZWF0ZSB8fCBzb3VyY2Uub251cGRhdGUgfHwgc291cmNlLm9uYmVmb3JlcmVtb3ZlIHx8IHNvdXJjZS5vbnJlbW92ZSlcblx0fVxuXHQvL3N0eWxlXG5cdGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKGVsZW1lbnQsIG9sZCwgc3R5bGUpIHtcblx0XHRpZiAob2xkID09PSBzdHlsZSkgZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJcIiwgb2xkID0gbnVsbFxuXHRcdGlmIChzdHlsZSA9PSBudWxsKSBlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiXG5cdFx0ZWxzZSBpZiAodHlwZW9mIHN0eWxlID09PSBcInN0cmluZ1wiKSBlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBzdHlsZVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKHR5cGVvZiBvbGQgPT09IFwic3RyaW5nXCIpIGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwiXCJcblx0XHRcdGZvciAodmFyIGtleTIgaW4gc3R5bGUpIHtcblx0XHRcdFx0ZWxlbWVudC5zdHlsZVtrZXkyXSA9IHN0eWxlW2tleTJdXG5cdFx0XHR9XG5cdFx0XHRpZiAob2xkICE9IG51bGwgJiYgdHlwZW9mIG9sZCAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkyIGluIG9sZCkge1xuXHRcdFx0XHRcdGlmICghKGtleTIgaW4gc3R5bGUpKSBlbGVtZW50LnN0eWxlW2tleTJdID0gXCJcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vZXZlbnRcblx0ZnVuY3Rpb24gdXBkYXRlRXZlbnQodm5vZGUsIGtleTIsIHZhbHVlKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSB2bm9kZS5kb21cblx0XHR2YXIgY2FsbGJhY2sgPSB0eXBlb2Ygb25ldmVudCAhPT0gXCJmdW5jdGlvblwiID8gdmFsdWUgOiBmdW5jdGlvbihlKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gdmFsdWUuY2FsbChlbGVtZW50LCBlKVxuXHRcdFx0b25ldmVudC5jYWxsKGVsZW1lbnQsIGUpXG5cdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0fVxuXHRcdGlmIChrZXkyIGluIGVsZW1lbnQpIGVsZW1lbnRba2V5Ml0gPSB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IGNhbGxiYWNrIDogbnVsbFxuXHRcdGVsc2Uge1xuXHRcdFx0dmFyIGV2ZW50TmFtZSA9IGtleTIuc2xpY2UoMilcblx0XHRcdGlmICh2bm9kZS5ldmVudHMgPT09IHVuZGVmaW5lZCkgdm5vZGUuZXZlbnRzID0ge31cblx0XHRcdGlmICh2bm9kZS5ldmVudHNba2V5Ml0gPT09IGNhbGxiYWNrKSByZXR1cm5cblx0XHRcdGlmICh2bm9kZS5ldmVudHNba2V5Ml0gIT0gbnVsbCkgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdm5vZGUuZXZlbnRzW2tleTJdLCBmYWxzZSlcblx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHR2bm9kZS5ldmVudHNba2V5Ml0gPSBjYWxsYmFja1xuXHRcdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB2bm9kZS5ldmVudHNba2V5Ml0sIGZhbHNlKVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvL2xpZmVjeWNsZVxuXHRmdW5jdGlvbiBpbml0TGlmZWN5Y2xlKHNvdXJjZSwgdm5vZGUsIGhvb2tzKSB7XG5cdFx0aWYgKHR5cGVvZiBzb3VyY2Uub25pbml0ID09PSBcImZ1bmN0aW9uXCIpIHNvdXJjZS5vbmluaXQuY2FsbCh2bm9kZS5zdGF0ZSwgdm5vZGUpXG5cdFx0aWYgKHR5cGVvZiBzb3VyY2Uub25jcmVhdGUgPT09IFwiZnVuY3Rpb25cIikgaG9va3MucHVzaChzb3VyY2Uub25jcmVhdGUuYmluZCh2bm9kZS5zdGF0ZSwgdm5vZGUpKVxuXHR9XG5cdGZ1bmN0aW9uIHVwZGF0ZUxpZmVjeWNsZShzb3VyY2UsIHZub2RlLCBob29rcykge1xuXHRcdGlmICh0eXBlb2Ygc291cmNlLm9udXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIGhvb2tzLnB1c2goc291cmNlLm9udXBkYXRlLmJpbmQodm5vZGUuc3RhdGUsIHZub2RlKSlcblx0fVxuXHRmdW5jdGlvbiBzaG91bGROb3RVcGRhdGUodm5vZGUsIG9sZCkge1xuXHRcdHZhciBmb3JjZVZub2RlVXBkYXRlLCBmb3JjZUNvbXBvbmVudFVwZGF0ZVxuXHRcdGlmICh2bm9kZS5hdHRycyAhPSBudWxsICYmIHR5cGVvZiB2bm9kZS5hdHRycy5vbmJlZm9yZXVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSBmb3JjZVZub2RlVXBkYXRlID0gdm5vZGUuYXR0cnMub25iZWZvcmV1cGRhdGUuY2FsbCh2bm9kZS5zdGF0ZSwgdm5vZGUsIG9sZClcblx0XHRpZiAodHlwZW9mIHZub2RlLnRhZyAhPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2Ygdm5vZGUuX3N0YXRlLm9uYmVmb3JldXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIGZvcmNlQ29tcG9uZW50VXBkYXRlID0gdm5vZGUuX3N0YXRlLm9uYmVmb3JldXBkYXRlLmNhbGwodm5vZGUuc3RhdGUsIHZub2RlLCBvbGQpXG5cdFx0aWYgKCEoZm9yY2VWbm9kZVVwZGF0ZSA9PT0gdW5kZWZpbmVkICYmIGZvcmNlQ29tcG9uZW50VXBkYXRlID09PSB1bmRlZmluZWQpICYmICFmb3JjZVZub2RlVXBkYXRlICYmICFmb3JjZUNvbXBvbmVudFVwZGF0ZSkge1xuXHRcdFx0dm5vZGUuZG9tID0gb2xkLmRvbVxuXHRcdFx0dm5vZGUuZG9tU2l6ZSA9IG9sZC5kb21TaXplXG5cdFx0XHR2bm9kZS5pbnN0YW5jZSA9IG9sZC5pbnN0YW5jZVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblx0ZnVuY3Rpb24gcmVuZGVyKGRvbSwgdm5vZGVzKSB7XG5cdFx0aWYgKCFkb20pIHRocm93IG5ldyBFcnJvcihcIkVuc3VyZSB0aGUgRE9NIGVsZW1lbnQgYmVpbmcgcGFzc2VkIHRvIG0ucm91dGUvbS5tb3VudC9tLnJlbmRlciBpcyBub3QgdW5kZWZpbmVkLlwiKVxuXHRcdHZhciBob29rcyA9IFtdXG5cdFx0dmFyIGFjdGl2ZSA9ICRkb2MuYWN0aXZlRWxlbWVudFxuXHRcdHZhciBuYW1lc3BhY2UgPSBkb20ubmFtZXNwYWNlVVJJXG5cdFx0Ly8gRmlyc3QgdGltZTAgcmVuZGVyaW5nIGludG8gYSBub2RlIGNsZWFycyBpdCBvdXRcblx0XHRpZiAoZG9tLnZub2RlcyA9PSBudWxsKSBkb20udGV4dENvbnRlbnQgPSBcIlwiXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHZub2RlcykpIHZub2RlcyA9IFt2bm9kZXNdXG5cdFx0dXBkYXRlTm9kZXMoZG9tLCBkb20udm5vZGVzLCBWbm9kZS5ub3JtYWxpemVDaGlsZHJlbih2bm9kZXMpLCBmYWxzZSwgaG9va3MsIG51bGwsIG5hbWVzcGFjZSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgPyB1bmRlZmluZWQgOiBuYW1lc3BhY2UpXG5cdFx0ZG9tLnZub2RlcyA9IHZub2Rlc1xuXHRcdC8vIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHJldHVybiBudWxsIGluIElFIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9hY3RpdmVFbGVtZW50XG5cdFx0aWYgKGFjdGl2ZSAhPSBudWxsICYmICRkb2MuYWN0aXZlRWxlbWVudCAhPT0gYWN0aXZlKSBhY3RpdmUuZm9jdXMoKVxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIGhvb2tzW2ldKClcblx0fVxuXHRyZXR1cm4ge3JlbmRlcjogcmVuZGVyLCBzZXRFdmVudENhbGxiYWNrOiBzZXRFdmVudENhbGxiYWNrfVxufVxuZnVuY3Rpb24gdGhyb3R0bGUoY2FsbGJhY2spIHtcblx0Ly82MGZwcyB0cmFuc2xhdGVzIHRvIDE2LjZtcywgcm91bmQgaXQgZG93biBzaW5jZSBzZXRUaW1lb3V0IHJlcXVpcmVzIGludFxuXHR2YXIgdGltZSA9IDE2XG5cdHZhciBsYXN0ID0gMCwgcGVuZGluZyA9IG51bGxcblx0dmFyIHRpbWVvdXQgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBzZXRUaW1lb3V0XG5cdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbm93ID0gRGF0ZS5ub3coKVxuXHRcdGlmIChsYXN0ID09PSAwIHx8IG5vdyAtIGxhc3QgPj0gdGltZSkge1xuXHRcdFx0bGFzdCA9IG5vd1xuXHRcdFx0Y2FsbGJhY2soKVxuXHRcdH1cblx0XHRlbHNlIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG5cdFx0XHRwZW5kaW5nID0gdGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0cGVuZGluZyA9IG51bGxcblx0XHRcdFx0Y2FsbGJhY2soKVxuXHRcdFx0XHRsYXN0ID0gRGF0ZS5ub3coKVxuXHRcdFx0fSwgdGltZSAtIChub3cgLSBsYXN0KSlcblx0XHR9XG5cdH1cbn1cbnZhciBfMTEgPSBmdW5jdGlvbigkd2luZG93KSB7XG5cdHZhciByZW5kZXJTZXJ2aWNlID0gY29yZVJlbmRlcmVyKCR3aW5kb3cpXG5cdHJlbmRlclNlcnZpY2Uuc2V0RXZlbnRDYWxsYmFjayhmdW5jdGlvbihlKSB7XG5cdFx0aWYgKGUucmVkcmF3ID09PSBmYWxzZSkgZS5yZWRyYXcgPSB1bmRlZmluZWRcblx0XHRlbHNlIHJlZHJhdygpXG5cdH0pXG5cdHZhciBjYWxsYmFja3MgPSBbXVxuXHRmdW5jdGlvbiBzdWJzY3JpYmUoa2V5MSwgY2FsbGJhY2spIHtcblx0XHR1bnN1YnNjcmliZShrZXkxKVxuXHRcdGNhbGxiYWNrcy5wdXNoKGtleTEsIHRocm90dGxlKGNhbGxiYWNrKSlcblx0fVxuXHRmdW5jdGlvbiB1bnN1YnNjcmliZShrZXkxKSB7XG5cdFx0dmFyIGluZGV4ID0gY2FsbGJhY2tzLmluZGV4T2Yoa2V5MSlcblx0XHRpZiAoaW5kZXggPiAtMSkgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMilcblx0fVxuXHRmdW5jdGlvbiByZWRyYXcoKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpICs9IDIpIHtcblx0XHRcdGNhbGxiYWNrc1tpXSgpXG5cdFx0fVxuXHR9XG5cdHJldHVybiB7c3Vic2NyaWJlOiBzdWJzY3JpYmUsIHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSwgcmVkcmF3OiByZWRyYXcsIHJlbmRlcjogcmVuZGVyU2VydmljZS5yZW5kZXJ9XG59XG52YXIgcmVkcmF3U2VydmljZSA9IF8xMSh3aW5kb3cpXG5yZXF1ZXN0U2VydmljZS5zZXRDb21wbGV0aW9uQ2FsbGJhY2socmVkcmF3U2VydmljZS5yZWRyYXcpXG52YXIgXzE2ID0gZnVuY3Rpb24ocmVkcmF3U2VydmljZTApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHJvb3QsIGNvbXBvbmVudCkge1xuXHRcdGlmIChjb21wb25lbnQgPT09IG51bGwpIHtcblx0XHRcdHJlZHJhd1NlcnZpY2UwLnJlbmRlcihyb290LCBbXSlcblx0XHRcdHJlZHJhd1NlcnZpY2UwLnVuc3Vic2NyaWJlKHJvb3QpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0XG5cdFx0aWYgKGNvbXBvbmVudC52aWV3ID09IG51bGwgJiYgdHlwZW9mIGNvbXBvbmVudCAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJtLm1vdW50KGVsZW1lbnQsIGNvbXBvbmVudCkgZXhwZWN0cyBhIGNvbXBvbmVudCwgbm90IGEgdm5vZGVcIilcblx0XHRcblx0XHR2YXIgcnVuMCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVkcmF3U2VydmljZTAucmVuZGVyKHJvb3QsIFZub2RlKGNvbXBvbmVudCkpXG5cdFx0fVxuXHRcdHJlZHJhd1NlcnZpY2UwLnN1YnNjcmliZShyb290LCBydW4wKVxuXHRcdHJlZHJhd1NlcnZpY2UwLnJlZHJhdygpXG5cdH1cbn1cbm0ubW91bnQgPSBfMTYocmVkcmF3U2VydmljZSlcbnZhciBQcm9taXNlID0gUHJvbWlzZVBvbHlmaWxsXG52YXIgcGFyc2VRdWVyeVN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZykge1xuXHRpZiAoc3RyaW5nID09PSBcIlwiIHx8IHN0cmluZyA9PSBudWxsKSByZXR1cm4ge31cblx0aWYgKHN0cmluZy5jaGFyQXQoMCkgPT09IFwiP1wiKSBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMSlcblx0dmFyIGVudHJpZXMgPSBzdHJpbmcuc3BsaXQoXCImXCIpLCBkYXRhMCA9IHt9LCBjb3VudGVycyA9IHt9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBlbnRyeSA9IGVudHJpZXNbaV0uc3BsaXQoXCI9XCIpXG5cdFx0dmFyIGtleTUgPSBkZWNvZGVVUklDb21wb25lbnQoZW50cnlbMF0pXG5cdFx0dmFyIHZhbHVlID0gZW50cnkubGVuZ3RoID09PSAyID8gZGVjb2RlVVJJQ29tcG9uZW50KGVudHJ5WzFdKSA6IFwiXCJcblx0XHRpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB2YWx1ZSA9IHRydWVcblx0XHRlbHNlIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB2YWx1ZSA9IGZhbHNlXG5cdFx0dmFyIGxldmVscyA9IGtleTUuc3BsaXQoL1xcXVxcWz98XFxbLylcblx0XHR2YXIgY3Vyc29yID0gZGF0YTBcblx0XHRpZiAoa2V5NS5pbmRleE9mKFwiW1wiKSA+IC0xKSBsZXZlbHMucG9wKClcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGxldmVscy5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGxldmVsID0gbGV2ZWxzW2pdLCBuZXh0TGV2ZWwgPSBsZXZlbHNbaiArIDFdXG5cdFx0XHR2YXIgaXNOdW1iZXIgPSBuZXh0TGV2ZWwgPT0gXCJcIiB8fCAhaXNOYU4ocGFyc2VJbnQobmV4dExldmVsLCAxMCkpXG5cdFx0XHR2YXIgaXNWYWx1ZSA9IGogPT09IGxldmVscy5sZW5ndGggLSAxXG5cdFx0XHRpZiAobGV2ZWwgPT09IFwiXCIpIHtcblx0XHRcdFx0dmFyIGtleTUgPSBsZXZlbHMuc2xpY2UoMCwgaikuam9pbigpXG5cdFx0XHRcdGlmIChjb3VudGVyc1trZXk1XSA9PSBudWxsKSBjb3VudGVyc1trZXk1XSA9IDBcblx0XHRcdFx0bGV2ZWwgPSBjb3VudGVyc1trZXk1XSsrXG5cdFx0XHR9XG5cdFx0XHRpZiAoY3Vyc29yW2xldmVsXSA9PSBudWxsKSB7XG5cdFx0XHRcdGN1cnNvcltsZXZlbF0gPSBpc1ZhbHVlID8gdmFsdWUgOiBpc051bWJlciA/IFtdIDoge31cblx0XHRcdH1cblx0XHRcdGN1cnNvciA9IGN1cnNvcltsZXZlbF1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGEwXG59XG52YXIgY29yZVJvdXRlciA9IGZ1bmN0aW9uKCR3aW5kb3cpIHtcblx0dmFyIHN1cHBvcnRzUHVzaFN0YXRlID0gdHlwZW9mICR3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgPT09IFwiZnVuY3Rpb25cIlxuXHR2YXIgY2FsbEFzeW5jMCA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHNldEltbWVkaWF0ZSA6IHNldFRpbWVvdXRcblx0ZnVuY3Rpb24gbm9ybWFsaXplMShmcmFnbWVudDApIHtcblx0XHR2YXIgZGF0YSA9ICR3aW5kb3cubG9jYXRpb25bZnJhZ21lbnQwXS5yZXBsYWNlKC8oPzolW2EtZjg5XVthLWYwLTldKSsvZ2ltLCBkZWNvZGVVUklDb21wb25lbnQpXG5cdFx0aWYgKGZyYWdtZW50MCA9PT0gXCJwYXRobmFtZVwiICYmIGRhdGFbMF0gIT09IFwiL1wiKSBkYXRhID0gXCIvXCIgKyBkYXRhXG5cdFx0cmV0dXJuIGRhdGFcblx0fVxuXHR2YXIgYXN5bmNJZFxuXHRmdW5jdGlvbiBkZWJvdW5jZUFzeW5jKGNhbGxiYWNrMCkge1xuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdGlmIChhc3luY0lkICE9IG51bGwpIHJldHVyblxuXHRcdFx0YXN5bmNJZCA9IGNhbGxBc3luYzAoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGFzeW5jSWQgPSBudWxsXG5cdFx0XHRcdGNhbGxiYWNrMCgpXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiBwYXJzZVBhdGgocGF0aCwgcXVlcnlEYXRhLCBoYXNoRGF0YSkge1xuXHRcdHZhciBxdWVyeUluZGV4ID0gcGF0aC5pbmRleE9mKFwiP1wiKVxuXHRcdHZhciBoYXNoSW5kZXggPSBwYXRoLmluZGV4T2YoXCIjXCIpXG5cdFx0dmFyIHBhdGhFbmQgPSBxdWVyeUluZGV4ID4gLTEgPyBxdWVyeUluZGV4IDogaGFzaEluZGV4ID4gLTEgPyBoYXNoSW5kZXggOiBwYXRoLmxlbmd0aFxuXHRcdGlmIChxdWVyeUluZGV4ID4gLTEpIHtcblx0XHRcdHZhciBxdWVyeUVuZCA9IGhhc2hJbmRleCA+IC0xID8gaGFzaEluZGV4IDogcGF0aC5sZW5ndGhcblx0XHRcdHZhciBxdWVyeVBhcmFtcyA9IHBhcnNlUXVlcnlTdHJpbmcocGF0aC5zbGljZShxdWVyeUluZGV4ICsgMSwgcXVlcnlFbmQpKVxuXHRcdFx0Zm9yICh2YXIga2V5NCBpbiBxdWVyeVBhcmFtcykgcXVlcnlEYXRhW2tleTRdID0gcXVlcnlQYXJhbXNba2V5NF1cblx0XHR9XG5cdFx0aWYgKGhhc2hJbmRleCA+IC0xKSB7XG5cdFx0XHR2YXIgaGFzaFBhcmFtcyA9IHBhcnNlUXVlcnlTdHJpbmcocGF0aC5zbGljZShoYXNoSW5kZXggKyAxKSlcblx0XHRcdGZvciAodmFyIGtleTQgaW4gaGFzaFBhcmFtcykgaGFzaERhdGFba2V5NF0gPSBoYXNoUGFyYW1zW2tleTRdXG5cdFx0fVxuXHRcdHJldHVybiBwYXRoLnNsaWNlKDAsIHBhdGhFbmQpXG5cdH1cblx0dmFyIHJvdXRlciA9IHtwcmVmaXg6IFwiIyFcIn1cblx0cm91dGVyLmdldFBhdGggPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgdHlwZTIgPSByb3V0ZXIucHJlZml4LmNoYXJBdCgwKVxuXHRcdHN3aXRjaCAodHlwZTIpIHtcblx0XHRcdGNhc2UgXCIjXCI6IHJldHVybiBub3JtYWxpemUxKFwiaGFzaFwiKS5zbGljZShyb3V0ZXIucHJlZml4Lmxlbmd0aClcblx0XHRcdGNhc2UgXCI/XCI6IHJldHVybiBub3JtYWxpemUxKFwic2VhcmNoXCIpLnNsaWNlKHJvdXRlci5wcmVmaXgubGVuZ3RoKSArIG5vcm1hbGl6ZTEoXCJoYXNoXCIpXG5cdFx0XHRkZWZhdWx0OiByZXR1cm4gbm9ybWFsaXplMShcInBhdGhuYW1lXCIpLnNsaWNlKHJvdXRlci5wcmVmaXgubGVuZ3RoKSArIG5vcm1hbGl6ZTEoXCJzZWFyY2hcIikgKyBub3JtYWxpemUxKFwiaGFzaFwiKVxuXHRcdH1cblx0fVxuXHRyb3V0ZXIuc2V0UGF0aCA9IGZ1bmN0aW9uKHBhdGgsIGRhdGEsIG9wdGlvbnMpIHtcblx0XHR2YXIgcXVlcnlEYXRhID0ge30sIGhhc2hEYXRhID0ge31cblx0XHRwYXRoID0gcGFyc2VQYXRoKHBhdGgsIHF1ZXJ5RGF0YSwgaGFzaERhdGEpXG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkge1xuXHRcdFx0Zm9yICh2YXIga2V5NCBpbiBkYXRhKSBxdWVyeURhdGFba2V5NF0gPSBkYXRhW2tleTRdXG5cdFx0XHRwYXRoID0gcGF0aC5yZXBsYWNlKC86KFteXFwvXSspL2csIGZ1bmN0aW9uKG1hdGNoMiwgdG9rZW4pIHtcblx0XHRcdFx0ZGVsZXRlIHF1ZXJ5RGF0YVt0b2tlbl1cblx0XHRcdFx0cmV0dXJuIGRhdGFbdG9rZW5dXG5cdFx0XHR9KVxuXHRcdH1cblx0XHR2YXIgcXVlcnkgPSBidWlsZFF1ZXJ5U3RyaW5nKHF1ZXJ5RGF0YSlcblx0XHRpZiAocXVlcnkpIHBhdGggKz0gXCI/XCIgKyBxdWVyeVxuXHRcdHZhciBoYXNoID0gYnVpbGRRdWVyeVN0cmluZyhoYXNoRGF0YSlcblx0XHRpZiAoaGFzaCkgcGF0aCArPSBcIiNcIiArIGhhc2hcblx0XHRpZiAoc3VwcG9ydHNQdXNoU3RhdGUpIHtcblx0XHRcdHZhciBzdGF0ZSA9IG9wdGlvbnMgPyBvcHRpb25zLnN0YXRlIDogbnVsbFxuXHRcdFx0dmFyIHRpdGxlID0gb3B0aW9ucyA/IG9wdGlvbnMudGl0bGUgOiBudWxsXG5cdFx0XHQkd2luZG93Lm9ucG9wc3RhdGUoKVxuXHRcdFx0aWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSAkd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCB0aXRsZSwgcm91dGVyLnByZWZpeCArIHBhdGgpXG5cdFx0XHRlbHNlICR3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGUsIHRpdGxlLCByb3V0ZXIucHJlZml4ICsgcGF0aClcblx0XHR9XG5cdFx0ZWxzZSAkd2luZG93LmxvY2F0aW9uLmhyZWYgPSByb3V0ZXIucHJlZml4ICsgcGF0aFxuXHR9XG5cdHJvdXRlci5kZWZpbmVSb3V0ZXMgPSBmdW5jdGlvbihyb3V0ZXMsIHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGZ1bmN0aW9uIHJlc29sdmVSb3V0ZSgpIHtcblx0XHRcdHZhciBwYXRoID0gcm91dGVyLmdldFBhdGgoKVxuXHRcdFx0dmFyIHBhcmFtcyA9IHt9XG5cdFx0XHR2YXIgcGF0aG5hbWUgPSBwYXJzZVBhdGgocGF0aCwgcGFyYW1zLCBwYXJhbXMpXG5cdFx0XHR2YXIgc3RhdGUgPSAkd2luZG93Lmhpc3Rvcnkuc3RhdGVcblx0XHRcdGlmIChzdGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdGZvciAodmFyIGsgaW4gc3RhdGUpIHBhcmFtc1trXSA9IHN0YXRlW2tdXG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciByb3V0ZTAgaW4gcm91dGVzKSB7XG5cdFx0XHRcdHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChcIl5cIiArIHJvdXRlMC5yZXBsYWNlKC86W15cXC9dKz9cXC57M30vZywgXCIoLio/KVwiKS5yZXBsYWNlKC86W15cXC9dKy9nLCBcIihbXlxcXFwvXSspXCIpICsgXCJcXC8/JFwiKVxuXHRcdFx0XHRpZiAobWF0Y2hlci50ZXN0KHBhdGhuYW1lKSkge1xuXHRcdFx0XHRcdHBhdGhuYW1lLnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIga2V5cyA9IHJvdXRlMC5tYXRjaCgvOlteXFwvXSsvZykgfHwgW11cblx0XHRcdFx0XHRcdHZhciB2YWx1ZXMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSwgLTIpXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0cGFyYW1zW2tleXNbaV0ucmVwbGFjZSgvOnxcXC4vZywgXCJcIildID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlc1tpXSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlc29sdmUocm91dGVzW3JvdXRlMF0sIHBhcmFtcywgcGF0aCwgcm91dGUwKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlamVjdChwYXRoLCBwYXJhbXMpXG5cdFx0fVxuXHRcdGlmIChzdXBwb3J0c1B1c2hTdGF0ZSkgJHdpbmRvdy5vbnBvcHN0YXRlID0gZGVib3VuY2VBc3luYyhyZXNvbHZlUm91dGUpXG5cdFx0ZWxzZSBpZiAocm91dGVyLnByZWZpeC5jaGFyQXQoMCkgPT09IFwiI1wiKSAkd2luZG93Lm9uaGFzaGNoYW5nZSA9IHJlc29sdmVSb3V0ZVxuXHRcdHJlc29sdmVSb3V0ZSgpXG5cdH1cblx0cmV0dXJuIHJvdXRlclxufVxudmFyIF8yMCA9IGZ1bmN0aW9uKCR3aW5kb3csIHJlZHJhd1NlcnZpY2UwKSB7XG5cdHZhciByb3V0ZVNlcnZpY2UgPSBjb3JlUm91dGVyKCR3aW5kb3cpXG5cdHZhciBpZGVudGl0eSA9IGZ1bmN0aW9uKHYpIHtyZXR1cm4gdn1cblx0dmFyIHJlbmRlcjEsIGNvbXBvbmVudCwgYXR0cnMzLCBjdXJyZW50UGF0aCwgbGFzdFVwZGF0ZVxuXHR2YXIgcm91dGUgPSBmdW5jdGlvbihyb290LCBkZWZhdWx0Um91dGUsIHJvdXRlcykge1xuXHRcdGlmIChyb290ID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkVuc3VyZSB0aGUgRE9NIGVsZW1lbnQgdGhhdCB3YXMgcGFzc2VkIHRvIGBtLnJvdXRlYCBpcyBub3QgdW5kZWZpbmVkXCIpXG5cdFx0dmFyIHJ1bjEgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmIChyZW5kZXIxICE9IG51bGwpIHJlZHJhd1NlcnZpY2UwLnJlbmRlcihyb290LCByZW5kZXIxKFZub2RlKGNvbXBvbmVudCwgYXR0cnMzLmtleSwgYXR0cnMzKSkpXG5cdFx0fVxuXHRcdHZhciBiYWlsID0gZnVuY3Rpb24ocGF0aCkge1xuXHRcdFx0aWYgKHBhdGggIT09IGRlZmF1bHRSb3V0ZSkgcm91dGVTZXJ2aWNlLnNldFBhdGgoZGVmYXVsdFJvdXRlLCBudWxsLCB7cmVwbGFjZTogdHJ1ZX0pXG5cdFx0XHRlbHNlIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCByZXNvbHZlIGRlZmF1bHQgcm91dGUgXCIgKyBkZWZhdWx0Um91dGUpXG5cdFx0fVxuXHRcdHJvdXRlU2VydmljZS5kZWZpbmVSb3V0ZXMocm91dGVzLCBmdW5jdGlvbihwYXlsb2FkLCBwYXJhbXMsIHBhdGgpIHtcblx0XHRcdHZhciB1cGRhdGUgPSBsYXN0VXBkYXRlID0gZnVuY3Rpb24ocm91dGVSZXNvbHZlciwgY29tcCkge1xuXHRcdFx0XHRpZiAodXBkYXRlICE9PSBsYXN0VXBkYXRlKSByZXR1cm5cblx0XHRcdFx0Y29tcG9uZW50ID0gY29tcCAhPSBudWxsICYmICh0eXBlb2YgY29tcC52aWV3ID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIGNvbXAgPT09IFwiZnVuY3Rpb25cIik/IGNvbXAgOiBcImRpdlwiXG5cdFx0XHRcdGF0dHJzMyA9IHBhcmFtcywgY3VycmVudFBhdGggPSBwYXRoLCBsYXN0VXBkYXRlID0gbnVsbFxuXHRcdFx0XHRyZW5kZXIxID0gKHJvdXRlUmVzb2x2ZXIucmVuZGVyIHx8IGlkZW50aXR5KS5iaW5kKHJvdXRlUmVzb2x2ZXIpXG5cdFx0XHRcdHJ1bjEoKVxuXHRcdFx0fVxuXHRcdFx0aWYgKHBheWxvYWQudmlldyB8fCB0eXBlb2YgcGF5bG9hZCA9PT0gXCJmdW5jdGlvblwiKSB1cGRhdGUoe30sIHBheWxvYWQpXG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKHBheWxvYWQub25tYXRjaCkge1xuXHRcdFx0XHRcdFByb21pc2UucmVzb2x2ZShwYXlsb2FkLm9ubWF0Y2gocGFyYW1zLCBwYXRoKSkudGhlbihmdW5jdGlvbihyZXNvbHZlZCkge1xuXHRcdFx0XHRcdFx0dXBkYXRlKHBheWxvYWQsIHJlc29sdmVkKVxuXHRcdFx0XHRcdH0sIGJhaWwpXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB1cGRhdGUocGF5bG9hZCwgXCJkaXZcIilcblx0XHRcdH1cblx0XHR9LCBiYWlsKVxuXHRcdHJlZHJhd1NlcnZpY2UwLnN1YnNjcmliZShyb290LCBydW4xKVxuXHR9XG5cdHJvdXRlLnNldCA9IGZ1bmN0aW9uKHBhdGgsIGRhdGEsIG9wdGlvbnMpIHtcblx0XHRpZiAobGFzdFVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXHRcdFx0b3B0aW9ucy5yZXBsYWNlID0gdHJ1ZVxuXHRcdH1cblx0XHRsYXN0VXBkYXRlID0gbnVsbFxuXHRcdHJvdXRlU2VydmljZS5zZXRQYXRoKHBhdGgsIGRhdGEsIG9wdGlvbnMpXG5cdH1cblx0cm91dGUuZ2V0ID0gZnVuY3Rpb24oKSB7cmV0dXJuIGN1cnJlbnRQYXRofVxuXHRyb3V0ZS5wcmVmaXggPSBmdW5jdGlvbihwcmVmaXgwKSB7cm91dGVTZXJ2aWNlLnByZWZpeCA9IHByZWZpeDB9XG5cdHJvdXRlLmxpbmsgPSBmdW5jdGlvbih2bm9kZTEpIHtcblx0XHR2bm9kZTEuZG9tLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgcm91dGVTZXJ2aWNlLnByZWZpeCArIHZub2RlMS5hdHRycy5ocmVmKVxuXHRcdHZub2RlMS5kb20ub25jbGljayA9IGZ1bmN0aW9uKGUpIHtcblx0XHRcdGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS53aGljaCA9PT0gMikgcmV0dXJuXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KClcblx0XHRcdGUucmVkcmF3ID0gZmFsc2Vcblx0XHRcdHZhciBocmVmID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpXG5cdFx0XHRpZiAoaHJlZi5pbmRleE9mKHJvdXRlU2VydmljZS5wcmVmaXgpID09PSAwKSBocmVmID0gaHJlZi5zbGljZShyb3V0ZVNlcnZpY2UucHJlZml4Lmxlbmd0aClcblx0XHRcdHJvdXRlLnNldChocmVmLCB1bmRlZmluZWQsIHVuZGVmaW5lZClcblx0XHR9XG5cdH1cblx0cm91dGUucGFyYW0gPSBmdW5jdGlvbihrZXkzKSB7XG5cdFx0aWYodHlwZW9mIGF0dHJzMyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Yga2V5MyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGF0dHJzM1trZXkzXVxuXHRcdHJldHVybiBhdHRyczNcblx0fVxuXHRyZXR1cm4gcm91dGVcbn1cbm0ucm91dGUgPSBfMjAod2luZG93LCByZWRyYXdTZXJ2aWNlKVxubS53aXRoQXR0ciA9IGZ1bmN0aW9uKGF0dHJOYW1lLCBjYWxsYmFjazEsIGNvbnRleHQpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGUpIHtcblx0XHRjYWxsYmFjazEuY2FsbChjb250ZXh0IHx8IHRoaXMsIGF0dHJOYW1lIGluIGUuY3VycmVudFRhcmdldCA/IGUuY3VycmVudFRhcmdldFthdHRyTmFtZV0gOiBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKSlcblx0fVxufVxudmFyIF8yOCA9IGNvcmVSZW5kZXJlcih3aW5kb3cpXG5tLnJlbmRlciA9IF8yOC5yZW5kZXJcbm0ucmVkcmF3ID0gcmVkcmF3U2VydmljZS5yZWRyYXdcbm0ucmVxdWVzdCA9IHJlcXVlc3RTZXJ2aWNlLnJlcXVlc3Rcbm0uanNvbnAgPSByZXF1ZXN0U2VydmljZS5qc29ucFxubS5wYXJzZVF1ZXJ5U3RyaW5nID0gcGFyc2VRdWVyeVN0cmluZ1xubS5idWlsZFF1ZXJ5U3RyaW5nID0gYnVpbGRRdWVyeVN0cmluZ1xubS52ZXJzaW9uID0gXCIxLjEuNlwiXG5tLnZub2RlID0gVm5vZGVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSBtb2R1bGVbXCJleHBvcnRzXCJdID0gbVxuZWxzZSB3aW5kb3cubSA9IG1cbn0oKSk7IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcbiIsIjsvKiEgc2hvd2Rvd24gdiAxLjkuMCAtIDEwLTExLTIwMTggKi9cclxuKGZ1bmN0aW9uKCl7XHJcbi8qKlxuICogQ3JlYXRlZCBieSBUaXZpZSBvbiAxMy0wNy0yMDE1LlxuICovXG5cbmZ1bmN0aW9uIGdldERlZmF1bHRPcHRzIChzaW1wbGUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBvbWl0RXh0cmFXTEluQ29kZUJsb2Nrczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnT21pdCB0aGUgZGVmYXVsdCBleHRyYSB3aGl0ZWxpbmUgYWRkZWQgdG8gY29kZSBibG9ja3MnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBub0hlYWRlcklkOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdUdXJuIG9uL29mZiBnZW5lcmF0ZWQgaGVhZGVyIGlkJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgcHJlZml4SGVhZGVySWQ6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ0FkZCBhIHByZWZpeCB0byB0aGUgZ2VuZXJhdGVkIGhlYWRlciBpZHMuIFBhc3NpbmcgYSBzdHJpbmcgd2lsbCBwcmVmaXggdGhhdCBzdHJpbmcgdG8gdGhlIGhlYWRlciBpZC4gU2V0dGluZyB0byB0cnVlIHdpbGwgYWRkIGEgZ2VuZXJpYyBcXCdzZWN0aW9uLVxcJyBwcmVmaXgnLFxuICAgICAgdHlwZTogJ3N0cmluZydcbiAgICB9LFxuICAgIHJhd1ByZWZpeEhlYWRlcklkOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIHRydWUgd2lsbCBwcmV2ZW50IHNob3dkb3duIGZyb20gbW9kaWZ5aW5nIHRoZSBwcmVmaXguIFRoaXMgbWlnaHQgcmVzdWx0IGluIG1hbGZvcm1lZCBJRHMgKGlmLCBmb3IgaW5zdGFuY2UsIHRoZSBcIiBjaGFyIGlzIHVzZWQgaW4gdGhlIHByZWZpeCknLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBnaENvbXBhdGlibGVIZWFkZXJJZDoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnR2VuZXJhdGUgaGVhZGVyIGlkcyBjb21wYXRpYmxlIHdpdGggZ2l0aHViIHN0eWxlIChzcGFjZXMgYXJlIHJlcGxhY2VkIHdpdGggZGFzaGVzLCBhIGJ1bmNoIG9mIG5vbiBhbHBoYW51bWVyaWMgY2hhcnMgYXJlIHJlbW92ZWQpJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgcmF3SGVhZGVySWQ6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ1JlbW92ZSBvbmx5IHNwYWNlcywgXFwnIGFuZCBcIiBmcm9tIGdlbmVyYXRlZCBoZWFkZXIgaWRzIChpbmNsdWRpbmcgcHJlZml4ZXMpLCByZXBsYWNpbmcgdGhlbSB3aXRoIGRhc2hlcyAoLSkuIFdBUk5JTkc6IFRoaXMgbWlnaHQgcmVzdWx0IGluIG1hbGZvcm1lZCBpZHMnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBoZWFkZXJMZXZlbFN0YXJ0OiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdUaGUgaGVhZGVyIGJsb2NrcyBsZXZlbCBzdGFydCcsXG4gICAgICB0eXBlOiAnaW50ZWdlcidcbiAgICB9LFxuICAgIHBhcnNlSW1nRGltZW5zaW9uczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnVHVybiBvbi9vZmYgaW1hZ2UgZGltZW5zaW9uIHBhcnNpbmcnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBzaW1wbGlmaWVkQXV0b0xpbms6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ1R1cm4gb24vb2ZmIEdGTSBhdXRvbGluayBzdHlsZScsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGV4Y2x1ZGVUcmFpbGluZ1B1bmN0dWF0aW9uRnJvbVVSTHM6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ0V4Y2x1ZGVzIHRyYWlsaW5nIHB1bmN0dWF0aW9uIGZyb20gbGlua3MgZ2VuZXJhdGVkIHdpdGggYXV0b0xpbmtpbmcnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBsaXRlcmFsTWlkV29yZFVuZGVyc2NvcmVzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdQYXJzZSBtaWR3b3JkIHVuZGVyc2NvcmVzIGFzIGxpdGVyYWwgdW5kZXJzY29yZXMnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBsaXRlcmFsTWlkV29yZEFzdGVyaXNrczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnUGFyc2UgbWlkd29yZCBhc3Rlcmlza3MgYXMgbGl0ZXJhbCBhc3Rlcmlza3MnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBzdHJpa2V0aHJvdWdoOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpYmU6ICdUdXJuIG9uL29mZiBzdHJpa2V0aHJvdWdoIHN1cHBvcnQnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICB0YWJsZXM6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ1R1cm4gb24vb2ZmIHRhYmxlcyBzdXBwb3J0JyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgdGFibGVzSGVhZGVySWQ6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmliZTogJ0FkZCBhbiBpZCB0byB0YWJsZSBoZWFkZXJzJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgZ2hDb2RlQmxvY2tzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgICBkZXNjcmliZTogJ1R1cm4gb24vb2ZmIEdGTSBmZW5jZWQgY29kZSBibG9ja3Mgc3VwcG9ydCcsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIHRhc2tsaXN0czoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnVHVybiBvbi9vZmYgR0ZNIHRhc2tsaXN0IHN1cHBvcnQnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBzbW9vdGhMaXZlUHJldmlldzoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaWJlOiAnUHJldmVudHMgd2VpcmQgZWZmZWN0cyBpbiBsaXZlIHByZXZpZXdzIGR1ZSB0byBpbmNvbXBsZXRlIGlucHV0JyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgc21hcnRJbmRlbnRhdGlvbkZpeDoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVHJpZXMgdG8gc21hcnRseSBmaXggaW5kZW50YXRpb24gaW4gZXM2IHN0cmluZ3MnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBkaXNhYmxlRm9yY2VkNFNwYWNlc0luZGVudGVkU3VibGlzdHM6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Rpc2FibGVzIHRoZSByZXF1aXJlbWVudCBvZiBpbmRlbnRpbmcgbmVzdGVkIHN1Ymxpc3RzIGJ5IDQgc3BhY2VzJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgc2ltcGxlTGluZUJyZWFrczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUGFyc2VzIHNpbXBsZSBsaW5lIGJyZWFrcyBhcyA8YnI+IChHRk0gU3R5bGUpJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgcmVxdWlyZVNwYWNlQmVmb3JlSGVhZGluZ1RleHQ6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjogJ01ha2VzIGFkZGluZyBhIHNwYWNlIGJldHdlZW4gYCNgIGFuZCB0aGUgaGVhZGVyIHRleHQgbWFuZGF0b3J5IChHRk0gU3R5bGUpJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgZ2hNZW50aW9uczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5hYmxlcyBnaXRodWIgQG1lbnRpb25zJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgZ2hNZW50aW9uc0xpbms6IHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS97dX0nLFxuICAgICAgZGVzY3JpcHRpb246ICdDaGFuZ2VzIHRoZSBsaW5rIGdlbmVyYXRlZCBieSBAbWVudGlvbnMuIE9ubHkgYXBwbGllcyBpZiBnaE1lbnRpb25zIG9wdGlvbiBpcyBlbmFibGVkLicsXG4gICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgIH0sXG4gICAgZW5jb2RlRW1haWxzOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuY29kZSBlLW1haWwgYWRkcmVzc2VzIHRocm91Z2ggdGhlIHVzZSBvZiBDaGFyYWN0ZXIgRW50aXRpZXMsIHRyYW5zZm9ybWluZyBBU0NJSSBlLW1haWwgYWRkcmVzc2VzIGludG8gaXRzIGVxdWl2YWxlbnQgZGVjaW1hbCBlbnRpdGllcycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIG9wZW5MaW5rc0luTmV3V2luZG93OiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdPcGVuIGFsbCBsaW5rcyBpbiBuZXcgd2luZG93cycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGJhY2tzbGFzaEVzY2FwZXNIVE1MVGFnczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCBmb3IgSFRNTCBUYWcgZXNjYXBpbmcuIGV4OiBcXDxkaXY+Zm9vXFw8L2Rpdj4nLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSxcbiAgICBlbW9qaToge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5hYmxlIGVtb2ppIHN1cHBvcnQuIEV4OiBgdGhpcyBpcyBhIDpzbWlsZTogZW1vamlgJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgIH0sXG4gICAgdW5kZXJsaW5lOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmFibGUgc3VwcG9ydCBmb3IgdW5kZXJsaW5lLiBTeW50YXggaXMgZG91YmxlIG9yIHRyaXBsZSB1bmRlcnNjb3JlczogYF9fdW5kZXJsaW5lIHdvcmRfX2AuIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdW5kZXJzY29yZXMgbm8gbG9uZ2VyIHBhcnNlcyBpbnRvIGA8ZW0+YCBhbmQgYDxzdHJvbmc+YCcsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIGNvbXBsZXRlSFRNTERvY3VtZW50OiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdPdXRwdXRzIGEgY29tcGxldGUgaHRtbCBkb2N1bWVudCwgaW5jbHVkaW5nIGA8aHRtbD5gLCBgPGhlYWQ+YCBhbmQgYDxib2R5PmAgdGFncycsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmFibGUgc3VwcG9ydCBmb3IgZG9jdW1lbnQgbWV0YWRhdGEgKGRlZmluZWQgYXQgdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQgYmV0d2VlbiBgwqvCq8KrYCBhbmQgYMK7wrvCu2Agb3IgYmV0d2VlbiBgLS0tYCBhbmQgYC0tLWApLicsXG4gICAgICB0eXBlOiAnYm9vbGVhbidcbiAgICB9LFxuICAgIHNwbGl0QWRqYWNlbnRCbG9ja3F1b3Rlczoge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3BsaXQgYWRqYWNlbnQgYmxvY2txdW90ZSBibG9ja3MnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfVxuICB9O1xuICBpZiAoc2ltcGxlID09PSBmYWxzZSkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZmF1bHRPcHRpb25zKSk7XG4gIH1cbiAgdmFyIHJldCA9IHt9O1xuICBmb3IgKHZhciBvcHQgaW4gZGVmYXVsdE9wdGlvbnMpIHtcbiAgICBpZiAoZGVmYXVsdE9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0KSkge1xuICAgICAgcmV0W29wdF0gPSBkZWZhdWx0T3B0aW9uc1tvcHRdLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gYWxsT3B0aW9uc09uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgb3B0aW9ucyA9IGdldERlZmF1bHRPcHRzKHRydWUpLFxuICAgICAgcmV0ID0ge307XG4gIGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0KSkge1xuICAgICAgcmV0W29wdF0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXHJcbi8qKlxuICogQ3JlYXRlZCBieSBUaXZpZSBvbiAwNi0wMS0yMDE1LlxuICovXG5cbi8vIFByaXZhdGUgcHJvcGVydGllc1xudmFyIHNob3dkb3duID0ge30sXG4gICAgcGFyc2VycyA9IHt9LFxuICAgIGV4dGVuc2lvbnMgPSB7fSxcbiAgICBnbG9iYWxPcHRpb25zID0gZ2V0RGVmYXVsdE9wdHModHJ1ZSksXG4gICAgc2V0Rmxhdm9yID0gJ3ZhbmlsbGEnLFxuICAgIGZsYXZvciA9IHtcbiAgICAgIGdpdGh1Yjoge1xuICAgICAgICBvbWl0RXh0cmFXTEluQ29kZUJsb2NrczogICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHNpbXBsaWZpZWRBdXRvTGluazogICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgZXhjbHVkZVRyYWlsaW5nUHVuY3R1YXRpb25Gcm9tVVJMczogICB0cnVlLFxuICAgICAgICBsaXRlcmFsTWlkV29yZFVuZGVyc2NvcmVzOiAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHN0cmlrZXRocm91Z2g6ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGFibGVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICB0YWJsZXNIZWFkZXJJZDogICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIGdoQ29kZUJsb2NrczogICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGFza2xpc3RzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBkaXNhYmxlRm9yY2VkNFNwYWNlc0luZGVudGVkU3VibGlzdHM6IHRydWUsXG4gICAgICAgIHNpbXBsZUxpbmVCcmVha3M6ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgcmVxdWlyZVNwYWNlQmVmb3JlSGVhZGluZ1RleHQ6ICAgICAgICB0cnVlLFxuICAgICAgICBnaENvbXBhdGlibGVIZWFkZXJJZDogICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIGdoTWVudGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgYmFja3NsYXNoRXNjYXBlc0hUTUxUYWdzOiAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBlbW9qaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHNwbGl0QWRqYWNlbnRCbG9ja3F1b3RlczogICAgICAgICAgICAgdHJ1ZVxuICAgICAgfSxcbiAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgIG5vSGVhZGVySWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgZ2hDb2RlQmxvY2tzOiAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgfSxcbiAgICAgIGdob3N0OiB7XG4gICAgICAgIG9taXRFeHRyYVdMSW5Db2RlQmxvY2tzOiAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgcGFyc2VJbWdEaW1lbnNpb25zOiAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBzaW1wbGlmaWVkQXV0b0xpbms6ICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIGV4Y2x1ZGVUcmFpbGluZ1B1bmN0dWF0aW9uRnJvbVVSTHM6ICAgdHJ1ZSxcbiAgICAgICAgbGl0ZXJhbE1pZFdvcmRVbmRlcnNjb3JlczogICAgICAgICAgICB0cnVlLFxuICAgICAgICBzdHJpa2V0aHJvdWdoOiAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHRhYmxlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGFibGVzSGVhZGVySWQ6ICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBnaENvZGVCbG9ja3M6ICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHRhc2tsaXN0czogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgc21vb3RoTGl2ZVByZXZpZXc6ICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICBzaW1wbGVMaW5lQnJlYWtzOiAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIHJlcXVpcmVTcGFjZUJlZm9yZUhlYWRpbmdUZXh0OiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZ2hNZW50aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgZW5jb2RlRW1haWxzOiAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICB9LFxuICAgICAgdmFuaWxsYTogZ2V0RGVmYXVsdE9wdHModHJ1ZSksXG4gICAgICBhbGxPbjogYWxsT3B0aW9uc09uKClcbiAgICB9O1xuXG4vKipcbiAqIGhlbHBlciBuYW1lc3BhY2VcbiAqIEB0eXBlIHt7fX1cbiAqL1xuc2hvd2Rvd24uaGVscGVyID0ge307XG5cbi8qKlxuICogVE9ETyBMRUdBQ1kgU1VQUE9SVCBDT0RFXG4gKiBAdHlwZSB7e319XG4gKi9cbnNob3dkb3duLmV4dGVuc2lvbnMgPSB7fTtcblxuLyoqXG4gKiBTZXQgYSBnbG9iYWwgb3B0aW9uXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c2hvd2Rvd259XG4gKi9cbnNob3dkb3duLnNldE9wdGlvbiA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgZ2xvYmFsT3B0aW9uc1trZXldID0gdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBHZXQgYSBnbG9iYWwgb3B0aW9uXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuc2hvd2Rvd24uZ2V0T3B0aW9uID0gZnVuY3Rpb24gKGtleSkge1xuICAndXNlIHN0cmljdCc7XG4gIHJldHVybiBnbG9iYWxPcHRpb25zW2tleV07XG59O1xuXG4vKipcbiAqIEdldCB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAqIEBzdGF0aWNcbiAqIEByZXR1cm5zIHt7fX1cbiAqL1xuc2hvd2Rvd24uZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICByZXR1cm4gZ2xvYmFsT3B0aW9ucztcbn07XG5cbi8qKlxuICogUmVzZXQgZ2xvYmFsIG9wdGlvbnMgdG8gdGhlIGRlZmF1bHQgdmFsdWVzXG4gKiBAc3RhdGljXG4gKi9cbnNob3dkb3duLnJlc2V0T3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBnbG9iYWxPcHRpb25zID0gZ2V0RGVmYXVsdE9wdHModHJ1ZSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgZmxhdm9yIHNob3dkb3duIHNob3VsZCB1c2UgYXMgZGVmYXVsdFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuc2hvd2Rvd24uc2V0Rmxhdm9yID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBpZiAoIWZsYXZvci5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIHRocm93IEVycm9yKG5hbWUgKyAnIGZsYXZvciB3YXMgbm90IGZvdW5kJyk7XG4gIH1cbiAgc2hvd2Rvd24ucmVzZXRPcHRpb25zKCk7XG4gIHZhciBwcmVzZXQgPSBmbGF2b3JbbmFtZV07XG4gIHNldEZsYXZvciA9IG5hbWU7XG4gIGZvciAodmFyIG9wdGlvbiBpbiBwcmVzZXQpIHtcbiAgICBpZiAocHJlc2V0Lmhhc093blByb3BlcnR5KG9wdGlvbikpIHtcbiAgICAgIGdsb2JhbE9wdGlvbnNbb3B0aW9uXSA9IHByZXNldFtvcHRpb25dO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnRseSBzZXQgZmxhdm9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5zaG93ZG93bi5nZXRGbGF2b3IgPSBmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgcmV0dXJuIHNldEZsYXZvcjtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBvcHRpb25zIG9mIGEgc3BlY2lmaWVkIGZsYXZvci4gUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGZsYXZvciB3YXMgbm90IGZvdW5kXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBmbGF2b3JcbiAqIEByZXR1cm5zIHt7fXx1bmRlZmluZWR9XG4gKi9cbnNob3dkb3duLmdldEZsYXZvck9wdGlvbnMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmIChmbGF2b3IuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICByZXR1cm4gZmxhdm9yW25hbWVdO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBvcHRpb25zXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtzaW1wbGU9dHJ1ZV1cbiAqIEByZXR1cm5zIHt7fX1cbiAqL1xuc2hvd2Rvd24uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAoc2ltcGxlKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgcmV0dXJuIGdldERlZmF1bHRPcHRzKHNpbXBsZSk7XG59O1xuXG4vKipcbiAqIEdldCBvciBzZXQgYSBzdWJQYXJzZXJcbiAqXG4gKiBzdWJQYXJzZXIobmFtZSkgICAgICAgLSBHZXQgYSByZWdpc3RlcmVkIHN1YlBhcnNlclxuICogc3ViUGFyc2VyKG5hbWUsIGZ1bmMpIC0gUmVnaXN0ZXIgYSBzdWJQYXJzZXJcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZnVuY11cbiAqIEByZXR1cm5zIHsqfVxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIgPSBmdW5jdGlvbiAobmFtZSwgZnVuYykge1xuICAndXNlIHN0cmljdCc7XG4gIGlmIChzaG93ZG93bi5oZWxwZXIuaXNTdHJpbmcobmFtZSkpIHtcbiAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJzZXJzW25hbWVdID0gZnVuYztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhcnNlcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlcnNbbmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcignU3ViUGFyc2VyIG5hbWVkICcgKyBuYW1lICsgJyBub3QgcmVnaXN0ZXJlZCEnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogR2V0cyBvciByZWdpc3RlcnMgYW4gZXh0ZW5zaW9uXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb249fSBleHRcbiAqIEByZXR1cm5zIHsqfVxuICovXG5zaG93ZG93bi5leHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSwgZXh0KSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIXNob3dkb3duLmhlbHBlci5pc1N0cmluZyhuYW1lKSkge1xuICAgIHRocm93IEVycm9yKCdFeHRlbnNpb24gXFwnbmFtZVxcJyBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBuYW1lID0gc2hvd2Rvd24uaGVscGVyLnN0ZEV4dE5hbWUobmFtZSk7XG5cbiAgLy8gR2V0dGVyXG4gIGlmIChzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZXh0KSkge1xuICAgIGlmICghZXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0V4dGVuc2lvbiBuYW1lZCAnICsgbmFtZSArICcgaXMgbm90IHJlZ2lzdGVyZWQhJyk7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25zW25hbWVdO1xuXG4gICAgLy8gU2V0dGVyXG4gIH0gZWxzZSB7XG4gICAgLy8gRXhwYW5kIGV4dGVuc2lvbiBpZiBpdCdzIHdyYXBwZWQgaW4gYSBmdW5jdGlvblxuICAgIGlmICh0eXBlb2YgZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBleHQgPSBleHQoKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgZXh0ZW5zaW9uIGlzIGFuIGFycmF5XG4gICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNBcnJheShleHQpKSB7XG4gICAgICBleHQgPSBbZXh0XTtcbiAgICB9XG5cbiAgICB2YXIgdmFsaWRFeHRlbnNpb24gPSB2YWxpZGF0ZShleHQsIG5hbWUpO1xuXG4gICAgaWYgKHZhbGlkRXh0ZW5zaW9uLnZhbGlkKSB7XG4gICAgICBleHRlbnNpb25zW25hbWVdID0gZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcih2YWxpZEV4dGVuc2lvbi5lcnJvcik7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEdldHMgYWxsIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZFxuICogQHJldHVybnMge3t9fVxuICovXG5zaG93ZG93bi5nZXRBbGxFeHRlbnNpb25zID0gZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHJldHVybiBleHRlbnNpb25zO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gZXh0ZW5zaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5zaG93ZG93bi5yZW1vdmVFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSkge1xuICAndXNlIHN0cmljdCc7XG4gIGRlbGV0ZSBleHRlbnNpb25zW25hbWVdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBleHRlbnNpb25zXG4gKi9cbnNob3dkb3duLnJlc2V0RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBleHRlbnNpb25zID0ge307XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGV4dGVuc2lvblxuICogQHBhcmFtIHthcnJheX0gZXh0ZW5zaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge3t2YWxpZDogYm9vbGVhbiwgZXJyb3I6IHN0cmluZ319XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlIChleHRlbnNpb24sIG5hbWUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBlcnJNc2cgPSAobmFtZSkgPyAnRXJyb3IgaW4gJyArIG5hbWUgKyAnIGV4dGVuc2lvbi0+JyA6ICdFcnJvciBpbiB1bm5hbWVkIGV4dGVuc2lvbicsXG4gICAgICByZXQgPSB7XG4gICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICBlcnJvcjogJydcbiAgICAgIH07XG5cbiAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNBcnJheShleHRlbnNpb24pKSB7XG4gICAgZXh0ZW5zaW9uID0gW2V4dGVuc2lvbl07XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dGVuc2lvbi5sZW5ndGg7ICsraSkge1xuICAgIHZhciBiYXNlTXNnID0gZXJyTXNnICsgJyBzdWItZXh0ZW5zaW9uICcgKyBpICsgJzogJyxcbiAgICAgICAgZXh0ID0gZXh0ZW5zaW9uW2ldO1xuICAgIGlmICh0eXBlb2YgZXh0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0LnZhbGlkID0gZmFsc2U7XG4gICAgICByZXQuZXJyb3IgPSBiYXNlTXNnICsgJ211c3QgYmUgYW4gb2JqZWN0LCBidXQgJyArIHR5cGVvZiBleHQgKyAnIGdpdmVuJztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNTdHJpbmcoZXh0LnR5cGUpKSB7XG4gICAgICByZXQudmFsaWQgPSBmYWxzZTtcbiAgICAgIHJldC5lcnJvciA9IGJhc2VNc2cgKyAncHJvcGVydHkgXCJ0eXBlXCIgbXVzdCBiZSBhIHN0cmluZywgYnV0ICcgKyB0eXBlb2YgZXh0LnR5cGUgKyAnIGdpdmVuJztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgdmFyIHR5cGUgPSBleHQudHlwZSA9IGV4dC50eXBlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBub3JtYWxpemUgZXh0ZW5zaW9uIHR5cGVcbiAgICBpZiAodHlwZSA9PT0gJ2xhbmd1YWdlJykge1xuICAgICAgdHlwZSA9IGV4dC50eXBlID0gJ2xhbmcnO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnaHRtbCcpIHtcbiAgICAgIHR5cGUgPSBleHQudHlwZSA9ICdvdXRwdXQnO1xuICAgIH1cblxuICAgIGlmICh0eXBlICE9PSAnbGFuZycgJiYgdHlwZSAhPT0gJ291dHB1dCcgJiYgdHlwZSAhPT0gJ2xpc3RlbmVyJykge1xuICAgICAgcmV0LnZhbGlkID0gZmFsc2U7XG4gICAgICByZXQuZXJyb3IgPSBiYXNlTXNnICsgJ3R5cGUgJyArIHR5cGUgKyAnIGlzIG5vdCByZWNvZ25pemVkLiBWYWxpZCB2YWx1ZXM6IFwibGFuZy9sYW5ndWFnZVwiLCBcIm91dHB1dC9odG1sXCIgb3IgXCJsaXN0ZW5lclwiJztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdsaXN0ZW5lcicpIHtcbiAgICAgIGlmIChzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZXh0Lmxpc3RlbmVycykpIHtcbiAgICAgICAgcmV0LnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHJldC5lcnJvciA9IGJhc2VNc2cgKyAnLiBFeHRlbnNpb25zIG9mIHR5cGUgXCJsaXN0ZW5lclwiIG11c3QgaGF2ZSBhIHByb3BlcnR5IGNhbGxlZCBcImxpc3RlbmVyc1wiJztcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChleHQuZmlsdGVyKSAmJiBzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZXh0LnJlZ2V4KSkge1xuICAgICAgICByZXQudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgcmV0LmVycm9yID0gYmFzZU1zZyArIHR5cGUgKyAnIGV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgZWl0aGVyIGEgXCJyZWdleFwiIHByb3BlcnR5IG9yIGEgXCJmaWx0ZXJcIiBtZXRob2QnO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHQubGlzdGVuZXJzKSB7XG4gICAgICBpZiAodHlwZW9mIGV4dC5saXN0ZW5lcnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldC52YWxpZCA9IGZhbHNlO1xuICAgICAgICByZXQuZXJyb3IgPSBiYXNlTXNnICsgJ1wibGlzdGVuZXJzXCIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3QgYnV0ICcgKyB0eXBlb2YgZXh0Lmxpc3RlbmVycyArICcgZ2l2ZW4nO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbG4gaW4gZXh0Lmxpc3RlbmVycykge1xuICAgICAgICBpZiAoZXh0Lmxpc3RlbmVycy5oYXNPd25Qcm9wZXJ0eShsbikpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4dC5saXN0ZW5lcnNbbG5dICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXQudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldC5lcnJvciA9IGJhc2VNc2cgKyAnXCJsaXN0ZW5lcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIGhhc2ggb2YgW2V2ZW50IG5hbWVdOiBbY2FsbGJhY2tdLiBsaXN0ZW5lcnMuJyArIGxuICtcbiAgICAgICAgICAgICAgJyBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0ICcgKyB0eXBlb2YgZXh0Lmxpc3RlbmVyc1tsbl0gKyAnIGdpdmVuJztcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dC5maWx0ZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgZXh0LmZpbHRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXQudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgcmV0LmVycm9yID0gYmFzZU1zZyArICdcImZpbHRlclwiIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0ICcgKyB0eXBlb2YgZXh0LmZpbHRlciArICcgZ2l2ZW4nO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXh0LnJlZ2V4KSB7XG4gICAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzU3RyaW5nKGV4dC5yZWdleCkpIHtcbiAgICAgICAgZXh0LnJlZ2V4ID0gbmV3IFJlZ0V4cChleHQucmVnZXgsICdnJyk7XG4gICAgICB9XG4gICAgICBpZiAoIShleHQucmVnZXggaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgIHJldC52YWxpZCA9IGZhbHNlO1xuICAgICAgICByZXQuZXJyb3IgPSBiYXNlTXNnICsgJ1wicmVnZXhcIiBwcm9wZXJ0eSBtdXN0IGVpdGhlciBiZSBhIHN0cmluZyBvciBhIFJlZ0V4cCBvYmplY3QsIGJ1dCAnICsgdHlwZW9mIGV4dC5yZWdleCArICcgZ2l2ZW4nO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgICAgaWYgKHNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChleHQucmVwbGFjZSkpIHtcbiAgICAgICAgcmV0LnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHJldC5lcnJvciA9IGJhc2VNc2cgKyAnXCJyZWdleFwiIGV4dGVuc2lvbnMgbXVzdCBpbXBsZW1lbnQgYSByZXBsYWNlIHN0cmluZyBvciBmdW5jdGlvbic7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgZXh0ZW5zaW9uXG4gKiBAcGFyYW0ge29iamVjdH0gZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuc2hvd2Rvd24udmFsaWRhdGVFeHRlbnNpb24gPSBmdW5jdGlvbiAoZXh0KSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdmFsaWRhdGVFeHRlbnNpb24gPSB2YWxpZGF0ZShleHQsIG51bGwpO1xuICBpZiAoIXZhbGlkYXRlRXh0ZW5zaW9uLnZhbGlkKSB7XG4gICAgY29uc29sZS53YXJuKHZhbGlkYXRlRXh0ZW5zaW9uLmVycm9yKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXHJcbi8qKlxuICogc2hvd2Rvd25qcyBoZWxwZXIgZnVuY3Rpb25zXG4gKi9cblxuaWYgKCFzaG93ZG93bi5oYXNPd25Qcm9wZXJ0eSgnaGVscGVyJykpIHtcbiAgc2hvd2Rvd24uaGVscGVyID0ge307XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFyIGlzIHN0cmluZ1xuICogQHN0YXRpY1xuICogQHBhcmFtIHtzdHJpbmd9IGFcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5zaG93ZG93bi5oZWxwZXIuaXNTdHJpbmcgPSBmdW5jdGlvbiAoYSkge1xuICAndXNlIHN0cmljdCc7XG4gIHJldHVybiAodHlwZW9mIGEgPT09ICdzdHJpbmcnIHx8IGEgaW5zdGFuY2VvZiBTdHJpbmcpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB2YXIgaXMgYSBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQHBhcmFtIHsqfSBhXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuc2hvd2Rvd24uaGVscGVyLmlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoYSkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBnZXRUeXBlID0ge307XG4gIHJldHVybiBhICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChhKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbi8qKlxuICogaXNBcnJheSBoZWxwZXIgZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbnNob3dkb3duLmhlbHBlci5pc0FycmF5ID0gZnVuY3Rpb24gKGEpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gKi9cbnNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAndXNlIHN0cmljdCc7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xufTtcblxuLyoqXG4gKiBGb3JFYWNoIGhlbHBlciBmdW5jdGlvblxuICogSXRlcmF0ZXMgb3ZlciBBcnJheXMgYW5kIE9iamVjdHMgKG93biBwcm9wZXJ0aWVzIG9ubHkpXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQWNjZXB0cyAzIHBhcmFtczogMS4gdmFsdWUsIDIuIGtleSwgMy4gdGhlIG9yaWdpbmFsIGFycmF5L29iamVjdFxuICovXG5zaG93ZG93bi5oZWxwZXIuZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmosIGNhbGxiYWNrKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgLy8gY2hlY2sgaWYgb2JqIGlzIGRlZmluZWRcbiAgaWYgKHNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChvYmopKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvYmogcGFyYW0gaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmIChzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoY2FsbGJhY2spKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYWxsYmFjayBwYXJhbSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxiYWNrIHBhcmFtIG11c3QgYmUgYSBmdW5jdGlvbi9jbG9zdXJlJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iai5mb3JFYWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb2JqLmZvckVhY2goY2FsbGJhY2spO1xuICB9IGVsc2UgaWYgKHNob3dkb3duLmhlbHBlci5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sob2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgKG9iaikgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgY2FsbGJhY2sob2JqW3Byb3BdLCBwcm9wLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ29iaiBkb2VzIG5vdCBzZWVtIHRvIGJlIGFuIGFycmF5IG9yIGFuIGl0ZXJhYmxlIG9iamVjdCcpO1xuICB9XG59O1xuXG4vKipcbiAqIFN0YW5kYXJkaWRpemUgZXh0ZW5zaW9uIG5hbWVcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzIGV4dGVuc2lvbiBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5zaG93ZG93bi5oZWxwZXIuc3RkRXh0TmFtZSA9IGZ1bmN0aW9uIChzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgcmV0dXJuIHMucmVwbGFjZSgvW18/KitcXC9cXFxcLl4tXS9nLCAnJykucmVwbGFjZSgvXFxzL2csICcnKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrICh3aG9sZU1hdGNoLCBtMSkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBjaGFyQ29kZVRvRXNjYXBlID0gbTEuY2hhckNvZGVBdCgwKTtcbiAgcmV0dXJuICfCqEUnICsgY2hhckNvZGVUb0VzY2FwZSArICdFJztcbn1cblxuLyoqXG4gKiBDYWxsYmFjayB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHdoZW4gcGFzc2luZyB0aHJvdWdoIFN0cmluZy5yZXBsYWNlXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3N0cmluZ30gd2hvbGVNYXRjaFxuICogQHBhcmFtIHtzdHJpbmd9IG0xXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5zaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrID0gZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrO1xuXG4vKipcbiAqIEVzY2FwZSBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJzVG9Fc2NhcGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWZ0ZXJCYWNrc2xhc2hcbiAqIEByZXR1cm5zIHtYTUx8c3RyaW5nfHZvaWR8Kn1cbiAqL1xuc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnMgPSBmdW5jdGlvbiAodGV4dCwgY2hhcnNUb0VzY2FwZSwgYWZ0ZXJCYWNrc2xhc2gpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICAvLyBGaXJzdCB3ZSBoYXZlIHRvIGVzY2FwZSB0aGUgZXNjYXBlIGNoYXJhY3RlcnMgc28gdGhhdFxuICAvLyB3ZSBjYW4gYnVpbGQgYSBjaGFyYWN0ZXIgY2xhc3Mgb3V0IG9mIHRoZW1cbiAgdmFyIHJlZ2V4U3RyaW5nID0gJyhbJyArIGNoYXJzVG9Fc2NhcGUucmVwbGFjZSgvKFtcXFtcXF1cXFxcXSkvZywgJ1xcXFwkMScpICsgJ10pJztcblxuICBpZiAoYWZ0ZXJCYWNrc2xhc2gpIHtcbiAgICByZWdleFN0cmluZyA9ICdcXFxcXFxcXCcgKyByZWdleFN0cmluZztcbiAgfVxuXG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAocmVnZXhTdHJpbmcsICdnJyk7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVnZXgsIGVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuXG4vKipcbiAqIFVuZXNjYXBlIEhUTUwgZW50aXRpZXNcbiAqIEBwYXJhbSB0eHRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbnNob3dkb3duLmhlbHBlci51bmVzY2FwZUhUTUxFbnRpdGllcyA9IGZ1bmN0aW9uICh0eHQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHJldHVybiB0eHRcbiAgICAucmVwbGFjZSgvJnF1b3Q7L2csICdcIicpXG4gICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxuICAgIC5yZXBsYWNlKC8mZ3Q7L2csICc+JylcbiAgICAucmVwbGFjZSgvJmFtcDsvZywgJyYnKTtcbn07XG5cbnZhciByZ3hGaW5kTWF0Y2hQb3MgPSBmdW5jdGlvbiAoc3RyLCBsZWZ0LCByaWdodCwgZmxhZ3MpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgZiA9IGZsYWdzIHx8ICcnLFxuICAgICAgZyA9IGYuaW5kZXhPZignZycpID4gLTEsXG4gICAgICB4ID0gbmV3IFJlZ0V4cChsZWZ0ICsgJ3wnICsgcmlnaHQsICdnJyArIGYucmVwbGFjZSgvZy9nLCAnJykpLFxuICAgICAgbCA9IG5ldyBSZWdFeHAobGVmdCwgZi5yZXBsYWNlKC9nL2csICcnKSksXG4gICAgICBwb3MgPSBbXSxcbiAgICAgIHQsIHMsIG0sIHN0YXJ0LCBlbmQ7XG5cbiAgZG8ge1xuICAgIHQgPSAwO1xuICAgIHdoaWxlICgobSA9IHguZXhlYyhzdHIpKSkge1xuICAgICAgaWYgKGwudGVzdChtWzBdKSkge1xuICAgICAgICBpZiAoISh0KyspKSB7XG4gICAgICAgICAgcyA9IHgubGFzdEluZGV4O1xuICAgICAgICAgIHN0YXJ0ID0gcyAtIG1bMF0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHQpIHtcbiAgICAgICAgaWYgKCEtLXQpIHtcbiAgICAgICAgICBlbmQgPSBtLmluZGV4ICsgbVswXS5sZW5ndGg7XG4gICAgICAgICAgdmFyIG9iaiA9IHtcbiAgICAgICAgICAgIGxlZnQ6IHtzdGFydDogc3RhcnQsIGVuZDogc30sXG4gICAgICAgICAgICBtYXRjaDoge3N0YXJ0OiBzLCBlbmQ6IG0uaW5kZXh9LFxuICAgICAgICAgICAgcmlnaHQ6IHtzdGFydDogbS5pbmRleCwgZW5kOiBlbmR9LFxuICAgICAgICAgICAgd2hvbGVNYXRjaDoge3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBwb3MucHVzaChvYmopO1xuICAgICAgICAgIGlmICghZykge1xuICAgICAgICAgICAgcmV0dXJuIHBvcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKHQgJiYgKHgubGFzdEluZGV4ID0gcykpO1xuXG4gIHJldHVybiBwb3M7XG59O1xuXG4vKipcbiAqIG1hdGNoUmVjdXJzaXZlUmVnRXhwXG4gKlxuICogKGMpIDIwMDcgU3RldmVuIExldml0aGFuIDxzdGV2ZW5sZXZpdGhhbi5jb20+XG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIEFjY2VwdHMgYSBzdHJpbmcgdG8gc2VhcmNoLCBhIGxlZnQgYW5kIHJpZ2h0IGZvcm1hdCBkZWxpbWl0ZXJcbiAqIGFzIHJlZ2V4IHBhdHRlcm5zLCBhbmQgb3B0aW9uYWwgcmVnZXggZmxhZ3MuIFJldHVybnMgYW4gYXJyYXlcbiAqIG9mIG1hdGNoZXMsIGFsbG93aW5nIG5lc3RlZCBpbnN0YW5jZXMgb2YgbGVmdC9yaWdodCBkZWxpbWl0ZXJzLlxuICogVXNlIHRoZSBcImdcIiBmbGFnIHRvIHJldHVybiBhbGwgbWF0Y2hlcywgb3RoZXJ3aXNlIG9ubHkgdGhlXG4gKiBmaXJzdCBpcyByZXR1cm5lZC4gQmUgY2FyZWZ1bCB0byBlbnN1cmUgdGhhdCB0aGUgbGVmdCBhbmRcbiAqIHJpZ2h0IGZvcm1hdCBkZWxpbWl0ZXJzIHByb2R1Y2UgbXV0dWFsbHkgZXhjbHVzaXZlIG1hdGNoZXMuXG4gKiBCYWNrcmVmZXJlbmNlcyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoaW4gdGhlIHJpZ2h0IGRlbGltaXRlclxuICogZHVlIHRvIGhvdyBpdCBpcyBpbnRlcm5hbGx5IGNvbWJpbmVkIHdpdGggdGhlIGxlZnQgZGVsaW1pdGVyLlxuICogV2hlbiBtYXRjaGluZyBzdHJpbmdzIHdob3NlIGZvcm1hdCBkZWxpbWl0ZXJzIGFyZSB1bmJhbGFuY2VkXG4gKiB0byB0aGUgbGVmdCBvciByaWdodCwgdGhlIG91dHB1dCBpcyBpbnRlbnRpb25hbGx5IGFzIGFcbiAqIGNvbnZlbnRpb25hbCByZWdleCBsaWJyYXJ5IHdpdGggcmVjdXJzaW9uIHN1cHBvcnQgd291bGRcbiAqIHByb2R1Y2UsIGUuZy4gXCI8PHg+XCIgYW5kIFwiPHg+PlwiIGJvdGggcHJvZHVjZSBbXCJ4XCJdIHdoZW4gdXNpbmdcbiAqIFwiPFwiIGFuZCBcIj5cIiBhcyB0aGUgZGVsaW1pdGVycyAoYm90aCBzdHJpbmdzIGNvbnRhaW4gYSBzaW5nbGUsXG4gKiBiYWxhbmNlZCBpbnN0YW5jZSBvZiBcIjx4PlwiKS5cbiAqXG4gKiBleGFtcGxlczpcbiAqIG1hdGNoUmVjdXJzaXZlUmVnRXhwKFwidGVzdFwiLCBcIlxcXFwoXCIsIFwiXFxcXClcIilcbiAqIHJldHVybnM6IFtdXG4gKiBtYXRjaFJlY3Vyc2l2ZVJlZ0V4cChcIjx0PDxlPj48cz4+dDw+XCIsIFwiPFwiLCBcIj5cIiwgXCJnXCIpXG4gKiByZXR1cm5zOiBbXCJ0PDxlPj48cz5cIiwgXCJcIl1cbiAqIG1hdGNoUmVjdXJzaXZlUmVnRXhwKFwiPGRpdiBpZD1cXFwieFxcXCI+dGVzdDwvZGl2PlwiLCBcIjxkaXZcXFxcYltePl0qPlwiLCBcIjwvZGl2PlwiLCBcImdpXCIpXG4gKiByZXR1cm5zOiBbXCJ0ZXN0XCJdXG4gKi9cbnNob3dkb3duLmhlbHBlci5tYXRjaFJlY3Vyc2l2ZVJlZ0V4cCA9IGZ1bmN0aW9uIChzdHIsIGxlZnQsIHJpZ2h0LCBmbGFncykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIG1hdGNoUG9zID0gcmd4RmluZE1hdGNoUG9zIChzdHIsIGxlZnQsIHJpZ2h0LCBmbGFncyksXG4gICAgICByZXN1bHRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFBvcy5sZW5ndGg7ICsraSkge1xuICAgIHJlc3VsdHMucHVzaChbXG4gICAgICBzdHIuc2xpY2UobWF0Y2hQb3NbaV0ud2hvbGVNYXRjaC5zdGFydCwgbWF0Y2hQb3NbaV0ud2hvbGVNYXRjaC5lbmQpLFxuICAgICAgc3RyLnNsaWNlKG1hdGNoUG9zW2ldLm1hdGNoLnN0YXJ0LCBtYXRjaFBvc1tpXS5tYXRjaC5lbmQpLFxuICAgICAgc3RyLnNsaWNlKG1hdGNoUG9zW2ldLmxlZnQuc3RhcnQsIG1hdGNoUG9zW2ldLmxlZnQuZW5kKSxcbiAgICAgIHN0ci5zbGljZShtYXRjaFBvc1tpXS5yaWdodC5zdGFydCwgbWF0Y2hQb3NbaV0ucmlnaHQuZW5kKVxuICAgIF0pO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtzdHJpbmd8ZnVuY3Rpb259IHJlcGxhY2VtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbGVmdFxuICogQHBhcmFtIHtzdHJpbmd9IHJpZ2h0XG4gKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbnNob3dkb3duLmhlbHBlci5yZXBsYWNlUmVjdXJzaXZlUmVnRXhwID0gZnVuY3Rpb24gKHN0ciwgcmVwbGFjZW1lbnQsIGxlZnQsIHJpZ2h0LCBmbGFncykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNGdW5jdGlvbihyZXBsYWNlbWVudCkpIHtcbiAgICB2YXIgcmVwU3RyID0gcmVwbGFjZW1lbnQ7XG4gICAgcmVwbGFjZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVwU3RyO1xuICAgIH07XG4gIH1cblxuICB2YXIgbWF0Y2hQb3MgPSByZ3hGaW5kTWF0Y2hQb3Moc3RyLCBsZWZ0LCByaWdodCwgZmxhZ3MpLFxuICAgICAgZmluYWxTdHIgPSBzdHIsXG4gICAgICBsbmcgPSBtYXRjaFBvcy5sZW5ndGg7XG5cbiAgaWYgKGxuZyA+IDApIHtcbiAgICB2YXIgYml0cyA9IFtdO1xuICAgIGlmIChtYXRjaFBvc1swXS53aG9sZU1hdGNoLnN0YXJ0ICE9PSAwKSB7XG4gICAgICBiaXRzLnB1c2goc3RyLnNsaWNlKDAsIG1hdGNoUG9zWzBdLndob2xlTWF0Y2guc3RhcnQpKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbmc7ICsraSkge1xuICAgICAgYml0cy5wdXNoKFxuICAgICAgICByZXBsYWNlbWVudChcbiAgICAgICAgICBzdHIuc2xpY2UobWF0Y2hQb3NbaV0ud2hvbGVNYXRjaC5zdGFydCwgbWF0Y2hQb3NbaV0ud2hvbGVNYXRjaC5lbmQpLFxuICAgICAgICAgIHN0ci5zbGljZShtYXRjaFBvc1tpXS5tYXRjaC5zdGFydCwgbWF0Y2hQb3NbaV0ubWF0Y2guZW5kKSxcbiAgICAgICAgICBzdHIuc2xpY2UobWF0Y2hQb3NbaV0ubGVmdC5zdGFydCwgbWF0Y2hQb3NbaV0ubGVmdC5lbmQpLFxuICAgICAgICAgIHN0ci5zbGljZShtYXRjaFBvc1tpXS5yaWdodC5zdGFydCwgbWF0Y2hQb3NbaV0ucmlnaHQuZW5kKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaWYgKGkgPCBsbmcgLSAxKSB7XG4gICAgICAgIGJpdHMucHVzaChzdHIuc2xpY2UobWF0Y2hQb3NbaV0ud2hvbGVNYXRjaC5lbmQsIG1hdGNoUG9zW2kgKyAxXS53aG9sZU1hdGNoLnN0YXJ0KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtYXRjaFBvc1tsbmcgLSAxXS53aG9sZU1hdGNoLmVuZCA8IHN0ci5sZW5ndGgpIHtcbiAgICAgIGJpdHMucHVzaChzdHIuc2xpY2UobWF0Y2hQb3NbbG5nIC0gMV0ud2hvbGVNYXRjaC5lbmQpKTtcbiAgICB9XG4gICAgZmluYWxTdHIgPSBiaXRzLmpvaW4oJycpO1xuICB9XG4gIHJldHVybiBmaW5hbFN0cjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggd2l0aGluIHRoZSBwYXNzZWQgU3RyaW5nIG9iamVjdCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3BlY2lmaWVkIHJlZ2V4LFxuICogc3RhcnRpbmcgdGhlIHNlYXJjaCBhdCBmcm9tSW5kZXguIFJldHVybnMgLTEgaWYgdGhlIHZhbHVlIGlzIG5vdCBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIHN0cmluZyB0byBzZWFyY2hcbiAqIEBwYXJhbSB7UmVnRXhwfSByZWdleCBSZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoXG4gKiBAcGFyYW0ge2ludH0gW2Zyb21JbmRleCA9IDBdIEluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2hcbiAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEVycm9yXG4gKi9cbnNob3dkb3duLmhlbHBlci5yZWdleEluZGV4T2YgPSBmdW5jdGlvbiAoc3RyLCByZWdleCwgZnJvbUluZGV4KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNTdHJpbmcoc3RyKSkge1xuICAgIHRocm93ICdJbnZhbGlkQXJndW1lbnRFcnJvcjogZmlyc3QgcGFyYW1ldGVyIG9mIHNob3dkb3duLmhlbHBlci5yZWdleEluZGV4T2YgZnVuY3Rpb24gbXVzdCBiZSBhIHN0cmluZyc7XG4gIH1cbiAgaWYgKHJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwID09PSBmYWxzZSkge1xuICAgIHRocm93ICdJbnZhbGlkQXJndW1lbnRFcnJvcjogc2Vjb25kIHBhcmFtZXRlciBvZiBzaG93ZG93bi5oZWxwZXIucmVnZXhJbmRleE9mIGZ1bmN0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgUmVnRXhwJztcbiAgfVxuICB2YXIgaW5kZXhPZiA9IHN0ci5zdWJzdHJpbmcoZnJvbUluZGV4IHx8IDApLnNlYXJjaChyZWdleCk7XG4gIHJldHVybiAoaW5kZXhPZiA+PSAwKSA/IChpbmRleE9mICsgKGZyb21JbmRleCB8fCAwKSkgOiBpbmRleE9mO1xufTtcblxuLyoqXG4gKiBTcGxpdHMgdGhlIHBhc3NlZCBzdHJpbmcgb2JqZWN0IGF0IHRoZSBkZWZpbmVkIGluZGV4LCBhbmQgcmV0dXJucyBhbiBhcnJheSBjb21wb3NlZCBvZiB0aGUgdHdvIHN1YnN0cmluZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgc3RyaW5nIHRvIHNwbGl0XG4gKiBAcGFyYW0ge2ludH0gaW5kZXggaW5kZXggdG8gc3BsaXQgc3RyaW5nIGF0XG4gKiBAcmV0dXJucyB7W3N0cmluZyxzdHJpbmddfVxuICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFcnJvclxuICovXG5zaG93ZG93bi5oZWxwZXIuc3BsaXRBdEluZGV4ID0gZnVuY3Rpb24gKHN0ciwgaW5kZXgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBpZiAoIXNob3dkb3duLmhlbHBlci5pc1N0cmluZyhzdHIpKSB7XG4gICAgdGhyb3cgJ0ludmFsaWRBcmd1bWVudEVycm9yOiBmaXJzdCBwYXJhbWV0ZXIgb2Ygc2hvd2Rvd24uaGVscGVyLnJlZ2V4SW5kZXhPZiBmdW5jdGlvbiBtdXN0IGJlIGEgc3RyaW5nJztcbiAgfVxuICByZXR1cm4gW3N0ci5zdWJzdHJpbmcoMCwgaW5kZXgpLCBzdHIuc3Vic3RyaW5nKGluZGV4KV07XG59O1xuXG4vKipcbiAqIE9iZnVzY2F0ZSBhbiBlLW1haWwgYWRkcmVzcyB0aHJvdWdoIHRoZSB1c2Ugb2YgQ2hhcmFjdGVyIEVudGl0aWVzLFxuICogdHJhbnNmb3JtaW5nIEFTQ0lJIGNoYXJhY3RlcnMgaW50byB0aGVpciBlcXVpdmFsZW50IGRlY2ltYWwgb3IgaGV4IGVudGl0aWVzLlxuICpcbiAqIFNpbmNlIGl0IGhhcyBhIHJhbmRvbSBjb21wb25lbnQsIHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBwcm9kdWNlIGRpZmZlcmVudCByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1haWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbnNob3dkb3duLmhlbHBlci5lbmNvZGVFbWFpbEFkZHJlc3MgPSBmdW5jdGlvbiAobWFpbCkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBlbmNvZGUgPSBbXG4gICAgZnVuY3Rpb24gKGNoKSB7XG4gICAgICByZXR1cm4gJyYjJyArIGNoLmNoYXJDb2RlQXQoMCkgKyAnOyc7XG4gICAgfSxcbiAgICBmdW5jdGlvbiAoY2gpIHtcbiAgICAgIHJldHVybiAnJiN4JyArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpICsgJzsnO1xuICAgIH0sXG4gICAgZnVuY3Rpb24gKGNoKSB7XG4gICAgICByZXR1cm4gY2g7XG4gICAgfVxuICBdO1xuXG4gIG1haWwgPSBtYWlsLnJlcGxhY2UoLy4vZywgZnVuY3Rpb24gKGNoKSB7XG4gICAgaWYgKGNoID09PSAnQCcpIHtcbiAgICAgIC8vIHRoaXMgKm11c3QqIGJlIGVuY29kZWQuIEkgaW5zaXN0LlxuICAgICAgY2ggPSBlbmNvZGVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMildKGNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpO1xuICAgICAgLy8gcm91Z2hseSAxMCUgcmF3LCA0NSUgaGV4LCA0NSUgZGVjXG4gICAgICBjaCA9IChcbiAgICAgICAgciA+IDAuOSA/IGVuY29kZVsyXShjaCkgOiByID4gMC40NSA/IGVuY29kZVsxXShjaCkgOiBlbmNvZGVbMF0oY2gpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY2g7XG4gIH0pO1xuXG4gIHJldHVybiBtYWlsO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICogQHBhcmFtIHRhcmdldExlbmd0aFxuICogQHBhcmFtIHBhZFN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuc2hvd2Rvd24uaGVscGVyLnBhZEVuZCA9IGZ1bmN0aW9uIHBhZEVuZCAoc3RyLCB0YXJnZXRMZW5ndGgsIHBhZFN0cmluZykge1xuICAndXNlIHN0cmljdCc7XG4gIC8qanNoaW50IGJpdHdpc2U6IGZhbHNlKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwYWNlLWluZml4LW9wc1xuICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGg+PjA7IC8vZmxvb3IgaWYgbnVtYmVyIG9yIGNvbnZlcnQgbm9uLW51bWJlciB0byAwO1xuICAvKmpzaGludCBiaXR3aXNlOiB0cnVlKi9cbiAgcGFkU3RyaW5nID0gU3RyaW5nKHBhZFN0cmluZyB8fCAnICcpO1xuICBpZiAoc3RyLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgIHJldHVybiBTdHJpbmcoc3RyKTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBzdHIubGVuZ3RoO1xuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTsgLy9hcHBlbmQgdG8gb3JpZ2luYWwgdG8gZW5zdXJlIHdlIGFyZSBsb25nZXIgdGhhbiBuZWVkZWRcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhzdHIpICsgcGFkU3RyaW5nLnNsaWNlKDAsdGFyZ2V0TGVuZ3RoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQT0xZRklMTFNcbiAqL1xuLy8gdXNlIHRoaXMgaW5zdGVhZCBvZiBidWlsdGluIGlzIHVuZGVmaW5lZCBmb3IgSUU4IGNvbXBhdGliaWxpdHlcbmlmICh0eXBlb2YoY29uc29sZSkgPT09ICd1bmRlZmluZWQnKSB7XG4gIGNvbnNvbGUgPSB7XG4gICAgd2FybjogZnVuY3Rpb24gKG1zZykge1xuICAgICAgJ3VzZSBzdHJpY3QnO1xuICAgICAgYWxlcnQobXNnKTtcbiAgICB9LFxuICAgIGxvZzogZnVuY3Rpb24gKG1zZykge1xuICAgICAgJ3VzZSBzdHJpY3QnO1xuICAgICAgYWxlcnQobXNnKTtcbiAgICB9LFxuICAgIGVycm9yOiBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAndXNlIHN0cmljdCc7XG4gICAgICB0aHJvdyBtc2c7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbW1vbiByZWdleGVzLlxuICogV2UgZGVjbGFyZSBzb21lIGNvbW1vbiByZWdleGVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2VcbiAqL1xuc2hvd2Rvd24uaGVscGVyLnJlZ2V4ZXMgPSB7XG4gIGFzdGVyaXNrRGFzaEFuZENvbG9uOiAvKFsqXzp+XSkvZ1xufTtcblxuLyoqXG4gKiBFTU9KSVMgTElTVFxuICovXG5zaG93ZG93bi5oZWxwZXIuZW1vamlzID0ge1xuICAnKzEnOidcXHVkODNkXFx1ZGM0ZCcsXG4gICctMSc6J1xcdWQ4M2RcXHVkYzRlJyxcbiAgJzEwMCc6J1xcdWQ4M2RcXHVkY2FmJyxcbiAgJzEyMzQnOidcXHVkODNkXFx1ZGQyMicsXG4gICcxc3RfcGxhY2VfbWVkYWwnOidcXHVkODNlXFx1ZGQ0NycsXG4gICcybmRfcGxhY2VfbWVkYWwnOidcXHVkODNlXFx1ZGQ0OCcsXG4gICczcmRfcGxhY2VfbWVkYWwnOidcXHVkODNlXFx1ZGQ0OScsXG4gICc4YmFsbCc6J1xcdWQ4M2NcXHVkZmIxJyxcbiAgJ2EnOidcXHVkODNjXFx1ZGQ3MFxcdWZlMGYnLFxuICAnYWInOidcXHVkODNjXFx1ZGQ4ZScsXG4gICdhYmMnOidcXHVkODNkXFx1ZGQyNCcsXG4gICdhYmNkJzonXFx1ZDgzZFxcdWRkMjEnLFxuICAnYWNjZXB0JzonXFx1ZDgzY1xcdWRlNTEnLFxuICAnYWVyaWFsX3RyYW13YXknOidcXHVkODNkXFx1ZGVhMScsXG4gICdhaXJwbGFuZSc6J1xcdTI3MDhcXHVmZTBmJyxcbiAgJ2FsYXJtX2Nsb2NrJzonXFx1MjNmMCcsXG4gICdhbGVtYmljJzonXFx1MjY5N1xcdWZlMGYnLFxuICAnYWxpZW4nOidcXHVkODNkXFx1ZGM3ZCcsXG4gICdhbWJ1bGFuY2UnOidcXHVkODNkXFx1ZGU5MScsXG4gICdhbXBob3JhJzonXFx1ZDgzY1xcdWRmZmEnLFxuICAnYW5jaG9yJzonXFx1MjY5M1xcdWZlMGYnLFxuICAnYW5nZWwnOidcXHVkODNkXFx1ZGM3YycsXG4gICdhbmdlcic6J1xcdWQ4M2RcXHVkY2EyJyxcbiAgJ2FuZ3J5JzonXFx1ZDgzZFxcdWRlMjAnLFxuICAnYW5ndWlzaGVkJzonXFx1ZDgzZFxcdWRlMjcnLFxuICAnYW50JzonXFx1ZDgzZFxcdWRjMWMnLFxuICAnYXBwbGUnOidcXHVkODNjXFx1ZGY0ZScsXG4gICdhcXVhcml1cyc6J1xcdTI2NTJcXHVmZTBmJyxcbiAgJ2FyaWVzJzonXFx1MjY0OFxcdWZlMGYnLFxuICAnYXJyb3dfYmFja3dhcmQnOidcXHUyNWMwXFx1ZmUwZicsXG4gICdhcnJvd19kb3VibGVfZG93bic6J1xcdTIzZWMnLFxuICAnYXJyb3dfZG91YmxlX3VwJzonXFx1MjNlYicsXG4gICdhcnJvd19kb3duJzonXFx1MmIwN1xcdWZlMGYnLFxuICAnYXJyb3dfZG93bl9zbWFsbCc6J1xcdWQ4M2RcXHVkZDNkJyxcbiAgJ2Fycm93X2ZvcndhcmQnOidcXHUyNWI2XFx1ZmUwZicsXG4gICdhcnJvd19oZWFkaW5nX2Rvd24nOidcXHUyOTM1XFx1ZmUwZicsXG4gICdhcnJvd19oZWFkaW5nX3VwJzonXFx1MjkzNFxcdWZlMGYnLFxuICAnYXJyb3dfbGVmdCc6J1xcdTJiMDVcXHVmZTBmJyxcbiAgJ2Fycm93X2xvd2VyX2xlZnQnOidcXHUyMTk5XFx1ZmUwZicsXG4gICdhcnJvd19sb3dlcl9yaWdodCc6J1xcdTIxOThcXHVmZTBmJyxcbiAgJ2Fycm93X3JpZ2h0JzonXFx1MjdhMVxcdWZlMGYnLFxuICAnYXJyb3dfcmlnaHRfaG9vayc6J1xcdTIxYWFcXHVmZTBmJyxcbiAgJ2Fycm93X3VwJzonXFx1MmIwNlxcdWZlMGYnLFxuICAnYXJyb3dfdXBfZG93bic6J1xcdTIxOTVcXHVmZTBmJyxcbiAgJ2Fycm93X3VwX3NtYWxsJzonXFx1ZDgzZFxcdWRkM2MnLFxuICAnYXJyb3dfdXBwZXJfbGVmdCc6J1xcdTIxOTZcXHVmZTBmJyxcbiAgJ2Fycm93X3VwcGVyX3JpZ2h0JzonXFx1MjE5N1xcdWZlMGYnLFxuICAnYXJyb3dzX2Nsb2Nrd2lzZSc6J1xcdWQ4M2RcXHVkZDAzJyxcbiAgJ2Fycm93c19jb3VudGVyY2xvY2t3aXNlJzonXFx1ZDgzZFxcdWRkMDQnLFxuICAnYXJ0JzonXFx1ZDgzY1xcdWRmYTgnLFxuICAnYXJ0aWN1bGF0ZWRfbG9ycnknOidcXHVkODNkXFx1ZGU5YicsXG4gICdhcnRpZmljaWFsX3NhdGVsbGl0ZSc6J1xcdWQ4M2RcXHVkZWYwJyxcbiAgJ2FzdG9uaXNoZWQnOidcXHVkODNkXFx1ZGUzMicsXG4gICdhdGhsZXRpY19zaG9lJzonXFx1ZDgzZFxcdWRjNWYnLFxuICAnYXRtJzonXFx1ZDgzY1xcdWRmZTcnLFxuICAnYXRvbV9zeW1ib2wnOidcXHUyNjliXFx1ZmUwZicsXG4gICdhdm9jYWRvJzonXFx1ZDgzZVxcdWRkNTEnLFxuICAnYic6J1xcdWQ4M2NcXHVkZDcxXFx1ZmUwZicsXG4gICdiYWJ5JzonXFx1ZDgzZFxcdWRjNzYnLFxuICAnYmFieV9ib3R0bGUnOidcXHVkODNjXFx1ZGY3YycsXG4gICdiYWJ5X2NoaWNrJzonXFx1ZDgzZFxcdWRjMjQnLFxuICAnYmFieV9zeW1ib2wnOidcXHVkODNkXFx1ZGViYycsXG4gICdiYWNrJzonXFx1ZDgzZFxcdWRkMTknLFxuICAnYmFjb24nOidcXHVkODNlXFx1ZGQ1MycsXG4gICdiYWRtaW50b24nOidcXHVkODNjXFx1ZGZmOCcsXG4gICdiYWdnYWdlX2NsYWltJzonXFx1ZDgzZFxcdWRlYzQnLFxuICAnYmFndWV0dGVfYnJlYWQnOidcXHVkODNlXFx1ZGQ1NicsXG4gICdiYWxhbmNlX3NjYWxlJzonXFx1MjY5NlxcdWZlMGYnLFxuICAnYmFsbG9vbic6J1xcdWQ4M2NcXHVkZjg4JyxcbiAgJ2JhbGxvdF9ib3gnOidcXHVkODNkXFx1ZGRmMycsXG4gICdiYWxsb3RfYm94X3dpdGhfY2hlY2snOidcXHUyNjExXFx1ZmUwZicsXG4gICdiYW1ib28nOidcXHVkODNjXFx1ZGY4ZCcsXG4gICdiYW5hbmEnOidcXHVkODNjXFx1ZGY0YycsXG4gICdiYW5nYmFuZyc6J1xcdTIwM2NcXHVmZTBmJyxcbiAgJ2JhbmsnOidcXHVkODNjXFx1ZGZlNicsXG4gICdiYXJfY2hhcnQnOidcXHVkODNkXFx1ZGNjYScsXG4gICdiYXJiZXInOidcXHVkODNkXFx1ZGM4OCcsXG4gICdiYXNlYmFsbCc6J1xcdTI2YmVcXHVmZTBmJyxcbiAgJ2Jhc2tldGJhbGwnOidcXHVkODNjXFx1ZGZjMCcsXG4gICdiYXNrZXRiYWxsX21hbic6J1xcdTI2ZjlcXHVmZTBmJyxcbiAgJ2Jhc2tldGJhbGxfd29tYW4nOidcXHUyNmY5XFx1ZmUwZiZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnYmF0JzonXFx1ZDgzZVxcdWRkODcnLFxuICAnYmF0aCc6J1xcdWQ4M2RcXHVkZWMwJyxcbiAgJ2JhdGh0dWInOidcXHVkODNkXFx1ZGVjMScsXG4gICdiYXR0ZXJ5JzonXFx1ZDgzZFxcdWRkMGInLFxuICAnYmVhY2hfdW1icmVsbGEnOidcXHVkODNjXFx1ZGZkNicsXG4gICdiZWFyJzonXFx1ZDgzZFxcdWRjM2InLFxuICAnYmVkJzonXFx1ZDgzZFxcdWRlY2YnLFxuICAnYmVlJzonXFx1ZDgzZFxcdWRjMWQnLFxuICAnYmVlcic6J1xcdWQ4M2NcXHVkZjdhJyxcbiAgJ2JlZXJzJzonXFx1ZDgzY1xcdWRmN2InLFxuICAnYmVldGxlJzonXFx1ZDgzZFxcdWRjMWUnLFxuICAnYmVnaW5uZXInOidcXHVkODNkXFx1ZGQzMCcsXG4gICdiZWxsJzonXFx1ZDgzZFxcdWRkMTQnLFxuICAnYmVsbGhvcF9iZWxsJzonXFx1ZDgzZFxcdWRlY2UnLFxuICAnYmVudG8nOidcXHVkODNjXFx1ZGY3MScsXG4gICdiaWtpbmdfbWFuJzonXFx1ZDgzZFxcdWRlYjQnLFxuICAnYmlrZSc6J1xcdWQ4M2RcXHVkZWIyJyxcbiAgJ2Jpa2luZ193b21hbic6J1xcdWQ4M2RcXHVkZWI0Jnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdiaWtpbmknOidcXHVkODNkXFx1ZGM1OScsXG4gICdiaW9oYXphcmQnOidcXHUyNjIzXFx1ZmUwZicsXG4gICdiaXJkJzonXFx1ZDgzZFxcdWRjMjYnLFxuICAnYmlydGhkYXknOidcXHVkODNjXFx1ZGY4MicsXG4gICdibGFja19jaXJjbGUnOidcXHUyNmFiXFx1ZmUwZicsXG4gICdibGFja19mbGFnJzonXFx1ZDgzY1xcdWRmZjQnLFxuICAnYmxhY2tfaGVhcnQnOidcXHVkODNkXFx1ZGRhNCcsXG4gICdibGFja19qb2tlcic6J1xcdWQ4M2NcXHVkY2NmJyxcbiAgJ2JsYWNrX2xhcmdlX3NxdWFyZSc6J1xcdTJiMWJcXHVmZTBmJyxcbiAgJ2JsYWNrX21lZGl1bV9zbWFsbF9zcXVhcmUnOidcXHUyNWZlXFx1ZmUwZicsXG4gICdibGFja19tZWRpdW1fc3F1YXJlJzonXFx1MjVmY1xcdWZlMGYnLFxuICAnYmxhY2tfbmliJzonXFx1MjcxMlxcdWZlMGYnLFxuICAnYmxhY2tfc21hbGxfc3F1YXJlJzonXFx1MjVhYVxcdWZlMGYnLFxuICAnYmxhY2tfc3F1YXJlX2J1dHRvbic6J1xcdWQ4M2RcXHVkZDMyJyxcbiAgJ2Jsb25kZV9tYW4nOidcXHVkODNkXFx1ZGM3MScsXG4gICdibG9uZGVfd29tYW4nOidcXHVkODNkXFx1ZGM3MSZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnYmxvc3NvbSc6J1xcdWQ4M2NcXHVkZjNjJyxcbiAgJ2Jsb3dmaXNoJzonXFx1ZDgzZFxcdWRjMjEnLFxuICAnYmx1ZV9ib29rJzonXFx1ZDgzZFxcdWRjZDgnLFxuICAnYmx1ZV9jYXInOidcXHVkODNkXFx1ZGU5OScsXG4gICdibHVlX2hlYXJ0JzonXFx1ZDgzZFxcdWRjOTknLFxuICAnYmx1c2gnOidcXHVkODNkXFx1ZGUwYScsXG4gICdib2FyJzonXFx1ZDgzZFxcdWRjMTcnLFxuICAnYm9hdCc6J1xcdTI2ZjVcXHVmZTBmJyxcbiAgJ2JvbWInOidcXHVkODNkXFx1ZGNhMycsXG4gICdib29rJzonXFx1ZDgzZFxcdWRjZDYnLFxuICAnYm9va21hcmsnOidcXHVkODNkXFx1ZGQxNicsXG4gICdib29rbWFya190YWJzJzonXFx1ZDgzZFxcdWRjZDEnLFxuICAnYm9va3MnOidcXHVkODNkXFx1ZGNkYScsXG4gICdib29tJzonXFx1ZDgzZFxcdWRjYTUnLFxuICAnYm9vdCc6J1xcdWQ4M2RcXHVkYzYyJyxcbiAgJ2JvdXF1ZXQnOidcXHVkODNkXFx1ZGM5MCcsXG4gICdib3dpbmdfbWFuJzonXFx1ZDgzZFxcdWRlNDcnLFxuICAnYm93X2FuZF9hcnJvdyc6J1xcdWQ4M2NcXHVkZmY5JyxcbiAgJ2Jvd2luZ193b21hbic6J1xcdWQ4M2RcXHVkZTQ3Jnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdib3dsaW5nJzonXFx1ZDgzY1xcdWRmYjMnLFxuICAnYm94aW5nX2dsb3ZlJzonXFx1ZDgzZVxcdWRkNGEnLFxuICAnYm95JzonXFx1ZDgzZFxcdWRjNjYnLFxuICAnYnJlYWQnOidcXHVkODNjXFx1ZGY1ZScsXG4gICdicmlkZV93aXRoX3ZlaWwnOidcXHVkODNkXFx1ZGM3MCcsXG4gICdicmlkZ2VfYXRfbmlnaHQnOidcXHVkODNjXFx1ZGYwOScsXG4gICdicmllZmNhc2UnOidcXHVkODNkXFx1ZGNiYycsXG4gICdicm9rZW5faGVhcnQnOidcXHVkODNkXFx1ZGM5NCcsXG4gICdidWcnOidcXHVkODNkXFx1ZGMxYicsXG4gICdidWlsZGluZ19jb25zdHJ1Y3Rpb24nOidcXHVkODNjXFx1ZGZkNycsXG4gICdidWxiJzonXFx1ZDgzZFxcdWRjYTEnLFxuICAnYnVsbGV0dHJhaW5fZnJvbnQnOidcXHVkODNkXFx1ZGU4NScsXG4gICdidWxsZXR0cmFpbl9zaWRlJzonXFx1ZDgzZFxcdWRlODQnLFxuICAnYnVycml0byc6J1xcdWQ4M2NcXHVkZjJmJyxcbiAgJ2J1cyc6J1xcdWQ4M2RcXHVkZThjJyxcbiAgJ2J1c2luZXNzX3N1aXRfbGV2aXRhdGluZyc6J1xcdWQ4M2RcXHVkZDc0JyxcbiAgJ2J1c3N0b3AnOidcXHVkODNkXFx1ZGU4ZicsXG4gICdidXN0X2luX3NpbGhvdWV0dGUnOidcXHVkODNkXFx1ZGM2NCcsXG4gICdidXN0c19pbl9zaWxob3VldHRlJzonXFx1ZDgzZFxcdWRjNjUnLFxuICAnYnV0dGVyZmx5JzonXFx1ZDgzZVxcdWRkOGInLFxuICAnY2FjdHVzJzonXFx1ZDgzY1xcdWRmMzUnLFxuICAnY2FrZSc6J1xcdWQ4M2NcXHVkZjcwJyxcbiAgJ2NhbGVuZGFyJzonXFx1ZDgzZFxcdWRjYzYnLFxuICAnY2FsbF9tZV9oYW5kJzonXFx1ZDgzZVxcdWRkMTknLFxuICAnY2FsbGluZyc6J1xcdWQ4M2RcXHVkY2YyJyxcbiAgJ2NhbWVsJzonXFx1ZDgzZFxcdWRjMmInLFxuICAnY2FtZXJhJzonXFx1ZDgzZFxcdWRjZjcnLFxuICAnY2FtZXJhX2ZsYXNoJzonXFx1ZDgzZFxcdWRjZjgnLFxuICAnY2FtcGluZyc6J1xcdWQ4M2NcXHVkZmQ1JyxcbiAgJ2NhbmNlcic6J1xcdTI2NGJcXHVmZTBmJyxcbiAgJ2NhbmRsZSc6J1xcdWQ4M2RcXHVkZDZmJyxcbiAgJ2NhbmR5JzonXFx1ZDgzY1xcdWRmNmMnLFxuICAnY2Fub2UnOidcXHVkODNkXFx1ZGVmNicsXG4gICdjYXBpdGFsX2FiY2QnOidcXHVkODNkXFx1ZGQyMCcsXG4gICdjYXByaWNvcm4nOidcXHUyNjUxXFx1ZmUwZicsXG4gICdjYXInOidcXHVkODNkXFx1ZGU5NycsXG4gICdjYXJkX2ZpbGVfYm94JzonXFx1ZDgzZFxcdWRkYzMnLFxuICAnY2FyZF9pbmRleCc6J1xcdWQ4M2RcXHVkY2M3JyxcbiAgJ2NhcmRfaW5kZXhfZGl2aWRlcnMnOidcXHVkODNkXFx1ZGRjMicsXG4gICdjYXJvdXNlbF9ob3JzZSc6J1xcdWQ4M2NcXHVkZmEwJyxcbiAgJ2NhcnJvdCc6J1xcdWQ4M2VcXHVkZDU1JyxcbiAgJ2NhdCc6J1xcdWQ4M2RcXHVkYzMxJyxcbiAgJ2NhdDInOidcXHVkODNkXFx1ZGMwOCcsXG4gICdjZCc6J1xcdWQ4M2RcXHVkY2JmJyxcbiAgJ2NoYWlucyc6J1xcdTI2ZDMnLFxuICAnY2hhbXBhZ25lJzonXFx1ZDgzY1xcdWRmN2UnLFxuICAnY2hhcnQnOidcXHVkODNkXFx1ZGNiOScsXG4gICdjaGFydF93aXRoX2Rvd253YXJkc190cmVuZCc6J1xcdWQ4M2RcXHVkY2M5JyxcbiAgJ2NoYXJ0X3dpdGhfdXB3YXJkc190cmVuZCc6J1xcdWQ4M2RcXHVkY2M4JyxcbiAgJ2NoZWNrZXJlZF9mbGFnJzonXFx1ZDgzY1xcdWRmYzEnLFxuICAnY2hlZXNlJzonXFx1ZDgzZVxcdWRkYzAnLFxuICAnY2hlcnJpZXMnOidcXHVkODNjXFx1ZGY1MicsXG4gICdjaGVycnlfYmxvc3NvbSc6J1xcdWQ4M2NcXHVkZjM4JyxcbiAgJ2NoZXN0bnV0JzonXFx1ZDgzY1xcdWRmMzAnLFxuICAnY2hpY2tlbic6J1xcdWQ4M2RcXHVkYzE0JyxcbiAgJ2NoaWxkcmVuX2Nyb3NzaW5nJzonXFx1ZDgzZFxcdWRlYjgnLFxuICAnY2hpcG11bmsnOidcXHVkODNkXFx1ZGMzZicsXG4gICdjaG9jb2xhdGVfYmFyJzonXFx1ZDgzY1xcdWRmNmInLFxuICAnY2hyaXN0bWFzX3RyZWUnOidcXHVkODNjXFx1ZGY4NCcsXG4gICdjaHVyY2gnOidcXHUyNmVhXFx1ZmUwZicsXG4gICdjaW5lbWEnOidcXHVkODNjXFx1ZGZhNicsXG4gICdjaXJjdXNfdGVudCc6J1xcdWQ4M2NcXHVkZmFhJyxcbiAgJ2NpdHlfc3VucmlzZSc6J1xcdWQ4M2NcXHVkZjA3JyxcbiAgJ2NpdHlfc3Vuc2V0JzonXFx1ZDgzY1xcdWRmMDYnLFxuICAnY2l0eXNjYXBlJzonXFx1ZDgzY1xcdWRmZDknLFxuICAnY2wnOidcXHVkODNjXFx1ZGQ5MScsXG4gICdjbGFtcCc6J1xcdWQ4M2RcXHVkZGRjJyxcbiAgJ2NsYXAnOidcXHVkODNkXFx1ZGM0ZicsXG4gICdjbGFwcGVyJzonXFx1ZDgzY1xcdWRmYWMnLFxuICAnY2xhc3NpY2FsX2J1aWxkaW5nJzonXFx1ZDgzY1xcdWRmZGInLFxuICAnY2xpbmtpbmdfZ2xhc3Nlcyc6J1xcdWQ4M2VcXHVkZDQyJyxcbiAgJ2NsaXBib2FyZCc6J1xcdWQ4M2RcXHVkY2NiJyxcbiAgJ2Nsb2NrMSc6J1xcdWQ4M2RcXHVkZDUwJyxcbiAgJ2Nsb2NrMTAnOidcXHVkODNkXFx1ZGQ1OScsXG4gICdjbG9jazEwMzAnOidcXHVkODNkXFx1ZGQ2NScsXG4gICdjbG9jazExJzonXFx1ZDgzZFxcdWRkNWEnLFxuICAnY2xvY2sxMTMwJzonXFx1ZDgzZFxcdWRkNjYnLFxuICAnY2xvY2sxMic6J1xcdWQ4M2RcXHVkZDViJyxcbiAgJ2Nsb2NrMTIzMCc6J1xcdWQ4M2RcXHVkZDY3JyxcbiAgJ2Nsb2NrMTMwJzonXFx1ZDgzZFxcdWRkNWMnLFxuICAnY2xvY2syJzonXFx1ZDgzZFxcdWRkNTEnLFxuICAnY2xvY2syMzAnOidcXHVkODNkXFx1ZGQ1ZCcsXG4gICdjbG9jazMnOidcXHVkODNkXFx1ZGQ1MicsXG4gICdjbG9jazMzMCc6J1xcdWQ4M2RcXHVkZDVlJyxcbiAgJ2Nsb2NrNCc6J1xcdWQ4M2RcXHVkZDUzJyxcbiAgJ2Nsb2NrNDMwJzonXFx1ZDgzZFxcdWRkNWYnLFxuICAnY2xvY2s1JzonXFx1ZDgzZFxcdWRkNTQnLFxuICAnY2xvY2s1MzAnOidcXHVkODNkXFx1ZGQ2MCcsXG4gICdjbG9jazYnOidcXHVkODNkXFx1ZGQ1NScsXG4gICdjbG9jazYzMCc6J1xcdWQ4M2RcXHVkZDYxJyxcbiAgJ2Nsb2NrNyc6J1xcdWQ4M2RcXHVkZDU2JyxcbiAgJ2Nsb2NrNzMwJzonXFx1ZDgzZFxcdWRkNjInLFxuICAnY2xvY2s4JzonXFx1ZDgzZFxcdWRkNTcnLFxuICAnY2xvY2s4MzAnOidcXHVkODNkXFx1ZGQ2MycsXG4gICdjbG9jazknOidcXHVkODNkXFx1ZGQ1OCcsXG4gICdjbG9jazkzMCc6J1xcdWQ4M2RcXHVkZDY0JyxcbiAgJ2Nsb3NlZF9ib29rJzonXFx1ZDgzZFxcdWRjZDUnLFxuICAnY2xvc2VkX2xvY2tfd2l0aF9rZXknOidcXHVkODNkXFx1ZGQxMCcsXG4gICdjbG9zZWRfdW1icmVsbGEnOidcXHVkODNjXFx1ZGYwMicsXG4gICdjbG91ZCc6J1xcdTI2MDFcXHVmZTBmJyxcbiAgJ2Nsb3VkX3dpdGhfbGlnaHRuaW5nJzonXFx1ZDgzY1xcdWRmMjknLFxuICAnY2xvdWRfd2l0aF9saWdodG5pbmdfYW5kX3JhaW4nOidcXHUyNmM4JyxcbiAgJ2Nsb3VkX3dpdGhfcmFpbic6J1xcdWQ4M2NcXHVkZjI3JyxcbiAgJ2Nsb3VkX3dpdGhfc25vdyc6J1xcdWQ4M2NcXHVkZjI4JyxcbiAgJ2Nsb3duX2ZhY2UnOidcXHVkODNlXFx1ZGQyMScsXG4gICdjbHVicyc6J1xcdTI2NjNcXHVmZTBmJyxcbiAgJ2NvY2t0YWlsJzonXFx1ZDgzY1xcdWRmNzgnLFxuICAnY29mZmVlJzonXFx1MjYxNVxcdWZlMGYnLFxuICAnY29mZmluJzonXFx1MjZiMFxcdWZlMGYnLFxuICAnY29sZF9zd2VhdCc6J1xcdWQ4M2RcXHVkZTMwJyxcbiAgJ2NvbWV0JzonXFx1MjYwNFxcdWZlMGYnLFxuICAnY29tcHV0ZXInOidcXHVkODNkXFx1ZGNiYicsXG4gICdjb21wdXRlcl9tb3VzZSc6J1xcdWQ4M2RcXHVkZGIxJyxcbiAgJ2NvbmZldHRpX2JhbGwnOidcXHVkODNjXFx1ZGY4YScsXG4gICdjb25mb3VuZGVkJzonXFx1ZDgzZFxcdWRlMTYnLFxuICAnY29uZnVzZWQnOidcXHVkODNkXFx1ZGUxNScsXG4gICdjb25ncmF0dWxhdGlvbnMnOidcXHUzMjk3XFx1ZmUwZicsXG4gICdjb25zdHJ1Y3Rpb24nOidcXHVkODNkXFx1ZGVhNycsXG4gICdjb25zdHJ1Y3Rpb25fd29ya2VyX21hbic6J1xcdWQ4M2RcXHVkYzc3JyxcbiAgJ2NvbnN0cnVjdGlvbl93b3JrZXJfd29tYW4nOidcXHVkODNkXFx1ZGM3NyZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnY29udHJvbF9rbm9icyc6J1xcdWQ4M2NcXHVkZjliJyxcbiAgJ2NvbnZlbmllbmNlX3N0b3JlJzonXFx1ZDgzY1xcdWRmZWEnLFxuICAnY29va2llJzonXFx1ZDgzY1xcdWRmNmEnLFxuICAnY29vbCc6J1xcdWQ4M2NcXHVkZDkyJyxcbiAgJ3BvbGljZW1hbic6J1xcdWQ4M2RcXHVkYzZlJyxcbiAgJ2NvcHlyaWdodCc6J1xcdTAwYTlcXHVmZTBmJyxcbiAgJ2Nvcm4nOidcXHVkODNjXFx1ZGYzZCcsXG4gICdjb3VjaF9hbmRfbGFtcCc6J1xcdWQ4M2RcXHVkZWNiJyxcbiAgJ2NvdXBsZSc6J1xcdWQ4M2RcXHVkYzZiJyxcbiAgJ2NvdXBsZV93aXRoX2hlYXJ0X3dvbWFuX21hbic6J1xcdWQ4M2RcXHVkYzkxJyxcbiAgJ2NvdXBsZV93aXRoX2hlYXJ0X21hbl9tYW4nOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1Mjc2NFxcdWZlMGYmendqO1xcdWQ4M2RcXHVkYzY4JyxcbiAgJ2NvdXBsZV93aXRoX2hlYXJ0X3dvbWFuX3dvbWFuJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdTI3NjRcXHVmZTBmJnp3ajtcXHVkODNkXFx1ZGM2OScsXG4gICdjb3VwbGVraXNzX21hbl9tYW4nOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1Mjc2NFxcdWZlMGYmendqO1xcdWQ4M2RcXHVkYzhiJnp3ajtcXHVkODNkXFx1ZGM2OCcsXG4gICdjb3VwbGVraXNzX21hbl93b21hbic6J1xcdWQ4M2RcXHVkYzhmJyxcbiAgJ2NvdXBsZWtpc3Nfd29tYW5fd29tYW4nOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1Mjc2NFxcdWZlMGYmendqO1xcdWQ4M2RcXHVkYzhiJnp3ajtcXHVkODNkXFx1ZGM2OScsXG4gICdjb3cnOidcXHVkODNkXFx1ZGMyZScsXG4gICdjb3cyJzonXFx1ZDgzZFxcdWRjMDQnLFxuICAnY293Ym95X2hhdF9mYWNlJzonXFx1ZDgzZVxcdWRkMjAnLFxuICAnY3JhYic6J1xcdWQ4M2VcXHVkZDgwJyxcbiAgJ2NyYXlvbic6J1xcdWQ4M2RcXHVkZDhkJyxcbiAgJ2NyZWRpdF9jYXJkJzonXFx1ZDgzZFxcdWRjYjMnLFxuICAnY3Jlc2NlbnRfbW9vbic6J1xcdWQ4M2NcXHVkZjE5JyxcbiAgJ2NyaWNrZXQnOidcXHVkODNjXFx1ZGZjZicsXG4gICdjcm9jb2RpbGUnOidcXHVkODNkXFx1ZGMwYScsXG4gICdjcm9pc3NhbnQnOidcXHVkODNlXFx1ZGQ1MCcsXG4gICdjcm9zc2VkX2ZpbmdlcnMnOidcXHVkODNlXFx1ZGQxZScsXG4gICdjcm9zc2VkX2ZsYWdzJzonXFx1ZDgzY1xcdWRmOGMnLFxuICAnY3Jvc3NlZF9zd29yZHMnOidcXHUyNjk0XFx1ZmUwZicsXG4gICdjcm93bic6J1xcdWQ4M2RcXHVkYzUxJyxcbiAgJ2NyeSc6J1xcdWQ4M2RcXHVkZTIyJyxcbiAgJ2NyeWluZ19jYXRfZmFjZSc6J1xcdWQ4M2RcXHVkZTNmJyxcbiAgJ2NyeXN0YWxfYmFsbCc6J1xcdWQ4M2RcXHVkZDJlJyxcbiAgJ2N1Y3VtYmVyJzonXFx1ZDgzZVxcdWRkNTInLFxuICAnY3VwaWQnOidcXHVkODNkXFx1ZGM5OCcsXG4gICdjdXJseV9sb29wJzonXFx1MjdiMCcsXG4gICdjdXJyZW5jeV9leGNoYW5nZSc6J1xcdWQ4M2RcXHVkY2IxJyxcbiAgJ2N1cnJ5JzonXFx1ZDgzY1xcdWRmNWInLFxuICAnY3VzdGFyZCc6J1xcdWQ4M2NcXHVkZjZlJyxcbiAgJ2N1c3RvbXMnOidcXHVkODNkXFx1ZGVjMycsXG4gICdjeWNsb25lJzonXFx1ZDgzY1xcdWRmMDAnLFxuICAnZGFnZ2VyJzonXFx1ZDgzZFxcdWRkZTEnLFxuICAnZGFuY2VyJzonXFx1ZDgzZFxcdWRjODMnLFxuICAnZGFuY2luZ193b21lbic6J1xcdWQ4M2RcXHVkYzZmJyxcbiAgJ2RhbmNpbmdfbWVuJzonXFx1ZDgzZFxcdWRjNmYmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ2RhbmdvJzonXFx1ZDgzY1xcdWRmNjEnLFxuICAnZGFya19zdW5nbGFzc2VzJzonXFx1ZDgzZFxcdWRkNzYnLFxuICAnZGFydCc6J1xcdWQ4M2NcXHVkZmFmJyxcbiAgJ2Rhc2gnOidcXHVkODNkXFx1ZGNhOCcsXG4gICdkYXRlJzonXFx1ZDgzZFxcdWRjYzUnLFxuICAnZGVjaWR1b3VzX3RyZWUnOidcXHVkODNjXFx1ZGYzMycsXG4gICdkZWVyJzonXFx1ZDgzZVxcdWRkOGMnLFxuICAnZGVwYXJ0bWVudF9zdG9yZSc6J1xcdWQ4M2NcXHVkZmVjJyxcbiAgJ2RlcmVsaWN0X2hvdXNlJzonXFx1ZDgzY1xcdWRmZGEnLFxuICAnZGVzZXJ0JzonXFx1ZDgzY1xcdWRmZGMnLFxuICAnZGVzZXJ0X2lzbGFuZCc6J1xcdWQ4M2NcXHVkZmRkJyxcbiAgJ2Rlc2t0b3BfY29tcHV0ZXInOidcXHVkODNkXFx1ZGRhNScsXG4gICdtYWxlX2RldGVjdGl2ZSc6J1xcdWQ4M2RcXHVkZDc1XFx1ZmUwZicsXG4gICdkaWFtb25kX3NoYXBlX3dpdGhfYV9kb3RfaW5zaWRlJzonXFx1ZDgzZFxcdWRjYTAnLFxuICAnZGlhbW9uZHMnOidcXHUyNjY2XFx1ZmUwZicsXG4gICdkaXNhcHBvaW50ZWQnOidcXHVkODNkXFx1ZGUxZScsXG4gICdkaXNhcHBvaW50ZWRfcmVsaWV2ZWQnOidcXHVkODNkXFx1ZGUyNScsXG4gICdkaXp6eSc6J1xcdWQ4M2RcXHVkY2FiJyxcbiAgJ2Rpenp5X2ZhY2UnOidcXHVkODNkXFx1ZGUzNScsXG4gICdkb19ub3RfbGl0dGVyJzonXFx1ZDgzZFxcdWRlYWYnLFxuICAnZG9nJzonXFx1ZDgzZFxcdWRjMzYnLFxuICAnZG9nMic6J1xcdWQ4M2RcXHVkYzE1JyxcbiAgJ2RvbGxhcic6J1xcdWQ4M2RcXHVkY2I1JyxcbiAgJ2RvbGxzJzonXFx1ZDgzY1xcdWRmOGUnLFxuICAnZG9scGhpbic6J1xcdWQ4M2RcXHVkYzJjJyxcbiAgJ2Rvb3InOidcXHVkODNkXFx1ZGVhYScsXG4gICdkb3VnaG51dCc6J1xcdWQ4M2NcXHVkZjY5JyxcbiAgJ2RvdmUnOidcXHVkODNkXFx1ZGQ0YScsXG4gICdkcmFnb24nOidcXHVkODNkXFx1ZGMwOScsXG4gICdkcmFnb25fZmFjZSc6J1xcdWQ4M2RcXHVkYzMyJyxcbiAgJ2RyZXNzJzonXFx1ZDgzZFxcdWRjNTcnLFxuICAnZHJvbWVkYXJ5X2NhbWVsJzonXFx1ZDgzZFxcdWRjMmEnLFxuICAnZHJvb2xpbmdfZmFjZSc6J1xcdWQ4M2VcXHVkZDI0JyxcbiAgJ2Ryb3BsZXQnOidcXHVkODNkXFx1ZGNhNycsXG4gICdkcnVtJzonXFx1ZDgzZVxcdWRkNDEnLFxuICAnZHVjayc6J1xcdWQ4M2VcXHVkZDg2JyxcbiAgJ2R2ZCc6J1xcdWQ4M2RcXHVkY2MwJyxcbiAgJ2UtbWFpbCc6J1xcdWQ4M2RcXHVkY2U3JyxcbiAgJ2VhZ2xlJzonXFx1ZDgzZVxcdWRkODUnLFxuICAnZWFyJzonXFx1ZDgzZFxcdWRjNDInLFxuICAnZWFyX29mX3JpY2UnOidcXHVkODNjXFx1ZGYzZScsXG4gICdlYXJ0aF9hZnJpY2EnOidcXHVkODNjXFx1ZGYwZCcsXG4gICdlYXJ0aF9hbWVyaWNhcyc6J1xcdWQ4M2NcXHVkZjBlJyxcbiAgJ2VhcnRoX2FzaWEnOidcXHVkODNjXFx1ZGYwZicsXG4gICdlZ2cnOidcXHVkODNlXFx1ZGQ1YScsXG4gICdlZ2dwbGFudCc6J1xcdWQ4M2NcXHVkZjQ2JyxcbiAgJ2VpZ2h0X3BvaW50ZWRfYmxhY2tfc3Rhcic6J1xcdTI3MzRcXHVmZTBmJyxcbiAgJ2VpZ2h0X3Nwb2tlZF9hc3Rlcmlzayc6J1xcdTI3MzNcXHVmZTBmJyxcbiAgJ2VsZWN0cmljX3BsdWcnOidcXHVkODNkXFx1ZGQwYycsXG4gICdlbGVwaGFudCc6J1xcdWQ4M2RcXHVkYzE4JyxcbiAgJ2VtYWlsJzonXFx1MjcwOVxcdWZlMGYnLFxuICAnZW5kJzonXFx1ZDgzZFxcdWRkMWEnLFxuICAnZW52ZWxvcGVfd2l0aF9hcnJvdyc6J1xcdWQ4M2RcXHVkY2U5JyxcbiAgJ2V1cm8nOidcXHVkODNkXFx1ZGNiNicsXG4gICdldXJvcGVhbl9jYXN0bGUnOidcXHVkODNjXFx1ZGZmMCcsXG4gICdldXJvcGVhbl9wb3N0X29mZmljZSc6J1xcdWQ4M2NcXHVkZmU0JyxcbiAgJ2V2ZXJncmVlbl90cmVlJzonXFx1ZDgzY1xcdWRmMzInLFxuICAnZXhjbGFtYXRpb24nOidcXHUyNzU3XFx1ZmUwZicsXG4gICdleHByZXNzaW9ubGVzcyc6J1xcdWQ4M2RcXHVkZTExJyxcbiAgJ2V5ZSc6J1xcdWQ4M2RcXHVkYzQxJyxcbiAgJ2V5ZV9zcGVlY2hfYnViYmxlJzonXFx1ZDgzZFxcdWRjNDEmendqO1xcdWQ4M2RcXHVkZGU4JyxcbiAgJ2V5ZWdsYXNzZXMnOidcXHVkODNkXFx1ZGM1MycsXG4gICdleWVzJzonXFx1ZDgzZFxcdWRjNDAnLFxuICAnZmFjZV93aXRoX2hlYWRfYmFuZGFnZSc6J1xcdWQ4M2VcXHVkZDE1JyxcbiAgJ2ZhY2Vfd2l0aF90aGVybW9tZXRlcic6J1xcdWQ4M2VcXHVkZDEyJyxcbiAgJ2Zpc3Rfb25jb21pbmcnOidcXHVkODNkXFx1ZGM0YScsXG4gICdmYWN0b3J5JzonXFx1ZDgzY1xcdWRmZWQnLFxuICAnZmFsbGVuX2xlYWYnOidcXHVkODNjXFx1ZGY0MicsXG4gICdmYW1pbHlfbWFuX3dvbWFuX2JveSc6J1xcdWQ4M2RcXHVkYzZhJyxcbiAgJ2ZhbWlseV9tYW5fYm95JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV9tYW5fYm95X2JveSc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2NiZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X21hbl9naXJsJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY3JyxcbiAgJ2ZhbWlseV9tYW5fZ2lybF9ib3knOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjcmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV9tYW5fZ2lybF9naXJsJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY3Jnp3ajtcXHVkODNkXFx1ZGM2NycsXG4gICdmYW1pbHlfbWFuX21hbl9ib3knOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV9tYW5fbWFuX2JveV9ib3knOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY2Jnp3ajtcXHVkODNkXFx1ZGM2NicsXG4gICdmYW1pbHlfbWFuX21hbl9naXJsJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2NycsXG4gICdmYW1pbHlfbWFuX21hbl9naXJsX2JveSc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjcmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV9tYW5fbWFuX2dpcmxfZ2lybCc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjNjcmendqO1xcdWQ4M2RcXHVkYzY3JyxcbiAgJ2ZhbWlseV9tYW5fd29tYW5fYm95X2JveSc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjYmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV9tYW5fd29tYW5fZ2lybCc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjcnLFxuICAnZmFtaWx5X21hbl93b21hbl9naXJsX2JveSc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjcmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV9tYW5fd29tYW5fZ2lybF9naXJsJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NyZ6d2o7XFx1ZDgzZFxcdWRjNjcnLFxuICAnZmFtaWx5X3dvbWFuX2JveSc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NicsXG4gICdmYW1pbHlfd29tYW5fYm95X2JveSc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NiZ6d2o7XFx1ZDgzZFxcdWRjNjYnLFxuICAnZmFtaWx5X3dvbWFuX2dpcmwnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjcnLFxuICAnZmFtaWx5X3dvbWFuX2dpcmxfYm95JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY3Jnp3ajtcXHVkODNkXFx1ZGM2NicsXG4gICdmYW1pbHlfd29tYW5fZ2lybF9naXJsJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY3Jnp3ajtcXHVkODNkXFx1ZGM2NycsXG4gICdmYW1pbHlfd29tYW5fd29tYW5fYm95JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NicsXG4gICdmYW1pbHlfd29tYW5fd29tYW5fYm95X2JveSc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjYmendqO1xcdWQ4M2RcXHVkYzY2JyxcbiAgJ2ZhbWlseV93b21hbl93b21hbl9naXJsJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NycsXG4gICdmYW1pbHlfd29tYW5fd29tYW5fZ2lybF9ib3knOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY3Jnp3ajtcXHVkODNkXFx1ZGM2NicsXG4gICdmYW1pbHlfd29tYW5fd29tYW5fZ2lybF9naXJsJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGM2NyZ6d2o7XFx1ZDgzZFxcdWRjNjcnLFxuICAnZmFzdF9mb3J3YXJkJzonXFx1MjNlOScsXG4gICdmYXgnOidcXHVkODNkXFx1ZGNlMCcsXG4gICdmZWFyZnVsJzonXFx1ZDgzZFxcdWRlMjgnLFxuICAnZmVldCc6J1xcdWQ4M2RcXHVkYzNlJyxcbiAgJ2ZlbWFsZV9kZXRlY3RpdmUnOidcXHVkODNkXFx1ZGQ3NVxcdWZlMGYmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ2ZlcnJpc193aGVlbCc6J1xcdWQ4M2NcXHVkZmExJyxcbiAgJ2ZlcnJ5JzonXFx1MjZmNCcsXG4gICdmaWVsZF9ob2NrZXknOidcXHVkODNjXFx1ZGZkMScsXG4gICdmaWxlX2NhYmluZXQnOidcXHVkODNkXFx1ZGRjNCcsXG4gICdmaWxlX2ZvbGRlcic6J1xcdWQ4M2RcXHVkY2MxJyxcbiAgJ2ZpbG1fcHJvamVjdG9yJzonXFx1ZDgzZFxcdWRjZmQnLFxuICAnZmlsbV9zdHJpcCc6J1xcdWQ4M2NcXHVkZjllJyxcbiAgJ2ZpcmUnOidcXHVkODNkXFx1ZGQyNScsXG4gICdmaXJlX2VuZ2luZSc6J1xcdWQ4M2RcXHVkZTkyJyxcbiAgJ2ZpcmV3b3Jrcyc6J1xcdWQ4M2NcXHVkZjg2JyxcbiAgJ2ZpcnN0X3F1YXJ0ZXJfbW9vbic6J1xcdWQ4M2NcXHVkZjEzJyxcbiAgJ2ZpcnN0X3F1YXJ0ZXJfbW9vbl93aXRoX2ZhY2UnOidcXHVkODNjXFx1ZGYxYicsXG4gICdmaXNoJzonXFx1ZDgzZFxcdWRjMWYnLFxuICAnZmlzaF9jYWtlJzonXFx1ZDgzY1xcdWRmNjUnLFxuICAnZmlzaGluZ19wb2xlX2FuZF9maXNoJzonXFx1ZDgzY1xcdWRmYTMnLFxuICAnZmlzdF9yYWlzZWQnOidcXHUyNzBhJyxcbiAgJ2Zpc3RfbGVmdCc6J1xcdWQ4M2VcXHVkZDFiJyxcbiAgJ2Zpc3RfcmlnaHQnOidcXHVkODNlXFx1ZGQxYycsXG4gICdmbGFncyc6J1xcdWQ4M2NcXHVkZjhmJyxcbiAgJ2ZsYXNobGlnaHQnOidcXHVkODNkXFx1ZGQyNicsXG4gICdmbGV1cl9kZV9saXMnOidcXHUyNjljXFx1ZmUwZicsXG4gICdmbGlnaHRfYXJyaXZhbCc6J1xcdWQ4M2RcXHVkZWVjJyxcbiAgJ2ZsaWdodF9kZXBhcnR1cmUnOidcXHVkODNkXFx1ZGVlYicsXG4gICdmbG9wcHlfZGlzayc6J1xcdWQ4M2RcXHVkY2JlJyxcbiAgJ2Zsb3dlcl9wbGF5aW5nX2NhcmRzJzonXFx1ZDgzY1xcdWRmYjQnLFxuICAnZmx1c2hlZCc6J1xcdWQ4M2RcXHVkZTMzJyxcbiAgJ2ZvZyc6J1xcdWQ4M2NcXHVkZjJiJyxcbiAgJ2ZvZ2d5JzonXFx1ZDgzY1xcdWRmMDEnLFxuICAnZm9vdGJhbGwnOidcXHVkODNjXFx1ZGZjOCcsXG4gICdmb290cHJpbnRzJzonXFx1ZDgzZFxcdWRjNjMnLFxuICAnZm9ya19hbmRfa25pZmUnOidcXHVkODNjXFx1ZGY3NCcsXG4gICdmb3VudGFpbic6J1xcdTI2ZjJcXHVmZTBmJyxcbiAgJ2ZvdW50YWluX3Blbic6J1xcdWQ4M2RcXHVkZDhiJyxcbiAgJ2ZvdXJfbGVhZl9jbG92ZXInOidcXHVkODNjXFx1ZGY0MCcsXG4gICdmb3hfZmFjZSc6J1xcdWQ4M2VcXHVkZDhhJyxcbiAgJ2ZyYW1lZF9waWN0dXJlJzonXFx1ZDgzZFxcdWRkYmMnLFxuICAnZnJlZSc6J1xcdWQ4M2NcXHVkZDkzJyxcbiAgJ2ZyaWVkX2VnZyc6J1xcdWQ4M2NcXHVkZjczJyxcbiAgJ2ZyaWVkX3NocmltcCc6J1xcdWQ4M2NcXHVkZjY0JyxcbiAgJ2ZyaWVzJzonXFx1ZDgzY1xcdWRmNWYnLFxuICAnZnJvZyc6J1xcdWQ4M2RcXHVkYzM4JyxcbiAgJ2Zyb3duaW5nJzonXFx1ZDgzZFxcdWRlMjYnLFxuICAnZnJvd25pbmdfZmFjZSc6J1xcdTI2MzlcXHVmZTBmJyxcbiAgJ2Zyb3duaW5nX21hbic6J1xcdWQ4M2RcXHVkZTRkJnp3ajtcXHUyNjQyXFx1ZmUwZicsXG4gICdmcm93bmluZ193b21hbic6J1xcdWQ4M2RcXHVkZTRkJyxcbiAgJ21pZGRsZV9maW5nZXInOidcXHVkODNkXFx1ZGQ5NScsXG4gICdmdWVscHVtcCc6J1xcdTI2ZmRcXHVmZTBmJyxcbiAgJ2Z1bGxfbW9vbic6J1xcdWQ4M2NcXHVkZjE1JyxcbiAgJ2Z1bGxfbW9vbl93aXRoX2ZhY2UnOidcXHVkODNjXFx1ZGYxZCcsXG4gICdmdW5lcmFsX3Vybic6J1xcdTI2YjFcXHVmZTBmJyxcbiAgJ2dhbWVfZGllJzonXFx1ZDgzY1xcdWRmYjInLFxuICAnZ2Vhcic6J1xcdTI2OTlcXHVmZTBmJyxcbiAgJ2dlbSc6J1xcdWQ4M2RcXHVkYzhlJyxcbiAgJ2dlbWluaSc6J1xcdTI2NGFcXHVmZTBmJyxcbiAgJ2dob3N0JzonXFx1ZDgzZFxcdWRjN2InLFxuICAnZ2lmdCc6J1xcdWQ4M2NcXHVkZjgxJyxcbiAgJ2dpZnRfaGVhcnQnOidcXHVkODNkXFx1ZGM5ZCcsXG4gICdnaXJsJzonXFx1ZDgzZFxcdWRjNjcnLFxuICAnZ2xvYmVfd2l0aF9tZXJpZGlhbnMnOidcXHVkODNjXFx1ZGYxMCcsXG4gICdnb2FsX25ldCc6J1xcdWQ4M2VcXHVkZDQ1JyxcbiAgJ2dvYXQnOidcXHVkODNkXFx1ZGMxMCcsXG4gICdnb2xmJzonXFx1MjZmM1xcdWZlMGYnLFxuICAnZ29sZmluZ19tYW4nOidcXHVkODNjXFx1ZGZjY1xcdWZlMGYnLFxuICAnZ29sZmluZ193b21hbic6J1xcdWQ4M2NcXHVkZmNjXFx1ZmUwZiZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnZ29yaWxsYSc6J1xcdWQ4M2VcXHVkZDhkJyxcbiAgJ2dyYXBlcyc6J1xcdWQ4M2NcXHVkZjQ3JyxcbiAgJ2dyZWVuX2FwcGxlJzonXFx1ZDgzY1xcdWRmNGYnLFxuICAnZ3JlZW5fYm9vayc6J1xcdWQ4M2RcXHVkY2Q3JyxcbiAgJ2dyZWVuX2hlYXJ0JzonXFx1ZDgzZFxcdWRjOWEnLFxuICAnZ3JlZW5fc2FsYWQnOidcXHVkODNlXFx1ZGQ1NycsXG4gICdncmV5X2V4Y2xhbWF0aW9uJzonXFx1Mjc1NScsXG4gICdncmV5X3F1ZXN0aW9uJzonXFx1Mjc1NCcsXG4gICdncmltYWNpbmcnOidcXHVkODNkXFx1ZGUyYycsXG4gICdncmluJzonXFx1ZDgzZFxcdWRlMDEnLFxuICAnZ3Jpbm5pbmcnOidcXHVkODNkXFx1ZGUwMCcsXG4gICdndWFyZHNtYW4nOidcXHVkODNkXFx1ZGM4MicsXG4gICdndWFyZHN3b21hbic6J1xcdWQ4M2RcXHVkYzgyJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdndWl0YXInOidcXHVkODNjXFx1ZGZiOCcsXG4gICdndW4nOidcXHVkODNkXFx1ZGQyYicsXG4gICdoYWlyY3V0X3dvbWFuJzonXFx1ZDgzZFxcdWRjODcnLFxuICAnaGFpcmN1dF9tYW4nOidcXHVkODNkXFx1ZGM4NyZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnaGFtYnVyZ2VyJzonXFx1ZDgzY1xcdWRmNTQnLFxuICAnaGFtbWVyJzonXFx1ZDgzZFxcdWRkMjgnLFxuICAnaGFtbWVyX2FuZF9waWNrJzonXFx1MjY5MicsXG4gICdoYW1tZXJfYW5kX3dyZW5jaCc6J1xcdWQ4M2RcXHVkZWUwJyxcbiAgJ2hhbXN0ZXInOidcXHVkODNkXFx1ZGMzOScsXG4gICdoYW5kJzonXFx1MjcwYicsXG4gICdoYW5kYmFnJzonXFx1ZDgzZFxcdWRjNWMnLFxuICAnaGFuZHNoYWtlJzonXFx1ZDgzZVxcdWRkMWQnLFxuICAnaGFua2V5JzonXFx1ZDgzZFxcdWRjYTknLFxuICAnaGF0Y2hlZF9jaGljayc6J1xcdWQ4M2RcXHVkYzI1JyxcbiAgJ2hhdGNoaW5nX2NoaWNrJzonXFx1ZDgzZFxcdWRjMjMnLFxuICAnaGVhZHBob25lcyc6J1xcdWQ4M2NcXHVkZmE3JyxcbiAgJ2hlYXJfbm9fZXZpbCc6J1xcdWQ4M2RcXHVkZTQ5JyxcbiAgJ2hlYXJ0JzonXFx1Mjc2NFxcdWZlMGYnLFxuICAnaGVhcnRfZGVjb3JhdGlvbic6J1xcdWQ4M2RcXHVkYzlmJyxcbiAgJ2hlYXJ0X2V5ZXMnOidcXHVkODNkXFx1ZGUwZCcsXG4gICdoZWFydF9leWVzX2NhdCc6J1xcdWQ4M2RcXHVkZTNiJyxcbiAgJ2hlYXJ0YmVhdCc6J1xcdWQ4M2RcXHVkYzkzJyxcbiAgJ2hlYXJ0cHVsc2UnOidcXHVkODNkXFx1ZGM5NycsXG4gICdoZWFydHMnOidcXHUyNjY1XFx1ZmUwZicsXG4gICdoZWF2eV9jaGVja19tYXJrJzonXFx1MjcxNFxcdWZlMGYnLFxuICAnaGVhdnlfZGl2aXNpb25fc2lnbic6J1xcdTI3OTcnLFxuICAnaGVhdnlfZG9sbGFyX3NpZ24nOidcXHVkODNkXFx1ZGNiMicsXG4gICdoZWF2eV9oZWFydF9leGNsYW1hdGlvbic6J1xcdTI3NjNcXHVmZTBmJyxcbiAgJ2hlYXZ5X21pbnVzX3NpZ24nOidcXHUyNzk2JyxcbiAgJ2hlYXZ5X211bHRpcGxpY2F0aW9uX3gnOidcXHUyNzE2XFx1ZmUwZicsXG4gICdoZWF2eV9wbHVzX3NpZ24nOidcXHUyNzk1JyxcbiAgJ2hlbGljb3B0ZXInOidcXHVkODNkXFx1ZGU4MScsXG4gICdoZXJiJzonXFx1ZDgzY1xcdWRmM2YnLFxuICAnaGliaXNjdXMnOidcXHVkODNjXFx1ZGYzYScsXG4gICdoaWdoX2JyaWdodG5lc3MnOidcXHVkODNkXFx1ZGQwNicsXG4gICdoaWdoX2hlZWwnOidcXHVkODNkXFx1ZGM2MCcsXG4gICdob2Nobyc6J1xcdWQ4M2RcXHVkZDJhJyxcbiAgJ2hvbGUnOidcXHVkODNkXFx1ZGQ3MycsXG4gICdob25leV9wb3QnOidcXHVkODNjXFx1ZGY2ZicsXG4gICdob3JzZSc6J1xcdWQ4M2RcXHVkYzM0JyxcbiAgJ2hvcnNlX3JhY2luZyc6J1xcdWQ4M2NcXHVkZmM3JyxcbiAgJ2hvc3BpdGFsJzonXFx1ZDgzY1xcdWRmZTUnLFxuICAnaG90X3BlcHBlcic6J1xcdWQ4M2NcXHVkZjM2JyxcbiAgJ2hvdGRvZyc6J1xcdWQ4M2NcXHVkZjJkJyxcbiAgJ2hvdGVsJzonXFx1ZDgzY1xcdWRmZTgnLFxuICAnaG90c3ByaW5ncyc6J1xcdTI2NjhcXHVmZTBmJyxcbiAgJ2hvdXJnbGFzcyc6J1xcdTIzMWJcXHVmZTBmJyxcbiAgJ2hvdXJnbGFzc19mbG93aW5nX3NhbmQnOidcXHUyM2YzJyxcbiAgJ2hvdXNlJzonXFx1ZDgzY1xcdWRmZTAnLFxuICAnaG91c2Vfd2l0aF9nYXJkZW4nOidcXHVkODNjXFx1ZGZlMScsXG4gICdob3VzZXMnOidcXHVkODNjXFx1ZGZkOCcsXG4gICdodWdzJzonXFx1ZDgzZVxcdWRkMTcnLFxuICAnaHVzaGVkJzonXFx1ZDgzZFxcdWRlMmYnLFxuICAnaWNlX2NyZWFtJzonXFx1ZDgzY1xcdWRmNjgnLFxuICAnaWNlX2hvY2tleSc6J1xcdWQ4M2NcXHVkZmQyJyxcbiAgJ2ljZV9za2F0ZSc6J1xcdTI2ZjgnLFxuICAnaWNlY3JlYW0nOidcXHVkODNjXFx1ZGY2NicsXG4gICdpZCc6J1xcdWQ4M2NcXHVkZDk0JyxcbiAgJ2lkZW9ncmFwaF9hZHZhbnRhZ2UnOidcXHVkODNjXFx1ZGU1MCcsXG4gICdpbXAnOidcXHVkODNkXFx1ZGM3ZicsXG4gICdpbmJveF90cmF5JzonXFx1ZDgzZFxcdWRjZTUnLFxuICAnaW5jb21pbmdfZW52ZWxvcGUnOidcXHVkODNkXFx1ZGNlOCcsXG4gICd0aXBwaW5nX2hhbmRfd29tYW4nOidcXHVkODNkXFx1ZGM4MScsXG4gICdpbmZvcm1hdGlvbl9zb3VyY2UnOidcXHUyMTM5XFx1ZmUwZicsXG4gICdpbm5vY2VudCc6J1xcdWQ4M2RcXHVkZTA3JyxcbiAgJ2ludGVycm9iYW5nJzonXFx1MjA0OVxcdWZlMGYnLFxuICAnaXBob25lJzonXFx1ZDgzZFxcdWRjZjEnLFxuICAnaXpha2F5YV9sYW50ZXJuJzonXFx1ZDgzY1xcdWRmZWUnLFxuICAnamFja19vX2xhbnRlcm4nOidcXHVkODNjXFx1ZGY4MycsXG4gICdqYXBhbic6J1xcdWQ4M2RcXHVkZGZlJyxcbiAgJ2phcGFuZXNlX2Nhc3RsZSc6J1xcdWQ4M2NcXHVkZmVmJyxcbiAgJ2phcGFuZXNlX2dvYmxpbic6J1xcdWQ4M2RcXHVkYzdhJyxcbiAgJ2phcGFuZXNlX29ncmUnOidcXHVkODNkXFx1ZGM3OScsXG4gICdqZWFucyc6J1xcdWQ4M2RcXHVkYzU2JyxcbiAgJ2pveSc6J1xcdWQ4M2RcXHVkZTAyJyxcbiAgJ2pveV9jYXQnOidcXHVkODNkXFx1ZGUzOScsXG4gICdqb3lzdGljayc6J1xcdWQ4M2RcXHVkZDc5JyxcbiAgJ2thYWJhJzonXFx1ZDgzZFxcdWRkNGInLFxuICAna2V5JzonXFx1ZDgzZFxcdWRkMTEnLFxuICAna2V5Ym9hcmQnOidcXHUyMzI4XFx1ZmUwZicsXG4gICdrZXljYXBfdGVuJzonXFx1ZDgzZFxcdWRkMWYnLFxuICAna2lja19zY29vdGVyJzonXFx1ZDgzZFxcdWRlZjQnLFxuICAna2ltb25vJzonXFx1ZDgzZFxcdWRjNTgnLFxuICAna2lzcyc6J1xcdWQ4M2RcXHVkYzhiJyxcbiAgJ2tpc3NpbmcnOidcXHVkODNkXFx1ZGUxNycsXG4gICdraXNzaW5nX2NhdCc6J1xcdWQ4M2RcXHVkZTNkJyxcbiAgJ2tpc3NpbmdfY2xvc2VkX2V5ZXMnOidcXHVkODNkXFx1ZGUxYScsXG4gICdraXNzaW5nX2hlYXJ0JzonXFx1ZDgzZFxcdWRlMTgnLFxuICAna2lzc2luZ19zbWlsaW5nX2V5ZXMnOidcXHVkODNkXFx1ZGUxOScsXG4gICdraXdpX2ZydWl0JzonXFx1ZDgzZVxcdWRkNWQnLFxuICAna29hbGEnOidcXHVkODNkXFx1ZGMyOCcsXG4gICdrb2tvJzonXFx1ZDgzY1xcdWRlMDEnLFxuICAnbGFiZWwnOidcXHVkODNjXFx1ZGZmNycsXG4gICdsYXJnZV9ibHVlX2NpcmNsZSc6J1xcdWQ4M2RcXHVkZDM1JyxcbiAgJ2xhcmdlX2JsdWVfZGlhbW9uZCc6J1xcdWQ4M2RcXHVkZDM3JyxcbiAgJ2xhcmdlX29yYW5nZV9kaWFtb25kJzonXFx1ZDgzZFxcdWRkMzYnLFxuICAnbGFzdF9xdWFydGVyX21vb24nOidcXHVkODNjXFx1ZGYxNycsXG4gICdsYXN0X3F1YXJ0ZXJfbW9vbl93aXRoX2ZhY2UnOidcXHVkODNjXFx1ZGYxYycsXG4gICdsYXRpbl9jcm9zcyc6J1xcdTI3MWRcXHVmZTBmJyxcbiAgJ2xhdWdoaW5nJzonXFx1ZDgzZFxcdWRlMDYnLFxuICAnbGVhdmVzJzonXFx1ZDgzY1xcdWRmNDMnLFxuICAnbGVkZ2VyJzonXFx1ZDgzZFxcdWRjZDInLFxuICAnbGVmdF9sdWdnYWdlJzonXFx1ZDgzZFxcdWRlYzUnLFxuICAnbGVmdF9yaWdodF9hcnJvdyc6J1xcdTIxOTRcXHVmZTBmJyxcbiAgJ2xlZnR3YXJkc19hcnJvd193aXRoX2hvb2snOidcXHUyMWE5XFx1ZmUwZicsXG4gICdsZW1vbic6J1xcdWQ4M2NcXHVkZjRiJyxcbiAgJ2xlbyc6J1xcdTI2NGNcXHVmZTBmJyxcbiAgJ2xlb3BhcmQnOidcXHVkODNkXFx1ZGMwNicsXG4gICdsZXZlbF9zbGlkZXInOidcXHVkODNjXFx1ZGY5YScsXG4gICdsaWJyYSc6J1xcdTI2NGVcXHVmZTBmJyxcbiAgJ2xpZ2h0X3JhaWwnOidcXHVkODNkXFx1ZGU4OCcsXG4gICdsaW5rJzonXFx1ZDgzZFxcdWRkMTcnLFxuICAnbGlvbic6J1xcdWQ4M2VcXHVkZDgxJyxcbiAgJ2xpcHMnOidcXHVkODNkXFx1ZGM0NCcsXG4gICdsaXBzdGljayc6J1xcdWQ4M2RcXHVkYzg0JyxcbiAgJ2xpemFyZCc6J1xcdWQ4M2VcXHVkZDhlJyxcbiAgJ2xvY2snOidcXHVkODNkXFx1ZGQxMicsXG4gICdsb2NrX3dpdGhfaW5rX3Blbic6J1xcdWQ4M2RcXHVkZDBmJyxcbiAgJ2xvbGxpcG9wJzonXFx1ZDgzY1xcdWRmNmQnLFxuICAnbG9vcCc6J1xcdTI3YmYnLFxuICAnbG91ZF9zb3VuZCc6J1xcdWQ4M2RcXHVkZDBhJyxcbiAgJ2xvdWRzcGVha2VyJzonXFx1ZDgzZFxcdWRjZTInLFxuICAnbG92ZV9ob3RlbCc6J1xcdWQ4M2NcXHVkZmU5JyxcbiAgJ2xvdmVfbGV0dGVyJzonXFx1ZDgzZFxcdWRjOGMnLFxuICAnbG93X2JyaWdodG5lc3MnOidcXHVkODNkXFx1ZGQwNScsXG4gICdseWluZ19mYWNlJzonXFx1ZDgzZVxcdWRkMjUnLFxuICAnbSc6J1xcdTI0YzJcXHVmZTBmJyxcbiAgJ21hZyc6J1xcdWQ4M2RcXHVkZDBkJyxcbiAgJ21hZ19yaWdodCc6J1xcdWQ4M2RcXHVkZDBlJyxcbiAgJ21haGpvbmcnOidcXHVkODNjXFx1ZGMwNFxcdWZlMGYnLFxuICAnbWFpbGJveCc6J1xcdWQ4M2RcXHVkY2ViJyxcbiAgJ21haWxib3hfY2xvc2VkJzonXFx1ZDgzZFxcdWRjZWEnLFxuICAnbWFpbGJveF93aXRoX21haWwnOidcXHVkODNkXFx1ZGNlYycsXG4gICdtYWlsYm94X3dpdGhfbm9fbWFpbCc6J1xcdWQ4M2RcXHVkY2VkJyxcbiAgJ21hbic6J1xcdWQ4M2RcXHVkYzY4JyxcbiAgJ21hbl9hcnRpc3QnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzY1xcdWRmYTgnLFxuICAnbWFuX2FzdHJvbmF1dCc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGU4MCcsXG4gICdtYW5fY2FydHdoZWVsaW5nJzonXFx1ZDgzZVxcdWRkMzgmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ21hbl9jb29rJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2NcXHVkZjczJyxcbiAgJ21hbl9kYW5jaW5nJzonXFx1ZDgzZFxcdWRkN2EnLFxuICAnbWFuX2ZhY2VwYWxtaW5nJzonXFx1ZDgzZVxcdWRkMjYmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ21hbl9mYWN0b3J5X3dvcmtlcic6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNjXFx1ZGZlZCcsXG4gICdtYW5fZmFybWVyJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdWQ4M2NcXHVkZjNlJyxcbiAgJ21hbl9maXJlZmlnaHRlcic6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGU5MicsXG4gICdtYW5faGVhbHRoX3dvcmtlcic6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHUyNjk1XFx1ZmUwZicsXG4gICdtYW5faW5fdHV4ZWRvJzonXFx1ZDgzZVxcdWRkMzUnLFxuICAnbWFuX2p1ZGdlJzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdTI2OTZcXHVmZTBmJyxcbiAgJ21hbl9qdWdnbGluZyc6J1xcdWQ4M2VcXHVkZDM5Jnp3ajtcXHUyNjQyXFx1ZmUwZicsXG4gICdtYW5fbWVjaGFuaWMnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRkMjcnLFxuICAnbWFuX29mZmljZV93b3JrZXInOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzZFxcdWRjYmMnLFxuICAnbWFuX3BpbG90JzonXFx1ZDgzZFxcdWRjNjgmendqO1xcdTI3MDhcXHVmZTBmJyxcbiAgJ21hbl9wbGF5aW5nX2hhbmRiYWxsJzonXFx1ZDgzZVxcdWRkM2UmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ21hbl9wbGF5aW5nX3dhdGVyX3BvbG8nOidcXHVkODNlXFx1ZGQzZCZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnbWFuX3NjaWVudGlzdCc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGQyYycsXG4gICdtYW5fc2hydWdnaW5nJzonXFx1ZDgzZVxcdWRkMzcmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ21hbl9zaW5nZXInOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzY1xcdWRmYTQnLFxuICAnbWFuX3N0dWRlbnQnOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzY1xcdWRmOTMnLFxuICAnbWFuX3RlYWNoZXInOidcXHVkODNkXFx1ZGM2OCZ6d2o7XFx1ZDgzY1xcdWRmZWInLFxuICAnbWFuX3RlY2hub2xvZ2lzdCc6J1xcdWQ4M2RcXHVkYzY4Jnp3ajtcXHVkODNkXFx1ZGNiYicsXG4gICdtYW5fd2l0aF9ndWFfcGlfbWFvJzonXFx1ZDgzZFxcdWRjNzInLFxuICAnbWFuX3dpdGhfdHVyYmFuJzonXFx1ZDgzZFxcdWRjNzMnLFxuICAndGFuZ2VyaW5lJzonXFx1ZDgzY1xcdWRmNGEnLFxuICAnbWFuc19zaG9lJzonXFx1ZDgzZFxcdWRjNWUnLFxuICAnbWFudGVscGllY2VfY2xvY2snOidcXHVkODNkXFx1ZGQ3MCcsXG4gICdtYXBsZV9sZWFmJzonXFx1ZDgzY1xcdWRmNDEnLFxuICAnbWFydGlhbF9hcnRzX3VuaWZvcm0nOidcXHVkODNlXFx1ZGQ0YicsXG4gICdtYXNrJzonXFx1ZDgzZFxcdWRlMzcnLFxuICAnbWFzc2FnZV93b21hbic6J1xcdWQ4M2RcXHVkYzg2JyxcbiAgJ21hc3NhZ2VfbWFuJzonXFx1ZDgzZFxcdWRjODYmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ21lYXRfb25fYm9uZSc6J1xcdWQ4M2NcXHVkZjU2JyxcbiAgJ21lZGFsX21pbGl0YXJ5JzonXFx1ZDgzY1xcdWRmOTYnLFxuICAnbWVkYWxfc3BvcnRzJzonXFx1ZDgzY1xcdWRmYzUnLFxuICAnbWVnYSc6J1xcdWQ4M2RcXHVkY2UzJyxcbiAgJ21lbG9uJzonXFx1ZDgzY1xcdWRmNDgnLFxuICAnbWVtbyc6J1xcdWQ4M2RcXHVkY2RkJyxcbiAgJ21lbl93cmVzdGxpbmcnOidcXHVkODNlXFx1ZGQzYyZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnbWVub3JhaCc6J1xcdWQ4M2RcXHVkZDRlJyxcbiAgJ21lbnMnOidcXHVkODNkXFx1ZGViOScsXG4gICdtZXRhbCc6J1xcdWQ4M2VcXHVkZDE4JyxcbiAgJ21ldHJvJzonXFx1ZDgzZFxcdWRlODcnLFxuICAnbWljcm9waG9uZSc6J1xcdWQ4M2NcXHVkZmE0JyxcbiAgJ21pY3Jvc2NvcGUnOidcXHVkODNkXFx1ZGQyYycsXG4gICdtaWxrX2dsYXNzJzonXFx1ZDgzZVxcdWRkNWInLFxuICAnbWlsa3lfd2F5JzonXFx1ZDgzY1xcdWRmMGMnLFxuICAnbWluaWJ1cyc6J1xcdWQ4M2RcXHVkZTkwJyxcbiAgJ21pbmlkaXNjJzonXFx1ZDgzZFxcdWRjYmQnLFxuICAnbW9iaWxlX3Bob25lX29mZic6J1xcdWQ4M2RcXHVkY2Y0JyxcbiAgJ21vbmV5X21vdXRoX2ZhY2UnOidcXHVkODNlXFx1ZGQxMScsXG4gICdtb25leV93aXRoX3dpbmdzJzonXFx1ZDgzZFxcdWRjYjgnLFxuICAnbW9uZXliYWcnOidcXHVkODNkXFx1ZGNiMCcsXG4gICdtb25rZXknOidcXHVkODNkXFx1ZGMxMicsXG4gICdtb25rZXlfZmFjZSc6J1xcdWQ4M2RcXHVkYzM1JyxcbiAgJ21vbm9yYWlsJzonXFx1ZDgzZFxcdWRlOWQnLFxuICAnbW9vbic6J1xcdWQ4M2NcXHVkZjE0JyxcbiAgJ21vcnRhcl9ib2FyZCc6J1xcdWQ4M2NcXHVkZjkzJyxcbiAgJ21vc3F1ZSc6J1xcdWQ4M2RcXHVkZDRjJyxcbiAgJ21vdG9yX2JvYXQnOidcXHVkODNkXFx1ZGVlNScsXG4gICdtb3Rvcl9zY29vdGVyJzonXFx1ZDgzZFxcdWRlZjUnLFxuICAnbW90b3JjeWNsZSc6J1xcdWQ4M2NcXHVkZmNkJyxcbiAgJ21vdG9yd2F5JzonXFx1ZDgzZFxcdWRlZTMnLFxuICAnbW91bnRfZnVqaSc6J1xcdWQ4M2RcXHVkZGZiJyxcbiAgJ21vdW50YWluJzonXFx1MjZmMCcsXG4gICdtb3VudGFpbl9iaWtpbmdfbWFuJzonXFx1ZDgzZFxcdWRlYjUnLFxuICAnbW91bnRhaW5fYmlraW5nX3dvbWFuJzonXFx1ZDgzZFxcdWRlYjUmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ21vdW50YWluX2NhYmxld2F5JzonXFx1ZDgzZFxcdWRlYTAnLFxuICAnbW91bnRhaW5fcmFpbHdheSc6J1xcdWQ4M2RcXHVkZTllJyxcbiAgJ21vdW50YWluX3Nub3cnOidcXHVkODNjXFx1ZGZkNCcsXG4gICdtb3VzZSc6J1xcdWQ4M2RcXHVkYzJkJyxcbiAgJ21vdXNlMic6J1xcdWQ4M2RcXHVkYzAxJyxcbiAgJ21vdmllX2NhbWVyYSc6J1xcdWQ4M2NcXHVkZmE1JyxcbiAgJ21veWFpJzonXFx1ZDgzZFxcdWRkZmYnLFxuICAnbXJzX2NsYXVzJzonXFx1ZDgzZVxcdWRkMzYnLFxuICAnbXVzY2xlJzonXFx1ZDgzZFxcdWRjYWEnLFxuICAnbXVzaHJvb20nOidcXHVkODNjXFx1ZGY0NCcsXG4gICdtdXNpY2FsX2tleWJvYXJkJzonXFx1ZDgzY1xcdWRmYjknLFxuICAnbXVzaWNhbF9ub3RlJzonXFx1ZDgzY1xcdWRmYjUnLFxuICAnbXVzaWNhbF9zY29yZSc6J1xcdWQ4M2NcXHVkZmJjJyxcbiAgJ211dGUnOidcXHVkODNkXFx1ZGQwNycsXG4gICduYWlsX2NhcmUnOidcXHVkODNkXFx1ZGM4NScsXG4gICduYW1lX2JhZGdlJzonXFx1ZDgzZFxcdWRjZGInLFxuICAnbmF0aW9uYWxfcGFyayc6J1xcdWQ4M2NcXHVkZmRlJyxcbiAgJ25hdXNlYXRlZF9mYWNlJzonXFx1ZDgzZVxcdWRkMjInLFxuICAnbmVja3RpZSc6J1xcdWQ4M2RcXHVkYzU0JyxcbiAgJ25lZ2F0aXZlX3NxdWFyZWRfY3Jvc3NfbWFyayc6J1xcdTI3NGUnLFxuICAnbmVyZF9mYWNlJzonXFx1ZDgzZVxcdWRkMTMnLFxuICAnbmV1dHJhbF9mYWNlJzonXFx1ZDgzZFxcdWRlMTAnLFxuICAnbmV3JzonXFx1ZDgzY1xcdWRkOTUnLFxuICAnbmV3X21vb24nOidcXHVkODNjXFx1ZGYxMScsXG4gICduZXdfbW9vbl93aXRoX2ZhY2UnOidcXHVkODNjXFx1ZGYxYScsXG4gICduZXdzcGFwZXInOidcXHVkODNkXFx1ZGNmMCcsXG4gICduZXdzcGFwZXJfcm9sbCc6J1xcdWQ4M2RcXHVkZGRlJyxcbiAgJ25leHRfdHJhY2tfYnV0dG9uJzonXFx1MjNlZCcsXG4gICduZyc6J1xcdWQ4M2NcXHVkZDk2JyxcbiAgJ25vX2dvb2RfbWFuJzonXFx1ZDgzZFxcdWRlNDUmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ25vX2dvb2Rfd29tYW4nOidcXHVkODNkXFx1ZGU0NScsXG4gICduaWdodF93aXRoX3N0YXJzJzonXFx1ZDgzY1xcdWRmMDMnLFxuICAnbm9fYmVsbCc6J1xcdWQ4M2RcXHVkZDE1JyxcbiAgJ25vX2JpY3ljbGVzJzonXFx1ZDgzZFxcdWRlYjMnLFxuICAnbm9fZW50cnknOidcXHUyNmQ0XFx1ZmUwZicsXG4gICdub19lbnRyeV9zaWduJzonXFx1ZDgzZFxcdWRlYWInLFxuICAnbm9fbW9iaWxlX3Bob25lcyc6J1xcdWQ4M2RcXHVkY2Y1JyxcbiAgJ25vX21vdXRoJzonXFx1ZDgzZFxcdWRlMzYnLFxuICAnbm9fcGVkZXN0cmlhbnMnOidcXHVkODNkXFx1ZGViNycsXG4gICdub19zbW9raW5nJzonXFx1ZDgzZFxcdWRlYWQnLFxuICAnbm9uLXBvdGFibGVfd2F0ZXInOidcXHVkODNkXFx1ZGViMScsXG4gICdub3NlJzonXFx1ZDgzZFxcdWRjNDMnLFxuICAnbm90ZWJvb2snOidcXHVkODNkXFx1ZGNkMycsXG4gICdub3RlYm9va193aXRoX2RlY29yYXRpdmVfY292ZXInOidcXHVkODNkXFx1ZGNkNCcsXG4gICdub3Rlcyc6J1xcdWQ4M2NcXHVkZmI2JyxcbiAgJ251dF9hbmRfYm9sdCc6J1xcdWQ4M2RcXHVkZDI5JyxcbiAgJ28nOidcXHUyYjU1XFx1ZmUwZicsXG4gICdvMic6J1xcdWQ4M2NcXHVkZDdlXFx1ZmUwZicsXG4gICdvY2Vhbic6J1xcdWQ4M2NcXHVkZjBhJyxcbiAgJ29jdG9wdXMnOidcXHVkODNkXFx1ZGMxOScsXG4gICdvZGVuJzonXFx1ZDgzY1xcdWRmNjInLFxuICAnb2ZmaWNlJzonXFx1ZDgzY1xcdWRmZTInLFxuICAnb2lsX2RydW0nOidcXHVkODNkXFx1ZGVlMicsXG4gICdvayc6J1xcdWQ4M2NcXHVkZDk3JyxcbiAgJ29rX2hhbmQnOidcXHVkODNkXFx1ZGM0YycsXG4gICdva19tYW4nOidcXHVkODNkXFx1ZGU0NiZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAnb2tfd29tYW4nOidcXHVkODNkXFx1ZGU0NicsXG4gICdvbGRfa2V5JzonXFx1ZDgzZFxcdWRkZGQnLFxuICAnb2xkZXJfbWFuJzonXFx1ZDgzZFxcdWRjNzQnLFxuICAnb2xkZXJfd29tYW4nOidcXHVkODNkXFx1ZGM3NScsXG4gICdvbSc6J1xcdWQ4M2RcXHVkZDQ5JyxcbiAgJ29uJzonXFx1ZDgzZFxcdWRkMWInLFxuICAnb25jb21pbmdfYXV0b21vYmlsZSc6J1xcdWQ4M2RcXHVkZTk4JyxcbiAgJ29uY29taW5nX2J1cyc6J1xcdWQ4M2RcXHVkZThkJyxcbiAgJ29uY29taW5nX3BvbGljZV9jYXInOidcXHVkODNkXFx1ZGU5NCcsXG4gICdvbmNvbWluZ190YXhpJzonXFx1ZDgzZFxcdWRlOTYnLFxuICAnb3Blbl9maWxlX2ZvbGRlcic6J1xcdWQ4M2RcXHVkY2MyJyxcbiAgJ29wZW5faGFuZHMnOidcXHVkODNkXFx1ZGM1MCcsXG4gICdvcGVuX21vdXRoJzonXFx1ZDgzZFxcdWRlMmUnLFxuICAnb3Blbl91bWJyZWxsYSc6J1xcdTI2MDJcXHVmZTBmJyxcbiAgJ29waGl1Y2h1cyc6J1xcdTI2Y2UnLFxuICAnb3JhbmdlX2Jvb2snOidcXHVkODNkXFx1ZGNkOScsXG4gICdvcnRob2RveF9jcm9zcyc6J1xcdTI2MjZcXHVmZTBmJyxcbiAgJ291dGJveF90cmF5JzonXFx1ZDgzZFxcdWRjZTQnLFxuICAnb3dsJzonXFx1ZDgzZVxcdWRkODknLFxuICAnb3gnOidcXHVkODNkXFx1ZGMwMicsXG4gICdwYWNrYWdlJzonXFx1ZDgzZFxcdWRjZTYnLFxuICAncGFnZV9mYWNpbmdfdXAnOidcXHVkODNkXFx1ZGNjNCcsXG4gICdwYWdlX3dpdGhfY3VybCc6J1xcdWQ4M2RcXHVkY2MzJyxcbiAgJ3BhZ2VyJzonXFx1ZDgzZFxcdWRjZGYnLFxuICAncGFpbnRicnVzaCc6J1xcdWQ4M2RcXHVkZDhjJyxcbiAgJ3BhbG1fdHJlZSc6J1xcdWQ4M2NcXHVkZjM0JyxcbiAgJ3BhbmNha2VzJzonXFx1ZDgzZVxcdWRkNWUnLFxuICAncGFuZGFfZmFjZSc6J1xcdWQ4M2RcXHVkYzNjJyxcbiAgJ3BhcGVyY2xpcCc6J1xcdWQ4M2RcXHVkY2NlJyxcbiAgJ3BhcGVyY2xpcHMnOidcXHVkODNkXFx1ZGQ4NycsXG4gICdwYXJhc29sX29uX2dyb3VuZCc6J1xcdTI2ZjEnLFxuICAncGFya2luZyc6J1xcdWQ4M2NcXHVkZDdmXFx1ZmUwZicsXG4gICdwYXJ0X2FsdGVybmF0aW9uX21hcmsnOidcXHUzMDNkXFx1ZmUwZicsXG4gICdwYXJ0bHlfc3VubnknOidcXHUyNmM1XFx1ZmUwZicsXG4gICdwYXNzZW5nZXJfc2hpcCc6J1xcdWQ4M2RcXHVkZWYzJyxcbiAgJ3Bhc3Nwb3J0X2NvbnRyb2wnOidcXHVkODNkXFx1ZGVjMicsXG4gICdwYXVzZV9idXR0b24nOidcXHUyM2Y4JyxcbiAgJ3BlYWNlX3N5bWJvbCc6J1xcdTI2MmVcXHVmZTBmJyxcbiAgJ3BlYWNoJzonXFx1ZDgzY1xcdWRmNTEnLFxuICAncGVhbnV0cyc6J1xcdWQ4M2VcXHVkZDVjJyxcbiAgJ3BlYXInOidcXHVkODNjXFx1ZGY1MCcsXG4gICdwZW4nOidcXHVkODNkXFx1ZGQ4YScsXG4gICdwZW5jaWwyJzonXFx1MjcwZlxcdWZlMGYnLFxuICAncGVuZ3Vpbic6J1xcdWQ4M2RcXHVkYzI3JyxcbiAgJ3BlbnNpdmUnOidcXHVkODNkXFx1ZGUxNCcsXG4gICdwZXJmb3JtaW5nX2FydHMnOidcXHVkODNjXFx1ZGZhZCcsXG4gICdwZXJzZXZlcmUnOidcXHVkODNkXFx1ZGUyMycsXG4gICdwZXJzb25fZmVuY2luZyc6J1xcdWQ4M2VcXHVkZDNhJyxcbiAgJ3BvdXRpbmdfd29tYW4nOidcXHVkODNkXFx1ZGU0ZScsXG4gICdwaG9uZSc6J1xcdTI2MGVcXHVmZTBmJyxcbiAgJ3BpY2snOidcXHUyNmNmJyxcbiAgJ3BpZyc6J1xcdWQ4M2RcXHVkYzM3JyxcbiAgJ3BpZzInOidcXHVkODNkXFx1ZGMxNicsXG4gICdwaWdfbm9zZSc6J1xcdWQ4M2RcXHVkYzNkJyxcbiAgJ3BpbGwnOidcXHVkODNkXFx1ZGM4YScsXG4gICdwaW5lYXBwbGUnOidcXHVkODNjXFx1ZGY0ZCcsXG4gICdwaW5nX3BvbmcnOidcXHVkODNjXFx1ZGZkMycsXG4gICdwaXNjZXMnOidcXHUyNjUzXFx1ZmUwZicsXG4gICdwaXp6YSc6J1xcdWQ4M2NcXHVkZjU1JyxcbiAgJ3BsYWNlX29mX3dvcnNoaXAnOidcXHVkODNkXFx1ZGVkMCcsXG4gICdwbGF0ZV93aXRoX2N1dGxlcnknOidcXHVkODNjXFx1ZGY3ZCcsXG4gICdwbGF5X29yX3BhdXNlX2J1dHRvbic6J1xcdTIzZWYnLFxuICAncG9pbnRfZG93bic6J1xcdWQ4M2RcXHVkYzQ3JyxcbiAgJ3BvaW50X2xlZnQnOidcXHVkODNkXFx1ZGM0OCcsXG4gICdwb2ludF9yaWdodCc6J1xcdWQ4M2RcXHVkYzQ5JyxcbiAgJ3BvaW50X3VwJzonXFx1MjYxZFxcdWZlMGYnLFxuICAncG9pbnRfdXBfMic6J1xcdWQ4M2RcXHVkYzQ2JyxcbiAgJ3BvbGljZV9jYXInOidcXHVkODNkXFx1ZGU5MycsXG4gICdwb2xpY2V3b21hbic6J1xcdWQ4M2RcXHVkYzZlJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdwb29kbGUnOidcXHVkODNkXFx1ZGMyOScsXG4gICdwb3Bjb3JuJzonXFx1ZDgzY1xcdWRmN2YnLFxuICAncG9zdF9vZmZpY2UnOidcXHVkODNjXFx1ZGZlMycsXG4gICdwb3N0YWxfaG9ybic6J1xcdWQ4M2RcXHVkY2VmJyxcbiAgJ3Bvc3Rib3gnOidcXHVkODNkXFx1ZGNlZScsXG4gICdwb3RhYmxlX3dhdGVyJzonXFx1ZDgzZFxcdWRlYjAnLFxuICAncG90YXRvJzonXFx1ZDgzZVxcdWRkNTQnLFxuICAncG91Y2gnOidcXHVkODNkXFx1ZGM1ZCcsXG4gICdwb3VsdHJ5X2xlZyc6J1xcdWQ4M2NcXHVkZjU3JyxcbiAgJ3BvdW5kJzonXFx1ZDgzZFxcdWRjYjcnLFxuICAncmFnZSc6J1xcdWQ4M2RcXHVkZTIxJyxcbiAgJ3BvdXRpbmdfY2F0JzonXFx1ZDgzZFxcdWRlM2UnLFxuICAncG91dGluZ19tYW4nOidcXHVkODNkXFx1ZGU0ZSZ6d2o7XFx1MjY0MlxcdWZlMGYnLFxuICAncHJheSc6J1xcdWQ4M2RcXHVkZTRmJyxcbiAgJ3ByYXllcl9iZWFkcyc6J1xcdWQ4M2RcXHVkY2ZmJyxcbiAgJ3ByZWduYW50X3dvbWFuJzonXFx1ZDgzZVxcdWRkMzAnLFxuICAncHJldmlvdXNfdHJhY2tfYnV0dG9uJzonXFx1MjNlZScsXG4gICdwcmluY2UnOidcXHVkODNlXFx1ZGQzNCcsXG4gICdwcmluY2Vzcyc6J1xcdWQ4M2RcXHVkYzc4JyxcbiAgJ3ByaW50ZXInOidcXHVkODNkXFx1ZGRhOCcsXG4gICdwdXJwbGVfaGVhcnQnOidcXHVkODNkXFx1ZGM5YycsXG4gICdwdXJzZSc6J1xcdWQ4M2RcXHVkYzViJyxcbiAgJ3B1c2hwaW4nOidcXHVkODNkXFx1ZGNjYycsXG4gICdwdXRfbGl0dGVyX2luX2l0c19wbGFjZSc6J1xcdWQ4M2RcXHVkZWFlJyxcbiAgJ3F1ZXN0aW9uJzonXFx1Mjc1MycsXG4gICdyYWJiaXQnOidcXHVkODNkXFx1ZGMzMCcsXG4gICdyYWJiaXQyJzonXFx1ZDgzZFxcdWRjMDcnLFxuICAncmFjZWhvcnNlJzonXFx1ZDgzZFxcdWRjMGUnLFxuICAncmFjaW5nX2Nhcic6J1xcdWQ4M2NcXHVkZmNlJyxcbiAgJ3JhZGlvJzonXFx1ZDgzZFxcdWRjZmInLFxuICAncmFkaW9fYnV0dG9uJzonXFx1ZDgzZFxcdWRkMTgnLFxuICAncmFkaW9hY3RpdmUnOidcXHUyNjIyXFx1ZmUwZicsXG4gICdyYWlsd2F5X2Nhcic6J1xcdWQ4M2RcXHVkZTgzJyxcbiAgJ3JhaWx3YXlfdHJhY2snOidcXHVkODNkXFx1ZGVlNCcsXG4gICdyYWluYm93JzonXFx1ZDgzY1xcdWRmMDgnLFxuICAncmFpbmJvd19mbGFnJzonXFx1ZDgzY1xcdWRmZjNcXHVmZTBmJnp3ajtcXHVkODNjXFx1ZGYwOCcsXG4gICdyYWlzZWRfYmFja19vZl9oYW5kJzonXFx1ZDgzZVxcdWRkMWEnLFxuICAncmFpc2VkX2hhbmRfd2l0aF9maW5nZXJzX3NwbGF5ZWQnOidcXHVkODNkXFx1ZGQ5MCcsXG4gICdyYWlzZWRfaGFuZHMnOidcXHVkODNkXFx1ZGU0YycsXG4gICdyYWlzaW5nX2hhbmRfd29tYW4nOidcXHVkODNkXFx1ZGU0YicsXG4gICdyYWlzaW5nX2hhbmRfbWFuJzonXFx1ZDgzZFxcdWRlNGImendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ3JhbSc6J1xcdWQ4M2RcXHVkYzBmJyxcbiAgJ3JhbWVuJzonXFx1ZDgzY1xcdWRmNWMnLFxuICAncmF0JzonXFx1ZDgzZFxcdWRjMDAnLFxuICAncmVjb3JkX2J1dHRvbic6J1xcdTIzZmEnLFxuICAncmVjeWNsZSc6J1xcdTI2N2JcXHVmZTBmJyxcbiAgJ3JlZF9jaXJjbGUnOidcXHVkODNkXFx1ZGQzNCcsXG4gICdyZWdpc3RlcmVkJzonXFx1MDBhZVxcdWZlMGYnLFxuICAncmVsYXhlZCc6J1xcdTI2M2FcXHVmZTBmJyxcbiAgJ3JlbGlldmVkJzonXFx1ZDgzZFxcdWRlMGMnLFxuICAncmVtaW5kZXJfcmliYm9uJzonXFx1ZDgzY1xcdWRmOTcnLFxuICAncmVwZWF0JzonXFx1ZDgzZFxcdWRkMDEnLFxuICAncmVwZWF0X29uZSc6J1xcdWQ4M2RcXHVkZDAyJyxcbiAgJ3Jlc2N1ZV93b3JrZXJfaGVsbWV0JzonXFx1MjZkMScsXG4gICdyZXN0cm9vbSc6J1xcdWQ4M2RcXHVkZWJiJyxcbiAgJ3Jldm9sdmluZ19oZWFydHMnOidcXHVkODNkXFx1ZGM5ZScsXG4gICdyZXdpbmQnOidcXHUyM2VhJyxcbiAgJ3JoaW5vY2Vyb3MnOidcXHVkODNlXFx1ZGQ4ZicsXG4gICdyaWJib24nOidcXHVkODNjXFx1ZGY4MCcsXG4gICdyaWNlJzonXFx1ZDgzY1xcdWRmNWEnLFxuICAncmljZV9iYWxsJzonXFx1ZDgzY1xcdWRmNTknLFxuICAncmljZV9jcmFja2VyJzonXFx1ZDgzY1xcdWRmNTgnLFxuICAncmljZV9zY2VuZSc6J1xcdWQ4M2NcXHVkZjkxJyxcbiAgJ3JpZ2h0X2FuZ2VyX2J1YmJsZSc6J1xcdWQ4M2RcXHVkZGVmJyxcbiAgJ3JpbmcnOidcXHVkODNkXFx1ZGM4ZCcsXG4gICdyb2JvdCc6J1xcdWQ4M2VcXHVkZDE2JyxcbiAgJ3JvY2tldCc6J1xcdWQ4M2RcXHVkZTgwJyxcbiAgJ3JvZmwnOidcXHVkODNlXFx1ZGQyMycsXG4gICdyb2xsX2V5ZXMnOidcXHVkODNkXFx1ZGU0NCcsXG4gICdyb2xsZXJfY29hc3Rlcic6J1xcdWQ4M2NcXHVkZmEyJyxcbiAgJ3Jvb3N0ZXInOidcXHVkODNkXFx1ZGMxMycsXG4gICdyb3NlJzonXFx1ZDgzY1xcdWRmMzknLFxuICAncm9zZXR0ZSc6J1xcdWQ4M2NcXHVkZmY1JyxcbiAgJ3JvdGF0aW5nX2xpZ2h0JzonXFx1ZDgzZFxcdWRlYTgnLFxuICAncm91bmRfcHVzaHBpbic6J1xcdWQ4M2RcXHVkY2NkJyxcbiAgJ3Jvd2luZ19tYW4nOidcXHVkODNkXFx1ZGVhMycsXG4gICdyb3dpbmdfd29tYW4nOidcXHVkODNkXFx1ZGVhMyZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAncnVnYnlfZm9vdGJhbGwnOidcXHVkODNjXFx1ZGZjOScsXG4gICdydW5uaW5nX21hbic6J1xcdWQ4M2NcXHVkZmMzJyxcbiAgJ3J1bm5pbmdfc2hpcnRfd2l0aF9zYXNoJzonXFx1ZDgzY1xcdWRmYmQnLFxuICAncnVubmluZ193b21hbic6J1xcdWQ4M2NcXHVkZmMzJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdzYSc6J1xcdWQ4M2NcXHVkZTAyXFx1ZmUwZicsXG4gICdzYWdpdHRhcml1cyc6J1xcdTI2NTBcXHVmZTBmJyxcbiAgJ3Nha2UnOidcXHVkODNjXFx1ZGY3NicsXG4gICdzYW5kYWwnOidcXHVkODNkXFx1ZGM2MScsXG4gICdzYW50YSc6J1xcdWQ4M2NcXHVkZjg1JyxcbiAgJ3NhdGVsbGl0ZSc6J1xcdWQ4M2RcXHVkY2UxJyxcbiAgJ3NheG9waG9uZSc6J1xcdWQ4M2NcXHVkZmI3JyxcbiAgJ3NjaG9vbCc6J1xcdWQ4M2NcXHVkZmViJyxcbiAgJ3NjaG9vbF9zYXRjaGVsJzonXFx1ZDgzY1xcdWRmOTInLFxuICAnc2Npc3NvcnMnOidcXHUyNzAyXFx1ZmUwZicsXG4gICdzY29ycGlvbic6J1xcdWQ4M2VcXHVkZDgyJyxcbiAgJ3Njb3JwaXVzJzonXFx1MjY0ZlxcdWZlMGYnLFxuICAnc2NyZWFtJzonXFx1ZDgzZFxcdWRlMzEnLFxuICAnc2NyZWFtX2NhdCc6J1xcdWQ4M2RcXHVkZTQwJyxcbiAgJ3Njcm9sbCc6J1xcdWQ4M2RcXHVkY2RjJyxcbiAgJ3NlYXQnOidcXHVkODNkXFx1ZGNiYScsXG4gICdzZWNyZXQnOidcXHUzMjk5XFx1ZmUwZicsXG4gICdzZWVfbm9fZXZpbCc6J1xcdWQ4M2RcXHVkZTQ4JyxcbiAgJ3NlZWRsaW5nJzonXFx1ZDgzY1xcdWRmMzEnLFxuICAnc2VsZmllJzonXFx1ZDgzZVxcdWRkMzMnLFxuICAnc2hhbGxvd19wYW5fb2ZfZm9vZCc6J1xcdWQ4M2VcXHVkZDU4JyxcbiAgJ3NoYW1yb2NrJzonXFx1MjYxOFxcdWZlMGYnLFxuICAnc2hhcmsnOidcXHVkODNlXFx1ZGQ4OCcsXG4gICdzaGF2ZWRfaWNlJzonXFx1ZDgzY1xcdWRmNjcnLFxuICAnc2hlZXAnOidcXHVkODNkXFx1ZGMxMScsXG4gICdzaGVsbCc6J1xcdWQ4M2RcXHVkYzFhJyxcbiAgJ3NoaWVsZCc6J1xcdWQ4M2RcXHVkZWUxJyxcbiAgJ3NoaW50b19zaHJpbmUnOidcXHUyNmU5JyxcbiAgJ3NoaXAnOidcXHVkODNkXFx1ZGVhMicsXG4gICdzaGlydCc6J1xcdWQ4M2RcXHVkYzU1JyxcbiAgJ3Nob3BwaW5nJzonXFx1ZDgzZFxcdWRlY2QnLFxuICAnc2hvcHBpbmdfY2FydCc6J1xcdWQ4M2RcXHVkZWQyJyxcbiAgJ3Nob3dlcic6J1xcdWQ4M2RcXHVkZWJmJyxcbiAgJ3NocmltcCc6J1xcdWQ4M2VcXHVkZDkwJyxcbiAgJ3NpZ25hbF9zdHJlbmd0aCc6J1xcdWQ4M2RcXHVkY2Y2JyxcbiAgJ3NpeF9wb2ludGVkX3N0YXInOidcXHVkODNkXFx1ZGQyZicsXG4gICdza2knOidcXHVkODNjXFx1ZGZiZicsXG4gICdza2llcic6J1xcdTI2ZjcnLFxuICAnc2t1bGwnOidcXHVkODNkXFx1ZGM4MCcsXG4gICdza3VsbF9hbmRfY3Jvc3Nib25lcyc6J1xcdTI2MjBcXHVmZTBmJyxcbiAgJ3NsZWVwaW5nJzonXFx1ZDgzZFxcdWRlMzQnLFxuICAnc2xlZXBpbmdfYmVkJzonXFx1ZDgzZFxcdWRlY2MnLFxuICAnc2xlZXB5JzonXFx1ZDgzZFxcdWRlMmEnLFxuICAnc2xpZ2h0bHlfZnJvd25pbmdfZmFjZSc6J1xcdWQ4M2RcXHVkZTQxJyxcbiAgJ3NsaWdodGx5X3NtaWxpbmdfZmFjZSc6J1xcdWQ4M2RcXHVkZTQyJyxcbiAgJ3Nsb3RfbWFjaGluZSc6J1xcdWQ4M2NcXHVkZmIwJyxcbiAgJ3NtYWxsX2FpcnBsYW5lJzonXFx1ZDgzZFxcdWRlZTknLFxuICAnc21hbGxfYmx1ZV9kaWFtb25kJzonXFx1ZDgzZFxcdWRkMzknLFxuICAnc21hbGxfb3JhbmdlX2RpYW1vbmQnOidcXHVkODNkXFx1ZGQzOCcsXG4gICdzbWFsbF9yZWRfdHJpYW5nbGUnOidcXHVkODNkXFx1ZGQzYScsXG4gICdzbWFsbF9yZWRfdHJpYW5nbGVfZG93bic6J1xcdWQ4M2RcXHVkZDNiJyxcbiAgJ3NtaWxlJzonXFx1ZDgzZFxcdWRlMDQnLFxuICAnc21pbGVfY2F0JzonXFx1ZDgzZFxcdWRlMzgnLFxuICAnc21pbGV5JzonXFx1ZDgzZFxcdWRlMDMnLFxuICAnc21pbGV5X2NhdCc6J1xcdWQ4M2RcXHVkZTNhJyxcbiAgJ3NtaWxpbmdfaW1wJzonXFx1ZDgzZFxcdWRlMDgnLFxuICAnc21pcmsnOidcXHVkODNkXFx1ZGUwZicsXG4gICdzbWlya19jYXQnOidcXHVkODNkXFx1ZGUzYycsXG4gICdzbW9raW5nJzonXFx1ZDgzZFxcdWRlYWMnLFxuICAnc25haWwnOidcXHVkODNkXFx1ZGMwYycsXG4gICdzbmFrZSc6J1xcdWQ4M2RcXHVkYzBkJyxcbiAgJ3NuZWV6aW5nX2ZhY2UnOidcXHVkODNlXFx1ZGQyNycsXG4gICdzbm93Ym9hcmRlcic6J1xcdWQ4M2NcXHVkZmMyJyxcbiAgJ3Nub3dmbGFrZSc6J1xcdTI3NDRcXHVmZTBmJyxcbiAgJ3Nub3dtYW4nOidcXHUyNmM0XFx1ZmUwZicsXG4gICdzbm93bWFuX3dpdGhfc25vdyc6J1xcdTI2MDNcXHVmZTBmJyxcbiAgJ3NvYic6J1xcdWQ4M2RcXHVkZTJkJyxcbiAgJ3NvY2Nlcic6J1xcdTI2YmRcXHVmZTBmJyxcbiAgJ3Nvb24nOidcXHVkODNkXFx1ZGQxYycsXG4gICdzb3MnOidcXHVkODNjXFx1ZGQ5OCcsXG4gICdzb3VuZCc6J1xcdWQ4M2RcXHVkZDA5JyxcbiAgJ3NwYWNlX2ludmFkZXInOidcXHVkODNkXFx1ZGM3ZScsXG4gICdzcGFkZXMnOidcXHUyNjYwXFx1ZmUwZicsXG4gICdzcGFnaGV0dGknOidcXHVkODNjXFx1ZGY1ZCcsXG4gICdzcGFya2xlJzonXFx1Mjc0N1xcdWZlMGYnLFxuICAnc3BhcmtsZXInOidcXHVkODNjXFx1ZGY4NycsXG4gICdzcGFya2xlcyc6J1xcdTI3MjgnLFxuICAnc3BhcmtsaW5nX2hlYXJ0JzonXFx1ZDgzZFxcdWRjOTYnLFxuICAnc3BlYWtfbm9fZXZpbCc6J1xcdWQ4M2RcXHVkZTRhJyxcbiAgJ3NwZWFrZXInOidcXHVkODNkXFx1ZGQwOCcsXG4gICdzcGVha2luZ19oZWFkJzonXFx1ZDgzZFxcdWRkZTMnLFxuICAnc3BlZWNoX2JhbGxvb24nOidcXHVkODNkXFx1ZGNhYycsXG4gICdzcGVlZGJvYXQnOidcXHVkODNkXFx1ZGVhNCcsXG4gICdzcGlkZXInOidcXHVkODNkXFx1ZGQ3NycsXG4gICdzcGlkZXJfd2ViJzonXFx1ZDgzZFxcdWRkNzgnLFxuICAnc3BpcmFsX2NhbGVuZGFyJzonXFx1ZDgzZFxcdWRkZDMnLFxuICAnc3BpcmFsX25vdGVwYWQnOidcXHVkODNkXFx1ZGRkMicsXG4gICdzcG9vbic6J1xcdWQ4M2VcXHVkZDQ0JyxcbiAgJ3NxdWlkJzonXFx1ZDgzZVxcdWRkOTEnLFxuICAnc3RhZGl1bSc6J1xcdWQ4M2NcXHVkZmRmJyxcbiAgJ3N0YXInOidcXHUyYjUwXFx1ZmUwZicsXG4gICdzdGFyMic6J1xcdWQ4M2NcXHVkZjFmJyxcbiAgJ3N0YXJfYW5kX2NyZXNjZW50JzonXFx1MjYyYVxcdWZlMGYnLFxuICAnc3Rhcl9vZl9kYXZpZCc6J1xcdTI3MjFcXHVmZTBmJyxcbiAgJ3N0YXJzJzonXFx1ZDgzY1xcdWRmMjAnLFxuICAnc3RhdGlvbic6J1xcdWQ4M2RcXHVkZTg5JyxcbiAgJ3N0YXR1ZV9vZl9saWJlcnR5JzonXFx1ZDgzZFxcdWRkZmQnLFxuICAnc3RlYW1fbG9jb21vdGl2ZSc6J1xcdWQ4M2RcXHVkZTgyJyxcbiAgJ3N0ZXcnOidcXHVkODNjXFx1ZGY3MicsXG4gICdzdG9wX2J1dHRvbic6J1xcdTIzZjknLFxuICAnc3RvcF9zaWduJzonXFx1ZDgzZFxcdWRlZDEnLFxuICAnc3RvcHdhdGNoJzonXFx1MjNmMScsXG4gICdzdHJhaWdodF9ydWxlcic6J1xcdWQ4M2RcXHVkY2NmJyxcbiAgJ3N0cmF3YmVycnknOidcXHVkODNjXFx1ZGY1MycsXG4gICdzdHVja19vdXRfdG9uZ3VlJzonXFx1ZDgzZFxcdWRlMWInLFxuICAnc3R1Y2tfb3V0X3Rvbmd1ZV9jbG9zZWRfZXllcyc6J1xcdWQ4M2RcXHVkZTFkJyxcbiAgJ3N0dWNrX291dF90b25ndWVfd2lua2luZ19leWUnOidcXHVkODNkXFx1ZGUxYycsXG4gICdzdHVkaW9fbWljcm9waG9uZSc6J1xcdWQ4M2NcXHVkZjk5JyxcbiAgJ3N0dWZmZWRfZmxhdGJyZWFkJzonXFx1ZDgzZVxcdWRkNTknLFxuICAnc3VuX2JlaGluZF9sYXJnZV9jbG91ZCc6J1xcdWQ4M2NcXHVkZjI1JyxcbiAgJ3N1bl9iZWhpbmRfcmFpbl9jbG91ZCc6J1xcdWQ4M2NcXHVkZjI2JyxcbiAgJ3N1bl9iZWhpbmRfc21hbGxfY2xvdWQnOidcXHVkODNjXFx1ZGYyNCcsXG4gICdzdW5fd2l0aF9mYWNlJzonXFx1ZDgzY1xcdWRmMWUnLFxuICAnc3VuZmxvd2VyJzonXFx1ZDgzY1xcdWRmM2InLFxuICAnc3VuZ2xhc3Nlcyc6J1xcdWQ4M2RcXHVkZTBlJyxcbiAgJ3N1bm55JzonXFx1MjYwMFxcdWZlMGYnLFxuICAnc3VucmlzZSc6J1xcdWQ4M2NcXHVkZjA1JyxcbiAgJ3N1bnJpc2Vfb3Zlcl9tb3VudGFpbnMnOidcXHVkODNjXFx1ZGYwNCcsXG4gICdzdXJmaW5nX21hbic6J1xcdWQ4M2NcXHVkZmM0JyxcbiAgJ3N1cmZpbmdfd29tYW4nOidcXHVkODNjXFx1ZGZjNCZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnc3VzaGknOidcXHVkODNjXFx1ZGY2MycsXG4gICdzdXNwZW5zaW9uX3JhaWx3YXknOidcXHVkODNkXFx1ZGU5ZicsXG4gICdzd2VhdCc6J1xcdWQ4M2RcXHVkZTEzJyxcbiAgJ3N3ZWF0X2Ryb3BzJzonXFx1ZDgzZFxcdWRjYTYnLFxuICAnc3dlYXRfc21pbGUnOidcXHVkODNkXFx1ZGUwNScsXG4gICdzd2VldF9wb3RhdG8nOidcXHVkODNjXFx1ZGY2MCcsXG4gICdzd2ltbWluZ19tYW4nOidcXHVkODNjXFx1ZGZjYScsXG4gICdzd2ltbWluZ193b21hbic6J1xcdWQ4M2NcXHVkZmNhJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICdzeW1ib2xzJzonXFx1ZDgzZFxcdWRkMjMnLFxuICAnc3luYWdvZ3VlJzonXFx1ZDgzZFxcdWRkNGQnLFxuICAnc3lyaW5nZSc6J1xcdWQ4M2RcXHVkYzg5JyxcbiAgJ3RhY28nOidcXHVkODNjXFx1ZGYyZScsXG4gICd0YWRhJzonXFx1ZDgzY1xcdWRmODknLFxuICAndGFuYWJhdGFfdHJlZSc6J1xcdWQ4M2NcXHVkZjhiJyxcbiAgJ3RhdXJ1cyc6J1xcdTI2NDlcXHVmZTBmJyxcbiAgJ3RheGknOidcXHVkODNkXFx1ZGU5NScsXG4gICd0ZWEnOidcXHVkODNjXFx1ZGY3NScsXG4gICd0ZWxlcGhvbmVfcmVjZWl2ZXInOidcXHVkODNkXFx1ZGNkZScsXG4gICd0ZWxlc2NvcGUnOidcXHVkODNkXFx1ZGQyZCcsXG4gICd0ZW5uaXMnOidcXHVkODNjXFx1ZGZiZScsXG4gICd0ZW50JzonXFx1MjZmYVxcdWZlMGYnLFxuICAndGhlcm1vbWV0ZXInOidcXHVkODNjXFx1ZGYyMScsXG4gICd0aGlua2luZyc6J1xcdWQ4M2VcXHVkZDE0JyxcbiAgJ3Rob3VnaHRfYmFsbG9vbic6J1xcdWQ4M2RcXHVkY2FkJyxcbiAgJ3RpY2tldCc6J1xcdWQ4M2NcXHVkZmFiJyxcbiAgJ3RpY2tldHMnOidcXHVkODNjXFx1ZGY5ZicsXG4gICd0aWdlcic6J1xcdWQ4M2RcXHVkYzJmJyxcbiAgJ3RpZ2VyMic6J1xcdWQ4M2RcXHVkYzA1JyxcbiAgJ3RpbWVyX2Nsb2NrJzonXFx1MjNmMicsXG4gICd0aXBwaW5nX2hhbmRfbWFuJzonXFx1ZDgzZFxcdWRjODEmendqO1xcdTI2NDJcXHVmZTBmJyxcbiAgJ3RpcmVkX2ZhY2UnOidcXHVkODNkXFx1ZGUyYicsXG4gICd0bSc6J1xcdTIxMjJcXHVmZTBmJyxcbiAgJ3RvaWxldCc6J1xcdWQ4M2RcXHVkZWJkJyxcbiAgJ3Rva3lvX3Rvd2VyJzonXFx1ZDgzZFxcdWRkZmMnLFxuICAndG9tYXRvJzonXFx1ZDgzY1xcdWRmNDUnLFxuICAndG9uZ3VlJzonXFx1ZDgzZFxcdWRjNDUnLFxuICAndG9wJzonXFx1ZDgzZFxcdWRkMWQnLFxuICAndG9waGF0JzonXFx1ZDgzY1xcdWRmYTknLFxuICAndG9ybmFkbyc6J1xcdWQ4M2NcXHVkZjJhJyxcbiAgJ3RyYWNrYmFsbCc6J1xcdWQ4M2RcXHVkZGIyJyxcbiAgJ3RyYWN0b3InOidcXHVkODNkXFx1ZGU5YycsXG4gICd0cmFmZmljX2xpZ2h0JzonXFx1ZDgzZFxcdWRlYTUnLFxuICAndHJhaW4nOidcXHVkODNkXFx1ZGU4YicsXG4gICd0cmFpbjInOidcXHVkODNkXFx1ZGU4NicsXG4gICd0cmFtJzonXFx1ZDgzZFxcdWRlOGEnLFxuICAndHJpYW5ndWxhcl9mbGFnX29uX3Bvc3QnOidcXHVkODNkXFx1ZGVhOScsXG4gICd0cmlhbmd1bGFyX3J1bGVyJzonXFx1ZDgzZFxcdWRjZDAnLFxuICAndHJpZGVudCc6J1xcdWQ4M2RcXHVkZDMxJyxcbiAgJ3RyaXVtcGgnOidcXHVkODNkXFx1ZGUyNCcsXG4gICd0cm9sbGV5YnVzJzonXFx1ZDgzZFxcdWRlOGUnLFxuICAndHJvcGh5JzonXFx1ZDgzY1xcdWRmYzYnLFxuICAndHJvcGljYWxfZHJpbmsnOidcXHVkODNjXFx1ZGY3OScsXG4gICd0cm9waWNhbF9maXNoJzonXFx1ZDgzZFxcdWRjMjAnLFxuICAndHJ1Y2snOidcXHVkODNkXFx1ZGU5YScsXG4gICd0cnVtcGV0JzonXFx1ZDgzY1xcdWRmYmEnLFxuICAndHVsaXAnOidcXHVkODNjXFx1ZGYzNycsXG4gICd0dW1ibGVyX2dsYXNzJzonXFx1ZDgzZVxcdWRkNDMnLFxuICAndHVya2V5JzonXFx1ZDgzZVxcdWRkODMnLFxuICAndHVydGxlJzonXFx1ZDgzZFxcdWRjMjInLFxuICAndHYnOidcXHVkODNkXFx1ZGNmYScsXG4gICd0d2lzdGVkX3JpZ2h0d2FyZHNfYXJyb3dzJzonXFx1ZDgzZFxcdWRkMDAnLFxuICAndHdvX2hlYXJ0cyc6J1xcdWQ4M2RcXHVkYzk1JyxcbiAgJ3R3b19tZW5faG9sZGluZ19oYW5kcyc6J1xcdWQ4M2RcXHVkYzZjJyxcbiAgJ3R3b193b21lbl9ob2xkaW5nX2hhbmRzJzonXFx1ZDgzZFxcdWRjNmQnLFxuICAndTUyNzInOidcXHVkODNjXFx1ZGUzOScsXG4gICd1NTQwOCc6J1xcdWQ4M2NcXHVkZTM0JyxcbiAgJ3U1NWI2JzonXFx1ZDgzY1xcdWRlM2EnLFxuICAndTYzMDcnOidcXHVkODNjXFx1ZGUyZlxcdWZlMGYnLFxuICAndTY3MDgnOidcXHVkODNjXFx1ZGUzN1xcdWZlMGYnLFxuICAndTY3MDknOidcXHVkODNjXFx1ZGUzNicsXG4gICd1NmU4MCc6J1xcdWQ4M2NcXHVkZTM1JyxcbiAgJ3U3MTIxJzonXFx1ZDgzY1xcdWRlMWFcXHVmZTBmJyxcbiAgJ3U3NTMzJzonXFx1ZDgzY1xcdWRlMzgnLFxuICAndTc5ODEnOidcXHVkODNjXFx1ZGUzMicsXG4gICd1N2E3YSc6J1xcdWQ4M2NcXHVkZTMzJyxcbiAgJ3VtYnJlbGxhJzonXFx1MjYxNFxcdWZlMGYnLFxuICAndW5hbXVzZWQnOidcXHVkODNkXFx1ZGUxMicsXG4gICd1bmRlcmFnZSc6J1xcdWQ4M2RcXHVkZDFlJyxcbiAgJ3VuaWNvcm4nOidcXHVkODNlXFx1ZGQ4NCcsXG4gICd1bmxvY2snOidcXHVkODNkXFx1ZGQxMycsXG4gICd1cCc6J1xcdWQ4M2NcXHVkZDk5JyxcbiAgJ3Vwc2lkZV9kb3duX2ZhY2UnOidcXHVkODNkXFx1ZGU0MycsXG4gICd2JzonXFx1MjcwY1xcdWZlMGYnLFxuICAndmVydGljYWxfdHJhZmZpY19saWdodCc6J1xcdWQ4M2RcXHVkZWE2JyxcbiAgJ3Zocyc6J1xcdWQ4M2RcXHVkY2ZjJyxcbiAgJ3ZpYnJhdGlvbl9tb2RlJzonXFx1ZDgzZFxcdWRjZjMnLFxuICAndmlkZW9fY2FtZXJhJzonXFx1ZDgzZFxcdWRjZjknLFxuICAndmlkZW9fZ2FtZSc6J1xcdWQ4M2NcXHVkZmFlJyxcbiAgJ3Zpb2xpbic6J1xcdWQ4M2NcXHVkZmJiJyxcbiAgJ3ZpcmdvJzonXFx1MjY0ZFxcdWZlMGYnLFxuICAndm9sY2Fubyc6J1xcdWQ4M2NcXHVkZjBiJyxcbiAgJ3ZvbGxleWJhbGwnOidcXHVkODNjXFx1ZGZkMCcsXG4gICd2cyc6J1xcdWQ4M2NcXHVkZDlhJyxcbiAgJ3Z1bGNhbl9zYWx1dGUnOidcXHVkODNkXFx1ZGQ5NicsXG4gICd3YWxraW5nX21hbic6J1xcdWQ4M2RcXHVkZWI2JyxcbiAgJ3dhbGtpbmdfd29tYW4nOidcXHVkODNkXFx1ZGViNiZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnd2FuaW5nX2NyZXNjZW50X21vb24nOidcXHVkODNjXFx1ZGYxOCcsXG4gICd3YW5pbmdfZ2liYm91c19tb29uJzonXFx1ZDgzY1xcdWRmMTYnLFxuICAnd2FybmluZyc6J1xcdTI2YTBcXHVmZTBmJyxcbiAgJ3dhc3RlYmFza2V0JzonXFx1ZDgzZFxcdWRkZDEnLFxuICAnd2F0Y2gnOidcXHUyMzFhXFx1ZmUwZicsXG4gICd3YXRlcl9idWZmYWxvJzonXFx1ZDgzZFxcdWRjMDMnLFxuICAnd2F0ZXJtZWxvbic6J1xcdWQ4M2NcXHVkZjQ5JyxcbiAgJ3dhdmUnOidcXHVkODNkXFx1ZGM0YicsXG4gICd3YXZ5X2Rhc2gnOidcXHUzMDMwXFx1ZmUwZicsXG4gICd3YXhpbmdfY3Jlc2NlbnRfbW9vbic6J1xcdWQ4M2NcXHVkZjEyJyxcbiAgJ3djJzonXFx1ZDgzZFxcdWRlYmUnLFxuICAnd2VhcnknOidcXHVkODNkXFx1ZGUyOScsXG4gICd3ZWRkaW5nJzonXFx1ZDgzZFxcdWRjOTInLFxuICAnd2VpZ2h0X2xpZnRpbmdfbWFuJzonXFx1ZDgzY1xcdWRmY2JcXHVmZTBmJyxcbiAgJ3dlaWdodF9saWZ0aW5nX3dvbWFuJzonXFx1ZDgzY1xcdWRmY2JcXHVmZTBmJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICd3aGFsZSc6J1xcdWQ4M2RcXHVkYzMzJyxcbiAgJ3doYWxlMic6J1xcdWQ4M2RcXHVkYzBiJyxcbiAgJ3doZWVsX29mX2RoYXJtYSc6J1xcdTI2MzhcXHVmZTBmJyxcbiAgJ3doZWVsY2hhaXInOidcXHUyNjdmXFx1ZmUwZicsXG4gICd3aGl0ZV9jaGVja19tYXJrJzonXFx1MjcwNScsXG4gICd3aGl0ZV9jaXJjbGUnOidcXHUyNmFhXFx1ZmUwZicsXG4gICd3aGl0ZV9mbGFnJzonXFx1ZDgzY1xcdWRmZjNcXHVmZTBmJyxcbiAgJ3doaXRlX2Zsb3dlcic6J1xcdWQ4M2RcXHVkY2FlJyxcbiAgJ3doaXRlX2xhcmdlX3NxdWFyZSc6J1xcdTJiMWNcXHVmZTBmJyxcbiAgJ3doaXRlX21lZGl1bV9zbWFsbF9zcXVhcmUnOidcXHUyNWZkXFx1ZmUwZicsXG4gICd3aGl0ZV9tZWRpdW1fc3F1YXJlJzonXFx1MjVmYlxcdWZlMGYnLFxuICAnd2hpdGVfc21hbGxfc3F1YXJlJzonXFx1MjVhYlxcdWZlMGYnLFxuICAnd2hpdGVfc3F1YXJlX2J1dHRvbic6J1xcdWQ4M2RcXHVkZDMzJyxcbiAgJ3dpbHRlZF9mbG93ZXInOidcXHVkODNlXFx1ZGQ0MCcsXG4gICd3aW5kX2NoaW1lJzonXFx1ZDgzY1xcdWRmOTAnLFxuICAnd2luZF9mYWNlJzonXFx1ZDgzY1xcdWRmMmMnLFxuICAnd2luZV9nbGFzcyc6J1xcdWQ4M2NcXHVkZjc3JyxcbiAgJ3dpbmsnOidcXHVkODNkXFx1ZGUwOScsXG4gICd3b2xmJzonXFx1ZDgzZFxcdWRjM2EnLFxuICAnd29tYW4nOidcXHVkODNkXFx1ZGM2OScsXG4gICd3b21hbl9hcnRpc3QnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzY1xcdWRmYTgnLFxuICAnd29tYW5fYXN0cm9uYXV0JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkZTgwJyxcbiAgJ3dvbWFuX2NhcnR3aGVlbGluZyc6J1xcdWQ4M2VcXHVkZDM4Jnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICd3b21hbl9jb29rJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2NcXHVkZjczJyxcbiAgJ3dvbWFuX2ZhY2VwYWxtaW5nJzonXFx1ZDgzZVxcdWRkMjYmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3dvbWFuX2ZhY3Rvcnlfd29ya2VyJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2NcXHVkZmVkJyxcbiAgJ3dvbWFuX2Zhcm1lcic6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNjXFx1ZGYzZScsXG4gICd3b21hbl9maXJlZmlnaHRlcic6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGU5MicsXG4gICd3b21hbl9oZWFsdGhfd29ya2VyJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdTI2OTVcXHVmZTBmJyxcbiAgJ3dvbWFuX2p1ZGdlJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdTI2OTZcXHVmZTBmJyxcbiAgJ3dvbWFuX2p1Z2dsaW5nJzonXFx1ZDgzZVxcdWRkMzkmendqO1xcdTI2NDBcXHVmZTBmJyxcbiAgJ3dvbWFuX21lY2hhbmljJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkZDI3JyxcbiAgJ3dvbWFuX29mZmljZV93b3JrZXInOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzZFxcdWRjYmMnLFxuICAnd29tYW5fcGlsb3QnOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1MjcwOFxcdWZlMGYnLFxuICAnd29tYW5fcGxheWluZ19oYW5kYmFsbCc6J1xcdWQ4M2VcXHVkZDNlJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICd3b21hbl9wbGF5aW5nX3dhdGVyX3BvbG8nOidcXHVkODNlXFx1ZGQzZCZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnd29tYW5fc2NpZW50aXN0JzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2RcXHVkZDJjJyxcbiAgJ3dvbWFuX3NocnVnZ2luZyc6J1xcdWQ4M2VcXHVkZDM3Jnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICd3b21hbl9zaW5nZXInOidcXHVkODNkXFx1ZGM2OSZ6d2o7XFx1ZDgzY1xcdWRmYTQnLFxuICAnd29tYW5fc3R1ZGVudCc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNjXFx1ZGY5MycsXG4gICd3b21hbl90ZWFjaGVyJzonXFx1ZDgzZFxcdWRjNjkmendqO1xcdWQ4M2NcXHVkZmViJyxcbiAgJ3dvbWFuX3RlY2hub2xvZ2lzdCc6J1xcdWQ4M2RcXHVkYzY5Jnp3ajtcXHVkODNkXFx1ZGNiYicsXG4gICd3b21hbl93aXRoX3R1cmJhbic6J1xcdWQ4M2RcXHVkYzczJnp3ajtcXHUyNjQwXFx1ZmUwZicsXG4gICd3b21hbnNfY2xvdGhlcyc6J1xcdWQ4M2RcXHVkYzVhJyxcbiAgJ3dvbWFuc19oYXQnOidcXHVkODNkXFx1ZGM1MicsXG4gICd3b21lbl93cmVzdGxpbmcnOidcXHVkODNlXFx1ZGQzYyZ6d2o7XFx1MjY0MFxcdWZlMGYnLFxuICAnd29tZW5zJzonXFx1ZDgzZFxcdWRlYmEnLFxuICAnd29ybGRfbWFwJzonXFx1ZDgzZFxcdWRkZmEnLFxuICAnd29ycmllZCc6J1xcdWQ4M2RcXHVkZTFmJyxcbiAgJ3dyZW5jaCc6J1xcdWQ4M2RcXHVkZDI3JyxcbiAgJ3dyaXRpbmdfaGFuZCc6J1xcdTI3MGRcXHVmZTBmJyxcbiAgJ3gnOidcXHUyNzRjJyxcbiAgJ3llbGxvd19oZWFydCc6J1xcdWQ4M2RcXHVkYzliJyxcbiAgJ3llbic6J1xcdWQ4M2RcXHVkY2I0JyxcbiAgJ3lpbl95YW5nJzonXFx1MjYyZlxcdWZlMGYnLFxuICAneXVtJzonXFx1ZDgzZFxcdWRlMGInLFxuICAnemFwJzonXFx1MjZhMVxcdWZlMGYnLFxuICAnemlwcGVyX21vdXRoX2ZhY2UnOidcXHVkODNlXFx1ZGQxMCcsXG4gICd6enonOidcXHVkODNkXFx1ZGNhNCcsXG5cbiAgLyogc3BlY2lhbCBlbW9qaXMgOlAgKi9cbiAgJ29jdG9jYXQnOiAgJzxpbWcgYWx0PVwiOm9jdG9jYXQ6XCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYWxpZ249XCJhYnNtaWRkbGVcIiBzcmM9XCJodHRwczovL2Fzc2V0cy1jZG4uZ2l0aHViLmNvbS9pbWFnZXMvaWNvbnMvZW1vamkvb2N0b2NhdC5wbmdcIj4nLFxuICAnc2hvd2Rvd24nOiAnPHNwYW4gc3R5bGU9XCJmb250LWZhbWlseTogXFwnQW5vbnltb3VzIFByb1xcJywgbW9ub3NwYWNlOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgdGV4dC1kZWNvcmF0aW9uLXN0eWxlOiBkYXNoZWQ7IHRleHQtZGVjb3JhdGlvbi1jb2xvcjogIzNlOGI4YTt0ZXh0LXVuZGVybGluZS1wb3NpdGlvbjogdW5kZXI7XCI+Uzwvc3Bhbj4nXG59O1xuXHJcbi8qKlxuICogQ3JlYXRlZCBieSBFc3RldmFvIG9uIDMxLTA1LTIwMTUuXG4gKi9cblxuLyoqXG4gKiBTaG93ZG93biBDb252ZXJ0ZXIgY2xhc3NcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtvYmplY3R9IFtjb252ZXJ0ZXJPcHRpb25zXVxuICogQHJldHVybnMge0NvbnZlcnRlcn1cbiAqL1xuc2hvd2Rvd24uQ29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlck9wdGlvbnMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhclxuICAgICAgLyoqXG4gICAgICAgKiBPcHRpb25zIHVzZWQgYnkgdGhpcyBjb252ZXJ0ZXJcbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKiBAdHlwZSB7e319XG4gICAgICAgKi9cbiAgICAgIG9wdGlvbnMgPSB7fSxcblxuICAgICAgLyoqXG4gICAgICAgKiBMYW5ndWFnZSBleHRlbnNpb25zIHVzZWQgYnkgdGhpcyBjb252ZXJ0ZXJcbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICAgKi9cbiAgICAgIGxhbmdFeHRlbnNpb25zID0gW10sXG5cbiAgICAgIC8qKlxuICAgICAgICogT3V0cHV0IG1vZGlmaWVycyBleHRlbnNpb25zIHVzZWQgYnkgdGhpcyBjb252ZXJ0ZXJcbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICAgKi9cbiAgICAgIG91dHB1dE1vZGlmaWVycyA9IFtdLFxuXG4gICAgICAvKipcbiAgICAgICAqIEV2ZW50IGxpc3RlbmVyc1xuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEB0eXBlIHt7fX1cbiAgICAgICAqL1xuICAgICAgbGlzdGVuZXJzID0ge30sXG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIGZsYXZvciBzZXQgaW4gdGhpcyBjb252ZXJ0ZXJcbiAgICAgICAqL1xuICAgICAgc2V0Q29udkZsYXZvciA9IHNldEZsYXZvcixcblxuICAgIC8qKlxuICAgICAqIE1ldGFkYXRhIG9mIHRoZSBkb2N1bWVudFxuICAgICAqIEB0eXBlIHt7cGFyc2VkOiB7fSwgcmF3OiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nfX1cbiAgICAgKi9cbiAgICAgIG1ldGFkYXRhID0ge1xuICAgICAgICBwYXJzZWQ6IHt9LFxuICAgICAgICByYXc6ICcnLFxuICAgICAgICBmb3JtYXQ6ICcnXG4gICAgICB9O1xuXG4gIF9jb25zdHJ1Y3RvcigpO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0ZXIgY29uc3RydWN0b3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIF9jb25zdHJ1Y3RvciAoKSB7XG4gICAgY29udmVydGVyT3B0aW9ucyA9IGNvbnZlcnRlck9wdGlvbnMgfHwge307XG5cbiAgICBmb3IgKHZhciBnT3B0IGluIGdsb2JhbE9wdGlvbnMpIHtcbiAgICAgIGlmIChnbG9iYWxPcHRpb25zLmhhc093blByb3BlcnR5KGdPcHQpKSB7XG4gICAgICAgIG9wdGlvbnNbZ09wdF0gPSBnbG9iYWxPcHRpb25zW2dPcHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIG9wdGlvbnNcbiAgICBpZiAodHlwZW9mIGNvbnZlcnRlck9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKHZhciBvcHQgaW4gY29udmVydGVyT3B0aW9ucykge1xuICAgICAgICBpZiAoY29udmVydGVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKSB7XG4gICAgICAgICAgb3B0aW9uc1tvcHRdID0gY29udmVydGVyT3B0aW9uc1tvcHRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKCdDb252ZXJ0ZXIgZXhwZWN0cyB0aGUgcGFzc2VkIHBhcmFtZXRlciB0byBiZSBhbiBvYmplY3QsIGJ1dCAnICsgdHlwZW9mIGNvbnZlcnRlck9wdGlvbnMgK1xuICAgICAgJyB3YXMgcGFzc2VkIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZXh0ZW5zaW9ucykge1xuICAgICAgc2hvd2Rvd24uaGVscGVyLmZvckVhY2gob3B0aW9ucy5leHRlbnNpb25zLCBfcGFyc2VFeHRlbnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBleHRlbnNpb25cbiAgICogQHBhcmFtIHsqfSBleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lPScnXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gX3BhcnNlRXh0ZW5zaW9uIChleHQsIG5hbWUpIHtcblxuICAgIG5hbWUgPSBuYW1lIHx8IG51bGw7XG4gICAgLy8gSWYgaXQncyBhIHN0cmluZywgdGhlIGV4dGVuc2lvbiB3YXMgcHJldmlvdXNseSBsb2FkZWRcbiAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzU3RyaW5nKGV4dCkpIHtcbiAgICAgIGV4dCA9IHNob3dkb3duLmhlbHBlci5zdGRFeHROYW1lKGV4dCk7XG4gICAgICBuYW1lID0gZXh0O1xuXG4gICAgICAvLyBMRUdBQ1lfU1VQUE9SVCBDT0RFXG4gICAgICBpZiAoc2hvd2Rvd24uZXh0ZW5zaW9uc1tleHRdKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignREVQUkVDQVRJT04gV0FSTklORzogJyArIGV4dCArICcgaXMgYW4gb2xkIGV4dGVuc2lvbiB0aGF0IHVzZXMgYSBkZXByZWNhdGVkIGxvYWRpbmcgbWV0aG9kLicgK1xuICAgICAgICAgICdQbGVhc2UgaW5mb3JtIHRoZSBkZXZlbG9wZXIgdGhhdCB0aGUgZXh0ZW5zaW9uIHNob3VsZCBiZSB1cGRhdGVkIScpO1xuICAgICAgICBsZWdhY3lFeHRlbnNpb25Mb2FkaW5nKHNob3dkb3duLmV4dGVuc2lvbnNbZXh0XSwgZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgLy8gRU5EIExFR0FDWSBTVVBQT1JUIENPREVcblxuICAgICAgfSBlbHNlIGlmICghc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKGV4dGVuc2lvbnNbZXh0XSkpIHtcbiAgICAgICAgZXh0ID0gZXh0ZW5zaW9uc1tleHRdO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcignRXh0ZW5zaW9uIFwiJyArIGV4dCArICdcIiBjb3VsZCBub3QgYmUgbG9hZGVkLiBJdCB3YXMgZWl0aGVyIG5vdCBmb3VuZCBvciBpcyBub3QgYSB2YWxpZCBleHRlbnNpb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGV4dCA9IGV4dCgpO1xuICAgIH1cblxuICAgIGlmICghc2hvd2Rvd24uaGVscGVyLmlzQXJyYXkoZXh0KSkge1xuICAgICAgZXh0ID0gW2V4dF07XG4gICAgfVxuXG4gICAgdmFyIHZhbGlkRXh0ID0gdmFsaWRhdGUoZXh0LCBuYW1lKTtcbiAgICBpZiAoIXZhbGlkRXh0LnZhbGlkKSB7XG4gICAgICB0aHJvdyBFcnJvcih2YWxpZEV4dC5lcnJvcik7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHQubGVuZ3RoOyArK2kpIHtcbiAgICAgIHN3aXRjaCAoZXh0W2ldLnR5cGUpIHtcblxuICAgICAgICBjYXNlICdsYW5nJzpcbiAgICAgICAgICBsYW5nRXh0ZW5zaW9ucy5wdXNoKGV4dFtpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnb3V0cHV0JzpcbiAgICAgICAgICBvdXRwdXRNb2RpZmllcnMucHVzaChleHRbaV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGV4dFtpXS5oYXNPd25Qcm9wZXJ0eSgnbGlzdGVuZXJzJykpIHtcbiAgICAgICAgZm9yICh2YXIgbG4gaW4gZXh0W2ldLmxpc3RlbmVycykge1xuICAgICAgICAgIGlmIChleHRbaV0ubGlzdGVuZXJzLmhhc093blByb3BlcnR5KGxuKSkge1xuICAgICAgICAgICAgbGlzdGVuKGxuLCBleHRbaV0ubGlzdGVuZXJzW2xuXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogTEVHQUNZX1NVUFBPUlRcbiAgICogQHBhcmFtIHsqfSBleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIGZ1bmN0aW9uIGxlZ2FjeUV4dGVuc2lvbkxvYWRpbmcgKGV4dCwgbmFtZSkge1xuICAgIGlmICh0eXBlb2YgZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBleHQgPSBleHQobmV3IHNob3dkb3duLkNvbnZlcnRlcigpKTtcbiAgICB9XG4gICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNBcnJheShleHQpKSB7XG4gICAgICBleHQgPSBbZXh0XTtcbiAgICB9XG4gICAgdmFyIHZhbGlkID0gdmFsaWRhdGUoZXh0LCBuYW1lKTtcblxuICAgIGlmICghdmFsaWQudmFsaWQpIHtcbiAgICAgIHRocm93IEVycm9yKHZhbGlkLmVycm9yKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dC5sZW5ndGg7ICsraSkge1xuICAgICAgc3dpdGNoIChleHRbaV0udHlwZSkge1xuICAgICAgICBjYXNlICdsYW5nJzpcbiAgICAgICAgICBsYW5nRXh0ZW5zaW9ucy5wdXNoKGV4dFtpXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ291dHB1dCc6XG4gICAgICAgICAgb3V0cHV0TW9kaWZpZXJzLnB1c2goZXh0W2ldKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDovLyBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZVxuICAgICAgICAgIHRocm93IEVycm9yKCdFeHRlbnNpb24gbG9hZGVyIGVycm9yOiBUeXBlIHVucmVjb2duaXplZCEhIScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gYW4gZXZlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIGZ1bmN0aW9uIGxpc3RlbiAobmFtZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIXNob3dkb3duLmhlbHBlci5pc1N0cmluZyhuYW1lKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgaW4gY29udmVydGVyLmxpc3RlbigpIG1ldGhvZDogbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBidXQgJyArIHR5cGVvZiBuYW1lICsgJyBnaXZlbicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IGluIGNvbnZlcnRlci5saXN0ZW4oKSBtZXRob2Q6IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0ICcgKyB0eXBlb2YgY2FsbGJhY2sgKyAnIGdpdmVuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFsaXN0ZW5lcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGxpc3RlbmVyc1tuYW1lXSA9IFtdO1xuICAgIH1cbiAgICBsaXN0ZW5lcnNbbmFtZV0ucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICBmdW5jdGlvbiByVHJpbUlucHV0VGV4dCAodGV4dCkge1xuICAgIHZhciByc3AgPSB0ZXh0Lm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aCxcbiAgICAgICAgcmd4ID0gbmV3IFJlZ0V4cCgnXlxcXFxzezAsJyArIHJzcCArICd9JywgJ2dtJyk7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShyZ3gsICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhbiBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZ0TmFtZSBFdmVudCBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRleHRcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9ucyBDb252ZXJ0ZXIgT3B0aW9uc1xuICAgKiBAcGFyYW0ge3t9fSBnbG9iYWxzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0aGlzLl9kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoIChldnROYW1lLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICAgaWYgKGxpc3RlbmVycy5oYXNPd25Qcm9wZXJ0eShldnROYW1lKSkge1xuICAgICAgZm9yICh2YXIgZWkgPSAwOyBlaSA8IGxpc3RlbmVyc1tldnROYW1lXS5sZW5ndGg7ICsrZWkpIHtcbiAgICAgICAgdmFyIG5UZXh0ID0gbGlzdGVuZXJzW2V2dE5hbWVdW2VpXShldnROYW1lLCB0ZXh0LCB0aGlzLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICAgICAgaWYgKG5UZXh0ICYmIHR5cGVvZiBuVGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0ZXh0ID0gblRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBhbiBldmVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7c2hvd2Rvd24uQ29udmVydGVyfVxuICAgKi9cbiAgdGhpcy5saXN0ZW4gPSBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2spIHtcbiAgICBsaXN0ZW4obmFtZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIG1hcmtkb3duIHN0cmluZyBpbnRvIEhUTUxcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB0aGlzLm1ha2VIdG1sID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAvL2NoZWNrIGlmIHRleHQgaXMgbm90IGZhbHN5XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICB2YXIgZ2xvYmFscyA9IHtcbiAgICAgIGdIdG1sQmxvY2tzOiAgICAgW10sXG4gICAgICBnSHRtbE1kQmxvY2tzOiAgIFtdLFxuICAgICAgZ0h0bWxTcGFuczogICAgICBbXSxcbiAgICAgIGdVcmxzOiAgICAgICAgICAge30sXG4gICAgICBnVGl0bGVzOiAgICAgICAgIHt9LFxuICAgICAgZ0RpbWVuc2lvbnM6ICAgICB7fSxcbiAgICAgIGdMaXN0TGV2ZWw6ICAgICAgMCxcbiAgICAgIGhhc2hMaW5rQ291bnRzOiAge30sXG4gICAgICBsYW5nRXh0ZW5zaW9uczogIGxhbmdFeHRlbnNpb25zLFxuICAgICAgb3V0cHV0TW9kaWZpZXJzOiBvdXRwdXRNb2RpZmllcnMsXG4gICAgICBjb252ZXJ0ZXI6ICAgICAgIHRoaXMsXG4gICAgICBnaENvZGVCbG9ja3M6ICAgIFtdLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgcGFyc2VkOiB7fSxcbiAgICAgICAgcmF3OiAnJyxcbiAgICAgICAgZm9ybWF0OiAnJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBUaGlzIGxldHMgdXMgdXNlIMKoIHRyZW1hIGFzIGFuIGVzY2FwZSBjaGFyIHRvIGF2b2lkIG1kNSBoYXNoZXNcbiAgICAvLyBUaGUgY2hvaWNlIG9mIGNoYXJhY3RlciBpcyBhcmJpdHJhcnk7IGFueXRoaW5nIHRoYXQgaXNuJ3RcbiAgICAvLyBtYWdpYyBpbiBNYXJrZG93biB3aWxsIHdvcmsuXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvwqgvZywgJ8KoVCcpO1xuXG4gICAgLy8gUmVwbGFjZSAkIHdpdGggwqhEXG4gICAgLy8gUmVnRXhwIGludGVycHJldHMgJCBhcyBhIHNwZWNpYWwgY2hhcmFjdGVyXG4gICAgLy8gd2hlbiBpdCdzIGluIGEgcmVwbGFjZW1lbnQgc3RyaW5nXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwkL2csICfCqEQnKTtcblxuICAgIC8vIFN0YW5kYXJkaXplIGxpbmUgZW5kaW5nc1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7IC8vIERPUyB0byBVbml4XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyL2csICdcXG4nKTsgLy8gTWFjIHRvIFVuaXhcblxuICAgIC8vIFN0YXJkYXJkaXplIGxpbmUgc3BhY2VzXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFx1MDBBMC9nLCAnJm5ic3A7Jyk7XG5cbiAgICBpZiAob3B0aW9ucy5zbWFydEluZGVudGF0aW9uRml4KSB7XG4gICAgICB0ZXh0ID0gclRyaW1JbnB1dFRleHQodGV4dCk7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRleHQgYmVnaW5zIGFuZCBlbmRzIHdpdGggYSBjb3VwbGUgb2YgbmV3bGluZXM6XG4gICAgdGV4dCA9ICdcXG5cXG4nICsgdGV4dCArICdcXG5cXG4nO1xuXG4gICAgLy8gZGV0YWJcbiAgICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdkZXRhYicpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gICAgLyoqXG4gICAgICogU3RyaXAgYW55IGxpbmVzIGNvbnNpc3Rpbmcgb25seSBvZiBzcGFjZXMgYW5kIHRhYnMuXG4gICAgICogVGhpcyBtYWtlcyBzdWJzZXF1ZW50IHJlZ2V4cyBlYXNpZXIgdG8gd3JpdGUsIGJlY2F1c2Ugd2UgY2FuXG4gICAgICogbWF0Y2ggY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgd2l0aCAvXFxuKy8gaW5zdGVhZCBvZiBzb21ldGhpbmdcbiAgICAgKiBjb250b3J0ZWQgbGlrZSAvWyBcXHRdKlxcbisvXG4gICAgICovXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXlsgXFx0XSskL21nLCAnJyk7XG5cbiAgICAvL3J1biBsYW5ndWFnZUV4dGVuc2lvbnNcbiAgICBzaG93ZG93bi5oZWxwZXIuZm9yRWFjaChsYW5nRXh0ZW5zaW9ucywgZnVuY3Rpb24gKGV4dCkge1xuICAgICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcigncnVuRXh0ZW5zaW9uJykoZXh0LCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICB9KTtcblxuICAgIC8vIHJ1biB0aGUgc3ViIHBhcnNlcnNcbiAgICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtZXRhZGF0YScpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hQcmVDb2RlVGFncycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2dpdGh1YkNvZGVCbG9ja3MnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoSFRNTEJsb2NrcycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hDb2RlVGFncycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3N0cmlwTGlua0RlZmluaXRpb25zJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignYmxvY2tHYW11dCcpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3VuaGFzaEhUTUxTcGFucycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3VuZXNjYXBlU3BlY2lhbENoYXJzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgICAvLyBhdHRhY2tsYWI6IFJlc3RvcmUgZG9sbGFyIHNpZ25zXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvwqhEL2csICckJCcpO1xuXG4gICAgLy8gYXR0YWNrbGFiOiBSZXN0b3JlIHRyZW1hc1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoVC9nLCAnwqgnKTtcblxuICAgIC8vIHJlbmRlciBhIGNvbXBsZXRlIGh0bWwgZG9jdW1lbnQgaW5zdGVhZCBvZiBhIHBhcnRpYWwgaWYgdGhlIG9wdGlvbiBpcyBlbmFibGVkXG4gICAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignY29tcGxldGVIVE1MRG9jdW1lbnQnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAgIC8vIFJ1biBvdXRwdXQgbW9kaWZpZXJzXG4gICAgc2hvd2Rvd24uaGVscGVyLmZvckVhY2gob3V0cHV0TW9kaWZpZXJzLCBmdW5jdGlvbiAoZXh0KSB7XG4gICAgICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdydW5FeHRlbnNpb24nKShleHQsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIH0pO1xuXG4gICAgLy8gdXBkYXRlIG1ldGFkYXRhXG4gICAgbWV0YWRhdGEgPSBnbG9iYWxzLm1ldGFkYXRhO1xuICAgIHJldHVybiB0ZXh0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBIVE1MIHN0cmluZyBpbnRvIGEgbWFya2Rvd24gc3RyaW5nXG4gICAqIEBwYXJhbSBzcmNcbiAgICogQHBhcmFtIFtIVE1MUGFyc2VyXSBBIFdIQVRXRyBET00gYW5kIEhUTUwgcGFyc2VyLCBzdWNoIGFzIEpTRE9NLiBJZiBub25lIGlzIHN1cHBsaWVkLCB3aW5kb3cuZG9jdW1lbnQgd2lsbCBiZSB1c2VkLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgdGhpcy5tYWtlTWFya2Rvd24gPSB0aGlzLm1ha2VNZCA9IGZ1bmN0aW9uIChzcmMsIEhUTUxQYXJzZXIpIHtcblxuICAgIC8vIHJlcGxhY2UgXFxyXFxuIHdpdGggXFxuXG4gICAgc3JjID0gc3JjLnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7XG4gICAgc3JjID0gc3JjLnJlcGxhY2UoL1xcci9nLCAnXFxuJyk7IC8vIG9sZCBtYWNzXG5cbiAgICAvLyBkdWUgdG8gYW4gZWRnZSBjYXNlLCB3ZSBuZWVkIHRvIGZpbmQgdGhpczogPiA8XG4gICAgLy8gdG8gcHJldmVudCByZW1vdmluZyBvZiBub24gc2lsZW50IHdoaXRlIHNwYWNlc1xuICAgIC8vIGV4OiA8ZW0+dGhpcyBpczwvZW0+IDxzdHJvbmc+c3BhcnRhPC9zdHJvbmc+XG4gICAgc3JjID0gc3JjLnJlcGxhY2UoLz5bIFxcdF0rPC8sICc+wqhOQlNQOzwnKTtcblxuICAgIGlmICghSFRNTFBhcnNlcikge1xuICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgSFRNTFBhcnNlciA9IHdpbmRvdy5kb2N1bWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSFRNTFBhcnNlciBpcyB1bmRlZmluZWQuIElmIGluIGEgd2Vid29ya2VyIG9yIG5vZGVqcyBlbnZpcm9ubWVudCwgeW91IG5lZWQgdG8gcHJvdmlkZSBhIFdIQVRXRyBET00gYW5kIEhUTUwgc3VjaCBhcyBKU0RPTScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkb2MgPSBIVE1MUGFyc2VyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRvYy5pbm5lckhUTUwgPSBzcmM7XG5cbiAgICB2YXIgZ2xvYmFscyA9IHtcbiAgICAgIHByZUxpc3Q6IHN1YnN0aXR1dGVQcmVDb2RlVGFncyhkb2MpXG4gICAgfTtcblxuICAgIC8vIHJlbW92ZSBhbGwgbmV3bGluZXMgYW5kIGNvbGxhcHNlIHNwYWNlc1xuICAgIGNsZWFuKGRvYyk7XG5cbiAgICAvLyBzb21lIHN0dWZmLCBsaWtlIGFjY2lkZW50YWwgcmVmZXJlbmNlIGxpbmtzIG11c3Qgbm93IGJlIGVzY2FwZWRcbiAgICAvLyBUT0RPXG4gICAgLy8gZG9jLmlubmVySFRNTCA9IGRvYy5pbm5lckhUTUwucmVwbGFjZSgvXFxbW1xcU1xcdCBdXS8pO1xuXG4gICAgdmFyIG5vZGVzID0gZG9jLmNoaWxkTm9kZXMsXG4gICAgICAgIG1kRG9jID0gJyc7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtZERvYyArPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ub2RlJykobm9kZXNbaV0sIGdsb2JhbHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFuIChub2RlKSB7XG4gICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkTm9kZXNbbl07XG4gICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICAgIGlmICghL1xcUy8udGVzdChjaGlsZC5ub2RlVmFsdWUpKSB7XG4gICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgIC0tbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGQubm9kZVZhbHVlID0gY2hpbGQubm9kZVZhbHVlLnNwbGl0KCdcXG4nKS5qb2luKCcgJyk7XG4gICAgICAgICAgICBjaGlsZC5ub2RlVmFsdWUgPSBjaGlsZC5ub2RlVmFsdWUucmVwbGFjZSgvKFxccykrL2csICckMScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgIGNsZWFuKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZpbmQgYWxsIHByZSB0YWdzIGFuZCByZXBsYWNlIGNvbnRlbnRzIHdpdGggcGxhY2Vob2xkZXJcbiAgICAvLyB3ZSBuZWVkIHRoaXMgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIGFsbCBpbmRlbnRhdGlvbiBmcm9tIGh0bWxcbiAgICAvLyB0byBlYXNlIHVwIHBhcnNpbmdcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlUHJlQ29kZVRhZ3MgKGRvYykge1xuXG4gICAgICB2YXIgcHJlcyA9IGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdwcmUnKSxcbiAgICAgICAgICBwcmVzUEggPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVzLmxlbmd0aDsgKytpKSB7XG5cbiAgICAgICAgaWYgKHByZXNbaV0uY2hpbGRFbGVtZW50Q291bnQgPT09IDEgJiYgcHJlc1tpXS5maXJzdENoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2NvZGUnKSB7XG4gICAgICAgICAgdmFyIGNvbnRlbnQgPSBwcmVzW2ldLmZpcnN0Q2hpbGQuaW5uZXJIVE1MLnRyaW0oKSxcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBwcmVzW2ldLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdkYXRhLWxhbmd1YWdlJykgfHwgJyc7XG5cbiAgICAgICAgICAvLyBpZiBkYXRhLWxhbmd1YWdlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCwgdGhlbiB3ZSBsb29rIGZvciBjbGFzcyBsYW5ndWFnZS0qXG4gICAgICAgICAgaWYgKGxhbmd1YWdlID09PSAnJykge1xuICAgICAgICAgICAgdmFyIGNsYXNzZXMgPSBwcmVzW2ldLmZpcnN0Q2hpbGQuY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyArK2MpIHtcbiAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBjbGFzc2VzW2NdLm1hdGNoKC9ebGFuZ3VhZ2UtKC4rKSQvKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IG1hdGNoZXNbMV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB1bmVzY2FwZSBodG1sIGVudGl0aWVzIGluIGNvbnRlbnRcbiAgICAgICAgICBjb250ZW50ID0gc2hvd2Rvd24uaGVscGVyLnVuZXNjYXBlSFRNTEVudGl0aWVzKGNvbnRlbnQpO1xuXG4gICAgICAgICAgcHJlc1BILnB1c2goY29udGVudCk7XG4gICAgICAgICAgcHJlc1tpXS5vdXRlckhUTUwgPSAnPHByZWNvZGUgbGFuZ3VhZ2U9XCInICsgbGFuZ3VhZ2UgKyAnXCIgcHJlY29kZW51bT1cIicgKyBpLnRvU3RyaW5nKCkgKyAnXCI+PC9wcmVjb2RlPic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJlc1BILnB1c2gocHJlc1tpXS5pbm5lckhUTUwpO1xuICAgICAgICAgIHByZXNbaV0uaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgcHJlc1tpXS5zZXRBdHRyaWJ1dGUoJ3ByZW51bScsIGkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmVzUEg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1kRG9jO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgYW4gb3B0aW9uIG9mIHRoaXMgQ29udmVydGVyIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKi9cbiAgdGhpcy5zZXRPcHRpb24gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9wdGlvbiBvZiB0aGlzIENvbnZlcnRlciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgdGhpcy5nZXRPcHRpb24gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG9wdGlvbnNba2V5XTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBvcHRpb25zIG9mIHRoaXMgQ29udmVydGVyIGluc3RhbmNlXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIHRoaXMuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGV4dGVuc2lvbiB0byBUSElTIGNvbnZlcnRlclxuICAgKiBAcGFyYW0ge3t9fSBleHRlbnNpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lPW51bGxdXG4gICAqL1xuICB0aGlzLmFkZEV4dGVuc2lvbiA9IGZ1bmN0aW9uIChleHRlbnNpb24sIG5hbWUpIHtcbiAgICBuYW1lID0gbmFtZSB8fCBudWxsO1xuICAgIF9wYXJzZUV4dGVuc2lvbihleHRlbnNpb24sIG5hbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVc2UgYSBnbG9iYWwgcmVnaXN0ZXJlZCBleHRlbnNpb24gd2l0aCBUSElTIGNvbnZlcnRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0ZW5zaW9uTmFtZSBOYW1lIG9mIHRoZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgZXh0ZW5zaW9uXG4gICAqL1xuICB0aGlzLnVzZUV4dGVuc2lvbiA9IGZ1bmN0aW9uIChleHRlbnNpb25OYW1lKSB7XG4gICAgX3BhcnNlRXh0ZW5zaW9uKGV4dGVuc2lvbk5hbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZsYXZvciBUSElTIGNvbnZlcnRlciBzaG91bGQgdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICB0aGlzLnNldEZsYXZvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKCFmbGF2b3IuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHRocm93IEVycm9yKG5hbWUgKyAnIGZsYXZvciB3YXMgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHZhciBwcmVzZXQgPSBmbGF2b3JbbmFtZV07XG4gICAgc2V0Q29udkZsYXZvciA9IG5hbWU7XG4gICAgZm9yICh2YXIgb3B0aW9uIGluIHByZXNldCkge1xuICAgICAgaWYgKHByZXNldC5oYXNPd25Qcm9wZXJ0eShvcHRpb24pKSB7XG4gICAgICAgIG9wdGlvbnNbb3B0aW9uXSA9IHByZXNldFtvcHRpb25dO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50bHkgc2V0IGZsYXZvciBvZiB0aGlzIGNvbnZlcnRlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgdGhpcy5nZXRGbGF2b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldENvbnZGbGF2b3I7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBleHRlbnNpb24gZnJvbSBUSElTIGNvbnZlcnRlci5cbiAgICogTm90ZTogVGhpcyBpcyBhIGNvc3RseSBvcGVyYXRpb24uIEl0J3MgYmV0dGVyIHRvIGluaXRpYWxpemUgYSBuZXcgY29udmVydGVyXG4gICAqIGFuZCBzcGVjaWZ5IHRoZSBleHRlbnNpb25zIHlvdSB3aXNoIHRvIHVzZVxuICAgKiBAcGFyYW0ge0FycmF5fSBleHRlbnNpb25cbiAgICovXG4gIHRoaXMucmVtb3ZlRXh0ZW5zaW9uID0gZnVuY3Rpb24gKGV4dGVuc2lvbikge1xuICAgIGlmICghc2hvd2Rvd24uaGVscGVyLmlzQXJyYXkoZXh0ZW5zaW9uKSkge1xuICAgICAgZXh0ZW5zaW9uID0gW2V4dGVuc2lvbl07XG4gICAgfVxuICAgIGZvciAodmFyIGEgPSAwOyBhIDwgZXh0ZW5zaW9uLmxlbmd0aDsgKythKSB7XG4gICAgICB2YXIgZXh0ID0gZXh0ZW5zaW9uW2FdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYW5nRXh0ZW5zaW9ucy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAobGFuZ0V4dGVuc2lvbnNbaV0gPT09IGV4dCkge1xuICAgICAgICAgIGxhbmdFeHRlbnNpb25zW2ldLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IG91dHB1dE1vZGlmaWVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob3V0cHV0TW9kaWZpZXJzW2lpXSA9PT0gZXh0KSB7XG4gICAgICAgICAgb3V0cHV0TW9kaWZpZXJzW2lpXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZXh0ZW5zaW9uIG9mIFRISVMgY29udmVydGVyXG4gICAqIEByZXR1cm5zIHt7bGFuZ3VhZ2U6IEFycmF5LCBvdXRwdXQ6IEFycmF5fX1cbiAgICovXG4gIHRoaXMuZ2V0QWxsRXh0ZW5zaW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFuZ3VhZ2U6IGxhbmdFeHRlbnNpb25zLFxuICAgICAgb3V0cHV0OiBvdXRwdXRNb2RpZmllcnNcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1ldGFkYXRhIG9mIHRoZSBwcmV2aW91c2x5IHBhcnNlZCBkb2N1bWVudFxuICAgKiBAcGFyYW0gcmF3XG4gICAqIEByZXR1cm5zIHtzdHJpbmd8e319XG4gICAqL1xuICB0aGlzLmdldE1ldGFkYXRhID0gZnVuY3Rpb24gKHJhdykge1xuICAgIGlmIChyYXcpIHtcbiAgICAgIHJldHVybiBtZXRhZGF0YS5yYXc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtZXRhZGF0YS5wYXJzZWQ7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1ldGFkYXRhIGZvcm1hdCBvZiB0aGUgcHJldmlvdXNseSBwYXJzZWQgZG9jdW1lbnRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRoaXMuZ2V0TWV0YWRhdGFGb3JtYXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhLmZvcm1hdDtcbiAgfTtcblxuICAvKipcbiAgICogUHJpdmF0ZTogc2V0IGEgc2luZ2xlIGtleSwgdmFsdWUgbWV0YWRhdGEgcGFpclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgdGhpcy5fc2V0TWV0YWRhdGFQYWlyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBtZXRhZGF0YS5wYXJzZWRba2V5XSA9IHZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcml2YXRlOiBzZXQgbWV0YWRhdGEgZm9ybWF0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICovXG4gIHRoaXMuX3NldE1ldGFkYXRhRm9ybWF0ID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIG1ldGFkYXRhLmZvcm1hdCA9IGZvcm1hdDtcbiAgfTtcblxuICAvKipcbiAgICogUHJpdmF0ZTogc2V0IG1ldGFkYXRhIHJhdyB0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdcbiAgICovXG4gIHRoaXMuX3NldE1ldGFkYXRhUmF3ID0gZnVuY3Rpb24gKHJhdykge1xuICAgIG1ldGFkYXRhLnJhdyA9IHJhdztcbiAgfTtcbn07XG5cclxuLyoqXG4gKiBUdXJuIE1hcmtkb3duIGxpbmsgc2hvcnRjdXRzIGludG8gWEhUTUwgPGE+IHRhZ3MuXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignYW5jaG9ycycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdhbmNob3JzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHZhciB3cml0ZUFuY2hvclRhZyA9IGZ1bmN0aW9uICh3aG9sZU1hdGNoLCBsaW5rVGV4dCwgbGlua0lkLCB1cmwsIG01LCBtNiwgdGl0bGUpIHtcbiAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKHRpdGxlKSkge1xuICAgICAgdGl0bGUgPSAnJztcbiAgICB9XG4gICAgbGlua0lkID0gbGlua0lkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGV4cGxpY2l0IGVtcHR5IHVybFxuICAgIGlmICh3aG9sZU1hdGNoLnNlYXJjaCgvXFwoPD9cXHMqPj8gPyhbJ1wiXS4qWydcIl0pP1xcKSQvbSkgPiAtMSkge1xuICAgICAgdXJsID0gJyc7XG4gICAgfSBlbHNlIGlmICghdXJsKSB7XG4gICAgICBpZiAoIWxpbmtJZCkge1xuICAgICAgICAvLyBsb3dlci1jYXNlIGFuZCB0dXJuIGVtYmVkZGVkIG5ld2xpbmVzIGludG8gc3BhY2VzXG4gICAgICAgIGxpbmtJZCA9IGxpbmtUZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvID9cXG4vZywgJyAnKTtcbiAgICAgIH1cbiAgICAgIHVybCA9ICcjJyArIGxpbmtJZDtcblxuICAgICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZ2xvYmFscy5nVXJsc1tsaW5rSWRdKSkge1xuICAgICAgICB1cmwgPSBnbG9iYWxzLmdVcmxzW2xpbmtJZF07XG4gICAgICAgIGlmICghc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKGdsb2JhbHMuZ1RpdGxlc1tsaW5rSWRdKSkge1xuICAgICAgICAgIHRpdGxlID0gZ2xvYmFscy5nVGl0bGVzW2xpbmtJZF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB3aG9sZU1hdGNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vdXJsID0gc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnModXJsLCAnKl8nLCBmYWxzZSk7IC8vIHJlcGxhY2VkIGxpbmUgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZVxuICAgIHVybCA9IHVybC5yZXBsYWNlKHNob3dkb3duLmhlbHBlci5yZWdleGVzLmFzdGVyaXNrRGFzaEFuZENvbG9uLCBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcblxuICAgIHZhciByZXN1bHQgPSAnPGEgaHJlZj1cIicgKyB1cmwgKyAnXCInO1xuXG4gICAgaWYgKHRpdGxlICE9PSAnJyAmJiB0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG4gICAgICAvL3RpdGxlID0gc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnModGl0bGUsICcqXycsIGZhbHNlKTsgLy8gcmVwbGFjZWQgbGluZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlXG4gICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2Uoc2hvd2Rvd24uaGVscGVyLnJlZ2V4ZXMuYXN0ZXJpc2tEYXNoQW5kQ29sb24sIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuICAgICAgcmVzdWx0ICs9ICcgdGl0bGU9XCInICsgdGl0bGUgKyAnXCInO1xuICAgIH1cblxuICAgIC8vIG9wdGlvbkxpbmtzSW5OZXdXaW5kb3cgb25seSBhcHBsaWVzXG4gICAgLy8gdG8gZXh0ZXJuYWwgbGlua3MuIEhhc2ggbGlua3MgKCMpIG9wZW4gaW4gc2FtZSBwYWdlXG4gICAgaWYgKG9wdGlvbnMub3BlbkxpbmtzSW5OZXdXaW5kb3cgJiYgIS9eIy8udGVzdCh1cmwpKSB7XG4gICAgICAvLyBlc2NhcGVkIF9cbiAgICAgIHJlc3VsdCArPSAnIHRhcmdldD1cIsKoRTk1RWJsYW5rXCInO1xuICAgIH1cblxuICAgIHJlc3VsdCArPSAnPicgKyBsaW5rVGV4dCArICc8L2E+JztcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gRmlyc3QsIGhhbmRsZSByZWZlcmVuY2Utc3R5bGUgbGlua3M6IFtsaW5rIHRleHRdIFtpZF1cbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxbKCg/OlxcW1teXFxdXSpdfFteXFxbXFxdXSkqKV0gPyg/OlxcbiAqKT9cXFsoLio/KV0oKSgpKCkoKS9nLCB3cml0ZUFuY2hvclRhZyk7XG5cbiAgLy8gTmV4dCwgaW5saW5lLXN0eWxlIGxpbmtzOiBbbGluayB0ZXh0XSh1cmwgXCJvcHRpb25hbCB0aXRsZVwiKVxuICAvLyBjYXNlcyB3aXRoIGNyYXp5IHVybHMgbGlrZSAuL2ltYWdlL2NhdDEpLnBuZ1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFsoKD86XFxbW15cXF1dKl18W15cXFtcXF1dKSopXSgpWyBcXHRdKlxcKFsgXFx0XT88KFtePl0qKT4oPzpbIFxcdF0qKChbXCInXSkoW15cIl0qPylcXDUpKT9bIFxcdF0/XFwpL2csXG4gICAgd3JpdGVBbmNob3JUYWcpO1xuXG4gIC8vIG5vcm1hbCBjYXNlc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFsoKD86XFxbW15cXF1dKl18W15cXFtcXF1dKSopXSgpWyBcXHRdKlxcKFsgXFx0XT88PyhbXFxTXSs/KD86XFwoW1xcU10qP1xcKVtcXFNdKj8pPyk+Pyg/OlsgXFx0XSooKFtcIiddKShbXlwiXSo/KVxcNSkpP1sgXFx0XT9cXCkvZyxcbiAgICAgICAgICAgICAgICAgICAgICB3cml0ZUFuY2hvclRhZyk7XG5cbiAgLy8gaGFuZGxlIHJlZmVyZW5jZS1zdHlsZSBzaG9ydGN1dHM6IFtsaW5rIHRleHRdXG4gIC8vIFRoZXNlIG11c3QgY29tZSBsYXN0IGluIGNhc2UgeW91J3ZlIGFsc28gZ290IFtsaW5rIHRlc3RdWzFdXG4gIC8vIG9yIFtsaW5rIHRlc3RdKC9mb28pXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcWyhbXlxcW1xcXV0rKV0oKSgpKCkoKSgpL2csIHdyaXRlQW5jaG9yVGFnKTtcblxuICAvLyBMYXN0bHkgaGFuZGxlIEdpdGh1Yk1lbnRpb25zIGlmIG9wdGlvbiBpcyBlbmFibGVkXG4gIGlmIChvcHRpb25zLmdoTWVudGlvbnMpIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXnxcXHMpKFxcXFwpPyhAKFthLXpcXGRdKyg/OlthLXpcXGQuLV0rP1thLXpcXGRdKykqKSkvZ21pLCBmdW5jdGlvbiAod20sIHN0LCBlc2NhcGUsIG1lbnRpb25zLCB1c2VybmFtZSkge1xuICAgICAgaWYgKGVzY2FwZSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIHJldHVybiBzdCArIG1lbnRpb25zO1xuICAgICAgfVxuXG4gICAgICAvL2NoZWNrIGlmIG9wdGlvbnMuZ2hNZW50aW9uc0xpbmsgaXMgYSBzdHJpbmdcbiAgICAgIGlmICghc2hvd2Rvd24uaGVscGVyLmlzU3RyaW5nKG9wdGlvbnMuZ2hNZW50aW9uc0xpbmspKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2hNZW50aW9uc0xpbmsgb3B0aW9uIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICAgIHZhciBsbmsgPSBvcHRpb25zLmdoTWVudGlvbnNMaW5rLnJlcGxhY2UoL1xce3V9L2csIHVzZXJuYW1lKSxcbiAgICAgICAgICB0YXJnZXQgPSAnJztcbiAgICAgIGlmIChvcHRpb25zLm9wZW5MaW5rc0luTmV3V2luZG93KSB7XG4gICAgICAgIHRhcmdldCA9ICcgdGFyZ2V0PVwiwqhFOTVFYmxhbmtcIic7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3QgKyAnPGEgaHJlZj1cIicgKyBsbmsgKyAnXCInICsgdGFyZ2V0ICsgJz4nICsgbWVudGlvbnMgKyAnPC9hPic7XG4gICAgfSk7XG4gIH1cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdhbmNob3JzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLy8gdXJsIGFsbG93ZWQgY2hhcnMgW2EtelxcZF8ufjovPyNbXUAhJCYnKCkqKyw7PS1dXG5cbnZhciBzaW1wbGVVUkxSZWdleCAgPSAvKFsqfl9dK3xcXGIpKCgoaHR0cHM/fGZ0cHxkaWN0KTpcXC9cXC98d3d3XFwuKVteJ1wiPlxcc10rP1xcLlteJ1wiPlxcc10rPykoKShcXDEpPyg/PVxcc3wkKSg/IVtcIjw+XSkvZ2ksXG4gICAgc2ltcGxlVVJMUmVnZXgyID0gLyhbKn5fXSt8XFxiKSgoKGh0dHBzP3xmdHB8ZGljdCk6XFwvXFwvfHd3d1xcLilbXidcIj5cXHNdK1xcLlteJ1wiPlxcc10rPykoWy4hPywoKVxcW1xcXV0pPyhcXDEpPyg/PVxcc3wkKSg/IVtcIjw+XSkvZ2ksXG4gICAgZGVsaW1VcmxSZWdleCAgID0gLygpPCgoKGh0dHBzP3xmdHB8ZGljdCk6XFwvXFwvfHd3d1xcLilbXidcIj5cXHNdKykoKT4oKS9naSxcbiAgICBzaW1wbGVNYWlsUmVnZXggPSAvKF58XFxzKSg/Om1haWx0bzopPyhbQS1aYS16MC05ISMkJSYnKistLz0/Xl9ge3x9fi5dK0BbLWEtejAtOV0rKFxcLlstYS16MC05XSspKlxcLlthLXpdKykoPz0kfFxccykvZ21pLFxuICAgIGRlbGltTWFpbFJlZ2V4ICA9IC88KCkoPzptYWlsdG86KT8oWy0uXFx3XStAWy1hLXowLTldKyhcXC5bLWEtejAtOV0rKSpcXC5bYS16XSspPi9naSxcblxuICAgIHJlcGxhY2VMaW5rID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICd1c2Ugc3RyaWN0JztcbiAgICAgIHJldHVybiBmdW5jdGlvbiAod20sIGxlYWRpbmdNYWdpY0NoYXJzLCBsaW5rLCBtMiwgbTMsIHRyYWlsaW5nUHVuY3R1YXRpb24sIHRyYWlsaW5nTWFnaWNDaGFycykge1xuICAgICAgICBsaW5rID0gbGluay5yZXBsYWNlKHNob3dkb3duLmhlbHBlci5yZWdleGVzLmFzdGVyaXNrRGFzaEFuZENvbG9uLCBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcbiAgICAgICAgdmFyIGxua1R4dCA9IGxpbmssXG4gICAgICAgICAgICBhcHBlbmQgPSAnJyxcbiAgICAgICAgICAgIHRhcmdldCA9ICcnLFxuICAgICAgICAgICAgbG1jICAgID0gbGVhZGluZ01hZ2ljQ2hhcnMgfHwgJycsXG4gICAgICAgICAgICB0bWMgICAgPSB0cmFpbGluZ01hZ2ljQ2hhcnMgfHwgJyc7XG4gICAgICAgIGlmICgvXnd3d1xcLi9pLnRlc3QobGluaykpIHtcbiAgICAgICAgICBsaW5rID0gbGluay5yZXBsYWNlKC9ed3d3XFwuL2ksICdodHRwOi8vd3d3LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVUcmFpbGluZ1B1bmN0dWF0aW9uRnJvbVVSTHMgJiYgdHJhaWxpbmdQdW5jdHVhdGlvbikge1xuICAgICAgICAgIGFwcGVuZCA9IHRyYWlsaW5nUHVuY3R1YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMub3BlbkxpbmtzSW5OZXdXaW5kb3cpIHtcbiAgICAgICAgICB0YXJnZXQgPSAnIHRhcmdldD1cIsKoRTk1RWJsYW5rXCInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsbWMgKyAnPGEgaHJlZj1cIicgKyBsaW5rICsgJ1wiJyArIHRhcmdldCArICc+JyArIGxua1R4dCArICc8L2E+JyArIGFwcGVuZCArIHRtYztcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHJlcGxhY2VNYWlsID0gZnVuY3Rpb24gKG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgICAgICd1c2Ugc3RyaWN0JztcbiAgICAgIHJldHVybiBmdW5jdGlvbiAod2hvbGVNYXRjaCwgYiwgbWFpbCkge1xuICAgICAgICB2YXIgaHJlZiA9ICdtYWlsdG86JztcbiAgICAgICAgYiA9IGIgfHwgJyc7XG4gICAgICAgIG1haWwgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3VuZXNjYXBlU3BlY2lhbENoYXJzJykobWFpbCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgICAgIGlmIChvcHRpb25zLmVuY29kZUVtYWlscykge1xuICAgICAgICAgIGhyZWYgPSBzaG93ZG93bi5oZWxwZXIuZW5jb2RlRW1haWxBZGRyZXNzKGhyZWYgKyBtYWlsKTtcbiAgICAgICAgICBtYWlsID0gc2hvd2Rvd24uaGVscGVyLmVuY29kZUVtYWlsQWRkcmVzcyhtYWlsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBocmVmID0gaHJlZiArIG1haWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGIgKyAnPGEgaHJlZj1cIicgKyBocmVmICsgJ1wiPicgKyBtYWlsICsgJzwvYT4nO1xuICAgICAgfTtcbiAgICB9O1xuXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2F1dG9MaW5rcycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdhdXRvTGlua3MuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZShkZWxpbVVybFJlZ2V4LCByZXBsYWNlTGluayhvcHRpb25zKSk7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoZGVsaW1NYWlsUmVnZXgsIHJlcGxhY2VNYWlsKG9wdGlvbnMsIGdsb2JhbHMpKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdhdXRvTGlua3MuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICByZXR1cm4gdGV4dDtcbn0pO1xuXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3NpbXBsaWZpZWRBdXRvTGlua3MnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgaWYgKCFvcHRpb25zLnNpbXBsaWZpZWRBdXRvTGluaykge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnc2ltcGxpZmllZEF1dG9MaW5rcy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICBpZiAob3B0aW9ucy5leGNsdWRlVHJhaWxpbmdQdW5jdHVhdGlvbkZyb21VUkxzKSB7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZShzaW1wbGVVUkxSZWdleDIsIHJlcGxhY2VMaW5rKG9wdGlvbnMpKTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHNpbXBsZVVSTFJlZ2V4LCByZXBsYWNlTGluayhvcHRpb25zKSk7XG4gIH1cbiAgdGV4dCA9IHRleHQucmVwbGFjZShzaW1wbGVNYWlsUmVnZXgsIHJlcGxhY2VNYWlsKG9wdGlvbnMsIGdsb2JhbHMpKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdzaW1wbGlmaWVkQXV0b0xpbmtzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIFRoZXNlIGFyZSBhbGwgdGhlIHRyYW5zZm9ybWF0aW9ucyB0aGF0IGZvcm0gYmxvY2stbGV2ZWxcbiAqIHRhZ3MgbGlrZSBwYXJhZ3JhcGhzLCBoZWFkZXJzLCBhbmQgbGlzdCBpdGVtcy5cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdibG9ja0dhbXV0JywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2Jsb2NrR2FtdXQuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gd2UgcGFyc2UgYmxvY2txdW90ZXMgZmlyc3Qgc28gdGhhdCB3ZSBjYW4gaGF2ZSBoZWFkaW5ncyBhbmQgaHJzXG4gIC8vIGluc2lkZSBibG9ja3F1b3Rlc1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdibG9ja1F1b3RlcycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdoZWFkZXJzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gRG8gSG9yaXpvbnRhbCBSdWxlczpcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignaG9yaXpvbnRhbFJ1bGUnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdsaXN0cycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdjb2RlQmxvY2tzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3RhYmxlcycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIFdlIGFscmVhZHkgcmFuIF9IYXNoSFRNTEJsb2NrcygpIGJlZm9yZSwgaW4gTWFya2Rvd24oKSwgYnV0IHRoYXRcbiAgLy8gd2FzIHRvIGVzY2FwZSByYXcgSFRNTCBpbiB0aGUgb3JpZ2luYWwgTWFya2Rvd24gc291cmNlLiBUaGlzIHRpbWUsXG4gIC8vIHdlJ3JlIGVzY2FwaW5nIHRoZSBtYXJrdXAgd2UndmUganVzdCBjcmVhdGVkLCBzbyB0aGF0IHdlIGRvbid0IHdyYXBcbiAgLy8gPHA+IHRhZ3MgYXJvdW5kIGJsb2NrLWxldmVsIHRhZ3MuXG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hIVE1MQmxvY2tzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3BhcmFncmFwaHMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdibG9ja0dhbXV0LmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2Jsb2NrUXVvdGVzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2Jsb2NrUXVvdGVzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIGFkZCBhIGNvdXBsZSBleHRyYSBsaW5lcyBhZnRlciB0aGUgdGV4dCBhbmQgZW5kdGV4dCBtYXJrXG4gIHRleHQgPSB0ZXh0ICsgJ1xcblxcbic7XG5cbiAgdmFyIHJneCA9IC8oXiB7MCwzfT5bIFxcdF0/LitcXG4oLitcXG4pKlxcbiopKy9nbTtcblxuICBpZiAob3B0aW9ucy5zcGxpdEFkamFjZW50QmxvY2txdW90ZXMpIHtcbiAgICByZ3ggPSAvXiB7MCwzfT5bXFxzXFxTXSo/KD86XFxuXFxuKS9nbTtcbiAgfVxuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2Uocmd4LCBmdW5jdGlvbiAoYnEpIHtcbiAgICAvLyBhdHRhY2tsYWI6IGhhY2sgYXJvdW5kIEtvbnF1ZXJvciAzLjUuNCBidWc6XG4gICAgLy8gXCItLS0tLS0tLS0tYnVnXCIucmVwbGFjZSgvXi0vZyxcIlwiKSA9PSBcImJ1Z1wiXG4gICAgYnEgPSBicS5yZXBsYWNlKC9eWyBcXHRdKj5bIFxcdF0/L2dtLCAnJyk7IC8vIHRyaW0gb25lIGxldmVsIG9mIHF1b3RpbmdcblxuICAgIC8vIGF0dGFja2xhYjogY2xlYW4gdXAgaGFja1xuICAgIGJxID0gYnEucmVwbGFjZSgvwqgwL2csICcnKTtcblxuICAgIGJxID0gYnEucmVwbGFjZSgvXlsgXFx0XSskL2dtLCAnJyk7IC8vIHRyaW0gd2hpdGVzcGFjZS1vbmx5IGxpbmVzXG4gICAgYnEgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2dpdGh1YkNvZGVCbG9ja3MnKShicSwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgYnEgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2Jsb2NrR2FtdXQnKShicSwgb3B0aW9ucywgZ2xvYmFscyk7IC8vIHJlY3Vyc2VcblxuICAgIGJxID0gYnEucmVwbGFjZSgvKF58XFxuKS9nLCAnJDEgICcpO1xuICAgIC8vIFRoZXNlIGxlYWRpbmcgc3BhY2VzIHNjcmV3IHdpdGggPHByZT4gY29udGVudCwgc28gd2UgbmVlZCB0byBmaXggdGhhdDpcbiAgICBicSA9IGJxLnJlcGxhY2UoLyhcXHMqPHByZT5bXlxccl0rPzxcXC9wcmU+KS9nbSwgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG0xKSB7XG4gICAgICB2YXIgcHJlID0gbTE7XG4gICAgICAvLyBhdHRhY2tsYWI6IGhhY2sgYXJvdW5kIEtvbnF1ZXJvciAzLjUuNCBidWc6XG4gICAgICBwcmUgPSBwcmUucmVwbGFjZSgvXiAgL21nLCAnwqgwJyk7XG4gICAgICBwcmUgPSBwcmUucmVwbGFjZSgvwqgwL2csICcnKTtcbiAgICAgIHJldHVybiBwcmU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoQmxvY2snKSgnPGJsb2NrcXVvdGU+XFxuJyArIGJxICsgJ1xcbjwvYmxvY2txdW90ZT4nLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgfSk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnYmxvY2tRdW90ZXMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIFByb2Nlc3MgTWFya2Rvd24gYDxwcmU+PGNvZGU+YCBibG9ja3MuXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignY29kZUJsb2NrcycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdjb2RlQmxvY2tzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIHNlbnRpbmVsIHdvcmthcm91bmRzIGZvciBsYWNrIG9mIFxcQSBhbmQgXFxaLCBzYWZhcmlcXGtodG1sIGJ1Z1xuICB0ZXh0ICs9ICfCqDAnO1xuXG4gIHZhciBwYXR0ZXJuID0gLyg/OlxcblxcbnxeKSgoPzooPzpbIF17NH18XFx0KS4qXFxuKykrKShcXG4qWyBdezAsM31bXiBcXHRcXG5dfCg/PcKoMCkpL2c7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UocGF0dGVybiwgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG0xLCBtMikge1xuICAgIHZhciBjb2RlYmxvY2sgPSBtMSxcbiAgICAgICAgbmV4dENoYXIgPSBtMixcbiAgICAgICAgZW5kID0gJ1xcbic7XG5cbiAgICBjb2RlYmxvY2sgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ291dGRlbnQnKShjb2RlYmxvY2ssIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIGNvZGVibG9jayA9IHNob3dkb3duLnN1YlBhcnNlcignZW5jb2RlQ29kZScpKGNvZGVibG9jaywgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgY29kZWJsb2NrID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdkZXRhYicpKGNvZGVibG9jaywgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgY29kZWJsb2NrID0gY29kZWJsb2NrLnJlcGxhY2UoL15cXG4rL2csICcnKTsgLy8gdHJpbSBsZWFkaW5nIG5ld2xpbmVzXG4gICAgY29kZWJsb2NrID0gY29kZWJsb2NrLnJlcGxhY2UoL1xcbiskL2csICcnKTsgLy8gdHJpbSB0cmFpbGluZyBuZXdsaW5lc1xuXG4gICAgaWYgKG9wdGlvbnMub21pdEV4dHJhV0xJbkNvZGVCbG9ja3MpIHtcbiAgICAgIGVuZCA9ICcnO1xuICAgIH1cblxuICAgIGNvZGVibG9jayA9ICc8cHJlPjxjb2RlPicgKyBjb2RlYmxvY2sgKyBlbmQgKyAnPC9jb2RlPjwvcHJlPic7XG5cbiAgICByZXR1cm4gc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoQmxvY2snKShjb2RlYmxvY2ssIG9wdGlvbnMsIGdsb2JhbHMpICsgbmV4dENoYXI7XG4gIH0pO1xuXG4gIC8vIHN0cmlwIHNlbnRpbmVsXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoMC8sICcnKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdjb2RlQmxvY2tzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKlxuICogICAqICBCYWNrdGljayBxdW90ZXMgYXJlIHVzZWQgZm9yIDxjb2RlPjwvY29kZT4gc3BhbnMuXG4gKlxuICogICAqICBZb3UgY2FuIHVzZSBtdWx0aXBsZSBiYWNrdGlja3MgYXMgdGhlIGRlbGltaXRlcnMgaWYgeW91IHdhbnQgdG9cbiAqICAgICBpbmNsdWRlIGxpdGVyYWwgYmFja3RpY2tzIGluIHRoZSBjb2RlIHNwYW4uIFNvLCB0aGlzIGlucHV0OlxuICpcbiAqICAgICAgICAgSnVzdCB0eXBlIGBgZm9vIGBiYXJgIGJhemBgIGF0IHRoZSBwcm9tcHQuXG4gKlxuICogICAgICAgV2lsbCB0cmFuc2xhdGUgdG86XG4gKlxuICogICAgICAgICA8cD5KdXN0IHR5cGUgPGNvZGU+Zm9vIGBiYXJgIGJhejwvY29kZT4gYXQgdGhlIHByb21wdC48L3A+XG4gKlxuICogICAgVGhlcmUncyBubyBhcmJpdHJhcnkgbGltaXQgdG8gdGhlIG51bWJlciBvZiBiYWNrdGlja3MgeW91XG4gKiAgICBjYW4gdXNlIGFzIGRlbGltdGVycy4gSWYgeW91IG5lZWQgdGhyZWUgY29uc2VjdXRpdmUgYmFja3RpY2tzXG4gKiAgICBpbiB5b3VyIGNvZGUsIHVzZSBmb3VyIGZvciBkZWxpbWl0ZXJzLCBldGMuXG4gKlxuICogICogIFlvdSBjYW4gdXNlIHNwYWNlcyB0byBnZXQgbGl0ZXJhbCBiYWNrdGlja3MgYXQgdGhlIGVkZ2VzOlxuICpcbiAqICAgICAgICAgLi4uIHR5cGUgYGAgYGJhcmAgYGAgLi4uXG4gKlxuICogICAgICAgVHVybnMgdG86XG4gKlxuICogICAgICAgICAuLi4gdHlwZSA8Y29kZT5gYmFyYDwvY29kZT4gLi4uXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignY29kZVNwYW5zJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2NvZGVTcGFucy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICBpZiAodHlwZW9mKHRleHQpID09PSAndW5kZWZpbmVkJykge1xuICAgIHRleHQgPSAnJztcbiAgfVxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXnxbXlxcXFxdKShgKykoW15cXHJdKj9bXmBdKVxcMig/IWApL2dtLFxuICAgIGZ1bmN0aW9uICh3aG9sZU1hdGNoLCBtMSwgbTIsIG0zKSB7XG4gICAgICB2YXIgYyA9IG0zO1xuICAgICAgYyA9IGMucmVwbGFjZSgvXihbIFxcdF0qKS9nLCAnJyk7XHQvLyBsZWFkaW5nIHdoaXRlc3BhY2VcbiAgICAgIGMgPSBjLnJlcGxhY2UoL1sgXFx0XSokL2csICcnKTtcdC8vIHRyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICAgIGMgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUNvZGUnKShjLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICAgIGMgPSBtMSArICc8Y29kZT4nICsgYyArICc8L2NvZGU+JztcbiAgICAgIGMgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hIVE1MU3BhbnMnKShjLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdjb2RlU3BhbnMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgSFRNTCBkb2N1bWVudCBmcm9tIHRoZSBwcm9jZXNzZWQgbWFya2Rvd25cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdjb21wbGV0ZUhUTUxEb2N1bWVudCcsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIW9wdGlvbnMuY29tcGxldGVIVE1MRG9jdW1lbnQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2NvbXBsZXRlSFRNTERvY3VtZW50LmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHZhciBkb2N0eXBlID0gJ2h0bWwnLFxuICAgICAgZG9jdHlwZVBhcnNlZCA9ICc8IURPQ1RZUEUgSFRNTD5cXG4nLFxuICAgICAgdGl0bGUgPSAnJyxcbiAgICAgIGNoYXJzZXQgPSAnPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XFxuJyxcbiAgICAgIGxhbmcgPSAnJyxcbiAgICAgIG1ldGFkYXRhID0gJyc7XG5cbiAgaWYgKHR5cGVvZiBnbG9iYWxzLm1ldGFkYXRhLnBhcnNlZC5kb2N0eXBlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRvY3R5cGVQYXJzZWQgPSAnPCFET0NUWVBFICcgKyAgZ2xvYmFscy5tZXRhZGF0YS5wYXJzZWQuZG9jdHlwZSArICc+XFxuJztcbiAgICBkb2N0eXBlID0gZ2xvYmFscy5tZXRhZGF0YS5wYXJzZWQuZG9jdHlwZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGRvY3R5cGUgPT09ICdodG1sJyB8fCBkb2N0eXBlID09PSAnaHRtbDUnKSB7XG4gICAgICBjaGFyc2V0ID0gJzxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPic7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgbWV0YSBpbiBnbG9iYWxzLm1ldGFkYXRhLnBhcnNlZCkge1xuICAgIGlmIChnbG9iYWxzLm1ldGFkYXRhLnBhcnNlZC5oYXNPd25Qcm9wZXJ0eShtZXRhKSkge1xuICAgICAgc3dpdGNoIChtZXRhLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnZG9jdHlwZSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndGl0bGUnOlxuICAgICAgICAgIHRpdGxlID0gJzx0aXRsZT4nICsgIGdsb2JhbHMubWV0YWRhdGEucGFyc2VkLnRpdGxlICsgJzwvdGl0bGU+XFxuJztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjaGFyc2V0JzpcbiAgICAgICAgICBpZiAoZG9jdHlwZSA9PT0gJ2h0bWwnIHx8IGRvY3R5cGUgPT09ICdodG1sNScpIHtcbiAgICAgICAgICAgIGNoYXJzZXQgPSAnPG1ldGEgY2hhcnNldD1cIicgKyBnbG9iYWxzLm1ldGFkYXRhLnBhcnNlZC5jaGFyc2V0ICsgJ1wiPlxcbic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoYXJzZXQgPSAnPG1ldGEgbmFtZT1cImNoYXJzZXRcIiBjb250ZW50PVwiJyArIGdsb2JhbHMubWV0YWRhdGEucGFyc2VkLmNoYXJzZXQgKyAnXCI+XFxuJztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbGFuZ3VhZ2UnOlxuICAgICAgICBjYXNlICdsYW5nJzpcbiAgICAgICAgICBsYW5nID0gJyBsYW5nPVwiJyArIGdsb2JhbHMubWV0YWRhdGEucGFyc2VkW21ldGFdICsgJ1wiJztcbiAgICAgICAgICBtZXRhZGF0YSArPSAnPG1ldGEgbmFtZT1cIicgKyBtZXRhICsgJ1wiIGNvbnRlbnQ9XCInICsgZ2xvYmFscy5tZXRhZGF0YS5wYXJzZWRbbWV0YV0gKyAnXCI+XFxuJztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG1ldGFkYXRhICs9ICc8bWV0YSBuYW1lPVwiJyArIG1ldGEgKyAnXCIgY29udGVudD1cIicgKyBnbG9iYWxzLm1ldGFkYXRhLnBhcnNlZFttZXRhXSArICdcIj5cXG4nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRleHQgPSBkb2N0eXBlUGFyc2VkICsgJzxodG1sJyArIGxhbmcgKyAnPlxcbjxoZWFkPlxcbicgKyB0aXRsZSArIGNoYXJzZXQgKyBtZXRhZGF0YSArICc8L2hlYWQ+XFxuPGJvZHk+XFxuJyArIHRleHQudHJpbSgpICsgJ1xcbjwvYm9keT5cXG48L2h0bWw+JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdjb21wbGV0ZUhUTUxEb2N1bWVudC5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogQ29udmVydCBhbGwgdGFicyB0byBzcGFjZXNcbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdkZXRhYicsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZGV0YWIuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gZXhwYW5kIGZpcnN0IG4tMSB0YWJzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcdCg/PVxcdCkvZywgJyAgICAnKTsgLy8gZ190YWJfd2lkdGhcblxuICAvLyByZXBsYWNlIHRoZSBudGggd2l0aCB0d28gc2VudGluZWxzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcdC9nLCAnwqhBwqhCJyk7XG5cbiAgLy8gdXNlIHRoZSBzZW50aW5lbCB0byBhbmNob3Igb3VyIHJlZ2V4IHNvIGl0IGRvZXNuJ3QgZXhwbG9kZVxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqEIoLis/KcKoQS9nLCBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbTEpIHtcbiAgICB2YXIgbGVhZGluZ1RleHQgPSBtMSxcbiAgICAgICAgbnVtU3BhY2VzID0gNCAtIGxlYWRpbmdUZXh0Lmxlbmd0aCAlIDQ7ICAvLyBnX3RhYl93aWR0aFxuXG4gICAgLy8gdGhlcmUgKm11c3QqIGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3BhY2VzOyBpKyspIHtcbiAgICAgIGxlYWRpbmdUZXh0ICs9ICcgJztcbiAgICB9XG5cbiAgICByZXR1cm4gbGVhZGluZ1RleHQ7XG4gIH0pO1xuXG4gIC8vIGNsZWFuIHVwIHNlbnRpbmVsc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqEEvZywgJyAgICAnKTsgIC8vIGdfdGFiX3dpZHRoXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoQi9nLCAnJyk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZGV0YWIuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2VsbGlwc2lzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2VsbGlwc2lzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcLlxcLlxcLi9nLCAn4oCmJyk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZWxsaXBzaXMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogVHVybiBlbW9qaSBjb2RlcyBpbnRvIGVtb2ppc1xuICpcbiAqIExpc3Qgb2Ygc3VwcG9ydGVkIGVtb2ppczogaHR0cHM6Ly9naXRodWIuY29tL3Nob3dkb3duanMvc2hvd2Rvd24vd2lraS9FbW9qaXNcbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdlbW9qaScsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIW9wdGlvbnMuZW1vamkpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2Vtb2ppLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHZhciBlbW9qaVJneCA9IC86KFtcXFNdKz8pOi9nO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoZW1vamlSZ3gsIGZ1bmN0aW9uICh3bSwgZW1vamlDb2RlKSB7XG4gICAgaWYgKHNob3dkb3duLmhlbHBlci5lbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamlDb2RlKSkge1xuICAgICAgcmV0dXJuIHNob3dkb3duLmhlbHBlci5lbW9qaXNbZW1vamlDb2RlXTtcbiAgICB9XG4gICAgcmV0dXJuIHdtO1xuICB9KTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdlbW9qaS5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBTbWFydCBwcm9jZXNzaW5nIGZvciBhbXBlcnNhbmRzIGFuZCBhbmdsZSBicmFja2V0cyB0aGF0IG5lZWQgdG8gYmUgZW5jb2RlZC5cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdlbmNvZGVBbXBzQW5kQW5nbGVzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdlbmNvZGVBbXBzQW5kQW5nbGVzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIEFtcGVyc2FuZC1lbmNvZGluZyBiYXNlZCBlbnRpcmVseSBvbiBOYXQgSXJvbnMncyBBbXB1dGF0b3IgTVQgcGx1Z2luOlxuICAvLyBodHRwOi8vYnVtcHBvLm5ldC9wcm9qZWN0cy9hbXB1dGF0b3IvXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyYoPyEjP1t4WF0/KD86WzAtOWEtZkEtRl0rfFxcdyspOykvZywgJyZhbXA7Jyk7XG5cbiAgLy8gRW5jb2RlIG5ha2VkIDwnc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88KD8hW2EtelxcLz8kIV0pL2dpLCAnJmx0OycpO1xuXG4gIC8vIEVuY29kZSA8XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLzwvZywgJyZsdDsnKTtcblxuICAvLyBFbmNvZGUgPlxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZW5jb2RlQW1wc0FuZEFuZ2xlcy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogUmV0dXJucyB0aGUgc3RyaW5nLCB3aXRoIGFmdGVyIHByb2Nlc3NpbmcgdGhlIGZvbGxvd2luZyBiYWNrc2xhc2ggZXNjYXBlIHNlcXVlbmNlcy5cbiAqXG4gKiBhdHRhY2tsYWI6IFRoZSBwb2xpdGUgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCB0aGUgbmV3IGVzY2FwZUNoYXJhY3RlcnMoKSBmdW5jdGlvbjpcbiAqXG4gKiAgICB0ZXh0ID0gZXNjYXBlQ2hhcmFjdGVycyh0ZXh0LFwiXFxcXFwiLHRydWUpO1xuICogICAgdGV4dCA9IGVzY2FwZUNoYXJhY3RlcnModGV4dCxcImAqX3t9W10oKT4jKy0uIVwiLHRydWUpO1xuICpcbiAqIC4uLmJ1dCB3ZSdyZSBzaWRlc3RlcHBpbmcgaXRzIHVzZSBvZiB0aGUgKHNsb3cpIFJlZ0V4cCBjb25zdHJ1Y3RvclxuICogYXMgYW4gb3B0aW1pemF0aW9uIGZvciBGaXJlZm94LiAgVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhIExPVC5cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdlbmNvZGVCYWNrc2xhc2hFc2NhcGVzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdlbmNvZGVCYWNrc2xhc2hFc2NhcGVzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcXFwoXFxcXCkvZywgc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcXFwoW2AqX3t9XFxbXFxdKCk+IysuIX49fC1dKS9nLCBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdlbmNvZGVCYWNrc2xhc2hFc2NhcGVzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBFbmNvZGUvZXNjYXBlIGNlcnRhaW4gY2hhcmFjdGVycyBpbnNpZGUgTWFya2Rvd24gY29kZSBydW5zLlxuICogVGhlIHBvaW50IGlzIHRoYXQgaW4gY29kZSwgdGhlc2UgY2hhcmFjdGVycyBhcmUgbGl0ZXJhbHMsXG4gKiBhbmQgbG9zZSB0aGVpciBzcGVjaWFsIE1hcmtkb3duIG1lYW5pbmdzLlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUNvZGUnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZW5jb2RlQ29kZS5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBFbmNvZGUgYWxsIGFtcGVyc2FuZHM7IEhUTUwgZW50aXRpZXMgYXJlIG5vdFxuICAvLyBlbnRpdGllcyB3aXRoaW4gYSBNYXJrZG93biBjb2RlIHNwYW4uXG4gIHRleHQgPSB0ZXh0XG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgLy8gRG8gdGhlIGFuZ2xlIGJyYWNrZXQgc29uZyBhbmQgZGFuY2U6XG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgLy8gTm93LCBlc2NhcGUgY2hhcmFjdGVycyB0aGF0IGFyZSBtYWdpYyBpbiBNYXJrZG93bjpcbiAgICAucmVwbGFjZSgvKFsqX3t9XFxbXFxdXFxcXD1+LV0pL2csIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2VuY29kZUNvZGUuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIFdpdGhpbiB0YWdzIC0tIG1lYW5pbmcgYmV0d2VlbiA8IGFuZCA+IC0tIGVuY29kZSBbXFwgYCAqIF8gfiA9XSBzbyB0aGV5XG4gKiBkb24ndCBjb25mbGljdCB3aXRoIHRoZWlyIHVzZSBpbiBNYXJrZG93biBmb3IgY29kZSwgaXRhbGljcyBhbmQgc3Ryb25nLlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2VzY2FwZVNwZWNpYWxDaGFyc1dpdGhpblRhZ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2VzY2FwZVNwZWNpYWxDaGFyc1dpdGhpblRhZ0F0dHJpYnV0ZXMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gQnVpbGQgYSByZWdleCB0byBmaW5kIEhUTUwgdGFncy5cbiAgdmFyIHRhZ3MgICAgID0gLzxcXC8/W2EtelxcZF86LV0rKD86W1xcc10rW1xcc1xcU10rPyk/Pi9naSxcbiAgICAgIGNvbW1lbnRzID0gLzwhKC0tKD86KD86W14+LV18LVtePl0pKD86W14tXXwtW14tXSkqKS0tKT4vZ2k7XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZSh0YWdzLCBmdW5jdGlvbiAod2hvbGVNYXRjaCkge1xuICAgIHJldHVybiB3aG9sZU1hdGNoXG4gICAgICAucmVwbGFjZSgvKC4pPFxcLz9jb2RlPig/PS4pL2csICckMWAnKVxuICAgICAgLnJlcGxhY2UoLyhbXFxcXGAqX349fF0pL2csIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuICB9KTtcblxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGNvbW1lbnRzLCBmdW5jdGlvbiAod2hvbGVNYXRjaCkge1xuICAgIHJldHVybiB3aG9sZU1hdGNoXG4gICAgICAucmVwbGFjZSgvKFtcXFxcYCpffj18XSkvZywgc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG4gIH0pO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2VzY2FwZVNwZWNpYWxDaGFyc1dpdGhpblRhZ0F0dHJpYnV0ZXMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIEhhbmRsZSBnaXRodWIgY29kZWJsb2NrcyBwcmlvciB0byBydW5uaW5nIEhhc2hIVE1MIHNvIHRoYXRcbiAqIEhUTUwgY29udGFpbmVkIHdpdGhpbiB0aGUgY29kZWJsb2NrIGdldHMgZXNjYXBlZCBwcm9wZXJseVxuICogRXhhbXBsZTpcbiAqIGBgYHJ1YnlcbiAqICAgICBkZWYgaGVsbG9fd29ybGQoeClcbiAqICAgICAgIHB1dHMgXCJIZWxsbywgI3t4fVwiXG4gKiAgICAgZW5kXG4gKiBgYGBcbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdnaXRodWJDb2RlQmxvY2tzJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIGVhcmx5IGV4aXQgaWYgb3B0aW9uIGlzIG5vdCBlbmFibGVkXG4gIGlmICghb3B0aW9ucy5naENvZGVCbG9ja3MpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2dpdGh1YkNvZGVCbG9ja3MuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdGV4dCArPSAnwqgwJztcblxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oPzpefFxcbikoPzogezAsM30pKGBgYCt8fn5+KykoPzogKikoW15cXHNgfl0qKVxcbihbXFxzXFxTXSo/KVxcbig/OiB7MCwzfSlcXDEvZywgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIGRlbGltLCBsYW5ndWFnZSwgY29kZWJsb2NrKSB7XG4gICAgdmFyIGVuZCA9IChvcHRpb25zLm9taXRFeHRyYVdMSW5Db2RlQmxvY2tzKSA/ICcnIDogJ1xcbic7XG5cbiAgICAvLyBGaXJzdCBwYXJzZSB0aGUgZ2l0aHViIGNvZGUgYmxvY2tcbiAgICBjb2RlYmxvY2sgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUNvZGUnKShjb2RlYmxvY2ssIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIGNvZGVibG9jayA9IHNob3dkb3duLnN1YlBhcnNlcignZGV0YWInKShjb2RlYmxvY2ssIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIGNvZGVibG9jayA9IGNvZGVibG9jay5yZXBsYWNlKC9eXFxuKy9nLCAnJyk7IC8vIHRyaW0gbGVhZGluZyBuZXdsaW5lc1xuICAgIGNvZGVibG9jayA9IGNvZGVibG9jay5yZXBsYWNlKC9cXG4rJC9nLCAnJyk7IC8vIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZVxuXG4gICAgY29kZWJsb2NrID0gJzxwcmU+PGNvZGUnICsgKGxhbmd1YWdlID8gJyBjbGFzcz1cIicgKyBsYW5ndWFnZSArICcgbGFuZ3VhZ2UtJyArIGxhbmd1YWdlICsgJ1wiJyA6ICcnKSArICc+JyArIGNvZGVibG9jayArIGVuZCArICc8L2NvZGU+PC9wcmU+JztcblxuICAgIGNvZGVibG9jayA9IHNob3dkb3duLnN1YlBhcnNlcignaGFzaEJsb2NrJykoY29kZWJsb2NrLCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAgIC8vIFNpbmNlIEdIQ29kZWJsb2NrcyBjYW4gYmUgZmFsc2UgcG9zaXRpdmVzLCB3ZSBuZWVkIHRvXG4gICAgLy8gc3RvcmUgdGhlIHByaW1pdGl2ZSB0ZXh0IGFuZCB0aGUgcGFyc2VkIHRleHQgaW4gYSBnbG9iYWwgdmFyLFxuICAgIC8vIGFuZCB0aGVuIHJldHVybiBhIHRva2VuXG4gICAgcmV0dXJuICdcXG5cXG7CqEcnICsgKGdsb2JhbHMuZ2hDb2RlQmxvY2tzLnB1c2goe3RleHQ6IHdob2xlTWF0Y2gsIGNvZGVibG9jazogY29kZWJsb2NrfSkgLSAxKSArICdHXFxuXFxuJztcbiAgfSk7XG5cbiAgLy8gYXR0YWNrbGFiOiBzdHJpcCBzZW50aW5lbFxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqDAvLCAnJyk7XG5cbiAgcmV0dXJuIGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnZ2l0aHViQ29kZUJsb2Nrcy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoQmxvY2snLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2hhc2hCbG9jay5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvKF5cXG4rfFxcbiskKS9nLCAnJyk7XG4gIHRleHQgPSAnXFxuXFxuwqhLJyArIChnbG9iYWxzLmdIdG1sQmxvY2tzLnB1c2godGV4dCkgLSAxKSArICdLXFxuXFxuJztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaGFzaEJsb2NrLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBIYXNoIGFuZCBlc2NhcGUgPGNvZGU+IGVsZW1lbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSBwYXJzZWQgYXMgbWFya2Rvd25cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoQ29kZVRhZ3MnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2hhc2hDb2RlVGFncy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB2YXIgcmVwRnVuYyA9IGZ1bmN0aW9uICh3aG9sZU1hdGNoLCBtYXRjaCwgbGVmdCwgcmlnaHQpIHtcbiAgICB2YXIgY29kZWJsb2NrID0gbGVmdCArIHNob3dkb3duLnN1YlBhcnNlcignZW5jb2RlQ29kZScpKG1hdGNoLCBvcHRpb25zLCBnbG9iYWxzKSArIHJpZ2h0O1xuICAgIHJldHVybiAnwqhDJyArIChnbG9iYWxzLmdIdG1sU3BhbnMucHVzaChjb2RlYmxvY2spIC0gMSkgKyAnQyc7XG4gIH07XG5cbiAgLy8gSGFzaCBuYWtlZCA8Y29kZT5cbiAgdGV4dCA9IHNob3dkb3duLmhlbHBlci5yZXBsYWNlUmVjdXJzaXZlUmVnRXhwKHRleHQsIHJlcEZ1bmMsICc8Y29kZVxcXFxiW14+XSo+JywgJzwvY29kZT4nLCAnZ2ltJyk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaGFzaENvZGVUYWdzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoRWxlbWVudCcsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICByZXR1cm4gZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG0xKSB7XG4gICAgdmFyIGJsb2NrVGV4dCA9IG0xO1xuXG4gICAgLy8gVW5kbyBkb3VibGUgbGluZXNcbiAgICBibG9ja1RleHQgPSBibG9ja1RleHQucmVwbGFjZSgvXFxuXFxuL2csICdcXG4nKTtcbiAgICBibG9ja1RleHQgPSBibG9ja1RleHQucmVwbGFjZSgvXlxcbi8sICcnKTtcblxuICAgIC8vIHN0cmlwIHRyYWlsaW5nIGJsYW5rIGxpbmVzXG4gICAgYmxvY2tUZXh0ID0gYmxvY2tUZXh0LnJlcGxhY2UoL1xcbiskL2csICcnKTtcblxuICAgIC8vIFJlcGxhY2UgdGhlIGVsZW1lbnQgdGV4dCB3aXRoIGEgbWFya2VyIChcIsKoS3hLXCIgd2hlcmUgeCBpcyBpdHMga2V5KVxuICAgIGJsb2NrVGV4dCA9ICdcXG5cXG7CqEsnICsgKGdsb2JhbHMuZ0h0bWxCbG9ja3MucHVzaChibG9ja1RleHQpIC0gMSkgKyAnS1xcblxcbic7XG5cbiAgICByZXR1cm4gYmxvY2tUZXh0O1xuICB9O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoSFRNTEJsb2NrcycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaGFzaEhUTUxCbG9ja3MuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdmFyIGJsb2NrVGFncyA9IFtcbiAgICAgICAgJ3ByZScsXG4gICAgICAgICdkaXYnLFxuICAgICAgICAnaDEnLFxuICAgICAgICAnaDInLFxuICAgICAgICAnaDMnLFxuICAgICAgICAnaDQnLFxuICAgICAgICAnaDUnLFxuICAgICAgICAnaDYnLFxuICAgICAgICAnYmxvY2txdW90ZScsXG4gICAgICAgICd0YWJsZScsXG4gICAgICAgICdkbCcsXG4gICAgICAgICdvbCcsXG4gICAgICAgICd1bCcsXG4gICAgICAgICdzY3JpcHQnLFxuICAgICAgICAnbm9zY3JpcHQnLFxuICAgICAgICAnZm9ybScsXG4gICAgICAgICdmaWVsZHNldCcsXG4gICAgICAgICdpZnJhbWUnLFxuICAgICAgICAnbWF0aCcsXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgICdzZWN0aW9uJyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdmb290ZXInLFxuICAgICAgICAnbmF2JyxcbiAgICAgICAgJ2FydGljbGUnLFxuICAgICAgICAnYXNpZGUnLFxuICAgICAgICAnYWRkcmVzcycsXG4gICAgICAgICdhdWRpbycsXG4gICAgICAgICdjYW52YXMnLFxuICAgICAgICAnZmlndXJlJyxcbiAgICAgICAgJ2hncm91cCcsXG4gICAgICAgICdvdXRwdXQnLFxuICAgICAgICAndmlkZW8nLFxuICAgICAgICAncCdcbiAgICAgIF0sXG4gICAgICByZXBGdW5jID0gZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG1hdGNoLCBsZWZ0LCByaWdodCkge1xuICAgICAgICB2YXIgdHh0ID0gd2hvbGVNYXRjaDtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBodG1sIGVsZW1lbnQgaXMgbWFya2VkIGFzIG1hcmtkb3duXG4gICAgICAgIC8vIGlmIHNvLCBpdCdzIGNvbnRlbnRzIHNob3VsZCBiZSBwYXJzZWQgYXMgbWFya2Rvd25cbiAgICAgICAgaWYgKGxlZnQuc2VhcmNoKC9cXGJtYXJrZG93blxcYi8pICE9PSAtMSkge1xuICAgICAgICAgIHR4dCA9IGxlZnQgKyBnbG9iYWxzLmNvbnZlcnRlci5tYWtlSHRtbChtYXRjaCkgKyByaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1xcblxcbsKoSycgKyAoZ2xvYmFscy5nSHRtbEJsb2Nrcy5wdXNoKHR4dCkgLSAxKSArICdLXFxuXFxuJztcbiAgICAgIH07XG5cbiAgaWYgKG9wdGlvbnMuYmFja3NsYXNoRXNjYXBlc0hUTUxUYWdzKSB7XG4gICAgLy8gZW5jb2RlIGJhY2tzbGFzaCBlc2NhcGVkIEhUTUwgdGFnc1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcXFw8KFxcLz9bXj5dKz8pPi9nLCBmdW5jdGlvbiAod20sIGluc2lkZSkge1xuICAgICAgcmV0dXJuICcmbHQ7JyArIGluc2lkZSArICcmZ3Q7JztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGhhc2ggSFRNTCBCbG9ja3NcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1RhZ3MubGVuZ3RoOyArK2kpIHtcblxuICAgIHZhciBvcFRhZ1BvcyxcbiAgICAgICAgcmd4MSAgICAgPSBuZXcgUmVnRXhwKCdeIHswLDN9KDwnICsgYmxvY2tUYWdzW2ldICsgJ1xcXFxiW14+XSo+KScsICdpbScpLFxuICAgICAgICBwYXRMZWZ0ICA9ICc8JyArIGJsb2NrVGFnc1tpXSArICdcXFxcYltePl0qPicsXG4gICAgICAgIHBhdFJpZ2h0ID0gJzwvJyArIGJsb2NrVGFnc1tpXSArICc+JztcbiAgICAvLyAxLiBMb29rIGZvciB0aGUgZmlyc3QgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9wZW5pbmcgSFRNTCB0YWcgaW4gdGhlIHRleHRcbiAgICB3aGlsZSAoKG9wVGFnUG9zID0gc2hvd2Rvd24uaGVscGVyLnJlZ2V4SW5kZXhPZih0ZXh0LCByZ3gxKSkgIT09IC0xKSB7XG5cbiAgICAgIC8vIGlmIHRoZSBIVE1MIHRhZyBpcyBcXCBlc2NhcGVkLCB3ZSBuZWVkIHRvIGVzY2FwZSBpdCBhbmQgYnJlYWtcblxuXG4gICAgICAvLzIuIFNwbGl0IHRoZSB0ZXh0IGluIHRoYXQgcG9zaXRpb25cbiAgICAgIHZhciBzdWJUZXh0cyA9IHNob3dkb3duLmhlbHBlci5zcGxpdEF0SW5kZXgodGV4dCwgb3BUYWdQb3MpLFxuICAgICAgLy8zLiBNYXRjaCByZWN1cnNpdmVseVxuICAgICAgICAgIG5ld1N1YlRleHQxID0gc2hvd2Rvd24uaGVscGVyLnJlcGxhY2VSZWN1cnNpdmVSZWdFeHAoc3ViVGV4dHNbMV0sIHJlcEZ1bmMsIHBhdExlZnQsIHBhdFJpZ2h0LCAnaW0nKTtcblxuICAgICAgLy8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICBpZiAobmV3U3ViVGV4dDEgPT09IHN1YlRleHRzWzFdKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGV4dCA9IHN1YlRleHRzWzBdLmNvbmNhdChuZXdTdWJUZXh0MSk7XG4gICAgfVxuICB9XG4gIC8vIEhSIFNQRUNJQUwgQ0FTRVxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXFxuIHswLDN9KDwoaHIpXFxiKFtePD5dKSo/XFwvPz4pWyBcXHRdKig/PVxcbnsyLH0pKS9nLFxuICAgIHNob3dkb3duLnN1YlBhcnNlcignaGFzaEVsZW1lbnQnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSk7XG5cbiAgLy8gU3BlY2lhbCBjYXNlIGZvciBzdGFuZGFsb25lIEhUTUwgY29tbWVudHNcbiAgdGV4dCA9IHNob3dkb3duLmhlbHBlci5yZXBsYWNlUmVjdXJzaXZlUmVnRXhwKHRleHQsIGZ1bmN0aW9uICh0eHQpIHtcbiAgICByZXR1cm4gJ1xcblxcbsKoSycgKyAoZ2xvYmFscy5nSHRtbEJsb2Nrcy5wdXNoKHR4dCkgLSAxKSArICdLXFxuXFxuJztcbiAgfSwgJ14gezAsM308IS0tJywgJy0tPicsICdnbScpO1xuXG4gIC8vIFBIUCBhbmQgQVNQLXN0eWxlIHByb2Nlc3NvciBpbnN0cnVjdGlvbnMgKDw/Li4uPz4gYW5kIDwlLi4uJT4pXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyg/OlxcblxcbikoIHswLDN9KD86PChbPyVdKVteXFxyXSo/XFwyPilbIFxcdF0qKD89XFxuezIsfSkpL2csXG4gICAgc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoRWxlbWVudCcpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoYXNoSFRNTEJsb2Nrcy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogSGFzaCBzcGFuIGVsZW1lbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSBwYXJzZWQgYXMgbWFya2Rvd25cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoSFRNTFNwYW5zJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoYXNoSFRNTFNwYW5zLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIGZ1bmN0aW9uIGhhc2hIVE1MU3BhbiAoaHRtbCkge1xuICAgIHJldHVybiAnwqhDJyArIChnbG9iYWxzLmdIdG1sU3BhbnMucHVzaChodG1sKSAtIDEpICsgJ0MnO1xuICB9XG5cbiAgLy8gSGFzaCBTZWxmIENsb3NpbmcgdGFnc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88W14+XSs/XFwvPi9naSwgZnVuY3Rpb24gKHdtKSB7XG4gICAgcmV0dXJuIGhhc2hIVE1MU3Bhbih3bSk7XG4gIH0pO1xuXG4gIC8vIEhhc2ggdGFncyB3aXRob3V0IHByb3BlcnRpZXNcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvPChbXj5dKz8pPltcXHNcXFNdKj88XFwvXFwxPi9nLCBmdW5jdGlvbiAod20pIHtcbiAgICByZXR1cm4gaGFzaEhUTUxTcGFuKHdtKTtcbiAgfSk7XG5cbiAgLy8gSGFzaCB0YWdzIHdpdGggcHJvcGVydGllc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88KFtePl0rPylcXHNbXj5dKz8+W1xcc1xcU10qPzxcXC9cXDE+L2csIGZ1bmN0aW9uICh3bSkge1xuICAgIHJldHVybiBoYXNoSFRNTFNwYW4od20pO1xuICB9KTtcblxuICAvLyBIYXNoIHNlbGYgY2xvc2luZyB0YWdzIHdpdGhvdXQgLz5cbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvPFtePl0rPz4vZ2ksIGZ1bmN0aW9uICh3bSkge1xuICAgIHJldHVybiBoYXNoSFRNTFNwYW4od20pO1xuICB9KTtcblxuICAvKnNob3dkb3duLmhlbHBlci5tYXRjaFJlY3Vyc2l2ZVJlZ0V4cCh0ZXh0LCAnPGNvZGVcXFxcYltePl0qPicsICc8L2NvZGU+JywgJ2dpJyk7Ki9cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoYXNoSFRNTFNwYW5zLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cbi8qKlxuICogVW5oYXNoIEhUTUwgc3BhbnNcbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCd1bmhhc2hIVE1MU3BhbnMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ3VuaGFzaEhUTUxTcGFucy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGdsb2JhbHMuZ0h0bWxTcGFucy5sZW5ndGg7ICsraSkge1xuICAgIHZhciByZXBUZXh0ID0gZ2xvYmFscy5nSHRtbFNwYW5zW2ldLFxuICAgICAgICAvLyBsaW1pdGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcCAoYXNzdW1lIDEwIGFzIGxpbWl0IGZvciByZWN1cnNlKVxuICAgICAgICBsaW1pdCA9IDA7XG5cbiAgICB3aGlsZSAoL8KoQyhcXGQrKUMvLnRlc3QocmVwVGV4dCkpIHtcbiAgICAgIHZhciBudW0gPSBSZWdFeHAuJDE7XG4gICAgICByZXBUZXh0ID0gcmVwVGV4dC5yZXBsYWNlKCfCqEMnICsgbnVtICsgJ0MnLCBnbG9iYWxzLmdIdG1sU3BhbnNbbnVtXSk7XG4gICAgICBpZiAobGltaXQgPT09IDEwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21heGltdW0gbmVzdGluZyBvZiAxMCBzcGFucyByZWFjaGVkISEhJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgKytsaW1pdDtcbiAgICB9XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgnwqhDJyArIGkgKyAnQycsIHJlcFRleHQpO1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgndW5oYXNoSFRNTFNwYW5zLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBIYXNoIGFuZCBlc2NhcGUgPHByZT48Y29kZT4gZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGJlIHBhcnNlZCBhcyBtYXJrZG93blxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hQcmVDb2RlVGFncycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaGFzaFByZUNvZGVUYWdzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHZhciByZXBGdW5jID0gZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG1hdGNoLCBsZWZ0LCByaWdodCkge1xuICAgIC8vIGVuY29kZSBodG1sIGVudGl0aWVzXG4gICAgdmFyIGNvZGVibG9jayA9IGxlZnQgKyBzaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUNvZGUnKShtYXRjaCwgb3B0aW9ucywgZ2xvYmFscykgKyByaWdodDtcbiAgICByZXR1cm4gJ1xcblxcbsKoRycgKyAoZ2xvYmFscy5naENvZGVCbG9ja3MucHVzaCh7dGV4dDogd2hvbGVNYXRjaCwgY29kZWJsb2NrOiBjb2RlYmxvY2t9KSAtIDEpICsgJ0dcXG5cXG4nO1xuICB9O1xuXG4gIC8vIEhhc2ggPHByZT48Y29kZT5cbiAgdGV4dCA9IHNob3dkb3duLmhlbHBlci5yZXBsYWNlUmVjdXJzaXZlUmVnRXhwKHRleHQsIHJlcEZ1bmMsICdeIHswLDN9PHByZVxcXFxiW14+XSo+XFxcXHMqPGNvZGVcXFxcYltePl0qPicsICdeIHswLDN9PC9jb2RlPlxcXFxzKjwvcHJlPicsICdnaW0nKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdoYXNoUHJlQ29kZVRhZ3MuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2hlYWRlcnMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaGVhZGVycy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB2YXIgaGVhZGVyTGV2ZWxTdGFydCA9IChpc05hTihwYXJzZUludChvcHRpb25zLmhlYWRlckxldmVsU3RhcnQpKSkgPyAxIDogcGFyc2VJbnQob3B0aW9ucy5oZWFkZXJMZXZlbFN0YXJ0KSxcblxuICAvLyBTZXQgdGV4dC1zdHlsZSBoZWFkZXJzOlxuICAvL1x0SGVhZGVyIDFcbiAgLy9cdD09PT09PT09XG4gIC8vXG4gIC8vXHRIZWFkZXIgMlxuICAvL1x0LS0tLS0tLS1cbiAgLy9cbiAgICAgIHNldGV4dFJlZ2V4SDEgPSAob3B0aW9ucy5zbW9vdGhMaXZlUHJldmlldykgPyAvXiguKylbIFxcdF0qXFxuPXsyLH1bIFxcdF0qXFxuKy9nbSA6IC9eKC4rKVsgXFx0XSpcXG49K1sgXFx0XSpcXG4rL2dtLFxuICAgICAgc2V0ZXh0UmVnZXhIMiA9IChvcHRpb25zLnNtb290aExpdmVQcmV2aWV3KSA/IC9eKC4rKVsgXFx0XSpcXG4tezIsfVsgXFx0XSpcXG4rL2dtIDogL14oLispWyBcXHRdKlxcbi0rWyBcXHRdKlxcbisvZ207XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZShzZXRleHRSZWdleEgxLCBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbTEpIHtcblxuICAgIHZhciBzcGFuR2FtdXQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3NwYW5HYW11dCcpKG0xLCBvcHRpb25zLCBnbG9iYWxzKSxcbiAgICAgICAgaElEID0gKG9wdGlvbnMubm9IZWFkZXJJZCkgPyAnJyA6ICcgaWQ9XCInICsgaGVhZGVySWQobTEpICsgJ1wiJyxcbiAgICAgICAgaExldmVsID0gaGVhZGVyTGV2ZWxTdGFydCxcbiAgICAgICAgaGFzaEJsb2NrID0gJzxoJyArIGhMZXZlbCArIGhJRCArICc+JyArIHNwYW5HYW11dCArICc8L2gnICsgaExldmVsICsgJz4nO1xuICAgIHJldHVybiBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hCbG9jaycpKGhhc2hCbG9jaywgb3B0aW9ucywgZ2xvYmFscyk7XG4gIH0pO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2Uoc2V0ZXh0UmVnZXhIMiwgZnVuY3Rpb24gKG1hdGNoRm91bmQsIG0xKSB7XG4gICAgdmFyIHNwYW5HYW11dCA9IHNob3dkb3duLnN1YlBhcnNlcignc3BhbkdhbXV0JykobTEsIG9wdGlvbnMsIGdsb2JhbHMpLFxuICAgICAgICBoSUQgPSAob3B0aW9ucy5ub0hlYWRlcklkKSA/ICcnIDogJyBpZD1cIicgKyBoZWFkZXJJZChtMSkgKyAnXCInLFxuICAgICAgICBoTGV2ZWwgPSBoZWFkZXJMZXZlbFN0YXJ0ICsgMSxcbiAgICAgICAgaGFzaEJsb2NrID0gJzxoJyArIGhMZXZlbCArIGhJRCArICc+JyArIHNwYW5HYW11dCArICc8L2gnICsgaExldmVsICsgJz4nO1xuICAgIHJldHVybiBzaG93ZG93bi5zdWJQYXJzZXIoJ2hhc2hCbG9jaycpKGhhc2hCbG9jaywgb3B0aW9ucywgZ2xvYmFscyk7XG4gIH0pO1xuXG4gIC8vIGF0eC1zdHlsZSBoZWFkZXJzOlxuICAvLyAgIyBIZWFkZXIgMVxuICAvLyAgIyMgSGVhZGVyIDJcbiAgLy8gICMjIEhlYWRlciAyIHdpdGggY2xvc2luZyBoYXNoZXMgIyNcbiAgLy8gIC4uLlxuICAvLyAgIyMjIyMjIEhlYWRlciA2XG4gIC8vXG4gIHZhciBhdHhTdHlsZSA9IChvcHRpb25zLnJlcXVpcmVTcGFjZUJlZm9yZUhlYWRpbmdUZXh0KSA/IC9eKCN7MSw2fSlbIFxcdF0rKC4rPylbIFxcdF0qIypcXG4rL2dtIDogL14oI3sxLDZ9KVsgXFx0XSooLis/KVsgXFx0XSojKlxcbisvZ207XG5cbiAgdGV4dCA9IHRleHQucmVwbGFjZShhdHhTdHlsZSwgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG0xLCBtMikge1xuICAgIHZhciBoVGV4dCA9IG0yO1xuICAgIGlmIChvcHRpb25zLmN1c3RvbWl6ZWRIZWFkZXJJZCkge1xuICAgICAgaFRleHQgPSBtMi5yZXBsYWNlKC9cXHM/XFx7KFtee10rPyl9XFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgdmFyIHNwYW4gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3NwYW5HYW11dCcpKGhUZXh0LCBvcHRpb25zLCBnbG9iYWxzKSxcbiAgICAgICAgaElEID0gKG9wdGlvbnMubm9IZWFkZXJJZCkgPyAnJyA6ICcgaWQ9XCInICsgaGVhZGVySWQobTIpICsgJ1wiJyxcbiAgICAgICAgaExldmVsID0gaGVhZGVyTGV2ZWxTdGFydCAtIDEgKyBtMS5sZW5ndGgsXG4gICAgICAgIGhlYWRlciA9ICc8aCcgKyBoTGV2ZWwgKyBoSUQgKyAnPicgKyBzcGFuICsgJzwvaCcgKyBoTGV2ZWwgKyAnPic7XG5cbiAgICByZXR1cm4gc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoQmxvY2snKShoZWFkZXIsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB9KTtcblxuICBmdW5jdGlvbiBoZWFkZXJJZCAobSkge1xuICAgIHZhciB0aXRsZSxcbiAgICAgICAgcHJlZml4O1xuXG4gICAgLy8gSXQgaXMgc2VwYXJhdGUgZnJvbSBvdGhlciBvcHRpb25zIHRvIGFsbG93IGNvbWJpbmluZyBwcmVmaXggYW5kIGN1c3RvbWl6ZWRcbiAgICBpZiAob3B0aW9ucy5jdXN0b21pemVkSGVhZGVySWQpIHtcbiAgICAgIHZhciBtYXRjaCA9IG0ubWF0Y2goL1xceyhbXntdKz8pfVxccyokLyk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgbSA9IG1hdGNoWzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRpdGxlID0gbTtcblxuICAgIC8vIFByZWZpeCBpZCB0byBwcmV2ZW50IGNhdXNpbmcgaW5hZHZlcnRlbnQgcHJlLWV4aXN0aW5nIHN0eWxlIG1hdGNoZXMuXG4gICAgaWYgKHNob3dkb3duLmhlbHBlci5pc1N0cmluZyhvcHRpb25zLnByZWZpeEhlYWRlcklkKSkge1xuICAgICAgcHJlZml4ID0gb3B0aW9ucy5wcmVmaXhIZWFkZXJJZDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucHJlZml4SGVhZGVySWQgPT09IHRydWUpIHtcbiAgICAgIHByZWZpeCA9ICdzZWN0aW9uLSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpeCA9ICcnO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5yYXdQcmVmaXhIZWFkZXJJZCkge1xuICAgICAgdGl0bGUgPSBwcmVmaXggKyB0aXRsZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5naENvbXBhdGlibGVIZWFkZXJJZCkge1xuICAgICAgdGl0bGUgPSB0aXRsZVxuICAgICAgICAucmVwbGFjZSgvIC9nLCAnLScpXG4gICAgICAgIC8vIHJlcGxhY2UgcHJldmlvdXNseSBlc2NhcGVkIGNoYXJzICgmLCDCqCBhbmQgJClcbiAgICAgICAgLnJlcGxhY2UoLyZhbXA7L2csICcnKVxuICAgICAgICAucmVwbGFjZSgvwqhUL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvwqhEL2csICcnKVxuICAgICAgICAvLyByZXBsYWNlIHJlc3Qgb2YgdGhlIGNoYXJzICgmfiQgYXJlIHJlcGVhdGVkIGFzIHRoZXkgbWlnaHQgaGF2ZSBiZWVuIGVzY2FwZWQpXG4gICAgICAgIC8vIGJvcnJvd2VkIGZyb20gZ2l0aHViJ3MgcmVkY2FycGV0IChzb21lIHRoZXkgc2hvdWxkIHByb2R1Y2Ugc2ltaWxhciByZXN1bHRzKVxuICAgICAgICAucmVwbGFjZSgvWyYrJCxcXC86Oz0/QFwiI3t9fF7CqH5cXFtcXF1gXFxcXCopKCUuISc8Pl0vZywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5yYXdIZWFkZXJJZCkge1xuICAgICAgdGl0bGUgPSB0aXRsZVxuICAgICAgICAucmVwbGFjZSgvIC9nLCAnLScpXG4gICAgICAgIC8vIHJlcGxhY2UgcHJldmlvdXNseSBlc2NhcGVkIGNoYXJzICgmLCDCqCBhbmQgJClcbiAgICAgICAgLnJlcGxhY2UoLyZhbXA7L2csICcmJylcbiAgICAgICAgLnJlcGxhY2UoL8KoVC9nLCAnwqgnKVxuICAgICAgICAucmVwbGFjZSgvwqhEL2csICckJylcbiAgICAgICAgLy8gcmVwbGFjZSBcIiBhbmQgJ1xuICAgICAgICAucmVwbGFjZSgvW1wiJ10vZywgJy0nKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGl0bGUgPSB0aXRsZVxuICAgICAgICAucmVwbGFjZSgvW15cXHddL2csICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5yYXdQcmVmaXhIZWFkZXJJZCkge1xuICAgICAgdGl0bGUgPSBwcmVmaXggKyB0aXRsZTtcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFscy5oYXNoTGlua0NvdW50c1t0aXRsZV0pIHtcbiAgICAgIHRpdGxlID0gdGl0bGUgKyAnLScgKyAoZ2xvYmFscy5oYXNoTGlua0NvdW50c1t0aXRsZV0rKyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsb2JhbHMuaGFzaExpbmtDb3VudHNbdGl0bGVdID0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHRpdGxlO1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaGVhZGVycy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogVHVybiBNYXJrZG93biBsaW5rIHNob3J0Y3V0cyBpbnRvIFhIVE1MIDxhPiB0YWdzLlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2hvcml6b250YWxSdWxlJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdob3Jpem9udGFsUnVsZS5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICB2YXIga2V5ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoQmxvY2snKSgnPGhyIC8+Jywgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL14gezAsMn0oID8tKXszLH1bIFxcdF0qJC9nbSwga2V5KTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXiB7MCwyfSggP1xcKil7Myx9WyBcXHRdKiQvZ20sIGtleSk7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL14gezAsMn0oID9fKXszLH1bIFxcdF0qJC9nbSwga2V5KTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdob3Jpem9udGFsUnVsZS5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogVHVybiBNYXJrZG93biBpbWFnZSBzaG9ydGN1dHMgaW50byA8aW1nPiB0YWdzLlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ2ltYWdlcycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdpbWFnZXMuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgdmFyIGlubGluZVJlZ0V4cCAgICAgID0gLyFcXFsoW15cXF1dKj8pXVsgXFx0XSooKVxcKFsgXFx0XT88PyhbXFxTXSs/KD86XFwoW1xcU10qP1xcKVtcXFNdKj8pPyk+Pyg/OiA9KFsqXFxkXStbQS1aYS16JV17MCw0fSl4KFsqXFxkXStbQS1aYS16JV17MCw0fSkpP1sgXFx0XSooPzooW1wiJ10pKFteXCJdKj8pXFw2KT9bIFxcdF0/XFwpL2csXG4gICAgICBjcmF6eVJlZ0V4cCAgICAgICA9IC8hXFxbKFteXFxdXSo/KV1bIFxcdF0qKClcXChbIFxcdF0/PChbXj5dKik+KD86ID0oWypcXGRdK1tBLVphLXolXXswLDR9KXgoWypcXGRdK1tBLVphLXolXXswLDR9KSk/WyBcXHRdKig/Oig/OihbXCInXSkoW15cIl0qPylcXDYpKT9bIFxcdF0/XFwpL2csXG4gICAgICBiYXNlNjRSZWdFeHAgICAgICA9IC8hXFxbKFteXFxdXSo/KV1bIFxcdF0qKClcXChbIFxcdF0/PD8oZGF0YTouKz9cXC8uKz87YmFzZTY0LFtBLVphLXowLTkrLz1cXG5dKz8pPj8oPzogPShbKlxcZF0rW0EtWmEteiVdezAsNH0peChbKlxcZF0rW0EtWmEteiVdezAsNH0pKT9bIFxcdF0qKD86KFtcIiddKShbXlwiXSo/KVxcNik/WyBcXHRdP1xcKS9nLFxuICAgICAgcmVmZXJlbmNlUmVnRXhwICAgPSAvIVxcWyhbXlxcXV0qPyldID8oPzpcXG4gKik/XFxbKFtcXHNcXFNdKj8pXSgpKCkoKSgpKCkvZyxcbiAgICAgIHJlZlNob3J0Y3V0UmVnRXhwID0gLyFcXFsoW15cXFtcXF1dKyldKCkoKSgpKCkoKS9nO1xuXG4gIGZ1bmN0aW9uIHdyaXRlSW1hZ2VUYWdCYXNlNjQgKHdob2xlTWF0Y2gsIGFsdFRleHQsIGxpbmtJZCwgdXJsLCB3aWR0aCwgaGVpZ2h0LCBtNSwgdGl0bGUpIHtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICByZXR1cm4gd3JpdGVJbWFnZVRhZyAod2hvbGVNYXRjaCwgYWx0VGV4dCwgbGlua0lkLCB1cmwsIHdpZHRoLCBoZWlnaHQsIG01LCB0aXRsZSk7XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZUltYWdlVGFnICh3aG9sZU1hdGNoLCBhbHRUZXh0LCBsaW5rSWQsIHVybCwgd2lkdGgsIGhlaWdodCwgbTUsIHRpdGxlKSB7XG5cbiAgICB2YXIgZ1VybHMgICA9IGdsb2JhbHMuZ1VybHMsXG4gICAgICAgIGdUaXRsZXMgPSBnbG9iYWxzLmdUaXRsZXMsXG4gICAgICAgIGdEaW1zICAgPSBnbG9iYWxzLmdEaW1lbnNpb25zO1xuXG4gICAgbGlua0lkID0gbGlua0lkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICB0aXRsZSA9ICcnO1xuICAgIH1cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGV4cGxpY2l0IGVtcHR5IHVybFxuICAgIGlmICh3aG9sZU1hdGNoLnNlYXJjaCgvXFwoPD9cXHMqPj8gPyhbJ1wiXS4qWydcIl0pP1xcKSQvbSkgPiAtMSkge1xuICAgICAgdXJsID0gJyc7XG5cbiAgICB9IGVsc2UgaWYgKHVybCA9PT0gJycgfHwgdXJsID09PSBudWxsKSB7XG4gICAgICBpZiAobGlua0lkID09PSAnJyB8fCBsaW5rSWQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gbG93ZXItY2FzZSBhbmQgdHVybiBlbWJlZGRlZCBuZXdsaW5lcyBpbnRvIHNwYWNlc1xuICAgICAgICBsaW5rSWQgPSBhbHRUZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvID9cXG4vZywgJyAnKTtcbiAgICAgIH1cbiAgICAgIHVybCA9ICcjJyArIGxpbmtJZDtcblxuICAgICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZ1VybHNbbGlua0lkXSkpIHtcbiAgICAgICAgdXJsID0gZ1VybHNbbGlua0lkXTtcbiAgICAgICAgaWYgKCFzaG93ZG93bi5oZWxwZXIuaXNVbmRlZmluZWQoZ1RpdGxlc1tsaW5rSWRdKSkge1xuICAgICAgICAgIHRpdGxlID0gZ1RpdGxlc1tsaW5rSWRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKGdEaW1zW2xpbmtJZF0pKSB7XG4gICAgICAgICAgd2lkdGggPSBnRGltc1tsaW5rSWRdLndpZHRoO1xuICAgICAgICAgIGhlaWdodCA9IGdEaW1zW2xpbmtJZF0uaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gd2hvbGVNYXRjaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhbHRUZXh0ID0gYWx0VGV4dFxuICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgIC8vYWx0VGV4dCA9IHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzKGFsdFRleHQsICcqXycsIGZhbHNlKTtcbiAgICAgIC5yZXBsYWNlKHNob3dkb3duLmhlbHBlci5yZWdleGVzLmFzdGVyaXNrRGFzaEFuZENvbG9uLCBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcbiAgICAvL3VybCA9IHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzKHVybCwgJypfJywgZmFsc2UpO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKHNob3dkb3duLmhlbHBlci5yZWdleGVzLmFzdGVyaXNrRGFzaEFuZENvbG9uLCBzaG93ZG93bi5oZWxwZXIuZXNjYXBlQ2hhcmFjdGVyc0NhbGxiYWNrKTtcbiAgICB2YXIgcmVzdWx0ID0gJzxpbWcgc3JjPVwiJyArIHVybCArICdcIiBhbHQ9XCInICsgYWx0VGV4dCArICdcIic7XG5cbiAgICBpZiAodGl0bGUgJiYgc2hvd2Rvd24uaGVscGVyLmlzU3RyaW5nKHRpdGxlKSkge1xuICAgICAgdGl0bGUgPSB0aXRsZVxuICAgICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgICAvL3RpdGxlID0gc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnModGl0bGUsICcqXycsIGZhbHNlKTtcbiAgICAgICAgLnJlcGxhY2Uoc2hvd2Rvd24uaGVscGVyLnJlZ2V4ZXMuYXN0ZXJpc2tEYXNoQW5kQ29sb24sIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuICAgICAgcmVzdWx0ICs9ICcgdGl0bGU9XCInICsgdGl0bGUgKyAnXCInO1xuICAgIH1cblxuICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHtcbiAgICAgIHdpZHRoICA9ICh3aWR0aCA9PT0gJyonKSA/ICdhdXRvJyA6IHdpZHRoO1xuICAgICAgaGVpZ2h0ID0gKGhlaWdodCA9PT0gJyonKSA/ICdhdXRvJyA6IGhlaWdodDtcblxuICAgICAgcmVzdWx0ICs9ICcgd2lkdGg9XCInICsgd2lkdGggKyAnXCInO1xuICAgICAgcmVzdWx0ICs9ICcgaGVpZ2h0PVwiJyArIGhlaWdodCArICdcIic7XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9ICcgLz4nO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEZpcnN0LCBoYW5kbGUgcmVmZXJlbmNlLXN0eWxlIGxhYmVsZWQgaW1hZ2VzOiAhW2FsdCB0ZXh0XVtpZF1cbiAgdGV4dCA9IHRleHQucmVwbGFjZShyZWZlcmVuY2VSZWdFeHAsIHdyaXRlSW1hZ2VUYWcpO1xuXG4gIC8vIE5leHQsIGhhbmRsZSBpbmxpbmUgaW1hZ2VzOiAgIVthbHQgdGV4dF0odXJsID08d2lkdGg+eDxoZWlnaHQ+IFwib3B0aW9uYWwgdGl0bGVcIilcblxuICAvLyBiYXNlNjQgZW5jb2RlZCBpbWFnZXNcbiAgdGV4dCA9IHRleHQucmVwbGFjZShiYXNlNjRSZWdFeHAsIHdyaXRlSW1hZ2VUYWdCYXNlNjQpO1xuXG4gIC8vIGNhc2VzIHdpdGggY3JhenkgdXJscyBsaWtlIC4vaW1hZ2UvY2F0MSkucG5nXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoY3JhenlSZWdFeHAsIHdyaXRlSW1hZ2VUYWcpO1xuXG4gIC8vIG5vcm1hbCBjYXNlc1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGlubGluZVJlZ0V4cCwgd3JpdGVJbWFnZVRhZyk7XG5cbiAgLy8gaGFuZGxlIHJlZmVyZW5jZS1zdHlsZSBzaG9ydGN1dHM6ICFbaW1nIHRleHRdXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVmU2hvcnRjdXRSZWdFeHAsIHdyaXRlSW1hZ2VUYWcpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2ltYWdlcy5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignaXRhbGljc0FuZEJvbGQnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnaXRhbGljc0FuZEJvbGQuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gaXQncyBmYXN0ZXIgdG8gaGF2ZSAzIHNlcGFyYXRlIHJlZ2V4ZXMgZm9yIGVhY2ggY2FzZSB0aGFuIGhhdmUganVzdCBvbmVcbiAgLy8gYmVjYXVzZSBvZiBiYWNrdHJhY2luZywgaW4gc29tZSBjYXNlcywgaXQgY291bGQgbGVhZCB0byBhbiBleHBvbmVudGlhbCBlZmZlY3RcbiAgLy8gY2FsbGVkIFwiY2F0YXN0cm9waGljIGJhY2t0cmFjZVwiLiBPbWlub3VzIVxuXG4gIGZ1bmN0aW9uIHBhcnNlSW5zaWRlICh0eHQsIGxlZnQsIHJpZ2h0KSB7XG4gICAgLypcbiAgICBpZiAob3B0aW9ucy5zaW1wbGlmaWVkQXV0b0xpbmspIHtcbiAgICAgIHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignc2ltcGxpZmllZEF1dG9MaW5rcycpKHR4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgfVxuICAgICovXG4gICAgcmV0dXJuIGxlZnQgKyB0eHQgKyByaWdodDtcbiAgfVxuXG4gIC8vIFBhcnNlIHVuZGVyc2NvcmVzXG4gIGlmIChvcHRpb25zLmxpdGVyYWxNaWRXb3JkVW5kZXJzY29yZXMpIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXGJfX18oXFxTW1xcc1xcU10qPylfX19cXGIvZywgZnVuY3Rpb24gKHdtLCB0eHQpIHtcbiAgICAgIHJldHVybiBwYXJzZUluc2lkZSAodHh0LCAnPHN0cm9uZz48ZW0+JywgJzwvZW0+PC9zdHJvbmc+Jyk7XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxiX18oXFxTW1xcc1xcU10qPylfX1xcYi9nLCBmdW5jdGlvbiAod20sIHR4dCkge1xuICAgICAgcmV0dXJuIHBhcnNlSW5zaWRlICh0eHQsICc8c3Ryb25nPicsICc8L3N0cm9uZz4nKTtcbiAgICB9KTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXGJfKFxcU1tcXHNcXFNdKj8pX1xcYi9nLCBmdW5jdGlvbiAod20sIHR4dCkge1xuICAgICAgcmV0dXJuIHBhcnNlSW5zaWRlICh0eHQsICc8ZW0+JywgJzwvZW0+Jyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKFxcU1tcXHNcXFNdKj8pX19fL2csIGZ1bmN0aW9uICh3bSwgbSkge1xuICAgICAgcmV0dXJuICgvXFxTJC8udGVzdChtKSkgPyBwYXJzZUluc2lkZSAobSwgJzxzdHJvbmc+PGVtPicsICc8L2VtPjwvc3Ryb25nPicpIDogd207XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX18oXFxTW1xcc1xcU10qPylfXy9nLCBmdW5jdGlvbiAod20sIG0pIHtcbiAgICAgIHJldHVybiAoL1xcUyQvLnRlc3QobSkpID8gcGFyc2VJbnNpZGUgKG0sICc8c3Ryb25nPicsICc8L3N0cm9uZz4nKSA6IHdtO1xuICAgIH0pO1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL18oW15cXHNfXVtcXHNcXFNdKj8pXy9nLCBmdW5jdGlvbiAod20sIG0pIHtcbiAgICAgIC8vICEvXl9bXl9dLy50ZXN0KG0pIC0gdGVzdCBpZiBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggX18gKHNpbmNlIGl0IHNlZW1zIHJlZHVuZGFudCwgd2UgcmVtb3ZlZCBpdClcbiAgICAgIHJldHVybiAoL1xcUyQvLnRlc3QobSkpID8gcGFyc2VJbnNpZGUgKG0sICc8ZW0+JywgJzwvZW0+JykgOiB3bTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE5vdyBwYXJzZSBhc3Rlcmlza3NcbiAgaWYgKG9wdGlvbnMubGl0ZXJhbE1pZFdvcmRBc3Rlcmlza3MpIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oW14qXXxeKVxcQlxcKlxcKlxcKihcXFNbXFxzXFxTXSo/KVxcKlxcKlxcKlxcQig/IVxcKikvZywgZnVuY3Rpb24gKHdtLCBsZWFkLCB0eHQpIHtcbiAgICAgIHJldHVybiBwYXJzZUluc2lkZSAodHh0LCBsZWFkICsgJzxzdHJvbmc+PGVtPicsICc8L2VtPjwvc3Ryb25nPicpO1xuICAgIH0pO1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhbXipdfF4pXFxCXFwqXFwqKFxcU1tcXHNcXFNdKj8pXFwqXFwqXFxCKD8hXFwqKS9nLCBmdW5jdGlvbiAod20sIGxlYWQsIHR4dCkge1xuICAgICAgcmV0dXJuIHBhcnNlSW5zaWRlICh0eHQsIGxlYWQgKyAnPHN0cm9uZz4nLCAnPC9zdHJvbmc+Jyk7XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvKFteKl18XilcXEJcXCooXFxTW1xcc1xcU10qPylcXCpcXEIoPyFcXCopL2csIGZ1bmN0aW9uICh3bSwgbGVhZCwgdHh0KSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnNpZGUgKHR4dCwgbGVhZCArICc8ZW0+JywgJzwvZW0+Jyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwqXFwqXFwqKFxcU1tcXHNcXFNdKj8pXFwqXFwqXFwqL2csIGZ1bmN0aW9uICh3bSwgbSkge1xuICAgICAgcmV0dXJuICgvXFxTJC8udGVzdChtKSkgPyBwYXJzZUluc2lkZSAobSwgJzxzdHJvbmc+PGVtPicsICc8L2VtPjwvc3Ryb25nPicpIDogd207XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwqXFwqKFxcU1tcXHNcXFNdKj8pXFwqXFwqL2csIGZ1bmN0aW9uICh3bSwgbSkge1xuICAgICAgcmV0dXJuICgvXFxTJC8udGVzdChtKSkgPyBwYXJzZUluc2lkZSAobSwgJzxzdHJvbmc+JywgJzwvc3Ryb25nPicpIDogd207XG4gICAgfSk7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwqKFteXFxzKl1bXFxzXFxTXSo/KVxcKi9nLCBmdW5jdGlvbiAod20sIG0pIHtcbiAgICAgIC8vICEvXlxcKlteKl0vLnRlc3QobSkgLSB0ZXN0IGlmIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCAqKiAoc2luY2UgaXQgc2VlbXMgcmVkdW5kYW50LCB3ZSByZW1vdmVkIGl0KVxuICAgICAgcmV0dXJuICgvXFxTJC8udGVzdChtKSkgPyBwYXJzZUluc2lkZSAobSwgJzxlbT4nLCAnPC9lbT4nKSA6IHdtO1xuICAgIH0pO1xuICB9XG5cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdpdGFsaWNzQW5kQm9sZC5hZnRlcicsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogRm9ybSBIVE1MIG9yZGVyZWQgKG51bWJlcmVkKSBhbmQgdW5vcmRlcmVkIChidWxsZXRlZCkgbGlzdHMuXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcignbGlzdHMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgc2luZ2xlIG9yZGVyZWQgb3IgdW5vcmRlcmVkIGxpc3QsIHNwbGl0dGluZyBpdFxuICAgKiBpbnRvIGluZGl2aWR1YWwgbGlzdCBpdGVtcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpc3RTdHJcbiAgICogQHBhcmFtIHtib29sZWFufSB0cmltVHJhaWxpbmdcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NMaXN0SXRlbXMgKGxpc3RTdHIsIHRyaW1UcmFpbGluZykge1xuICAgIC8vIFRoZSAkZ19saXN0X2xldmVsIGdsb2JhbCBrZWVwcyB0cmFjayBvZiB3aGVuIHdlJ3JlIGluc2lkZSBhIGxpc3QuXG4gICAgLy8gRWFjaCB0aW1lIHdlIGVudGVyIGEgbGlzdCwgd2UgaW5jcmVtZW50IGl0OyB3aGVuIHdlIGxlYXZlIGEgbGlzdCxcbiAgICAvLyB3ZSBkZWNyZW1lbnQuIElmIGl0J3MgemVybywgd2UncmUgbm90IGluIGEgbGlzdCBhbnltb3JlLlxuICAgIC8vXG4gICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIHdoZW4gd2UncmUgbm90IGluc2lkZSBhIGxpc3QsIHdlIHdhbnQgdG8gdHJlYXRcbiAgICAvLyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICAgSSByZWNvbW1lbmQgdXBncmFkaW5nIHRvIHZlcnNpb25cbiAgICAvLyAgICA4LiBPb3BzLCBub3cgdGhpcyBsaW5lIGlzIHRyZWF0ZWRcbiAgICAvLyAgICBhcyBhIHN1Yi1saXN0LlxuICAgIC8vXG4gICAgLy8gQXMgYSBzaW5nbGUgcGFyYWdyYXBoLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIHNlY29uZCBsaW5lIHN0YXJ0c1xuICAgIC8vIHdpdGggYSBkaWdpdC1wZXJpb2Qtc3BhY2Ugc2VxdWVuY2UuXG4gICAgLy9cbiAgICAvLyBXaGVyZWFzIHdoZW4gd2UncmUgaW5zaWRlIGEgbGlzdCAob3Igc3ViLWxpc3QpLCB0aGF0IGxpbmUgd2lsbCBiZVxuICAgIC8vIHRyZWF0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgc3ViLWxpc3QuIFdoYXQgYSBrbHVkZ2UsIGh1aD8gVGhpcyBpc1xuICAgIC8vIGFuIGFzcGVjdCBvZiBNYXJrZG93bidzIHN5bnRheCB0aGF0J3MgaGFyZCB0byBwYXJzZSBwZXJmZWN0bHlcbiAgICAvLyB3aXRob3V0IHJlc29ydGluZyB0byBtaW5kLXJlYWRpbmcuIFBlcmhhcHMgdGhlIHNvbHV0aW9uIGlzIHRvXG4gICAgLy8gY2hhbmdlIHRoZSBzeW50YXggcnVsZXMgc3VjaCB0aGF0IHN1Yi1saXN0cyBtdXN0IHN0YXJ0IHdpdGggYVxuICAgIC8vIHN0YXJ0aW5nIGNhcmRpbmFsIG51bWJlcjsgZS5nLiBcIjEuXCIgb3IgXCJhLlwiLlxuICAgIGdsb2JhbHMuZ0xpc3RMZXZlbCsrO1xuXG4gICAgLy8gdHJpbSB0cmFpbGluZyBibGFuayBsaW5lczpcbiAgICBsaXN0U3RyID0gbGlzdFN0ci5yZXBsYWNlKC9cXG57Mix9JC8sICdcXG4nKTtcblxuICAgIC8vIGF0dGFja2xhYjogYWRkIHNlbnRpbmVsIHRvIGVtdWxhdGUgXFx6XG4gICAgbGlzdFN0ciArPSAnwqgwJztcblxuICAgIHZhciByZ3ggPSAvKFxcbik/KF4gezAsM30pKFsqKy1dfFxcZCtbLl0pWyBcXHRdKygoXFxbKHh8WHwgKT9dKT9bIFxcdF0qW15cXHJdKz8oXFxuezEsMn0pKSg/PVxcbioowqgwfCB7MCwzfShbKistXXxcXGQrWy5dKVsgXFx0XSspKS9nbSxcbiAgICAgICAgaXNQYXJhZ3JhcGhlZCA9ICgvXFxuWyBcXHRdKlxcbig/IcKoMCkvLnRlc3QobGlzdFN0cikpO1xuXG4gICAgLy8gU2luY2UgdmVyc2lvbiAxLjUsIG5lc3Rpbmcgc3VibGlzdHMgcmVxdWlyZXMgNCBzcGFjZXMgKG9yIDEgdGFiKSBpbmRlbnRhdGlvbixcbiAgICAvLyB3aGljaCBpcyBhIHN5bnRheCBicmVha2luZyBjaGFuZ2VcbiAgICAvLyBhY3RpdmF0aW5nIHRoaXMgb3B0aW9uIHJldmVydHMgdG8gb2xkIGJlaGF2aW9yXG4gICAgaWYgKG9wdGlvbnMuZGlzYWJsZUZvcmNlZDRTcGFjZXNJbmRlbnRlZFN1Ymxpc3RzKSB7XG4gICAgICByZ3ggPSAvKFxcbik/KF4gezAsM30pKFsqKy1dfFxcZCtbLl0pWyBcXHRdKygoXFxbKHh8WHwgKT9dKT9bIFxcdF0qW15cXHJdKz8oXFxuezEsMn0pKSg/PVxcbioowqgwfFxcMihbKistXXxcXGQrWy5dKVsgXFx0XSspKS9nbTtcbiAgICB9XG5cbiAgICBsaXN0U3RyID0gbGlzdFN0ci5yZXBsYWNlKHJneCwgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG0xLCBtMiwgbTMsIG00LCB0YXNrYnRuLCBjaGVja2VkKSB7XG4gICAgICBjaGVja2VkID0gKGNoZWNrZWQgJiYgY2hlY2tlZC50cmltKCkgIT09ICcnKTtcblxuICAgICAgdmFyIGl0ZW0gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ291dGRlbnQnKShtNCwgb3B0aW9ucywgZ2xvYmFscyksXG4gICAgICAgICAgYnVsbGV0U3R5bGUgPSAnJztcblxuICAgICAgLy8gU3VwcG9ydCBmb3IgZ2l0aHViIHRhc2tsaXN0c1xuICAgICAgaWYgKHRhc2tidG4gJiYgb3B0aW9ucy50YXNrbGlzdHMpIHtcbiAgICAgICAgYnVsbGV0U3R5bGUgPSAnIGNsYXNzPVwidGFzay1saXN0LWl0ZW1cIiBzdHlsZT1cImxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcIic7XG4gICAgICAgIGl0ZW0gPSBpdGVtLnJlcGxhY2UoL15bIFxcdF0qXFxbKHh8WHwgKT9dL20sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgb3RwID0gJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkaXNhYmxlZCBzdHlsZT1cIm1hcmdpbjogMHB4IDAuMzVlbSAwLjI1ZW0gLTEuNmVtOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wiJztcbiAgICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgb3RwICs9ICcgY2hlY2tlZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG90cCArPSAnPic7XG4gICAgICAgICAgcmV0dXJuIG90cDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElTU1VFICMzMTJcbiAgICAgIC8vIFRoaXMgaW5wdXQ6IC0gLSAtIGFcbiAgICAgIC8vIGNhdXNlcyB0cm91YmxlIHRvIHRoZSBwYXJzZXIsIHNpbmNlIGl0IGludGVycHJldHMgaXQgYXM6XG4gICAgICAvLyA8dWw+PGxpPjxsaT48bGk+YTwvbGk+PC9saT48L2xpPjwvdWw+XG4gICAgICAvLyBpbnN0ZWFkIG9mOlxuICAgICAgLy8gPHVsPjxsaT4tIC0gYTwvbGk+PC91bD5cbiAgICAgIC8vIFNvLCB0byBwcmV2ZW50IGl0LCB3ZSB3aWxsIHB1dCBhIG1hcmtlciAowqhBKWluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmVcbiAgICAgIC8vIEtpbmQgb2YgaGFja2lzaC9tb25rZXkgcGF0Y2hpbmcsIGJ1dCBzZWVtcyBtb3JlIGVmZmVjdGl2ZSB0aGFuIG92ZXJjb21wbGljYXRpbmcgdGhlIGxpc3QgcGFyc2VyXG4gICAgICBpdGVtID0gaXRlbS5yZXBsYWNlKC9eKFstKitdfFxcZFxcLilbIFxcdF0rW1xcU1xcbiBdKi9nLCBmdW5jdGlvbiAod20yKSB7XG4gICAgICAgIHJldHVybiAnwqhBJyArIHdtMjtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBtMSAtIExlYWRpbmcgbGluZSBvclxuICAgICAgLy8gSGFzIGEgZG91YmxlIHJldHVybiAobXVsdGkgcGFyYWdyYXBoKSBvclxuICAgICAgLy8gSGFzIHN1Ymxpc3RcbiAgICAgIGlmIChtMSB8fCAoaXRlbS5zZWFyY2goL1xcbnsyLH0vKSA+IC0xKSkge1xuICAgICAgICBpdGVtID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdnaXRodWJDb2RlQmxvY2tzJykoaXRlbSwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgICAgIGl0ZW0gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2Jsb2NrR2FtdXQnKShpdGVtLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlY3Vyc2lvbiBmb3Igc3ViLWxpc3RzOlxuICAgICAgICBpdGVtID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdsaXN0cycpKGl0ZW0sIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgICBpdGVtID0gaXRlbS5yZXBsYWNlKC9cXG4kLywgJycpOyAvLyBjaG9tcChpdGVtKVxuICAgICAgICBpdGVtID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdoYXNoSFRNTEJsb2NrcycpKGl0ZW0sIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gICAgICAgIC8vIENvbGFwc2UgZG91YmxlIGxpbmVicmVha3NcbiAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXFxuXFxuKy9nLCAnXFxuXFxuJyk7XG4gICAgICAgIGlmIChpc1BhcmFncmFwaGVkKSB7XG4gICAgICAgICAgaXRlbSA9IHNob3dkb3duLnN1YlBhcnNlcigncGFyYWdyYXBocycpKGl0ZW0sIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW0gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3NwYW5HYW11dCcpKGl0ZW0sIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIG5vdyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbWFya2VyICjCqEEpXG4gICAgICBpdGVtID0gaXRlbS5yZXBsYWNlKCfCqEEnLCAnJyk7XG4gICAgICAvLyB3ZSBjYW4gZmluYWxseSB3cmFwIHRoZSBsaW5lIGluIGxpc3QgaXRlbSB0YWdzXG4gICAgICBpdGVtID0gICc8bGknICsgYnVsbGV0U3R5bGUgKyAnPicgKyBpdGVtICsgJzwvbGk+XFxuJztcblxuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSk7XG5cbiAgICAvLyBhdHRhY2tsYWI6IHN0cmlwIHNlbnRpbmVsXG4gICAgbGlzdFN0ciA9IGxpc3RTdHIucmVwbGFjZSgvwqgwL2csICcnKTtcblxuICAgIGdsb2JhbHMuZ0xpc3RMZXZlbC0tO1xuXG4gICAgaWYgKHRyaW1UcmFpbGluZykge1xuICAgICAgbGlzdFN0ciA9IGxpc3RTdHIucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3RTdHI7XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZVN0YXJ0TnVtYmVyIChsaXN0LCBsaXN0VHlwZSkge1xuICAgIC8vIGNoZWNrIGlmIG9sIGFuZCBzdGFydHMgYnkgYSBudW1iZXIgZGlmZmVyZW50IHRoYW4gMVxuICAgIGlmIChsaXN0VHlwZSA9PT0gJ29sJykge1xuICAgICAgdmFyIHJlcyA9IGxpc3QubWF0Y2goL14gKihcXGQrKVxcLi8pO1xuICAgICAgaWYgKHJlcyAmJiByZXNbMV0gIT09ICcxJykge1xuICAgICAgICByZXR1cm4gJyBzdGFydD1cIicgKyByZXNbMV0gKyAnXCInO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYW5kIHBhcnNlIGNvbnNlY3V0aXZlIGxpc3RzIChiZXR0ZXIgZml4IGZvciBpc3N1ZSAjMTQyKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdFR5cGVcbiAgICogQHBhcmFtIHtib29sZWFufSB0cmltVHJhaWxpbmdcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlQ29uc2VjdXRpdmVMaXN0cyAobGlzdCwgbGlzdFR5cGUsIHRyaW1UcmFpbGluZykge1xuICAgIC8vIGNoZWNrIGlmIHdlIGNhdWdodCAyIG9yIG1vcmUgY29uc2VjdXRpdmUgbGlzdHMgYnkgbWlzdGFrZVxuICAgIC8vIHdlIHVzZSB0aGUgY291bnRlclJneCwgbWVhbmluZyBpZiBsaXN0VHlwZSBpcyBVTCB3ZSBsb29rIGZvciBPTCBhbmQgdmljZSB2ZXJzYVxuICAgIHZhciBvbFJneCA9IChvcHRpb25zLmRpc2FibGVGb3JjZWQ0U3BhY2VzSW5kZW50ZWRTdWJsaXN0cykgPyAvXiA/XFxkK1xcLlsgXFx0XS9nbSA6IC9eIHswLDN9XFxkK1xcLlsgXFx0XS9nbSxcbiAgICAgICAgdWxSZ3ggPSAob3B0aW9ucy5kaXNhYmxlRm9yY2VkNFNwYWNlc0luZGVudGVkU3VibGlzdHMpID8gL14gP1sqKy1dWyBcXHRdL2dtIDogL14gezAsM31bKistXVsgXFx0XS9nbSxcbiAgICAgICAgY291bnRlclJ4ZyA9IChsaXN0VHlwZSA9PT0gJ3VsJykgPyBvbFJneCA6IHVsUmd4LFxuICAgICAgICByZXN1bHQgPSAnJztcblxuICAgIGlmIChsaXN0LnNlYXJjaChjb3VudGVyUnhnKSAhPT0gLTEpIHtcbiAgICAgIChmdW5jdGlvbiBwYXJzZUNMICh0eHQpIHtcbiAgICAgICAgdmFyIHBvcyA9IHR4dC5zZWFyY2goY291bnRlclJ4ZyksXG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlU3RhcnROdW1iZXIobGlzdCwgbGlzdFR5cGUpO1xuICAgICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICAgIC8vIHNsaWNlXG4gICAgICAgICAgcmVzdWx0ICs9ICdcXG5cXG48JyArIGxpc3RUeXBlICsgc3R5bGUgKyAnPlxcbicgKyBwcm9jZXNzTGlzdEl0ZW1zKHR4dC5zbGljZSgwLCBwb3MpLCAhIXRyaW1UcmFpbGluZykgKyAnPC8nICsgbGlzdFR5cGUgKyAnPlxcbic7XG5cbiAgICAgICAgICAvLyBpbnZlcnQgY291bnRlclR5cGUgYW5kIGxpc3RUeXBlXG4gICAgICAgICAgbGlzdFR5cGUgPSAobGlzdFR5cGUgPT09ICd1bCcpID8gJ29sJyA6ICd1bCc7XG4gICAgICAgICAgY291bnRlclJ4ZyA9IChsaXN0VHlwZSA9PT0gJ3VsJykgPyBvbFJneCA6IHVsUmd4O1xuXG4gICAgICAgICAgLy9yZWN1cnNlXG4gICAgICAgICAgcGFyc2VDTCh0eHQuc2xpY2UocG9zKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9ICdcXG5cXG48JyArIGxpc3RUeXBlICsgc3R5bGUgKyAnPlxcbicgKyBwcm9jZXNzTGlzdEl0ZW1zKHR4dCwgISF0cmltVHJhaWxpbmcpICsgJzwvJyArIGxpc3RUeXBlICsgJz5cXG4nO1xuICAgICAgICB9XG4gICAgICB9KShsaXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0eWxlID0gc3R5bGVTdGFydE51bWJlcihsaXN0LCBsaXN0VHlwZSk7XG4gICAgICByZXN1bHQgPSAnXFxuXFxuPCcgKyBsaXN0VHlwZSArIHN0eWxlICsgJz5cXG4nICsgcHJvY2Vzc0xpc3RJdGVtcyhsaXN0LCAhIXRyaW1UcmFpbGluZykgKyAnPC8nICsgbGlzdFR5cGUgKyAnPlxcbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBTdGFydCBvZiBsaXN0IHBhcnNpbmcgKiovXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2xpc3RzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAvLyBhZGQgc2VudGluZWwgdG8gaGFjayBhcm91bmQga2h0bWwvc2FmYXJpIGJ1ZzpcbiAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMzFcbiAgdGV4dCArPSAnwqgwJztcblxuICBpZiAoZ2xvYmFscy5nTGlzdExldmVsKSB7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXigoIHswLDN9KFsqKy1dfFxcZCtbLl0pWyBcXHRdKylbXlxccl0rPyjCqDB8XFxuezIsfSg/PVxcUykoPyFbIFxcdF0qKD86WyorLV18XFxkK1suXSlbIFxcdF0rKSkpL2dtLFxuICAgICAgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIGxpc3QsIG0yKSB7XG4gICAgICAgIHZhciBsaXN0VHlwZSA9IChtMi5zZWFyY2goL1sqKy1dL2cpID4gLTEpID8gJ3VsJyA6ICdvbCc7XG4gICAgICAgIHJldHVybiBwYXJzZUNvbnNlY3V0aXZlTGlzdHMobGlzdCwgbGlzdFR5cGUsIHRydWUpO1xuICAgICAgfVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvKFxcblxcbnxeXFxuPykoKCB7MCwzfShbKistXXxcXGQrWy5dKVsgXFx0XSspW15cXHJdKz8owqgwfFxcbnsyLH0oPz1cXFMpKD8hWyBcXHRdKig/OlsqKy1dfFxcZCtbLl0pWyBcXHRdKykpKS9nbSxcbiAgICAgIGZ1bmN0aW9uICh3aG9sZU1hdGNoLCBtMSwgbGlzdCwgbTMpIHtcbiAgICAgICAgdmFyIGxpc3RUeXBlID0gKG0zLnNlYXJjaCgvWyorLV0vZykgPiAtMSkgPyAndWwnIDogJ29sJztcbiAgICAgICAgcmV0dXJuIHBhcnNlQ29uc2VjdXRpdmVMaXN0cyhsaXN0LCBsaXN0VHlwZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvLyBzdHJpcCBzZW50aW5lbFxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqDAvLCAnJyk7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ2xpc3RzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBQYXJzZSBtZXRhZGF0YSBhdCB0aGUgdG9wIG9mIHRoZSBkb2N1bWVudFxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ldGFkYXRhJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmICghb3B0aW9ucy5tZXRhZGF0YSkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnbWV0YWRhdGEuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgZnVuY3Rpb24gcGFyc2VNZXRhZGF0YUNvbnRlbnRzIChjb250ZW50KSB7XG4gICAgLy8gcmF3IGlzIHJhdyBzbyBpdCdzIG5vdCBjaGFuZ2VkIGluIGFueSB3YXlcbiAgICBnbG9iYWxzLm1ldGFkYXRhLnJhdyA9IGNvbnRlbnQ7XG5cbiAgICAvLyBlc2NhcGUgY2hhcnMgZm9yYmlkZGVuIGluIGh0bWwgYXR0cmlidXRlc1xuICAgIC8vIGRvdWJsZSBxdW90ZXNcbiAgICBjb250ZW50ID0gY29udGVudFxuICAgICAgLy8gYW1wZXJzYW5kIGZpcnN0XG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLy8gZG91YmxlIHF1b3Rlc1xuICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcblxuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1xcbiB7NH0vZywgJyAnKTtcbiAgICBjb250ZW50LnJlcGxhY2UoL14oW1xcUyBdKyk6ICsoW1xcc1xcU10rPykkL2dtLCBmdW5jdGlvbiAod20sIGtleSwgdmFsdWUpIHtcbiAgICAgIGdsb2JhbHMubWV0YWRhdGEucGFyc2VkW2tleV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbiAgfVxuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL15cXHMqwqvCq8KrKyhcXFMqPylcXG4oW1xcc1xcU10rPylcXG7Cu8K7wrsrXFxuLywgZnVuY3Rpb24gKHdob2xlbWF0Y2gsIGZvcm1hdCwgY29udGVudCkge1xuICAgIHBhcnNlTWV0YWRhdGFDb250ZW50cyhjb250ZW50KTtcbiAgICByZXR1cm4gJ8KoTSc7XG4gIH0pO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL15cXHMqLS0tKyhcXFMqPylcXG4oW1xcc1xcU10rPylcXG4tLS0rXFxuLywgZnVuY3Rpb24gKHdob2xlbWF0Y2gsIGZvcm1hdCwgY29udGVudCkge1xuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIGdsb2JhbHMubWV0YWRhdGEuZm9ybWF0ID0gZm9ybWF0O1xuICAgIH1cbiAgICBwYXJzZU1ldGFkYXRhQ29udGVudHMoY29udGVudCk7XG4gICAgcmV0dXJuICfCqE0nO1xuICB9KTtcblxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqE0vZywgJycpO1xuXG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ21ldGFkYXRhLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBSZW1vdmUgb25lIGxldmVsIG9mIGxpbmUtbGVhZGluZyB0YWJzIG9yIHNwYWNlc1xuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ291dGRlbnQnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ291dGRlbnQuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gYXR0YWNrbGFiOiBoYWNrIGFyb3VuZCBLb25xdWVyb3IgMy41LjQgYnVnOlxuICAvLyBcIi0tLS0tLS0tLS1idWdcIi5yZXBsYWNlKC9eLS9nLFwiXCIpID09IFwiYnVnXCJcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXihcXHR8WyBdezEsNH0pL2dtLCAnwqgwJyk7IC8vIGF0dGFja2xhYjogZ190YWJfd2lkdGhcblxuICAvLyBhdHRhY2tsYWI6IGNsZWFuIHVwIGhhY2tcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvwqgwL2csICcnKTtcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdvdXRkZW50LmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3BhcmFncmFwaHMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgncGFyYWdyYXBocy5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgLy8gU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgbGluZXM6XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL15cXG4rL2csICcnKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxuKyQvZywgJycpO1xuXG4gIHZhciBncmFmcyA9IHRleHQuc3BsaXQoL1xcbnsyLH0vZyksXG4gICAgICBncmFmc091dCA9IFtdLFxuICAgICAgZW5kID0gZ3JhZnMubGVuZ3RoOyAvLyBXcmFwIDxwPiB0YWdzXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmQ7IGkrKykge1xuICAgIHZhciBzdHIgPSBncmFmc1tpXTtcbiAgICAvLyBpZiB0aGlzIGlzIGFuIEhUTUwgbWFya2VyLCBjb3B5IGl0XG4gICAgaWYgKHN0ci5zZWFyY2goL8KoKEt8RykoXFxkKylcXDEvZykgPj0gMCkge1xuICAgICAgZ3JhZnNPdXQucHVzaChzdHIpO1xuXG4gICAgLy8gdGVzdCBmb3IgcHJlc2VuY2Ugb2YgY2hhcmFjdGVycyB0byBwcmV2ZW50IGVtcHR5IGxpbmVzIGJlaW5nIHBhcnNlZFxuICAgIC8vIGFzIHBhcmFncmFwaHMgKHJlc3VsdGluZyBpbiB1bmRlc2lyZWQgZXh0cmEgZW1wdHkgcGFyYWdyYXBocylcbiAgICB9IGVsc2UgaWYgKHN0ci5zZWFyY2goL1xcUy8pID49IDApIHtcbiAgICAgIHN0ciA9IHNob3dkb3duLnN1YlBhcnNlcignc3BhbkdhbXV0Jykoc3RyLCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eKFsgXFx0XSopL2csICc8cD4nKTtcbiAgICAgIHN0ciArPSAnPC9wPic7XG4gICAgICBncmFmc091dC5wdXNoKHN0cik7XG4gICAgfVxuICB9XG5cbiAgLyoqIFVuaGFzaGlmeSBIVE1MIGJsb2NrcyAqL1xuICBlbmQgPSBncmFmc091dC5sZW5ndGg7XG4gIGZvciAoaSA9IDA7IGkgPCBlbmQ7IGkrKykge1xuICAgIHZhciBibG9ja1RleHQgPSAnJyxcbiAgICAgICAgZ3JhZnNPdXRJdCA9IGdyYWZzT3V0W2ldLFxuICAgICAgICBjb2RlRmxhZyA9IGZhbHNlO1xuICAgIC8vIGlmIHRoaXMgaXMgYSBtYXJrZXIgZm9yIGFuIGh0bWwgYmxvY2suLi5cbiAgICAvLyB1c2UgUmVnRXhwLnRlc3QgaW5zdGVhZCBvZiBzdHJpbmcuc2VhcmNoIGJlY2F1c2Ugb2YgUU1MIGJ1Z1xuICAgIHdoaWxlICgvwqgoS3xHKShcXGQrKVxcMS8udGVzdChncmFmc091dEl0KSkge1xuICAgICAgdmFyIGRlbGltID0gUmVnRXhwLiQxLFxuICAgICAgICAgIG51bSAgID0gUmVnRXhwLiQyO1xuXG4gICAgICBpZiAoZGVsaW0gPT09ICdLJykge1xuICAgICAgICBibG9ja1RleHQgPSBnbG9iYWxzLmdIdG1sQmxvY2tzW251bV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGNoZWNrIGlmIGdoQmxvY2sgaXMgYSBmYWxzZSBwb3NpdGl2ZVxuICAgICAgICBpZiAoY29kZUZsYWcpIHtcbiAgICAgICAgICAvLyB1c2UgZW5jb2RlZCB2ZXJzaW9uIG9mIGFsbCB0ZXh0XG4gICAgICAgICAgYmxvY2tUZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdlbmNvZGVDb2RlJykoZ2xvYmFscy5naENvZGVCbG9ja3NbbnVtXS50ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBibG9ja1RleHQgPSBnbG9iYWxzLmdoQ29kZUJsb2Nrc1tudW1dLmNvZGVibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmxvY2tUZXh0ID0gYmxvY2tUZXh0LnJlcGxhY2UoL1xcJC9nLCAnJCQkJCcpOyAvLyBFc2NhcGUgYW55IGRvbGxhciBzaWduc1xuXG4gICAgICBncmFmc091dEl0ID0gZ3JhZnNPdXRJdC5yZXBsYWNlKC8oXFxuXFxuKT/CqChLfEcpXFxkK1xcMihcXG5cXG4pPy8sIGJsb2NrVGV4dCk7XG4gICAgICAvLyBDaGVjayBpZiBncmFmc091dEl0IGlzIGEgcHJlLT5jb2RlXG4gICAgICBpZiAoL148cHJlXFxiW14+XSo+XFxzKjxjb2RlXFxiW14+XSo+Ly50ZXN0KGdyYWZzT3V0SXQpKSB7XG4gICAgICAgIGNvZGVGbGFnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZ3JhZnNPdXRbaV0gPSBncmFmc091dEl0O1xuICB9XG4gIHRleHQgPSBncmFmc091dC5qb2luKCdcXG4nKTtcbiAgLy8gU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgbGluZXM6XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL15cXG4rL2csICcnKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxuKyQvZywgJycpO1xuICByZXR1cm4gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdwYXJhZ3JhcGhzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG59KTtcblxyXG4vKipcbiAqIFJ1biBleHRlbnNpb25cbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdydW5FeHRlbnNpb24nLCBmdW5jdGlvbiAoZXh0LCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoZXh0LmZpbHRlcikge1xuICAgIHRleHQgPSBleHQuZmlsdGVyKHRleHQsIGdsb2JhbHMuY29udmVydGVyLCBvcHRpb25zKTtcblxuICB9IGVsc2UgaWYgKGV4dC5yZWdleCkge1xuICAgIC8vIFRPRE8gcmVtb3ZlIHRoaXMgd2hlbiBvbGQgZXh0ZW5zaW9uIGxvYWRpbmcgbWVjaGFuaXNtIGlzIGRlcHJlY2F0ZWRcbiAgICB2YXIgcmUgPSBleHQucmVnZXg7XG4gICAgaWYgKCEocmUgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICByZSA9IG5ldyBSZWdFeHAocmUsICdnJyk7XG4gICAgfVxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocmUsIGV4dC5yZXBsYWNlKTtcbiAgfVxuXG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuLyoqXG4gKiBUaGVzZSBhcmUgYWxsIHRoZSB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBvY2N1ciAqd2l0aGluKiBibG9jay1sZXZlbFxuICogdGFncyBsaWtlIHBhcmFncmFwaHMsIGhlYWRlcnMsIGFuZCBsaXN0IGl0ZW1zLlxuICovXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3NwYW5HYW11dCcsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdzcGFuR2FtdXQuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2NvZGVTcGFucycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdlc2NhcGVTcGVjaWFsQ2hhcnNXaXRoaW5UYWdBdHRyaWJ1dGVzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUJhY2tzbGFzaEVzY2FwZXMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBQcm9jZXNzIGFuY2hvciBhbmQgaW1hZ2UgdGFncy4gSW1hZ2VzIG11c3QgY29tZSBmaXJzdCxcbiAgLy8gYmVjYXVzZSAhW2Zvb11bZl0gbG9va3MgbGlrZSBhbiBhbmNob3IuXG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2ltYWdlcycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdhbmNob3JzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gTWFrZSBsaW5rcyBvdXQgb2YgdGhpbmdzIGxpa2UgYDxodHRwOi8vZXhhbXBsZS5jb20vPmBcbiAgLy8gTXVzdCBjb21lIGFmdGVyIGFuY2hvcnMsIGJlY2F1c2UgeW91IGNhbiB1c2UgPCBhbmQgPlxuICAvLyBkZWxpbWl0ZXJzIGluIGlubGluZSBsaW5rcyBsaWtlIFt0aGlzXSg8dXJsPikuXG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2F1dG9MaW5rcycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdzaW1wbGlmaWVkQXV0b0xpbmtzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2Vtb2ppJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3VuZGVybGluZScpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdpdGFsaWNzQW5kQm9sZCcpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICB0ZXh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdzdHJpa2V0aHJvdWdoJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2VsbGlwc2lzJykodGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgLy8gd2UgbmVlZCB0byBoYXNoIEhUTUwgdGFncyBpbnNpZGUgc3BhbnNcbiAgdGV4dCA9IHNob3dkb3duLnN1YlBhcnNlcignaGFzaEhUTUxTcGFucycpKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIG5vdyB3ZSBlbmNvZGUgYW1wcyBhbmQgYW5nbGVzXG4gIHRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2VuY29kZUFtcHNBbmRBbmdsZXMnKSh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcblxuICAvLyBEbyBoYXJkIGJyZWFrc1xuICBpZiAob3B0aW9ucy5zaW1wbGVMaW5lQnJlYWtzKSB7XG4gICAgLy8gR0ZNIHN0eWxlIGhhcmQgYnJlYWtzXG4gICAgLy8gb25seSBhZGQgbGluZSBicmVha3MgaWYgdGhlIHRleHQgZG9lcyBub3QgY29udGFpbiBhIGJsb2NrIChzcGVjaWFsIGNhc2UgZm9yIGxpc3RzKVxuICAgIGlmICghL1xcblxcbsKoSy8udGVzdCh0ZXh0KSkge1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxuKy9nLCAnPGJyIC8+XFxuJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFZhbmlsbGEgaGFyZCBicmVha3NcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8gICtcXG4vZywgJzxiciAvPlxcbicpO1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnc3BhbkdhbXV0LmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIHJldHVybiB0ZXh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdzdHJpa2V0aHJvdWdoJywgZnVuY3Rpb24gKHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIHBhcnNlSW5zaWRlICh0eHQpIHtcbiAgICBpZiAob3B0aW9ucy5zaW1wbGlmaWVkQXV0b0xpbmspIHtcbiAgICAgIHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignc2ltcGxpZmllZEF1dG9MaW5rcycpKHR4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gICAgfVxuICAgIHJldHVybiAnPGRlbD4nICsgdHh0ICsgJzwvZGVsPic7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zdHJpa2V0aHJvdWdoKSB7XG4gICAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgnc3RyaWtldGhyb3VnaC5iZWZvcmUnLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oPzp+KXsyfShbXFxzXFxTXSs/KSg/On4pezJ9L2csIGZ1bmN0aW9uICh3bSwgdHh0KSB7IHJldHVybiBwYXJzZUluc2lkZSh0eHQpOyB9KTtcbiAgICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCdzdHJpa2V0aHJvdWdoLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG4gIH1cblxuICByZXR1cm4gdGV4dDtcbn0pO1xuXHJcbi8qKlxuICogU3RyaXBzIGxpbmsgZGVmaW5pdGlvbnMgZnJvbSB0ZXh0LCBzdG9yZXMgdGhlIFVSTHMgYW5kIHRpdGxlcyBpblxuICogaGFzaCByZWZlcmVuY2VzLlxuICogTGluayBkZWZzIGFyZSBpbiB0aGUgZm9ybTogXltpZF06IHVybCBcIm9wdGlvbmFsIHRpdGxlXCJcbiAqL1xuc2hvd2Rvd24uc3ViUGFyc2VyKCdzdHJpcExpbmtEZWZpbml0aW9ucycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgcmVnZXggICAgICAgPSAvXiB7MCwzfVxcWyguKyldOlsgXFx0XSpcXG4/WyBcXHRdKjw/KFtePlxcc10rKT4/KD86ID0oWypcXGRdK1tBLVphLXolXXswLDR9KXgoWypcXGRdK1tBLVphLXolXXswLDR9KSk/WyBcXHRdKlxcbj9bIFxcdF0qKD86KFxcbiopW1wifCcoXSguKz8pW1wifCcpXVsgXFx0XSopPyg/Olxcbit8KD89wqgwKSkvZ20sXG4gICAgICBiYXNlNjRSZWdleCA9IC9eIHswLDN9XFxbKC4rKV06WyBcXHRdKlxcbj9bIFxcdF0qPD8oZGF0YTouKz9cXC8uKz87YmFzZTY0LFtBLVphLXowLTkrLz1cXG5dKz8pPj8oPzogPShbKlxcZF0rW0EtWmEteiVdezAsNH0peChbKlxcZF0rW0EtWmEteiVdezAsNH0pKT9bIFxcdF0qXFxuP1sgXFx0XSooPzooXFxuKilbXCJ8JyhdKC4rPylbXCJ8JyldWyBcXHRdKik/KD86XFxuXFxufCg/PcKoMCl8KD89XFxuXFxbKSkvZ207XG5cbiAgLy8gYXR0YWNrbGFiOiBzZW50aW5lbCB3b3JrYXJvdW5kcyBmb3IgbGFjayBvZiBcXEEgYW5kIFxcWiwgc2FmYXJpXFxraHRtbCBidWdcbiAgdGV4dCArPSAnwqgwJztcblxuICB2YXIgcmVwbGFjZUZ1bmMgPSBmdW5jdGlvbiAod2hvbGVNYXRjaCwgbGlua0lkLCB1cmwsIHdpZHRoLCBoZWlnaHQsIGJsYW5rTGluZXMsIHRpdGxlKSB7XG4gICAgbGlua0lkID0gbGlua0lkLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHVybC5tYXRjaCgvXmRhdGE6Lis/XFwvLis/O2Jhc2U2NCwvKSkge1xuICAgICAgLy8gcmVtb3ZlIG5ld2xpbmVzXG4gICAgICBnbG9iYWxzLmdVcmxzW2xpbmtJZF0gPSB1cmwucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xvYmFscy5nVXJsc1tsaW5rSWRdID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdlbmNvZGVBbXBzQW5kQW5nbGVzJykodXJsLCBvcHRpb25zLCBnbG9iYWxzKTsgIC8vIExpbmsgSURzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG4gICAgfVxuXG4gICAgaWYgKGJsYW5rTGluZXMpIHtcbiAgICAgIC8vIE9vcHMsIGZvdW5kIGJsYW5rIGxpbmVzLCBzbyBpdCdzIG5vdCBhIHRpdGxlLlxuICAgICAgLy8gUHV0IGJhY2sgdGhlIHBhcmVudGhldGljYWwgc3RhdGVtZW50IHdlIHN0b2xlLlxuICAgICAgcmV0dXJuIGJsYW5rTGluZXMgKyB0aXRsZTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgZ2xvYmFscy5nVGl0bGVzW2xpbmtJZF0gPSB0aXRsZS5yZXBsYWNlKC9cInwnL2csICcmcXVvdDsnKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnBhcnNlSW1nRGltZW5zaW9ucyAmJiB3aWR0aCAmJiBoZWlnaHQpIHtcbiAgICAgICAgZ2xvYmFscy5nRGltZW5zaW9uc1tsaW5rSWRdID0ge1xuICAgICAgICAgIHdpZHRoOiAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tcGxldGVseSByZW1vdmUgdGhlIGRlZmluaXRpb24gZnJvbSB0aGUgdGV4dFxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICAvLyBmaXJzdCB3ZSB0cnkgdG8gZmluZCBiYXNlNjQgbGluayByZWZlcmVuY2VzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoYmFzZTY0UmVnZXgsIHJlcGxhY2VGdW5jKTtcblxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlZ2V4LCByZXBsYWNlRnVuYyk7XG5cbiAgLy8gYXR0YWNrbGFiOiBzdHJpcCBzZW50aW5lbFxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC/CqDAvLCAnJyk7XG5cbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3RhYmxlcycsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIW9wdGlvbnMudGFibGVzKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICB2YXIgdGFibGVSZ3ggICAgICAgPSAvXiB7MCwzfVxcfD8uK1xcfC4rXFxuIHswLDN9XFx8P1sgXFx0XSo6P1sgXFx0XSooPzpbLT1dKXsyLH1bIFxcdF0qOj9bIFxcdF0qXFx8WyBcXHRdKjo/WyBcXHRdKig/OlstPV0pezIsfVtcXHNcXFNdKz8oPzpcXG5cXG58wqgwKS9nbSxcbiAgICAvL3NpbmdlQ29sVGJsUmd4ID0gL14gezAsM31cXHwuK1xcfFxcbiB7MCwzfVxcfFsgXFx0XSo6P1sgXFx0XSooPzpbLT1dKXsyLH1bIFxcdF0qOj9bIFxcdF0qXFx8WyBcXHRdKlxcbig/OiB7MCwzfVxcfC4rXFx8XFxuKSsoPzpcXG5cXG58wqgwKS9nbTtcbiAgICAgIHNpbmdlQ29sVGJsUmd4ID0gL14gezAsM31cXHwuK1xcfFsgXFx0XSpcXG4gezAsM31cXHxbIFxcdF0qOj9bIFxcdF0qKD86Wy09XSl7Mix9WyBcXHRdKjo/WyBcXHRdKlxcfFsgXFx0XSpcXG4oIHswLDN9XFx8LitcXHxbIFxcdF0qXFxuKSooPzpcXG58wqgwKS9nbTtcblxuICBmdW5jdGlvbiBwYXJzZVN0eWxlcyAoc0xpbmUpIHtcbiAgICBpZiAoL146WyBcXHRdKi0tKiQvLnRlc3Qoc0xpbmUpKSB7XG4gICAgICByZXR1cm4gJyBzdHlsZT1cInRleHQtYWxpZ246bGVmdDtcIic7XG4gICAgfSBlbHNlIGlmICgvXi0tKlsgXFx0XSo6WyBcXHRdKiQvLnRlc3Qoc0xpbmUpKSB7XG4gICAgICByZXR1cm4gJyBzdHlsZT1cInRleHQtYWxpZ246cmlnaHQ7XCInO1xuICAgIH0gZWxzZSBpZiAoL146WyBcXHRdKi0tKlsgXFx0XSo6JC8udGVzdChzTGluZSkpIHtcbiAgICAgIHJldHVybiAnIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCInO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzIChoZWFkZXIsIHN0eWxlKSB7XG4gICAgdmFyIGlkID0gJyc7XG4gICAgaGVhZGVyID0gaGVhZGVyLnRyaW0oKTtcbiAgICAvLyBzdXBwb3J0IGJvdGggdGFibGVzSGVhZGVySWQgYW5kIHRhYmxlSGVhZGVySWQgZHVlIHRvIGVycm9yIGluIGRvY3VtZW50YXRpb24gc28gd2UgZG9uJ3QgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICBpZiAob3B0aW9ucy50YWJsZXNIZWFkZXJJZCB8fCBvcHRpb25zLnRhYmxlSGVhZGVySWQpIHtcbiAgICAgIGlkID0gJyBpZD1cIicgKyBoZWFkZXIucmVwbGFjZSgvIC9nLCAnXycpLnRvTG93ZXJDYXNlKCkgKyAnXCInO1xuICAgIH1cbiAgICBoZWFkZXIgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3NwYW5HYW11dCcpKGhlYWRlciwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgICByZXR1cm4gJzx0aCcgKyBpZCArIHN0eWxlICsgJz4nICsgaGVhZGVyICsgJzwvdGg+XFxuJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ2VsbHMgKGNlbGwsIHN0eWxlKSB7XG4gICAgdmFyIHN1YlRleHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ3NwYW5HYW11dCcpKGNlbGwsIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIHJldHVybiAnPHRkJyArIHN0eWxlICsgJz4nICsgc3ViVGV4dCArICc8L3RkPlxcbic7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFRhYmxlIChoZWFkZXJzLCBjZWxscykge1xuICAgIHZhciB0YiA9ICc8dGFibGU+XFxuPHRoZWFkPlxcbjx0cj5cXG4nLFxuICAgICAgICB0YmxMZ24gPSBoZWFkZXJzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGJsTGduOyArK2kpIHtcbiAgICAgIHRiICs9IGhlYWRlcnNbaV07XG4gICAgfVxuICAgIHRiICs9ICc8L3RyPlxcbjwvdGhlYWQ+XFxuPHRib2R5Plxcbic7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHRiICs9ICc8dHI+XFxuJztcbiAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCB0YmxMZ247ICsraWkpIHtcbiAgICAgICAgdGIgKz0gY2VsbHNbaV1baWldO1xuICAgICAgfVxuICAgICAgdGIgKz0gJzwvdHI+XFxuJztcbiAgICB9XG4gICAgdGIgKz0gJzwvdGJvZHk+XFxuPC90YWJsZT5cXG4nO1xuICAgIHJldHVybiB0YjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVGFibGUgKHJhd1RhYmxlKSB7XG4gICAgdmFyIGksIHRhYmxlTGluZXMgPSByYXdUYWJsZS5zcGxpdCgnXFxuJyk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGFibGVMaW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgLy8gc3RyaXAgd3JvbmcgZmlyc3QgYW5kIGxhc3QgY29sdW1uIGlmIHdyYXBwZWQgdGFibGVzIGFyZSB1c2VkXG4gICAgICBpZiAoL14gezAsM31cXHwvLnRlc3QodGFibGVMaW5lc1tpXSkpIHtcbiAgICAgICAgdGFibGVMaW5lc1tpXSA9IHRhYmxlTGluZXNbaV0ucmVwbGFjZSgvXiB7MCwzfVxcfC8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmICgvXFx8WyBcXHRdKiQvLnRlc3QodGFibGVMaW5lc1tpXSkpIHtcbiAgICAgICAgdGFibGVMaW5lc1tpXSA9IHRhYmxlTGluZXNbaV0ucmVwbGFjZSgvXFx8WyBcXHRdKiQvLCAnJyk7XG4gICAgICB9XG4gICAgICAvLyBwYXJzZSBjb2RlIHNwYW5zIGZpcnN0LCBidXQgd2Ugb25seSBzdXBwb3J0IG9uZSBsaW5lIGNvZGUgc3BhbnNcbiAgICAgIHRhYmxlTGluZXNbaV0gPSBzaG93ZG93bi5zdWJQYXJzZXIoJ2NvZGVTcGFucycpKHRhYmxlTGluZXNbaV0sIG9wdGlvbnMsIGdsb2JhbHMpO1xuICAgIH1cblxuICAgIHZhciByYXdIZWFkZXJzID0gdGFibGVMaW5lc1swXS5zcGxpdCgnfCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy50cmltKCk7fSksXG4gICAgICAgIHJhd1N0eWxlcyA9IHRhYmxlTGluZXNbMV0uc3BsaXQoJ3wnKS5tYXAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMudHJpbSgpO30pLFxuICAgICAgICByYXdDZWxscyA9IFtdLFxuICAgICAgICBoZWFkZXJzID0gW10sXG4gICAgICAgIHN0eWxlcyA9IFtdLFxuICAgICAgICBjZWxscyA9IFtdO1xuXG4gICAgdGFibGVMaW5lcy5zaGlmdCgpO1xuICAgIHRhYmxlTGluZXMuc2hpZnQoKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0YWJsZUxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAodGFibGVMaW5lc1tpXS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmF3Q2VsbHMucHVzaChcbiAgICAgICAgdGFibGVMaW5lc1tpXVxuICAgICAgICAgIC5zcGxpdCgnfCcpXG4gICAgICAgICAgLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuIHMudHJpbSgpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyYXdIZWFkZXJzLmxlbmd0aCA8IHJhd1N0eWxlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiByYXdUYWJsZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcmF3U3R5bGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBzdHlsZXMucHVzaChwYXJzZVN0eWxlcyhyYXdTdHlsZXNbaV0pKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcmF3SGVhZGVycy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKHNob3dkb3duLmhlbHBlci5pc1VuZGVmaW5lZChzdHlsZXNbaV0pKSB7XG4gICAgICAgIHN0eWxlc1tpXSA9ICcnO1xuICAgICAgfVxuICAgICAgaGVhZGVycy5wdXNoKHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzW2ldLCBzdHlsZXNbaV0pKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcmF3Q2VsbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciByb3cgPSBbXTtcbiAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBoZWFkZXJzLmxlbmd0aDsgKytpaSkge1xuICAgICAgICBpZiAoc2hvd2Rvd24uaGVscGVyLmlzVW5kZWZpbmVkKHJhd0NlbGxzW2ldW2lpXSkpIHtcblxuICAgICAgICB9XG4gICAgICAgIHJvdy5wdXNoKHBhcnNlQ2VsbHMocmF3Q2VsbHNbaV1baWldLCBzdHlsZXNbaWldKSk7XG4gICAgICB9XG4gICAgICBjZWxscy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkVGFibGUoaGVhZGVycywgY2VsbHMpO1xuICB9XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgndGFibGVzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIC8vIGZpbmQgZXNjYXBlZCBwaXBlIGNoYXJhY3RlcnNcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxcXChcXHwpL2csIHNob3dkb3duLmhlbHBlci5lc2NhcGVDaGFyYWN0ZXJzQ2FsbGJhY2spO1xuXG4gIC8vIHBhcnNlIG11bHRpIGNvbHVtbiB0YWJsZXNcbiAgdGV4dCA9IHRleHQucmVwbGFjZSh0YWJsZVJneCwgcGFyc2VUYWJsZSk7XG5cbiAgLy8gcGFyc2Ugb25lIGNvbHVtbiB0YWJsZXNcbiAgdGV4dCA9IHRleHQucmVwbGFjZShzaW5nZUNvbFRibFJneCwgcGFyc2VUYWJsZSk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgndGFibGVzLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ3VuZGVybGluZScsIGZ1bmN0aW9uICh0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIW9wdGlvbnMudW5kZXJsaW5lKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICB0ZXh0ID0gZ2xvYmFscy5jb252ZXJ0ZXIuX2Rpc3BhdGNoKCd1bmRlcmxpbmUuYmVmb3JlJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgaWYgKG9wdGlvbnMubGl0ZXJhbE1pZFdvcmRVbmRlcnNjb3Jlcykge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcYl9fXyhcXFNbXFxzXFxTXSo/KV9fX1xcYi9nLCBmdW5jdGlvbiAod20sIHR4dCkge1xuICAgICAgcmV0dXJuICc8dT4nICsgdHh0ICsgJzwvdT4nO1xuICAgIH0pO1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcYl9fKFxcU1tcXHNcXFNdKj8pX19cXGIvZywgZnVuY3Rpb24gKHdtLCB0eHQpIHtcbiAgICAgIHJldHVybiAnPHU+JyArIHR4dCArICc8L3U+JztcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX18oXFxTW1xcc1xcU10qPylfX18vZywgZnVuY3Rpb24gKHdtLCBtKSB7XG4gICAgICByZXR1cm4gKC9cXFMkLy50ZXN0KG0pKSA/ICc8dT4nICsgbSArICc8L3U+JyA6IHdtO1xuICAgIH0pO1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fKFxcU1tcXHNcXFNdKj8pX18vZywgZnVuY3Rpb24gKHdtLCBtKSB7XG4gICAgICByZXR1cm4gKC9cXFMkLy50ZXN0KG0pKSA/ICc8dT4nICsgbSArICc8L3U+JyA6IHdtO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZXNjYXBlIHJlbWFpbmluZyB1bmRlcnNjb3JlcyB0byBwcmV2ZW50IHRoZW0gYmVpbmcgcGFyc2VkIGJ5IGl0YWxpYyBhbmQgYm9sZFxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXykvZywgc2hvd2Rvd24uaGVscGVyLmVzY2FwZUNoYXJhY3RlcnNDYWxsYmFjayk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgndW5kZXJsaW5lLmFmdGVyJywgdGV4dCwgb3B0aW9ucywgZ2xvYmFscyk7XG5cbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG4vKipcbiAqIFN3YXAgYmFjayBpbiBhbGwgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB3ZSd2ZSBoaWRkZW4uXG4gKi9cbnNob3dkb3duLnN1YlBhcnNlcigndW5lc2NhcGVTcGVjaWFsQ2hhcnMnLCBmdW5jdGlvbiAodGV4dCwgb3B0aW9ucywgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG4gIHRleHQgPSBnbG9iYWxzLmNvbnZlcnRlci5fZGlzcGF0Y2goJ3VuZXNjYXBlU3BlY2lhbENoYXJzLmJlZm9yZScsIHRleHQsIG9wdGlvbnMsIGdsb2JhbHMpO1xuXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL8KoRShcXGQrKUUvZywgZnVuY3Rpb24gKHdob2xlTWF0Y2gsIG0xKSB7XG4gICAgdmFyIGNoYXJDb2RlVG9SZXBsYWNlID0gcGFyc2VJbnQobTEpO1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlVG9SZXBsYWNlKTtcbiAgfSk7XG5cbiAgdGV4dCA9IGdsb2JhbHMuY29udmVydGVyLl9kaXNwYXRjaCgndW5lc2NhcGVTcGVjaWFsQ2hhcnMuYWZ0ZXInLCB0ZXh0LCBvcHRpb25zLCBnbG9iYWxzKTtcbiAgcmV0dXJuIHRleHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ibG9ja3F1b3RlJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB0eHQgPSAnJztcbiAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGlubmVyVHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubm9kZScpKGNoaWxkcmVuW2ldLCBnbG9iYWxzKTtcblxuICAgICAgaWYgKGlubmVyVHh0ID09PSAnJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHR4dCArPSBpbm5lclR4dDtcbiAgICB9XG4gIH1cbiAgLy8gY2xlYW51cFxuICB0eHQgPSB0eHQudHJpbSgpO1xuICB0eHQgPSAnPiAnICsgdHh0LnNwbGl0KCdcXG4nKS5qb2luKCdcXG4+ICcpO1xuICByZXR1cm4gdHh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uY29kZUJsb2NrJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBsYW5nID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2xhbmd1YWdlJyksXG4gICAgICBudW0gID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3ByZWNvZGVudW0nKTtcbiAgcmV0dXJuICdgYGAnICsgbGFuZyArICdcXG4nICsgZ2xvYmFscy5wcmVMaXN0W251bV0gKyAnXFxuYGBgJztcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmNvZGVTcGFuJywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHJldHVybiAnYCcgKyBub2RlLmlubmVySFRNTCArICdgJztcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmVtcGhhc2lzJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB0eHQgPSAnJztcbiAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgdHh0ICs9ICcqJztcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICAgIGNoaWxkcmVuTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7ICsraSkge1xuICAgICAgdHh0ICs9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLm5vZGUnKShjaGlsZHJlbltpXSwgZ2xvYmFscyk7XG4gICAgfVxuICAgIHR4dCArPSAnKic7XG4gIH1cbiAgcmV0dXJuIHR4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmhlYWRlcicsIGZ1bmN0aW9uIChub2RlLCBnbG9iYWxzLCBoZWFkZXJMZXZlbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGhlYWRlck1hcmsgPSBuZXcgQXJyYXkoaGVhZGVyTGV2ZWwgKyAxKS5qb2luKCcjJyksXG4gICAgICB0eHQgPSAnJztcblxuICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICB0eHQgPSBoZWFkZXJNYXJrICsgJyAnO1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcyxcbiAgICAgICAgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyArK2kpIHtcbiAgICAgIHR4dCArPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ub2RlJykoY2hpbGRyZW5baV0sIGdsb2JhbHMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uaHInLCBmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICByZXR1cm4gJy0tLSc7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5pbWFnZScsIGZ1bmN0aW9uIChub2RlKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdHh0ID0gJyc7XG4gIGlmIChub2RlLmhhc0F0dHJpYnV0ZSgnc3JjJykpIHtcbiAgICB0eHQgKz0gJyFbJyArIG5vZGUuZ2V0QXR0cmlidXRlKCdhbHQnKSArICddKCc7XG4gICAgdHh0ICs9ICc8JyArIG5vZGUuZ2V0QXR0cmlidXRlKCdzcmMnKSArICc+JztcbiAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoJ3dpZHRoJykgJiYgbm9kZS5oYXNBdHRyaWJ1dGUoJ2hlaWdodCcpKSB7XG4gICAgICB0eHQgKz0gJyA9JyArIG5vZGUuZ2V0QXR0cmlidXRlKCd3aWR0aCcpICsgJ3gnICsgbm9kZS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpO1xuICAgIH1cblxuICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZSgndGl0bGUnKSkge1xuICAgICAgdHh0ICs9ICcgXCInICsgbm9kZS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykgKyAnXCInO1xuICAgIH1cbiAgICB0eHQgKz0gJyknO1xuICB9XG4gIHJldHVybiB0eHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5saW5rcycsIGZ1bmN0aW9uIChub2RlLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdHh0ID0gJyc7XG4gIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnaHJlZicpKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgICB0eHQgPSAnWyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgKytpKSB7XG4gICAgICB0eHQgKz0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubm9kZScpKGNoaWxkcmVuW2ldLCBnbG9iYWxzKTtcbiAgICB9XG4gICAgdHh0ICs9ICddKCc7XG4gICAgdHh0ICs9ICc8JyArIG5vZGUuZ2V0QXR0cmlidXRlKCdocmVmJykgKyAnPic7XG4gICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKCd0aXRsZScpKSB7XG4gICAgICB0eHQgKz0gJyBcIicgKyBub2RlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSArICdcIic7XG4gICAgfVxuICAgIHR4dCArPSAnKSc7XG4gIH1cbiAgcmV0dXJuIHR4dDtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmxpc3QnLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscywgdHlwZSkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHR4dCA9ICcnO1xuICBpZiAoIW5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHZhciBsaXN0SXRlbXMgICAgICAgPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICBsaXN0SXRlbXNMZW5naHQgPSBsaXN0SXRlbXMubGVuZ3RoLFxuICAgICAgbGlzdE51bSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdzdGFydCcpIHx8IDE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0SXRlbXNMZW5naHQ7ICsraSkge1xuICAgIGlmICh0eXBlb2YgbGlzdEl0ZW1zW2ldLnRhZ05hbWUgPT09ICd1bmRlZmluZWQnIHx8IGxpc3RJdGVtc1tpXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdsaScpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGRlZmluZSB0aGUgYnVsbGV0IHRvIHVzZSBpbiBsaXN0XG4gICAgdmFyIGJ1bGxldCA9ICcnO1xuICAgIGlmICh0eXBlID09PSAnb2wnKSB7XG4gICAgICBidWxsZXQgPSBsaXN0TnVtLnRvU3RyaW5nKCkgKyAnLiAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWxsZXQgPSAnLSAnO1xuICAgIH1cblxuICAgIC8vIHBhcnNlIGxpc3QgaXRlbVxuICAgIHR4dCArPSBidWxsZXQgKyBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5saXN0SXRlbScpKGxpc3RJdGVtc1tpXSwgZ2xvYmFscyk7XG4gICAgKytsaXN0TnVtO1xuICB9XG5cbiAgLy8gYWRkIGNvbW1lbnQgYXQgdGhlIGVuZCB0byBwcmV2ZW50IGNvbnNlY3V0aXZlIGxpc3RzIHRvIGJlIHBhcnNlZCBhcyBvbmVcbiAgdHh0ICs9ICdcXG48IS0tIC0tPlxcbic7XG4gIHJldHVybiB0eHQudHJpbSgpO1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubGlzdEl0ZW0nLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGxpc3RJdGVtVHh0ID0gJyc7XG5cbiAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzLFxuICAgICAgY2hpbGRyZW5MZW5naHQgPSBjaGlsZHJlbi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmdodDsgKytpKSB7XG4gICAgbGlzdEl0ZW1UeHQgKz0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubm9kZScpKGNoaWxkcmVuW2ldLCBnbG9iYWxzKTtcbiAgfVxuICAvLyBpZiBpdCdzIG9ubHkgb25lIGxpbmVyLCB3ZSBuZWVkIHRvIGFkZCBhIG5ld2xpbmUgYXQgdGhlIGVuZFxuICBpZiAoIS9cXG4kLy50ZXN0KGxpc3RJdGVtVHh0KSkge1xuICAgIGxpc3RJdGVtVHh0ICs9ICdcXG4nO1xuICB9IGVsc2Uge1xuICAgIC8vIGl0J3MgbXVsdGlwYXJhZ3JhcGgsIHNvIHdlIG5lZWQgdG8gaW5kZW50XG4gICAgbGlzdEl0ZW1UeHQgPSBsaXN0SXRlbVR4dFxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLmpvaW4oJ1xcbiAgICAnKVxuICAgICAgLnJlcGxhY2UoL14gezR9JC9nbSwgJycpXG4gICAgICAucmVwbGFjZSgvXFxuXFxuKy9nLCAnXFxuXFxuJyk7XG4gIH1cblxuICByZXR1cm4gbGlzdEl0ZW1UeHQ7XG59KTtcblxyXG5cblxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ubm9kZScsIGZ1bmN0aW9uIChub2RlLCBnbG9iYWxzLCBzcGFuc09ubHkpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHNwYW5zT25seSA9IHNwYW5zT25seSB8fCBmYWxzZTtcblxuICB2YXIgdHh0ID0gJyc7XG5cbiAgLy8gZWRnZSBjYXNlIG9mIHRleHQgd2l0aG91dCB3cmFwcGVyIHBhcmFncmFwaFxuICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgIHJldHVybiBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi50eHQnKShub2RlLCBnbG9iYWxzKTtcbiAgfVxuXG4gIC8vIEhUTUwgY29tbWVudFxuICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gOCkge1xuICAgIHJldHVybiAnPCEtLScgKyBub2RlLmRhdGEgKyAnLS0+XFxuXFxuJztcbiAgfVxuXG4gIC8vIHByb2Nlc3Mgb25seSBub2RlIGVsZW1lbnRzXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIHRhZ05hbWUgPSBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICBzd2l0Y2ggKHRhZ05hbWUpIHtcblxuICAgIC8vXG4gICAgLy8gQkxPQ0tTXG4gICAgLy9cbiAgICBjYXNlICdoMSc6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5oZWFkZXInKShub2RlLCBnbG9iYWxzLCAxKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdoMic6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5oZWFkZXInKShub2RlLCBnbG9iYWxzLCAyKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdoMyc6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5oZWFkZXInKShub2RlLCBnbG9iYWxzLCAzKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdoNCc6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5oZWFkZXInKShub2RlLCBnbG9iYWxzLCA0KSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdoNSc6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5oZWFkZXInKShub2RlLCBnbG9iYWxzLCA1KSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdoNic6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5oZWFkZXInKShub2RlLCBnbG9iYWxzLCA2KSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3AnOlxuICAgICAgaWYgKCFzcGFuc09ubHkpIHsgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ucGFyYWdyYXBoJykobm9kZSwgZ2xvYmFscykgKyAnXFxuXFxuJzsgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmJsb2NrcXVvdGUnKShub2RlLCBnbG9iYWxzKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hyJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmhyJykobm9kZSwgZ2xvYmFscykgKyAnXFxuXFxuJzsgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvbCc6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5saXN0Jykobm9kZSwgZ2xvYmFscywgJ29sJykgKyAnXFxuXFxuJzsgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd1bCc6XG4gICAgICBpZiAoIXNwYW5zT25seSkgeyB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5saXN0Jykobm9kZSwgZ2xvYmFscywgJ3VsJykgKyAnXFxuXFxuJzsgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwcmVjb2RlJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmNvZGVCbG9jaycpKG5vZGUsIGdsb2JhbHMpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncHJlJzpcbiAgICAgIGlmICghc3BhbnNPbmx5KSB7IHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLnByZScpKG5vZGUsIGdsb2JhbHMpICsgJ1xcblxcbic7IH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGFibGUnOlxuICAgICAgaWYgKCFzcGFuc09ubHkpIHsgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24udGFibGUnKShub2RlLCBnbG9iYWxzKSArICdcXG5cXG4nOyB9XG4gICAgICBicmVhaztcblxuICAgIC8vXG4gICAgLy8gU1BBTlNcbiAgICAvL1xuICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uY29kZVNwYW4nKShub2RlLCBnbG9iYWxzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZW0nOlxuICAgIGNhc2UgJ2knOlxuICAgICAgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uZW1waGFzaXMnKShub2RlLCBnbG9iYWxzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc3Ryb25nJzpcbiAgICBjYXNlICdiJzpcbiAgICAgIHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLnN0cm9uZycpKG5vZGUsIGdsb2JhbHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZWwnOlxuICAgICAgdHh0ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uc3RyaWtldGhyb3VnaCcpKG5vZGUsIGdsb2JhbHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdhJzpcbiAgICAgIHR4dCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLmxpbmtzJykobm9kZSwgZ2xvYmFscyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgICB0eHQgPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5pbWFnZScpKG5vZGUsIGdsb2JhbHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdHh0ID0gbm9kZS5vdXRlckhUTUwgKyAnXFxuXFxuJztcbiAgfVxuXG4gIC8vIGNvbW1vbiBub3JtYWxpemF0aW9uXG4gIC8vIFRPRE8gZXZlbnR1YWxseVxuXG4gIHJldHVybiB0eHQ7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5wYXJhZ3JhcGgnLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHR4dCA9ICcnO1xuICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMsXG4gICAgICAgIGNoaWxkcmVuTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7ICsraSkge1xuICAgICAgdHh0ICs9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLm5vZGUnKShjaGlsZHJlbltpXSwgZ2xvYmFscyk7XG4gICAgfVxuICB9XG5cbiAgLy8gc29tZSB0ZXh0IG5vcm1hbGl6YXRpb25cbiAgdHh0ID0gdHh0LnRyaW0oKTtcblxuICByZXR1cm4gdHh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24ucHJlJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBudW0gID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3ByZW51bScpO1xuICByZXR1cm4gJzxwcmU+JyArIGdsb2JhbHMucHJlTGlzdFtudW1dICsgJzwvcHJlPic7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5zdHJpa2V0aHJvdWdoJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB0eHQgPSAnJztcbiAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgdHh0ICs9ICd+fic7XG4gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyArK2kpIHtcbiAgICAgIHR4dCArPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ub2RlJykoY2hpbGRyZW5baV0sIGdsb2JhbHMpO1xuICAgIH1cbiAgICB0eHQgKz0gJ35+JztcbiAgfVxuICByZXR1cm4gdHh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24uc3Ryb25nJywgZnVuY3Rpb24gKG5vZGUsIGdsb2JhbHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB0eHQgPSAnJztcbiAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgdHh0ICs9ICcqKic7XG4gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyArK2kpIHtcbiAgICAgIHR4dCArPSBzaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi5ub2RlJykoY2hpbGRyZW5baV0sIGdsb2JhbHMpO1xuICAgIH1cbiAgICB0eHQgKz0gJyoqJztcbiAgfVxuICByZXR1cm4gdHh0O1xufSk7XG5cclxuc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24udGFibGUnLCBmdW5jdGlvbiAobm9kZSwgZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHR4dCA9ICcnLFxuICAgICAgdGFibGVBcnJheSA9IFtbXSwgW11dLFxuICAgICAgaGVhZGluZ3MgICA9IG5vZGUucXVlcnlTZWxlY3RvckFsbCgndGhlYWQ+dHI+dGgnKSxcbiAgICAgIHJvd3MgICAgICAgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3Rib2R5PnRyJyksXG4gICAgICBpLCBpaTtcbiAgZm9yIChpID0gMDsgaSA8IGhlYWRpbmdzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGhlYWRDb250ZW50ID0gc2hvd2Rvd24uc3ViUGFyc2VyKCdtYWtlTWFya2Rvd24udGFibGVDZWxsJykoaGVhZGluZ3NbaV0sIGdsb2JhbHMpLFxuICAgICAgICBhbGxpZ24gPSAnLS0tJztcblxuICAgIGlmIChoZWFkaW5nc1tpXS5oYXNBdHRyaWJ1dGUoJ3N0eWxlJykpIHtcbiAgICAgIHZhciBzdHlsZSA9IGhlYWRpbmdzW2ldLmdldEF0dHJpYnV0ZSgnc3R5bGUnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICAgIGNhc2UgJ3RleHQtYWxpZ246bGVmdDsnOlxuICAgICAgICAgIGFsbGlnbiA9ICc6LS0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGV4dC1hbGlnbjpyaWdodDsnOlxuICAgICAgICAgIGFsbGlnbiA9ICctLS06JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGV4dC1hbGlnbjpjZW50ZXI7JzpcbiAgICAgICAgICBhbGxpZ24gPSAnOi0tLTonO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0YWJsZUFycmF5WzBdW2ldID0gaGVhZENvbnRlbnQudHJpbSgpO1xuICAgIHRhYmxlQXJyYXlbMV1baV0gPSBhbGxpZ247XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7ICsraSkge1xuICAgIHZhciByID0gdGFibGVBcnJheS5wdXNoKFtdKSAtIDEsXG4gICAgICAgIGNvbHMgPSByb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZCcpO1xuXG4gICAgZm9yIChpaSA9IDA7IGlpIDwgaGVhZGluZ3MubGVuZ3RoOyArK2lpKSB7XG4gICAgICB2YXIgY2VsbENvbnRlbnQgPSAnICc7XG4gICAgICBpZiAodHlwZW9mIGNvbHNbaWldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjZWxsQ29udGVudCA9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLnRhYmxlQ2VsbCcpKGNvbHNbaWldLCBnbG9iYWxzKTtcbiAgICAgIH1cbiAgICAgIHRhYmxlQXJyYXlbcl0ucHVzaChjZWxsQ29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNlbGxTcGFjZXNDb3VudCA9IDM7XG4gIGZvciAoaSA9IDA7IGkgPCB0YWJsZUFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgZm9yIChpaSA9IDA7IGlpIDwgdGFibGVBcnJheVtpXS5sZW5ndGg7ICsraWkpIHtcbiAgICAgIHZhciBzdHJMZW4gPSB0YWJsZUFycmF5W2ldW2lpXS5sZW5ndGg7XG4gICAgICBpZiAoc3RyTGVuID4gY2VsbFNwYWNlc0NvdW50KSB7XG4gICAgICAgIGNlbGxTcGFjZXNDb3VudCA9IHN0ckxlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgdGFibGVBcnJheS5sZW5ndGg7ICsraSkge1xuICAgIGZvciAoaWkgPSAwOyBpaSA8IHRhYmxlQXJyYXlbaV0ubGVuZ3RoOyArK2lpKSB7XG4gICAgICBpZiAoaSA9PT0gMSkge1xuICAgICAgICBpZiAodGFibGVBcnJheVtpXVtpaV0uc2xpY2UoLTEpID09PSAnOicpIHtcbiAgICAgICAgICB0YWJsZUFycmF5W2ldW2lpXSA9IHNob3dkb3duLmhlbHBlci5wYWRFbmQodGFibGVBcnJheVtpXVtpaV0uc2xpY2UoLTEpLCBjZWxsU3BhY2VzQ291bnQgLSAxLCAnLScpICsgJzonO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhYmxlQXJyYXlbaV1baWldID0gc2hvd2Rvd24uaGVscGVyLnBhZEVuZCh0YWJsZUFycmF5W2ldW2lpXSwgY2VsbFNwYWNlc0NvdW50LCAnLScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWJsZUFycmF5W2ldW2lpXSA9IHNob3dkb3duLmhlbHBlci5wYWRFbmQodGFibGVBcnJheVtpXVtpaV0sIGNlbGxTcGFjZXNDb3VudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHR4dCArPSAnfCAnICsgdGFibGVBcnJheVtpXS5qb2luKCcgfCAnKSArICcgfFxcbic7XG4gIH1cblxuICByZXR1cm4gdHh0LnRyaW0oKTtcbn0pO1xuXHJcbnNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLnRhYmxlQ2VsbCcsIGZ1bmN0aW9uIChub2RlLCBnbG9iYWxzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdHh0ID0gJyc7XG4gIGlmICghbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzLFxuICAgICAgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgKytpKSB7XG4gICAgdHh0ICs9IHNob3dkb3duLnN1YlBhcnNlcignbWFrZU1hcmtkb3duLm5vZGUnKShjaGlsZHJlbltpXSwgZ2xvYmFscywgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIHR4dC50cmltKCk7XG59KTtcblxyXG5zaG93ZG93bi5zdWJQYXJzZXIoJ21ha2VNYXJrZG93bi50eHQnLCBmdW5jdGlvbiAobm9kZSkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHR4dCA9IG5vZGUubm9kZVZhbHVlO1xuXG4gIC8vIG11bHRpcGxlIHNwYWNlcyBhcmUgY29sbGFwc2VkXG4gIHR4dCA9IHR4dC5yZXBsYWNlKC8gKy9nLCAnICcpO1xuXG4gIC8vIHJlcGxhY2UgdGhlIGN1c3RvbSDCqE5CU1A7IHdpdGggYSBzcGFjZVxuICB0eHQgPSB0eHQucmVwbGFjZSgvwqhOQlNQOy9nLCAnICcpO1xuXG4gIC8vIFwiLCA8LCA+IGFuZCAmIHNob3VsZCByZXBsYWNlIGVzY2FwZWQgaHRtbCBlbnRpdGllc1xuICB0eHQgPSBzaG93ZG93bi5oZWxwZXIudW5lc2NhcGVIVE1MRW50aXRpZXModHh0KTtcblxuICAvLyBlc2NhcGUgbWFya2Rvd24gbWFnaWMgY2hhcmFjdGVyc1xuICAvLyBlbXBoYXNpcywgc3Ryb25nIGFuZCBzdHJpa2V0aHJvdWdoIC0gY2FuIGFwcGVhciBldmVyeXdoZXJlXG4gIC8vIHdlIGFsc28gZXNjYXBlIHBpcGUgKHwpIGJlY2F1c2Ugb2YgdGFibGVzXG4gIC8vIGFuZCBlc2NhcGUgYCBiZWNhdXNlIG9mIGNvZGUgYmxvY2tzIGFuZCBzcGFuc1xuICB0eHQgPSB0eHQucmVwbGFjZSgvKFsqX358YF0pL2csICdcXFxcJDEnKTtcblxuICAvLyBlc2NhcGUgPiBiZWNhdXNlIG9mIGJsb2NrcXVvdGVzXG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9eKFxccyopPi9nLCAnXFxcXCQxPicpO1xuXG4gIC8vIGhhc2ggY2hhcmFjdGVyLCBvbmx5IHRyb3VibGVzb21lIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGJlY2F1c2Ugb2YgaGVhZGVyc1xuICB0eHQgPSB0eHQucmVwbGFjZSgvXiMvZ20sICdcXFxcIycpO1xuXG4gIC8vIGhvcml6b250YWwgcnVsZXNcbiAgdHh0ID0gdHh0LnJlcGxhY2UoL14oXFxzKikoWy09XXszLH0pKFxccyopJC8sICckMVxcXFwkMiQzJyk7XG5cbiAgLy8gZG90LCBiZWNhdXNlIG9mIG9yZGVyZWQgbGlzdHMsIG9ubHkgdHJvdWJsZXNvbWUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgd2hlbiBwcmVjZWRlZCBieSBhbiBpbnRlZ2VyXG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9eKCB7MCwzfVxcZCspXFwuL2dtLCAnJDFcXFxcLicpO1xuXG4gIC8vICssICogYW5kIC0sIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGJlY29tZXMgYSBsaXN0LCBzbyB3ZSBuZWVkIHRvIGVzY2FwZSB0aGVtIGFsc28gKGFzdGVyaXNrIHdhcyBhbHJlYWR5IGVzY2FwZWQpXG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9eKCB7MCwzfSkoWystXSkvZ20sICckMVxcXFwkMicpO1xuXG4gIC8vIGltYWdlcyBhbmQgbGlua3MsIF0gZm9sbG93ZWQgYnkgKCBpcyBwcm9ibGVtYXRpYywgc28gd2UgZXNjYXBlIGl0XG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9dKFtcXHNdKilcXCgvZywgJ1xcXFxdJDFcXFxcKCcpO1xuXG4gIC8vIHJlZmVyZW5jZSBVUklzIG11c3QgYWxzbyBiZSBlc2NhcGVkXG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9eIHswLDN9XFxbKFtcXFMgXFx0XSo/KV06L2dtLCAnXFxcXFskMV06Jyk7XG5cbiAgcmV0dXJuIHR4dDtcbn0pO1xuXHJcbnZhciByb290ID0gdGhpcztcblxuLy8gQU1EIExvYWRlclxuaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICByZXR1cm4gc2hvd2Rvd247XG4gIH0pO1xuXG4vLyBDb21tb25KUy9ub2RlSlMgTG9hZGVyXG59IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gc2hvd2Rvd247XG5cbi8vIFJlZ3VsYXIgQnJvd3NlciBsb2FkZXJcbn0gZWxzZSB7XG4gIHJvb3Quc2hvd2Rvd24gPSBzaG93ZG93bjtcbn1cbn0pLmNhbGwodGhpcyk7XHJcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hvd2Rvd24uanMubWFwXHJcbiIsInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpbmRleF9qc18xID0gcmVxdWlyZShcIi4uL25vZGVfbW9kdWxlcy9oc2xheW91dC9pbmRleC5qc1wiKTtcbmNvbnN0IEZJTEUgPSAnLi9kYXRhL2luZGV4Lmpzb24nO1xuY2xhc3MgRG9jU2V0cyB7XG4gICAgc3RhdGljIGFkZChjb250ZW50LCBmaWxlKSB7XG4gICAgICAgIGNvbnN0IGxpYiA9IGNvbnRlbnQubmFtZTtcbiAgICAgICAgY29uc3QgaSA9IERvY1NldHMuZ0xpc3QuZG9jcy5pbmRleE9mKGZpbGUpO1xuICAgICAgICBEb2NTZXRzLmdMaXN0LnNldFtpXSA9IGxpYjtcbiAgICAgICAgRG9jU2V0cy5nTGlzdC5pbmRleFtsaWJdID0ge307XG4gICAgICAgIHJlY3Vyc2l2ZUluZGV4KGNvbnRlbnQsIERvY1NldHMuZ0xpc3QuaW5kZXhbbGliXSwgbGliKTtcbiAgICB9XG4gICAgc3RhdGljIGxvYWRMaXN0KGZpbGUpIHtcbiAgICAgICAgZmlsZSA9IGZpbGU7XG4gICAgICAgIGxldCBpID0gZmlsZS5sYXN0SW5kZXhPZignLycpO1xuICAgICAgICBjb25zdCBkaXIgPSBmaWxlLnN1YnN0cmluZygwLCBpICsgMSk7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0ucmVxdWVzdCh7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBmaWxlIHx8IEZJTEUgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIERvY1NldHMuZ1RpdGxlID0gcmVzdWx0LnRpdGxlO1xuICAgICAgICAgICAgRG9jU2V0cy5nTGlzdC5kb2NzID0gcmVzdWx0LmRvY3M7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0LmRvY3MubWFwKChmKSA9PiBsb2FkRG9jU2V0KGRpciwgZikpKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQobGliLCBpZCA9IDApIHtcbiAgICAgICAgcmV0dXJuIChsaWIgJiYgRG9jU2V0cy5nTGlzdC5pbmRleFtsaWJdKSA/XG4gICAgICAgICAgICBEb2NTZXRzLmdMaXN0LmluZGV4W2xpYl1baWQgKyAnJ11cbiAgICAgICAgICAgIDogRG9jU2V0cy5nTGlzdC5zZXQ7XG4gICAgfVxufVxuRG9jU2V0cy5nTGlzdCA9IHsgc2V0OiBbXSwgaW5kZXg6IHt9LCBkb2NzOiBbXSB9O1xuZXhwb3J0cy5Eb2NTZXRzID0gRG9jU2V0cztcbmZ1bmN0aW9uIGxvYWREb2NTZXQoZGlyLCBmaWxlKSB7XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubS5yZXF1ZXN0KHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IGRpciArIGZpbGUgfSlcbiAgICAgICAgLnRoZW4oKHIpID0+IERvY1NldHMuYWRkKHIsIGZpbGUpKVxuICAgICAgICAuY2F0Y2goY29uc29sZS5sb2cpO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlSW5kZXgoY29udGVudCwgaW5kZXgsIGxpYiwgcGF0aCA9ICcnKSB7XG4gICAgZnVuY3Rpb24gZ2V0TmV3UGF0aChjb250ZW50KSB7XG4gICAgICAgIGNvbnRlbnQubmFtZSA9IGNvbnRlbnQubmFtZS5yZXBsYWNlKC9bXCInXSguKylbXCInXXwoLispL2csIFwiJDEkMlwiKTtcbiAgICAgICAgY29uc3QgZWxOYW1lID0gY29udGVudC5uYW1lLm1hdGNoKC8oW15cXC9dKykkLylbMV07XG4gICAgICAgIGNvbnRlbnQubmFtZSA9IGVsTmFtZTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQuZnVsbFBhdGggPSAocGF0aCA9PT0gJycpID8gZWxOYW1lIDogYCR7cGF0aH0uJHtlbE5hbWV9YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0lmTW9kdWxlKGNvbnRlbnQpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQuY29tbWVudCAmJiBjb250ZW50LmNvbW1lbnQudGFncykge1xuICAgICAgICAgICAgY29udGVudC5jb21tZW50LnRhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZy50YWcgPT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJNb2R1bGUgPSB0YWcudGV4dC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udGVudC5saWIgPSBsaWI7XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnb2JqZWN0JyAmJiBjb250ZW50Lm5hbWUpIHtcbiAgICAgICAgY29uc3QgbmV3UGF0aCA9IGdldE5ld1BhdGgoY29udGVudCk7XG4gICAgICAgIG1hcmtJZk1vZHVsZShjb250ZW50KTtcbiAgICAgICAgaW5kZXhbY29udGVudC5pZCArICcnXSA9IGNvbnRlbnQ7XG4gICAgICAgIGlmIChuZXdQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGluZGV4W25ld1BhdGhdID0gY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGVudC5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29udGVudC5jaGlsZHJlbi5tYXAoKGMpID0+IHJlY3Vyc2l2ZUluZGV4KGMsIGluZGV4LCBsaWIsIG5ld1BhdGgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGVudC5zaWduYXR1cmVzKSB7XG4gICAgICAgICAgICBjb250ZW50LnNpZ25hdHVyZXMubWFwKChjKSA9PiByZWN1cnNpdmVJbmRleChjLCBpbmRleCwgbGliLCBuZXdQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRlbnQucGFyYW1ldGVycykge1xuICAgICAgICAgICAgY29udGVudC5wYXJhbWV0ZXJzLm1hcCgoYykgPT4gcmVjdXJzaXZlSW5kZXgoYywgaW5kZXgsIGxpYiwgbmV3UGF0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50LnR5cGUgJiYgY29udGVudC50eXBlLmRlY2xhcmF0aW9uICYmIGNvbnRlbnQudHlwZS5kZWNsYXJhdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29udGVudC50eXBlLmRlY2xhcmF0aW9uLmNoaWxkcmVuLm1hcCgoYykgPT4gcmVjdXJzaXZlSW5kZXgoYywgaW5kZXgsIGxpYiwgbmV3UGF0aCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUkc5alUyVjBjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5RWIyTlRaWFJ6TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJVMEVzWjBWQlFYbEVPMEZCVFhwRUxFMUJRVTBzU1VGQlNTeEhRVUZWTEcxQ1FVRnRRaXhEUVVGRE8wRkJUM2hETEUxQlFXRXNUMEZCVHp0SlFWVlVMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlZ5eEZRVUZGTEVsQlFWYzdVVUZEZEVNc1RVRkJUU3hIUVVGSExFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTjZRaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETTBNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8xRkJRek5DTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTTVRaXhqUVVGakxFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpORUxFTkJRVU03U1VGUlRTeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVZrN1VVRkRMMElzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTmFMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRPVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJ4RExFOUJRVThzV1VGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hMUVVGTExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVsQlFVa3NTVUZCU1N4SlFVRkpMRVZCUVVNc1EwRkJRenRoUVVOd1JDeEpRVUZKTEVOQlFVTXNRMEZCUXl4TlFVRlZMRVZCUVVVc1JVRkJSVHRaUVVOcVFpeFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRE9VSXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTnFReXhQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpGRkxFTkJRVU1zUTBGQlF6dGhRVU5FTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGVFSXNRMEZCUXp0SlFWVk5MRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlZ5eEZRVUZGTEV0QlFXbENMRU5CUVVNN1VVRkROME1zVDBGQlR5eERRVUZETEVkQlFVY3NTVUZCU1N4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkJMRU5CUVVNN1dVRkRja01zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZETEVWQlFVVXNRMEZCUXp0WlFVTnFReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNN1NVRkRNVUlzUTBGQlF6czdRVUV2UTJNc1lVRkJTeXhIUVVFMFF5eEZRVUZETEVkQlFVY3NSVUZCVnl4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRExFVkJRVVVzUlVGQlJTeEpRVUZKTEVWQlFWY3NSVUZCUlN4RlFVRkRMRU5CUVVNN1FVRkdjRWdzTUVKQmEwUkRPMEZCVVVRc1UwRkJVeXhWUVVGVkxFTkJRVU1zUjBGQlZTeEZRVUZGTEVsQlFWYzdTVUZEZGtNc1QwRkJUeXhaUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEhRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMU5CUXpkRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1UwRkRja01zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVNMVFpeERRVUZETzBGQlUwUXNVMEZCVXl4alFVRmpMRU5CUVVNc1QwRkJWeXhGUVVGRkxFdEJRVk1zUlVGQlJTeEhRVUZWTEVWQlFVVXNTVUZCU1N4SFFVRkRMRVZCUVVVN1NVRkRMMFFzVTBGQlV5eFZRVUZWTEVOQlFVTXNUMEZCVnp0UlFVTXpRaXhQUVVGUExFTkJRVU1zU1VGQlNTeEhRVUZITEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExHOUNRVUZ2UWl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRMnhGTEUxQlFVMHNUVUZCVFN4SFFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMjVFTEU5QlFVOHNRMEZCUXl4SlFVRkpMRWRCUVVjc1RVRkJUU3hEUVVGRE8xRkJRM1JDTEU5QlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFbEJRVWtzUzBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVONFJTeERRVUZETzBsQlJVUXNVMEZCVXl4WlFVRlpMRU5CUVVNc1QwRkJWenRSUVVNM1FpeEpRVUZKTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVTdXVUZEZWtNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJUeXhGUVVGRkxFVkJRVVU3WjBKQlEzSkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFZEJRVWNzUzBGQlN5eFJRVUZSTEVWQlFVVTdiMEpCUTNSQ0xFOUJRVThzUTBGQlF5eFhRVUZYTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dHBRa0ZEZWtNN1dVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU5PTzBsQlEwd3NRMEZCUXp0SlFVTkVMRTlCUVU4c1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETzBsQlEyeENMRWxCUVVrc1QwRkJUeXhQUVVGUExFdEJRVXNzVVVGQlVTeEpRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVN1VVRkROME1zVFVGQlRTeFBRVUZQTEVkQlFVY3NWVUZCVlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSWEJETEZsQlFWa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVWMFFpeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1IwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTTdVVUZETDBJc1NVRkJTU3hQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNSVUZCUlR0WlFVRkZMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTTdVMEZCUlR0UlFVVnVSQ3hKUVVGSkxFOUJRVThzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEYkVJc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlF6TkZPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlZTeEZRVUZGTzFsQlEzQkNMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCU3l4RlFVRkZMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU0zUlR0UlFVTkVMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVlVzUlVGQlJUdFpRVU53UWl4UFFVRlBMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE4wVTdVVUZEUkN4SlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFbEJRVWtzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRWxCUVVrc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNVVUZCVVN4RlFVRkZPMWxCUXk5RkxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEVkQlFVY3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRelZHTzB0QlEwbzdRVUZEVEN4RFFVRkRJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoc2xheW91dCA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanNcIik7XG5jb25zdCBoZWFkZXIgPSByZXF1aXJlKFwiLi92aWV3L0RvY3NNZW51XCIpO1xuY29uc3QgbGVmdCA9IHJlcXVpcmUoXCIuL3ZpZXcvTGVmdE5hdlwiKTtcbmNvbnN0IG1haW4gPSByZXF1aXJlKFwiLi92aWV3L01haW5EZXRhaWxcIik7XG5jb25zdCBpbmRleF9qc18xID0gcmVxdWlyZShcIi4uL25vZGVfbW9kdWxlcy9oc2xheW91dC9pbmRleC5qc1wiKTtcbmNvbnN0IGluZGV4X2pzXzIgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgVGl0bGVIZWlnaHQgPSAnMzBweCc7XG5jb25zdCBGb290ZXJIZWlnaHQgPSAnMTBweCc7XG5jb25zdCBMZWZ0TmF2V2lkdGggPSAnMjAwcHgnO1xuY29uc3QgbXlDb25maWcyID0ge1xuICAgIHJvb3Q6IHsgTGF5b3V0OiB7XG4gICAgICAgICAgICByb3dzOiBbVGl0bGVIZWlnaHQsIFwiZmlsbFwiLCBGb290ZXJIZWlnaHRdLFxuICAgICAgICAgICAgY3NzOiAnLmhzLXNpdGUtbWFpbicsXG4gICAgICAgICAgICBjb250ZW50OiBbJ2hlYWRlcicsICdib2R5JywgJ2Zvb3RlciddXG4gICAgICAgIH0gfSxcbiAgICBoZWFkZXI6IHsgTGF5b3V0OiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbTGVmdE5hdldpZHRoLCBcImZpbGxcIl0sXG4gICAgICAgICAgICBjc3M6ICcuaHMtc2l0ZS1oZWFkZXInLFxuICAgICAgICAgICAgY29udGVudDogWyd0aXRsZScsICdtZW51J11cbiAgICAgICAgfSB9LFxuICAgIGJvZHk6IHsgTGF5b3V0OiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbTGVmdE5hdldpZHRoLCBcImZpbGxcIl0sXG4gICAgICAgICAgICBjb250ZW50OiBbJ2xlZnRuYXYnLCAnbWFpbkRldGFpbCddXG4gICAgICAgIH0gfSxcbiAgICBmb290ZXI6IHsgTGF5b3V0OiB7XG4gICAgICAgICAgICBjc3M6ICcuaHMtc2l0ZS1mb290ZXInLFxuICAgICAgICAgICAgY29udGVudDogJyhjKSBIZWxwZnVsIFNjcmlwdHMnXG4gICAgICAgIH0gfSxcbiAgICB0aXRsZTogeyBMYXlvdXQ6IHtcbiAgICAgICAgICAgIGNzczogJy5ocy1zaXRlLXRpdGxlJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdIU0RvY3MnLFxuICAgICAgICAgICAgaHJlZjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9IZWxwZnVsU2NyaXB0cy9oc0RvY3MnXG4gICAgICAgIH0gfSxcbiAgICBtZW51OiB7IERvY3NNZW51OiB7XG4gICAgICAgICAgICBkb2NTZXQ6IFwiLi9kYXRhL2luZGV4Lmpzb25cIlxuICAgICAgICB9IH0sXG4gICAgbGVmdG5hdjogeyBMZWZ0TmF2OiB7fSB9LFxuICAgIG1haW5EZXRhaWw6IHsgTWFpbkRldGFpbDoge30gfVxufTtcbmZ1bmN0aW9uIGluaXQoKSB7XG4gICAgY29uc3QgUm91dGVyID0ge1xuICAgICAgICB2aWV3OiAobm9kZSkgPT4gaW5kZXhfanNfMS5tKGluZGV4X2pzXzIuQ29uZmlnLCBPYmplY3QuYXNzaWduKHsgc291cmNlOiBteUNvbmZpZzIsIGNvbnRleHQ6IFtoc2xheW91dCwgaGVhZGVyLCBsZWZ0LCBtYWluXSB9LCB7IHJvdXRlOiB7IGZpZWxkOiBpbmRleF9qc18xLm0ucm91dGUucGFyYW0oJ2ZpZWxkJyksIGxpYjogaW5kZXhfanNfMS5tLnJvdXRlLnBhcmFtKCdsaWInKSB9IH0pKVxuICAgIH07XG4gICAgaW5kZXhfanNfMS5tLnJvdXRlKGRvY3VtZW50LmJvZHksICcvYXBpJywge1xuICAgICAgICAnL2FwaSc6IFJvdXRlcixcbiAgICAgICAgJy9hcGkvOmxpYic6IFJvdXRlcixcbiAgICAgICAgJy9hcGkvOmxpYi86ZmllbGQnOiBSb3V0ZXJcbiAgICB9KTtcbn1cbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMmwwWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OVRhWFJsTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJTMEVzT0VSQlFTdEVPMEZCUXk5RUxEQkRRVUV5UXp0QlFVTXpReXgxUTBGQk1FTTdRVUZETVVNc01FTkJRVFpETzBGQlJUZERMR2RGUVVFMlJEdEJRVU0zUkN4blJVRkJOa1E3UVVGRk4wUXNUVUZCVFN4WFFVRlhMRWRCUVVzc1RVRkJUU3hEUVVGRE8wRkJRemRDTEUxQlFVMHNXVUZCV1N4SFFVRkpMRTFCUVUwc1EwRkJRenRCUVVNM1FpeE5RVUZOTEZsQlFWa3NSMEZCU1N4UFFVRlBMRU5CUVVNN1FVRkZPVUlzVFVGQlRTeFRRVUZUTEVkQlFVYzdTVUZEWkN4SlFVRkpMRVZCUVVVc1JVRkJSU3hOUVVGTkxFVkJRVVU3V1VGRFdpeEpRVUZKTEVWQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVc1RVRkJUU3hGUVVGRkxGbEJRVmtzUTBGQlF6dFpRVU14UXl4SFFVRkhMRVZCUVVVc1pVRkJaVHRaUVVOd1FpeFBRVUZQTEVWQlFVVXNRMEZCUXl4UlFVRlJMRVZCUVVVc1RVRkJUU3hGUVVGRkxGRkJRVkVzUTBGQlF6dFRRVU40UXl4RlFVRkRPMGxCUTBZc1RVRkJUU3hGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZETzFsQlEySXNUMEZCVHl4RlFVRkZMRU5CUVVNc1dVRkJXU3hGUVVGRkxFMUJRVTBzUTBGQlF6dFpRVU12UWl4SFFVRkhMRVZCUVVVc2FVSkJRV2xDTzFsQlEzUkNMRTlCUVU4c1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVOQlFVTTdVMEZETjBJc1JVRkJRenRKUVVOR0xFbEJRVWtzUlVGQlJTeEZRVUZGTEUxQlFVMHNSVUZCUXp0WlFVTllMRTlCUVU4c1JVRkJSU3hEUVVGRExGbEJRVmtzUlVGQlJTeE5RVUZOTEVOQlFVTTdXVUZETDBJc1QwRkJUeXhGUVVGRkxFTkJRVU1zVTBGQlV5eEZRVUZGTEZsQlFWa3NRMEZCUXp0VFFVTnlReXhGUVVGRE8wbEJRMFlzVFVGQlRTeEZRVUZGTEVWQlFVTXNUVUZCVFN4RlFVRkZPMWxCUTJJc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0WlFVTjBRaXhQUVVGUExFVkJRVVVzY1VKQlFYRkNPMU5CUTJwRExFVkJRVU03U1VGRFJpeExRVUZMTEVWQlFVVXNSVUZCUXl4TlFVRk5MRVZCUVVzN1dVRkRaaXhIUVVGSExFVkJRVVVzWjBKQlFXZENPMWxCUTNKQ0xFOUJRVThzUlVGQlJTeFJRVUZSTzFsQlEycENMRWxCUVVrc1JVRkJSU3d3UTBGQk1FTTdVMEZEYmtRc1JVRkJRenRKUVVOR0xFbEJRVWtzUlVGQlJTeEZRVUZGTEZGQlFWRXNSVUZCU3p0WlFVTnFRaXhOUVVGTkxFVkJRVU1zYlVKQlFXMUNPMU5CUXpkQ0xFVkJRVU03U1VGRFJpeFBRVUZQTEVWQlFVc3NSVUZCUXl4UFFVRlBMRVZCUVVzc1JVRkJSU3hGUVVGRE8wbEJRelZDTEZWQlFWVXNSVUZCUlN4RlFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFVkJRVU03UTBGREwwSXNRMEZCUXp0QlFVZEdMRk5CUVdkQ0xFbEJRVWs3U1VGRGFFSXNUVUZCVFN4TlFVRk5MRWRCUVVjN1VVRkRXQ3hKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZWTEVWQlFVVXNSVUZCUlN4RFFVTnFRaXhaUVVGRExFTkJRVU1zYVVKQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVU1zVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRVZCUVVVc1EwRkJReXhSUVVGUkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJReXhGUVVNMVJDeEZRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJReXhaUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVU1zV1VGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdTMEZEYkVjc1EwRkJRenRKUVVOR0xGbEJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVU3VVVGRE0wSXNUVUZCVFN4RlFVRmpMRTFCUVUwN1VVRkRNVUlzVjBGQlZ5eEZRVUZUTEUxQlFVMDdVVUZETVVJc2EwSkJRV3RDTEVWQlFVVXNUVUZCVFR0TFFVTTNRaXhEUVVGRExFTkJRVU03UVVGRFVDeERRVUZETzBGQldFUXNiMEpCVjBNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IFNpdGVfMSA9IHJlcXVpcmUoXCIuL1NpdGVcIik7XG5TaXRlXzEuaW5pdCgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGTFFTeHBRMEZCT0VJN1FVRkZPVUlzVjBGQlNTeEZRVUZGTEVOQlFVTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzaG93ZG93biA9IHJlcXVpcmUoJ3Nob3dkb3duJyk7XG5jb25zdCBpbmRleF9qc18xID0gcmVxdWlyZShcIi4uL25vZGVfbW9kdWxlcy9oc2xheW91dC9pbmRleC5qc1wiKTtcbmZ1bmN0aW9uIG1hcmtEb3duKHRleHQsIHNob3J0ID0gZmFsc2UsIGN1cnJlbnRSb3V0ZSA9IGluZGV4X2pzXzEubS5yb3V0ZS5nZXQoKSkge1xuICAgIGNvbnN0IGNvbnZlcnRlciA9IG5ldyBzaG93ZG93bi5Db252ZXJ0ZXIoe1xuICAgICAgICB0YWJsZXM6IHRydWUsXG4gICAgICAgIGdoQ29tcGF0aWJsZUhlYWRlcklkOiB0cnVlLFxuICAgICAgICBzbWFydEluZGVudGF0aW9uRml4OiB0cnVlLFxuICAgICAgICB0YWtzbGlzdHM6IHRydWUsXG4gICAgICAgIHN0cmlrZXRocm91Z2g6IHRydWVcbiAgICB9KTtcbiAgICBsZXQgcmVzdWx0ID0gKCF0ZXh0KSA/ICcnIDogY29udmVydGVyLm1ha2VIdG1sKHRleHQpO1xuICAgIGlmIChzaG9ydCkge1xuICAgICAgICBjb25zdCBpID0gcmVzdWx0LmluZGV4T2YoJzwvcD4nKTtcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IHN1YnN0aXR1dGVMaW5rcyhyZXN1bHQsIGN1cnJlbnRSb3V0ZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMubWFya0Rvd24gPSBtYXJrRG93bjtcbmZ1bmN0aW9uIHN1YnN0aXR1dGVMaW5rcyhjb21tZW50LCBjdXJyZW50Um91dGUpIHtcbiAgICBmdW5jdGlvbiBkZWNvbnN0cnVjdFJvdXRlKHJvdXRlKSB7XG4gICAgICAgIGxldCBsaWIsIG1vZDtcbiAgICAgICAgcm91dGUucmVwbGFjZSgvXFwvKFteXFwvLl0qKVxcLyhbXlxcL1xcc10qJCkvZ2ksIChtYXRjaCwgLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgbGliID0gYXJnc1swXTtcbiAgICAgICAgICAgIG1vZCA9IGFyZ3NbMV07XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW2xpYiwgbW9kXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGliTW9kKHBhdGgpIHtcbiAgICAgICAgbGV0IGxpYiwgbW9kLCBmcmFnO1xuICAgICAgICBpZiAocGF0aC5pbmRleE9mKCc6JykgPiAwKSB7XG4gICAgICAgICAgICBbbGliLCBtb2RdID0gcGF0aC5zcGxpdCgnOicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGliID0gZGVmTGliO1xuICAgICAgICAgICAgbW9kID0gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kLmluZGV4T2YoJyMnKSA+IDApIHtcbiAgICAgICAgICAgIFttb2QsIGZyYWddID0gbW9kLnNwbGl0KCcjJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtsaWIsIG1vZCwgZnJhZ107XG4gICAgfVxuICAgIGxldCBbZGVmTGliXSA9IGRlY29uc3RydWN0Um91dGUoY3VycmVudFJvdXRlKTtcbiAgICBjb21tZW50ID0gY29tbWVudC5yZXBsYWNlKC9cXHN7QGxpbmsgKFtcXFNdKilcXHMqKFtefV0rKX0vZ2ksIChtYXRjaCwgLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gYXJnc1swXTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGFyZ3NbMV07XG4gICAgICAgIGxldCBbbGliLCBtb2R1bGVdID0gZ2V0TGliTW9kKHBhdGgpO1xuICAgICAgICByZXR1cm4gKG1vZHVsZSA9PT0gJycgfHwgbW9kdWxlID09PSAnMCcgfHwgbW9kdWxlID09PSAnb3ZlcnZpZXcnKSA/XG4gICAgICAgICAgICBgIDxhIGhyZWY9XCIjIS9hcGkvJHtsaWJ9LzBcIj4ke3RleHR9PC9hPmAgOlxuICAgICAgICAgICAgYCA8YSBocmVmPVwiIyEvYXBpLyR7bGlifS8ke2xpYn0uJHttb2R1bGV9XCI+JHt0ZXh0fTwvYT5gO1xuICAgIH0pO1xuICAgIHJldHVybiBjb21tZW50O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYldGeWEyUnZkMjR1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmJXRnlhMlJ2ZDI0dWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4TlFVRk5MRkZCUVZFc1IwRkJTU3hQUVVGUExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdRVUZEZEVNc1owVkJRWFZFTzBGQlUzWkVMRk5CUVdkQ0xGRkJRVkVzUTBGQlF5eEpRVUZYTEVWQlFVVXNVVUZCWXl4TFFVRkxMRVZCUVVVc1pVRkJjMElzV1VGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRVZCUVVVN1NVRkRNVVlzVFVGQlRTeFRRVUZUTEVkQlFVY3NTVUZCU1N4UlFVRlJMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJRM0pETEUxQlFVMHNSVUZCYTBJc1NVRkJTVHRSUVVNMVFpeHZRa0ZCYjBJc1JVRkJTU3hKUVVGSk8xRkJRelZDTEcxQ1FVRnRRaXhGUVVGTExFbEJRVWs3VVVGRE5VSXNVMEZCVXl4RlFVRmxMRWxCUVVrN1VVRkROVUlzWVVGQllTeEZRVUZYTEVsQlFVazdTMEZETDBJc1EwRkJReXhEUVVGRE8wbEJRMGdzU1VGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEY0VRc1NVRkJTU3hMUVVGTExFVkJRVVU3VVVGRFVDeE5RVUZOTEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEycERMRWxCUVVrc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJUdFpRVUZGTEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0VFFVRkZPMHRCUTJoRU8wbEJRMFFzVFVGQlRTeEhRVUZITEdWQlFXVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1dVRkJXU3hEUVVGRExFTkJRVU03U1VGREwwTXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRiRUlzUTBGQlF6dEJRV1pFTERSQ1FXVkRPMEZCY1VKRUxGTkJRVk1zWlVGQlpTeERRVUZETEU5QlFXTXNSVUZCUlN4WlFVRnRRanRKUVV0NFJDeFRRVUZUTEdkQ1FVRm5RaXhEUVVGRExFdEJRVms3VVVGRGJFTXNTVUZCU1N4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRE8xRkJRMklzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl3MFFrRkJORUlzUlVGQlJTeERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRWxCUVVrc1JVRkJSU3hGUVVGRk8xbEJRek5FTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRFpDeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMlFzVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZEWkN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRkRUlzUTBGQlF6dEpRVVZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRWxCUVZjN1VVRkRNVUlzU1VGQlNTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJRenRSUVVOdVFpeEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZGTzFsQlEzSkNMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGFFTTdZVUZCVHp0WlFVTktMRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU03V1VGRFlpeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRPMU5CUTJRN1VVRkRSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVNc1EwRkJReXhGUVVGRk8xbEJRM0JDTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRhRU03VVVGRFJDeFBRVUZQTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU0xUWl4RFFVRkRPMGxCUlVRc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEdkQ1FVRm5RaXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzBsQlJ6bERMRTlCUVU4c1IwRkJSeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEN0Q1FVRXJRaXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVkQlFVY3NTVUZCU1N4RlFVRkZMRVZCUVVVN1VVRkRNVVVzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU55UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFMUJRVTBzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOd1F5eFBRVUZQTEVOQlFVTXNUVUZCVFN4TFFVRkxMRVZCUVVVc1NVRkJTU3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEUxQlFVMHNTMEZCU3l4VlFVRlZMRU5CUVVNc1EwRkJRU3hEUVVGRE8xbEJRekZFTEc5Q1FVRnZRaXhIUVVGSExFOUJRVThzU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXp0WlFVTXhReXh2UWtGQmIwSXNSMEZCUnl4SlFVRkpMRWRCUVVjc1NVRkJTU3hOUVVGTkxFdEJRVXNzU1VGQlNTeE5RVUZOTEVOQlFVTTdTVUZEY0VVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFNDeFBRVUZQTEU5QlFVOHNRMEZCUXp0QlFVVnVRaXhEUVVGREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgRG9jU2V0c18xID0gcmVxdWlyZShcIi4uL0RvY1NldHNcIik7XG5jb25zdCBpbmRleF9qc18yID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9oc3dpZGdldC9pbmRleC5qc1wiKTtcbmNsYXNzIERvY3NNZW51IGV4dGVuZHMgaW5kZXhfanNfMS5MYXlvdXQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmRvY1NldCA9ICcnO1xuICAgIH1cbiAgICBnZXREZXNjKGF0dHJzKSB7XG4gICAgICAgIGlmICh0aGlzLmRvY1NldCAhPT0gYXR0cnMuZG9jU2V0KSB7XG4gICAgICAgICAgICB0aGlzLmRvY1NldCA9IGF0dHJzLmRvY1NldDtcbiAgICAgICAgICAgIERvY1NldHNfMS5Eb2NTZXRzLmxvYWRMaXN0KGF0dHJzLmRvY1NldClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBpbmRleF9qc18xLm0ucmVkcmF3KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IERvY1NldHNfMS5Eb2NTZXRzLmdldCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IGl0ZW1zLm1hcCgoYykgPT4gYyksXG4gICAgICAgICAgICBkZWZhdWx0SXRlbTogaW5kZXhfanNfMS5tLnJvdXRlLnBhcmFtKCdsaWInKSB8fCBpdGVtc1swXSxcbiAgICAgICAgICAgIGNsaWNrZWQ6IChpdGVtKSA9PiBpbmRleF9qc18xLm0ucm91dGUuc2V0KCcvYXBpLzpsaWIvMCcsIHsgbGliOiBpdGVtIH0pXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldENvbXBvbmVudHMobm9kZSkge1xuICAgICAgICBjb25zdCBkZXNjID0gdGhpcy5nZXREZXNjKG5vZGUuYXR0cnMpO1xuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKGluZGV4X2pzXzIuTWVudSwgeyBkZXNjOiBkZXNjIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRG9jc01lbnUgPSBEb2NzTWVudTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVJHOWpjMDFsYm5VdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12ZG1sbGR5OUViMk56VFdWdWRTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxHMUZRVUUwUlR0QlFVTTFSU3gzUTBGQmEwUTdRVUZEYkVRc2JVVkJRVFJGTzBGQlowSTFSU3hOUVVGaExGRkJRVk1zVTBGQlVTeHBRa0ZCVFR0SlFVRndRenM3VVVGRFNTeFhRVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCY1VKb1FpeERRVUZETzBsQmJrSlhMRTlCUVU4c1EwRkJReXhMUVVGVE8xRkJRM0pDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1MwRkJTeXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGTzFsQlF6bENMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0WlFVTXpRaXhwUWtGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRE8ybENRVU0zUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zV1VGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMU5CUTNwQ08xRkJRMFFzVFVGQlRTeExRVUZMTEVkQlFVY3NhVUpCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU0xUWl4UFFVRlBPMWxCUTBnc1MwRkJTeXhGUVVGRkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVVZxUXl4WFFVRlhMRVZCUVVVc1dVRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU0zUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhKUVVGWExFVkJRVVVzUlVGQlJTeERRVUZETEZsQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExHRkJRV0VzUlVGQlJTeEZRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRVZCUVVNc1EwRkJRenRUUVVOdVJTeERRVUZETzBsQlEwNHNRMEZCUXp0SlFVVkVMR0ZCUVdFc1EwRkJReXhKUVVGVk8xRkJRM0JDTEUxQlFVMHNTVUZCU1N4SFFVRm5RaXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVOdVJDeFBRVUZQTEZsQlFVTXNRMEZCUXl4bFFVRkpMRVZCUVVVc1JVRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTXNRMEZCUXp0SlFVTnFReXhEUVVGRE8wTkJRMG83UVVGMFFrUXNORUpCYzBKREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgaW5kZXhfanNfMiA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanNcIik7XG5jb25zdCBpbmRleF9qc18zID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9oc3dpZGdldC9pbmRleC5qc1wiKTtcbmNvbnN0IERvY1NldHNfMSA9IHJlcXVpcmUoXCIuLi9Eb2NTZXRzXCIpO1xuY29uc3QgUGFydHNfMSA9IHJlcXVpcmUoXCIuL1BhcnRzXCIpO1xuY2xhc3MgTGVmdE5hdiBleHRlbmRzIGluZGV4X2pzXzIuTGF5b3V0IHtcbiAgICBnZXRDb21wb25lbnRzKG5vZGUpIHtcbiAgICAgICAgbGV0IGxpYiA9IGluZGV4X2pzXzEubS5yb3V0ZS5wYXJhbSgnbGliJyk7XG4gICAgICAgIGxldCBmaWVsZCA9IGluZGV4X2pzXzEubS5yb3V0ZS5wYXJhbSgnZmllbGQnKTtcbiAgICAgICAgY29uc3QgZG9jU2V0ID0gRG9jU2V0c18xLkRvY1NldHMuZ2V0KGxpYiwgMCkgfHwgeyBuYW1lOiAndW5rbm93bicsIGlkOiAwIH07XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1sZWZ0JywgW2luZGV4X2pzXzEubSgnLmhzLWxlZnQtbmF2JywgbmF2TGlzdChkb2NTZXQsIGZpZWxkKSldKTtcbiAgICB9XG59XG5leHBvcnRzLkxlZnROYXYgPSBMZWZ0TmF2O1xuZnVuY3Rpb24gbmF2TGlzdChkb2NTZXQsIGZpZWxkKSB7XG4gICAgZnVuY3Rpb24gY29sbGVjdE1vZHVsZXMoZG9jU2V0KSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZXNCeU5hbWUgPSB7fTtcbiAgICAgICAgZG9jU2V0Lm1vZHVsZXMgPSBbXTtcbiAgICAgICAgaWYgKGRvY1NldC5jaGlsZHJlbikge1xuICAgICAgICAgICAgZG9jU2V0LmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShjLmZsYWdzICYmIGMuZmxhZ3MuaXNFeHRlcm5hbCkgJiYgIWlnbm9yZU1vZHVsZXNbYy5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gYy5pbm5lck1vZHVsZSA/IGMuaW5uZXJNb2R1bGUgOiBjLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtb2R1bGUgPSBtb2R1bGVzQnlOYW1lW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jU2V0Lm1vZHVsZXMucHVzaChtb2R1bGUgPSBtb2R1bGVzQnlOYW1lW25hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliOiBkb2NTZXQubGliLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQYXRoOiBkb2NTZXQuZnVsbFBhdGggKyAnLicgKyBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwczogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZ3JvdXBzLmZvckVhY2goKGcpID0+IGdyb3Vwc1tnLnRpdGxlXSA9IGcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5ncm91cHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ3JvdXBzLmZvckVhY2goKGcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXAgPSBncm91cHNbZy50aXRsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IGdyb3Vwc1tnLnRpdGxlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IGcua2luZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuID0gZ3JvdXAuY2hpbGRyZW4uY29uY2F0KGcuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBleHRlcm5hbE1vZHVsZShtZGwpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChmaWVsZCA9PT0gJycgKyBtZGwuaWQgfHwgZmllbGQuaW5kZXhPZihtZGwuZnVsbFBhdGgpID09PSAwKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubShpbmRleF9qc18zLkNvbGxhcHNpYmxlLCB7IGNzczogYC5ocy1sZWZ0LW5hdi1tb2R1bGVgLCBwcmVBcnJvdzogdHJ1ZSwgaXNFeHBhbmRlZDogc2VsZWN0ZWQsIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAgICBpbmRleF9qc18xLm0oYCR7c2VsZWN0ZWQgPyAnLmhzLWxlZnQtbmF2LXNlbGVjdGVkJyA6ICcnfWAsIFBhcnRzXzEubGliTGluayhgYS5ocy1sZWZ0LW5hdi1tb2R1bGUtbmFtZSBgLCBtZGwubGliLCBtZGwuZnVsbFBhdGgsIG1kbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgIW1kbC5ncm91cHMgPyB1bmRlZmluZWQgOiBtZGwuZ3JvdXBzLm1hcCgoZykgPT4gZW50cmllcyhnLCBtZGwsIGZpZWxkKSlcbiAgICAgICAgICAgIF0gfSk7XG4gICAgfVxuICAgIGlmIChkb2NTZXQua2luZCA9PT0gMCkge1xuICAgICAgICBjb2xsZWN0TW9kdWxlcyhkb2NTZXQpO1xuICAgICAgICBjb25zdCBtb2R1bGVzID0gZG9jU2V0Lm1vZHVsZXMubWFwKGV4dGVybmFsTW9kdWxlKTtcbiAgICAgICAgbW9kdWxlcy51bnNoaWZ0KGluZGV4X2pzXzEubSgnLmhzLWxlZnQtbmF2LWhlYWRlcicsICdNb2R1bGVzJykpO1xuICAgICAgICByZXR1cm4gW2luZGV4X2pzXzEubSgnLmhzLWxlZnQtbmF2LWNvbnRlbnQnLCBtb2R1bGVzKV07XG4gICAgfVxufVxuY29uc3QgaWdub3JlTW9kdWxlcyA9IHtcbiAgICBvdmVydmlldzogdHJ1ZSxcbiAgICBpbmRleDogdHJ1ZVxufTtcbmZ1bmN0aW9uIGVudHJpZXMoZ3JvdXAsIG1kbCwgZmllbGQpIHtcbiAgICBmdW5jdGlvbiBtb2R1bGVHZXQoYykge1xuICAgICAgICByZXR1cm4gRG9jU2V0c18xLkRvY1NldHMuZ2V0KG1kbC5saWIsIGMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRyeShtb2QpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSAoZmllbGQgPT09ICcnICsgbW9kLmlkIHx8IGZpZWxkID09PSBtb2QuZnVsbFBhdGgpID8gJy5ocy1sZWZ0LW5hdi1zZWxlY3RlZCcgOiAnJztcbiAgICAgICAgY29uc3QgZXhwb3J0ZWQgPSAobW9kLmZsYWdzICYmIG1vZC5mbGFncy5pc0V4cG9ydGVkKTtcbiAgICAgICAgY29uc3Qgc3RhdGlrID0gKG1vZC5mbGFncyAmJiBtb2QuZmxhZ3MuaXNTdGF0aWMpO1xuICAgICAgICBjb25zdCBjc3MgPSBgYS5ocy1sZWZ0LW5hdi1lbnRyeSAke3NlbGVjdGVkfSAke2V4cG9ydGVkID8gJy5ocy1sZWZ0LW5hdi1leHBvcnRlZCcgOiAnJ31gO1xuICAgICAgICByZXR1cm4gKCFleHBvcnRlZCAmJiBncm91cC50aXRsZSA9PT0gJ1ZhcmlhYmxlcycpID8gJycgOlxuICAgICAgICAgICAgaW5kZXhfanNfMS5tKCcnLCBbXG4gICAgICAgICAgICAgICAgc3RhdGlrID8gJ3N0YXRpYycgOiAnJyxcbiAgICAgICAgICAgICAgICBQYXJ0c18xLmxpYkxpbmsoY3NzLCBtb2QubGliLCBtb2QuZnVsbFBhdGgsIG1vZC5uYW1lKVxuICAgICAgICAgICAgXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtcHR5KG1vZCkgeyByZXR1cm4gbW9kICE9PSAnJzsgfVxuICAgIGxldCBncnAgPSBbXTtcbiAgICBpZiAoZ3JvdXAgJiYgZ3JvdXAuY2hpbGRyZW4pIHtcbiAgICAgICAgZ3JwID0gZ3JvdXAuY2hpbGRyZW5cbiAgICAgICAgICAgIC5tYXAobW9kdWxlR2V0KVxuICAgICAgICAgICAgLnNvcnQoZXhwb3J0QXNjZW5kaW5nKVxuICAgICAgICAgICAgLm1hcChlbnRyeSlcbiAgICAgICAgICAgIC5maWx0ZXIoZW1wdHkpO1xuICAgICAgICBpZiAoZ3JwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdycC51bnNoaWZ0KGluZGV4X2pzXzEubSgnLmhzLWxlZnQtbmF2LWhlYWRlcicsIGdyb3VwLnRpdGxlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChncnAubGVuZ3RoID4gMSkgPyBpbmRleF9qc18xLm0oYC5ocy1sZWZ0LW5hdi1lbnRyaWVzYCwgZ3JwKSA6ICcnO1xufVxuZnVuY3Rpb24gZXhwb3J0QXNjZW5kaW5nKGEsIGIpIHtcbiAgICBpZiAoYS5mbGFncyAmJiBiLmZsYWdzKSB7XG4gICAgICAgIGlmIChhLmZsYWdzLmlzRXhwb3J0ZWQgJiYgYi5mbGFncy5pc0V4cG9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5uYW1lID4gYi5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGEuZmxhZ3MuaXNFeHBvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGIuZmxhZ3MuaXNFeHBvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYS5uYW1lID4gYi5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gYS5uYW1lID4gYi5uYW1lO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRHVm1kRTVoZGk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkyYVdWM0wweGxablJPWVhZdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZMUVN4dFJVRkJaMFU3UVVGRGFFVXNiVVZCUVRaRU8wRkJRemRFTEcxRlFVRnJSVHRCUVVOc1JTeDNRMEZCY1VNN1FVRkRja01zYlVOQlFXdERPMEZCVFd4RExFMUJRV0VzVDBGQlVTeFRRVUZSTEdsQ1FVRk5PMGxCUXk5Q0xHRkJRV0VzUTBGQlF5eEpRVUZYTzFGQlEzSkNMRWxCUVVrc1IwRkJSeXhIUVVGSExGbEJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJReTlDTEVsQlFVa3NTMEZCU3l4SFFVRkhMRmxCUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTI1RExFMUJRVTBzVFVGQlRTeEhRVUZITEdsQ1FVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkRMRWxCUVVrc1JVRkJReXhUUVVGVExFVkJRVVVzUlVGQlJTeEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRPMUZCUXpkRUxFOUJRVThzV1VGQlF5eERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRMRmxCUVVNc1EwRkJReXhqUVVGakxFVkJRVVVzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU4wUlN4RFFVRkRPME5CUTBvN1FVRlFSQ3d3UWtGUFF6dEJRVWRFTEZOQlFWTXNUMEZCVHl4RFFVRkRMRTFCUVZVc1JVRkJSU3hMUVVGWk8wbEJSWEpETEZOQlFWTXNZMEZCWXl4RFFVRkRMRTFCUVZVN1VVRkRPVUlzVFVGQlRTeGhRVUZoTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTNwQ0xFMUJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTNCQ0xFbEJRVWtzVFVGQlRTeERRVUZETEZGQlFWRXNSVUZCUlR0WlFVTnFRaXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVzc1JVRkJSU3hGUVVGRk8yZENRVVU1UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8yOUNRVU0xUkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zVjBGQlZ5eERRVUZCTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMjlDUVVOdVJDeEpRVUZKTEUxQlFVMHNSMEZCUnl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YjBKQlEycERMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVU3ZDBKQlExUXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSenMwUWtGREwwTXNTVUZCU1N4RlFVRkZMRWxCUVVrN05FSkJRMVlzUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhPelJDUVVObUxGRkJRVkVzUlVGQlJTeE5RVUZOTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWRCUVVjc1IwRkJSU3hKUVVGSk96UkNRVU55UXl4TlFVRk5MRVZCUVVNc1JVRkJSVHQ1UWtGRFdpeERRVUZETEVOQlFVTTdjVUpCUTA0N2IwSkJSVVFzVFVGQlRTeE5RVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRPMjlDUVVOc1FpeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkZkRVFzU1VGQlNTeERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZPM2RDUVVGRkxFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFVkJRVVU3TkVKQlEzWkRMRWxCUVVrc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN05FSkJRelZDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVN1owTkJRMUlzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWM3YjBOQlEzUkNMRkZCUVZFc1JVRkJReXhGUVVGRk8yOURRVU5ZTEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTVHR2UTBGRFdpeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRMRXRCUVVzN2FVTkJRMnBDTEVOQlFVTTdaME5CUTA0c1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN05rSkJRM3BDT3pSQ1FVTkVMRXRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzNkQ1FVTjJSQ3hEUVVGRExFTkJRVU1zUTBGQlF6dHhRa0ZCUXp0cFFrRkRVRHRaUVVOTUxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEwNDdTVUZEVEN4RFFVRkRPMGxCU1VRc1UwRkJVeXhqUVVGakxFTkJRVU1zUjBGQlR6dFJRVU16UWl4SlFVRkpMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRGNrSXNTVUZCU1N4TFFVRkxMRXRCUVVjc1JVRkJSU3hIUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZPMWxCUVVVc1VVRkJVU3hIUVVGRExFbEJRVWtzUTBGQlF6dFRRVUZGTzFGQlJUbEZMRTlCUVU4c1dVRkJReXhEUVVGRExITkNRVUZYTEVWQlFVVXNSVUZCUXl4SFFVRkhMRVZCUVVNc2NVSkJRWEZDTEVWQlFVVXNVVUZCVVN4RlFVRkZMRWxCUVVrc1JVRkJSU3hWUVVGVkxFVkJRVU1zVVVGQlVTeEZRVUZGTEZWQlFWVXNSVUZCUXp0blFrRkRPVVlzV1VGQlF5eERRVUZETEVkQlFVY3NVVUZCVVN4RFFVRkJMRU5CUVVNc1EwRkJRU3gxUWtGQmRVSXNRMEZCUVN4RFFVRkRMRU5CUVVFc1JVRkJSU3hGUVVGRkxFVkJRVVVzWlVGQlR5eERRVUZETERSQ1FVRTBRaXhGUVVGRkxFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdaMEpCUTI1SUxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUVN4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdZVUZETjBVc1JVRkJReXhEUVVGRExFTkJRVU03U1VGRFVpeERRVUZETzBsQlJVUXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zUlVGQlJUdFJRVU51UWl4alFVRmpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRmRrSXNUVUZCVFN4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNN1VVRkRia1FzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRkRMRU5CUVVNc2NVSkJRWEZDTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOeVJDeFBRVUZQTEVOQlFVTXNXVUZCUXl4RFFVRkRMSE5DUVVGelFpeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRMME03UVVGRFRDeERRVUZETzBGQlMwUXNUVUZCVFN4aFFVRmhMRWRCUVVjN1NVRkRiRUlzVVVGQlVTeEZRVUZKTEVsQlFVazdTVUZEYUVJc1MwRkJTeXhGUVVGUExFbEJRVWs3UTBGRGJrSXNRMEZCUXp0QlFWVkdMRk5CUVZNc1QwRkJUeXhEUVVGRExFdEJRVk1zUlVGQlJTeEhRVUZQTEVWQlFVVXNTMEZCV1R0SlFVTTNReXhUUVVGVExGTkJRVk1zUTBGQlF5eERRVUZMTzFGQlEzQkNMRTlCUVU4c2FVSkJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU51UXl4RFFVRkRPMGxCU1VRc1UwRkJVeXhMUVVGTExFTkJRVU1zUjBGQlR6dFJRVU5zUWl4TlFVRk5MRkZCUVZFc1IwRkJSeXhEUVVGRExFdEJRVXNzUzBGQlJ5eEZRVUZGTEVkQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1NVRkJTU3hMUVVGTExFdEJRVWNzUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8xRkJRek5HTEUxQlFVMHNVVUZCVVN4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM0pFTEUxQlFVMHNUVUZCVFN4SFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJRMjVFTEUxQlFVMHNSMEZCUnl4SFFVRkhMSFZDUVVGMVFpeFJRVUZSTEVsQlFVa3NVVUZCVVN4RFFVRkJMRU5CUVVNc1EwRkJRU3gxUWtGQmRVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGRGRrWXNUMEZCVHl4RFFVRkRMRU5CUVVNc1VVRkJVU3hKUVVGSkxFdEJRVXNzUTBGQlF5eExRVUZMTEV0QlFVY3NWMEZCVnl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlEycEVMRmxCUVVNc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlEwWXNUVUZCVFN4RFFVRkJMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVUVzUTBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTNCQ0xHVkJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNN1lVRkRhRVFzUTBGQlF5eERRVUZETzBsQlExZ3NRMEZCUXp0SlFVVkVMRk5CUVZNc1MwRkJTeXhEUVVGRExFZEJRVThzU1VGQlNTeFBRVUZQTEVkQlFVY3NTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSVGxETEVsQlFVa3NSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOaUxFbEJRVWtzUzBGQlN5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UlFVRlJMRVZCUVVVN1VVRkRla0lzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXl4UlFVRlJPMkZCUTJZc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF6dGhRVU5rTEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNN1lVRkRja0lzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXp0aFFVTldMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU51UWl4SlFVRkpMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzFsQlEyaENMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQlF5eERRVUZETEhGQ1FVRnhRaXhGUVVGRkxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNSRU8wdEJRMG83U1VGRFJDeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTXNXVUZCUXl4RFFVRkRMSE5DUVVGelFpeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03UVVGRGFrVXNRMEZCUXp0QlFVdEVMRk5CUVZNc1pVRkJaU3hEUVVGRExFTkJRVXNzUlVGQlJTeERRVUZMTzBsQlEycERMRWxCUVVrc1EwRkJReXhEUVVGRExFdEJRVXNzU1VGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZPMUZCUTNCQ0xFbEJRVWtzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRlZMRWxCUVVrc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZWTEVWQlFVVTdXVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0VFFVRkZPMkZCUTNCRkxFbEJRVWtzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRlZMRVZCUVVVN1dVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlFVVTdZVUZEZEVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNSVUZCUlR0WlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xTkJRVVU3WVVGRGNrTTdXVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0VFFVRkZPMHRCUTI1RE8xTkJRVTA3VVVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dExRVUZGTzBGQlEzUkRMRU5CUVVNaWZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgbWFya2Rvd25fMSA9IHJlcXVpcmUoXCIuLi9tYXJrZG93blwiKTtcbmNvbnN0IE1haW5FeGFtcGxlXzEgPSByZXF1aXJlKFwiLi9NYWluRXhhbXBsZVwiKTtcbmZ1bmN0aW9uIGNvbW1lbnRMb25nKG1kbCkge1xuICAgIGxldCBjb250ZW50ID0gW107XG4gICAgaWYgKG1kbC5jb21tZW50KSB7XG4gICAgICAgIGNvbnRlbnQucHVzaCh0ZXh0T3JTaG9ydFRleHRPckRlc2NyaXB0aW9uKG1kbC5jb21tZW50LCBmYWxzZSkpO1xuICAgICAgICBjb250ZW50LnB1c2gocmV0dXJucyhtZGwuY29tbWVudCwgZmFsc2UpKTtcbiAgICAgICAgY29udGVudC5wdXNoKGNvbW1lbnRSZW1haW5kZXIobWRsLmNvbW1lbnQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tY29tbWVudCcsIGNvbnRlbnQpO1xufVxuZXhwb3J0cy5jb21tZW50TG9uZyA9IGNvbW1lbnRMb25nO1xuZnVuY3Rpb24gY29tbWVudChtZGwsIHNob3J0ID0gZmFsc2UpIHtcbiAgICBsZXQgY29udGVudCA9IFtdO1xuICAgIGlmIChtZGwuY29tbWVudCkge1xuICAgICAgICBjb250ZW50LnB1c2godGV4dE9yU2hvcnRUZXh0T3JEZXNjcmlwdGlvbihtZGwuY29tbWVudCwgc2hvcnQpKTtcbiAgICAgICAgaWYgKCFzaG9ydCkge1xuICAgICAgICAgICAgY29udGVudC5wdXNoKG90aGVyQ29tbWVudFRhZ3MobWRsLmNvbW1lbnQpKTtcbiAgICAgICAgICAgIGlmIChtZGwucGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LmNvbmNhdChtYWluQ29tbWVudFBhcmFtcyhtZGwucGFyYW1ldGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQucHVzaChyZXR1cm5zKG1kbC5jb21tZW50LCBmYWxzZSkpO1xuICAgICAgICBjb250ZW50LnB1c2goY29tbWVudFJlbWFpbmRlcihtZGwuY29tbWVudCkpO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1jb21tZW50JywgY29udGVudCk7XG59XG5leHBvcnRzLmNvbW1lbnQgPSBjb21tZW50O1xuZnVuY3Rpb24gdGV4dE9yU2hvcnRUZXh0T3JEZXNjcmlwdGlvbihjb21tZW50LCBzaG9ydCkge1xuICAgIGxldCB0ZXh0ID0gKGNvbW1lbnQuc2hvcnRUZXh0IHx8ICcnKTtcbiAgICBpZiAoY29tbWVudC50ZXh0KSB7XG4gICAgICAgIHRleHQgKz0gJ1xcbicgKyAoY29tbWVudC50ZXh0IHx8ICcnKTtcbiAgICB9XG4gICAgaWYgKGNvbW1lbnQudGFncykge1xuICAgICAgICBjb21tZW50LnRhZ3MubWFwKCh0YWcpID0+IHsgaWYgKHRhZy50YWcgPT09ICdkZXNjcmlwdGlvbicpIHtcbiAgICAgICAgICAgIHRleHQgPSB0YWcudGV4dDtcbiAgICAgICAgfSB9KTtcbiAgICB9XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPGV4YW1wbGUoW1xcU1xcc10qPyk8XFwvZXhhbXBsZT4vZ2ksIHNob3J0ID8gJycgOiBNYWluRXhhbXBsZV8xLmV4YW1wbGUpO1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWNvbW1lbnQtZGVzYycsIHByZXR0aWZ5Q29kZSh0ZXh0LCBzaG9ydCkpO1xufVxuZnVuY3Rpb24gcmV0dXJucyhjb21tZW50LCBzaG9ydCkge1xuICAgIGxldCB0ZXh0ID0gY29tbWVudC5yZXR1cm5zO1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWNvbW1lbnQtcmV0dXJuJywgIXRleHQgPyAnJyA6IFtcbiAgICAgICAgaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tY29tbWVudC10YWcnLCAncmV0dXJuczonKSxcbiAgICAgICAgaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tY29tbWVudC10ZXh0JywgdGV4dClcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIGNvbW1lbnRSZW1haW5kZXIoY29tbWVudCkge1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJycsIE9iamVjdC5rZXlzKGNvbW1lbnQpLm1hcCgodGFnKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgICAgICBjYXNlICd0YWdzJzpcbiAgICAgICAgICAgIGNhc2UgJ3Nob3J0VGV4dCc6XG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ3JldHVybnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tY29tbWVudC1zcGVjaWFsJywgW1xuICAgICAgICAgICAgICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1jb21tZW50LXRhZycsIHRhZyksXG4gICAgICAgICAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWNvbW1lbnQtdGV4dCcsIGNvbW1lbnRbdGFnXSlcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgIH1cbiAgICB9KSk7XG59XG5mdW5jdGlvbiBvdGhlckNvbW1lbnRUYWdzKGNvbW1lbnQpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcnLCAhY29tbWVudC50YWdzID8gW10gOiBjb21tZW50LnRhZ3MubWFwKCh0YWcpID0+IHtcbiAgICAgICAgc3dpdGNoICh0YWcudGFnKSB7XG4gICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbic6IHJldHVybiAnJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWNvbW1lbnQtc3BlY2lhbCcsIFtcbiAgICAgICAgICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1jb21tZW50LXRhZycsIHRhZy50YWcpLFxuICAgICAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWNvbW1lbnQtdGV4dCcsIHRhZy50ZXh0KVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG59XG5mdW5jdGlvbiBtYWluQ29tbWVudFBhcmFtcyhwYXJhbXMpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1jb21tZW50LXBhcmFtcycsIHBhcmFtcy5tYXAoKHBhcikgPT4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1jb21tZW50LXBhcmFtJywgW1xuICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1jb21tZW50LXRhZycsIHBhci5uYW1lICsgJzonKSxcbiAgICAgICAgaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tY29tbWVudC10ZXh0JywgIXBhci5jb21tZW50ID8gJycgOlxuICAgICAgICAgICAgKChwYXIuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpID8gYFtkZWZhdWx0OiAke3Bhci5kZWZhdWx0VmFsdWV9XSBgIDogJycpICsgcGFyLmNvbW1lbnQudGV4dClcbiAgICBdKSkpO1xufVxuZnVuY3Rpb24gcHJldHRpZnlDb2RlKGNvbW1lbnQsIHNob3J0KSB7XG4gICAgbGV0IHJlc3VsdCA9IGNvbW1lbnQ7XG4gICAgZnVuY3Rpb24gYnJhY2VJbmRlbnRpbmcodGV4dCkge1xuICAgICAgICBsZXQgaW5kZW50ID0gMDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dFxuICAgICAgICAgICAgLnN1YnN0cmluZyg2LCB0ZXh0Lmxlbmd0aCAtIDcpXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvKDwpL2csICcmbHQ7JykucmVwbGFjZSgvKD4pL2csICcmZ3Q7JylcbiAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIC5tYXAoKGwpID0+IHtcbiAgICAgICAgICAgIGxldCBvbGRJbmRlbnQgPSBpbmRlbnQ7XG4gICAgICAgICAgICBsZXQgayA9IGwudHJpbSgpO1xuICAgICAgICAgICAgaW5kZW50ICs9IE1hdGgubWF4KC0xLCBNYXRoLm1pbigxLCBrLnNwbGl0KCd7JykubGVuZ3RoIC0gay5zcGxpdCgnfScpLmxlbmd0aCkpO1xuICAgICAgICAgICAgaW5kZW50ICs9IE1hdGgubWF4KC0xLCBNYXRoLm1pbigxLCBrLnNwbGl0KCdbJykubGVuZ3RoIC0gay5zcGxpdCgnXScpLmxlbmd0aCkpO1xuICAgICAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImhzLWNvZGUtaW5kZW50XCI+PC9zcGFuPicucmVwZWF0KCgoaW5kZW50IDwgb2xkSW5kZW50KSA/IGluZGVudCA6IG9sZEluZGVudCkpICsgaztcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuICc8cHJlPjxjb2RlPicgKyByZXN1bHQgKyAnPC9jb2RlPjwvcHJlPic7XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC88Y29kZT4oW1xcU1xcc10qPyk8XFwvY29kZT4vZ2ksIGJyYWNlSW5kZW50aW5nKTtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tLnRydXN0KG1hcmtkb3duXzEubWFya0Rvd24ocmVzdWx0LCBzaG9ydCwgaW5kZXhfanNfMS5tLnJvdXRlLmdldCgpKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lUV0ZwYmtOdmJXMWxiblF1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZkbWxsZHk5TllXbHVRMjl0YldWdWRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVV0QkxHMUZRVUZuUlR0QlFVTm9SU3d3UTBGQmRVTTdRVUZEZGtNc0swTkJRWGxETzBGQlUzcERMRk5CUVdkQ0xGZEJRVmNzUTBGQlF5eEhRVUZQTzBsQlF5OUNMRWxCUVVrc1QwRkJUeXhIUVVGVExFVkJRVVVzUTBGQlF6dEpRVU4yUWl4SlFVRkpMRWRCUVVjc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRFlpeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRFJDUVVFMFFpeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU12UkN4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE1VTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dExRVU12UXp0SlFVTkVMRTlCUVU4c1dVRkJReXhEUVVGRExHdENRVUZyUWl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRekZETEVOQlFVTTdRVUZTUkN4clEwRlJRenRCUVZWRUxGTkJRV2RDTEU5QlFVOHNRMEZCUXl4SFFVRlBMRVZCUVVVc1MwRkJTeXhIUVVGRExFdEJRVXM3U1VGRGVFTXNTVUZCU1N4UFFVRlBMRWRCUVZNc1JVRkJSU3hEUVVGRE8wbEJRM1pDTEVsQlFVa3NSMEZCUnl4RFFVRkRMRTlCUVU4c1JVRkJSVHRSUVVOaUxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNORUpCUVRSQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEU5QlFVOHNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJReTlFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVN1dVRkRVaXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpWRExFbEJRVWtzUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlR0blFrRkRhRUlzVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU03WVVGREwwUTdVMEZEU2p0UlFVTkVMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14UXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzB0QlF5OURPMGxCUTBRc1QwRkJUeXhaUVVGRExFTkJRVU1zYTBKQlFXdENMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRE1VTXNRMEZCUXp0QlFXUkVMREJDUVdORE8wRkJWMFFzVTBGQlV5dzBRa0ZCTkVJc1EwRkJReXhQUVVGWExFVkJRVVVzUzBGQllUdEpRVU0xUkN4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRja01zU1VGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZPMUZCUVVVc1NVRkJTU3hKUVVGSkxFbEJRVWtzUjBGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU03UzBGQlJUdEpRVU42UkN4SlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVU3VVVGRFpDeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVThzUlVGQlJTeEZRVUZGTEVkQlFVVXNTVUZCU1N4SFFVRkhMRU5CUVVNc1IwRkJSeXhMUVVGSExHRkJRV0VzUlVGQlJUdFpRVUZGTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRE8xTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVVXNRMEZCUXp0TFFVTjBSanRKUVVORUxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR2xEUVVGcFF5eEZRVUZGTEV0QlFVc3NRMEZCUVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eHhRa0ZCVHl4RFFVRkRMRU5CUVVNN1NVRkROVVVzVDBGQlR5eFpRVUZETEVOQlFVTXNkVUpCUVhWQ0xFVkJRVVVzV1VGQldTeERRVUZETEVsQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnBGTEVOQlFVTTdRVUZMUkN4VFFVRlRMRTlCUVU4c1EwRkJReXhQUVVGWExFVkJRVVVzUzBGQllUdEpRVU4yUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETzBsQlF6TkNMRTlCUVU4c1dVRkJReXhEUVVGRExIbENRVUY1UWl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGQkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVRXNRMEZCUXl4RFFVRkRPMUZCUXpORExGbEJRVU1zUTBGQlF5d3dRa0ZCTUVJc1JVRkJSU3hWUVVGVkxFTkJRVU03VVVGRGVrTXNXVUZCUXl4RFFVRkRMREpDUVVFeVFpeEZRVUZGTEVsQlFVa3NRMEZCUXp0TFFVTjJReXhEUVVGRExFTkJRVU03UVVGRFVDeERRVUZETzBGQlJVUXNVMEZCVXl4blFrRkJaMElzUTBGQlF5eFBRVUZYTzBsQlEycERMRTlCUVU4c1dVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVOHNSVUZCUlN4RlFVRkZPMUZCUXpGRExGRkJRVThzUjBGQlJ5eEZRVUZGTzFsQlExSXNTMEZCU3l4TlFVRk5MRU5CUVVNN1dVRkRXaXhMUVVGTExGZEJRVmNzUTBGQlF6dFpRVU5xUWl4TFFVRkxMRTFCUVUwc1EwRkJRenRaUVVOYUxFdEJRVXNzWVVGQllTeERRVUZETzFsQlEyNUNMRXRCUVVzc1UwRkJVenRuUWtGRFRpeFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTnNRanRuUWtGQlV5eFBRVUZQTEZsQlFVTXNRMEZCUXl3d1FrRkJNRUlzUlVGQlJUdHZRa0ZETVVNc1dVRkJReXhEUVVGRExEQkNRVUV3UWl4RlFVRkZMRWRCUVVjc1EwRkJRenR2UWtGRGJFTXNXVUZCUXl4RFFVRkRMREpDUVVFeVFpeEZRVUZGTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRwUWtGREwwTXNRMEZCUXl4RFFVRkRPMmRDUVVGQkxFTkJRVU03VTBGRFVEdEpRVU5VTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRVaXhEUVVGRE8wRkJSVVFzVTBGQlV5eG5Ra0ZCWjBJc1EwRkJReXhQUVVGWE8wbEJRMnBETEU5QlFVOHNXVUZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVRXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGUExFVkJRVVVzUlVGQlJUdFJRVU14UkN4UlFVRlBMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVU3V1VGRFdpeExRVUZMTEdGQlFXRXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xbEJRemxDTEU5QlFVOHNRMEZCUXl4RFFVRkRMRTlCUVU4c1dVRkJReXhEUVVGRExEQkNRVUV3UWl4RlFVRkZPMmRDUVVNeFF5eFpRVUZETEVOQlFVTXNNRUpCUVRCQ0xFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXp0blFrRkRkRU1zV1VGQlF5eERRVUZETERKQ1FVRXlRaXhGUVVGRkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTTdZVUZETTBNc1EwRkJReXhEUVVGRE8xTkJRMDQ3U1VGRFRDeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTFJc1EwRkJRenRCUVVWRUxGTkJRVk1zYVVKQlFXbENMRU5CUVVNc1RVRkJWVHRKUVVOcVF5eFBRVUZQTEZsQlFVTXNRMEZCUXl4NVFrRkJlVUlzUlVGQlJ5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJUeXhGUVVGRkxFVkJRVVVzUTBGRGVFUXNXVUZCUXl4RFFVRkRMSGRDUVVGM1FpeEZRVUZGTzFGQlEzaENMRmxCUVVNc1EwRkJReXd3UWtGQk1FSXNSVUZCUlN4SFFVRkhMRU5CUVVNc1NVRkJTU3hIUVVGRExFZEJRVWNzUTBGQlF6dFJRVU16UXl4WlFVRkRMRU5CUVVNc01rSkJRVEpDTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGQkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTTNReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NTMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU1zWVVGQllTeEhRVUZITEVOQlFVTXNXVUZCV1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVNNVJqdExRVU5LTEVOQlFVTXNRMEZEVEN4RFFVRkRMRU5CUVVNN1FVRkRVQ3hEUVVGRE8wRkJXVVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNUMEZCWXl4RlFVRkZMRXRCUVdFN1NVRkZMME1zU1VGQlNTeE5RVUZOTEVkQlFVY3NUMEZCVHl4RFFVRkRPMGxCUlhKQ0xGTkJRVk1zWTBGQll5eERRVUZETEVsQlFWYzdVVUZETDBJc1NVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyWXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTVHRoUVVOa0xGTkJRVk1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVU03WVVGRE0wSXNTVUZCU1N4RlFVRkZPMkZCUTA0c1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF6dGhRVU12UXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRE8yRkJRMWdzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVVN4RlFVRkZMRVZCUVVVN1dVRkRaQ3hKUVVGSkxGTkJRVk1zUjBGQlJ5eE5RVUZOTEVOQlFVTTdXVUZEZGtJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMWxCUTJwQ0xFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNdlJTeE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03V1VGREwwVXNUMEZCVHl4elEwRkJjME1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhUUVVGVExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVRXNUVUZCVFN4RFFVRkJMRU5CUVVNc1EwRkJRU3hUUVVGVExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjBSeXhEUVVGRExFTkJRVU03WVVGRFJDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRPMkZCUTFZc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRFdpeFBRVUZQTEdGQlFXRXNSMEZCUnl4TlFVRk5MRWRCUVVjc1pVRkJaU3hEUVVGRE8wbEJRM0JFTEVOQlFVTTdTVUZGUkN4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3hqUVVGakxFTkJRVU1zUTBGQlF6dEpRVU4wUlN4UFFVRlBMRmxCUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zYlVKQlFWRXNRMEZCUXl4TlFVRk5MRVZCUVVVc1MwRkJTeXhGUVVGRkxGbEJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRek5FTEVOQlFVTWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpbmRleF9qc18xID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9oc2xheW91dC9pbmRleC5qc1wiKTtcbmNvbnN0IGluZGV4X2pzXzIgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzbGF5b3V0L2luZGV4LmpzXCIpO1xuY29uc3QgRG9jU2V0c18xID0gcmVxdWlyZShcIi4uL0RvY1NldHNcIik7XG5jb25zdCBNYWluQ29tbWVudF8xID0gcmVxdWlyZShcIi4vTWFpbkNvbW1lbnRcIik7XG5jb25zdCBQYXJ0c18xID0gcmVxdWlyZShcIi4vUGFydHNcIik7XG5jbGFzcyBNYWluRGV0YWlsIGV4dGVuZHMgaW5kZXhfanNfMi5MYXlvdXQge1xuICAgIGdldENvbXBvbmVudHMobm9kZSkge1xuICAgICAgICBjb25zdCBsaWIgPSBpbmRleF9qc18xLm0ucm91dGUucGFyYW0oJ2xpYicpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IGluZGV4X2pzXzEubS5yb3V0ZS5wYXJhbSgnZmllbGQnKTtcbiAgICAgICAgbm9kZS5hdHRycy5yb3V0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGdldE92ZXJ2aWV3KGxpYiwgZmllbGQpIHx8IGl0ZW1Eb2MoRG9jU2V0c18xLkRvY1NldHMuZ2V0KGxpYiwgZmllbGQpIHx8ICcnKTtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLW1haW4tZGV0YWlsJywgW3Jlc3VsdF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuTWFpbkRldGFpbCA9IE1haW5EZXRhaWw7XG5mdW5jdGlvbiBnZXRPdmVydmlldyhsaWIsIG1kbCkge1xuICAgIGlmIChtZGwgPT09ICcwJyB8fCBtZGwgPT09ICcnKSB7XG4gICAgICAgIG1kbCA9IERvY1NldHNfMS5Eb2NTZXRzLmdldChsaWIsIGAke2xpYn0ub3ZlcnZpZXdgKTtcbiAgICAgICAgaWYgKG1kbCkge1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJ2aWV3RG9jKG1kbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGl0ZW1Eb2MobWRsKSB7XG4gICAgY29uc3Qgc2lnID0gbWRsLnNpZ25hdHVyZXMgPyBtZGwuc2lnbmF0dXJlc1swXSA6IG1kbDtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1kb2MnLCBbXG4gICAgICAgIHRpdGxlKG1kbCwgc2lnKSxcbiAgICAgICAgTWFpbkNvbW1lbnRfMS5jb21tZW50TG9uZyhzaWcpLFxuICAgICAgICBtZW1iZXJzKHNpZywgc2lnKVxuICAgIF0pO1xufVxuZnVuY3Rpb24gb3ZlcnZpZXdEb2MobWRsKSB7XG4gICAgY29uc3Qgc2lnID0gbWRsLnNpZ25hdHVyZXMgPyBtZGwuc2lnbmF0dXJlc1swXSA6IG1kbDtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1kb2MnLCBbXG4gICAgICAgIE1haW5Db21tZW50XzEuY29tbWVudExvbmcoc2lnKSxcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIHRpdGxlKG1kbCwgc2lnKSB7XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tdGl0bGUnLCB7IGlkOiBQYXJ0c18xLm1ha2VJRCgndGl0bGUnLCBtZGwpIH0sIGl0ZW1EZXNjcmlwdG9yKG1kbCwgc2lnKSk7XG59XG5mdW5jdGlvbiBtZW1iZXJzKG1kbCwgc2lnKSB7XG4gICAgaWYgKG1kbC5ncm91cHMpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tbWVtYmVycycsIFtcbiAgICAgICAgICAgIC4uLm1kbC5ncm91cHMubWFwKChnKSA9PiBtZW1iZXIoZywgbWRsLmxpYiwgdHJ1ZSwgdHJ1ZSkpLFxuICAgICAgICAgICAgLi4ubWRsLmdyb3Vwcy5tYXAoKGcpID0+IG1lbWJlcihnLCBtZGwubGliLCB0cnVlLCBmYWxzZSkpLFxuICAgICAgICAgICAgLi4ubWRsLmdyb3Vwcy5tYXAoKGcpID0+IG1lbWJlcihnLCBtZGwubGliLCBmYWxzZSwgdHJ1ZSkpLFxuICAgICAgICAgICAgLi4ubWRsLmdyb3Vwcy5tYXAoKGcpID0+IG1lbWJlcihnLCBtZGwubGliLCBmYWxzZSwgZmFsc2UpKVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWRsLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tbWVtYmVycycsIHBhcmFtZXRlcihtZGwucGFyYW1ldGVycywgbWRsLmxpYikpO1xuICAgIH1cbiAgICBlbHNlIGlmIChtZGwudHlwZSAmJiBtZGwudHlwZS5kZWNsYXJhdGlvbikge1xuICAgICAgICBtZGwudHlwZS5kZWNsYXJhdGlvbi5saWIgPSBtZGwubGliO1xuICAgICAgICByZXR1cm4gbWVtYmVycyhtZGwudHlwZS5kZWNsYXJhdGlvbiwgc2lnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLW1lbWJlcnMnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJhbWV0ZXIoZywgbGliKSB7XG4gICAgbGV0IGNvbnRlbnQgPSBnLm1hcCgoYykgPT4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1wYXJhbWV0ZXInLCB7IGlkOiBQYXJ0c18xLm1ha2VJRCgncGFyYW1ldGVyJywgYykgfSwgaXRlbUNoaWxkKGMpKSk7XG4gICAgY29udGVudC51bnNoaWZ0KGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tbWVtYmVyLXRpdGxlJywgeyBpZDogJ3BhcmFtZXRlcnMnIH0sIGluZGV4X2pzXzEubSgnc3BhbicsICdQYXJhbWV0ZXJzJykpKTtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1tZW1iZXInLCBjb250ZW50KTtcbn1cbmZ1bmN0aW9uIG1lbWJlcihncm91cCwgbGliLCBzdGF0YywgcHVibGMpIHtcbiAgICBjb25zdCByZXNvbHZlID0gKChjKSA9PiBEb2NTZXRzXzEuRG9jU2V0cy5nZXQobGliLCBjKSk7XG4gICAgY29uc3QgZGlyZWN0Q2hpbGRyZW4gPSAoKG1kbCkgPT4gIW1kbFsnaW5oZXJpdGVkRnJvbSddKTtcbiAgICBjb25zdCBpbmhlcml0ZWRDaGlsZHJlbiA9ICgobWRsKSA9PiBtZGxbJ2luaGVyaXRlZEZyb20nXSk7XG4gICAgY29uc3QgZ3JvdXBNYXAgPSB7XG4gICAgICAgICdFeHRlcm5hbCBtb2R1bGVzJzogJy5ocy1pdGVtLWV4dGVybmFsLW1vZHVsZScsXG4gICAgICAgICdDb25zdHJ1Y3RvcnMnOiAnLmhzLWl0ZW0tY29uc3RydWN0b3InLFxuICAgICAgICAnQ2xhc3Nlcyc6ICcuaHMtaXRlbS1jbGFzcycsXG4gICAgICAgICdJbnRlcmZhY2VzJzogJy5ocy1pdGVtLWludGVyZmFjZScsXG4gICAgICAgICdGdW5jdGlvbnMnOiAnLmhzLWl0ZW0tZnVuY3Rpb24nLFxuICAgICAgICAnTWV0aG9kcyc6ICcuaHMtaXRlbS1tZXRob2QnLFxuICAgICAgICAnVmFyaWFibGVzJzogJy5ocy1pdGVtLXZhcmlhYmxlJyxcbiAgICAgICAgJ09iamVjdCBsaXRlcmFscyc6ICcuaHMtaXRlbS1vYmplY3QtbGl0ZXJhbCcsXG4gICAgICAgICdQcm9wZXJ0aWVzJzogJy5ocy1pdGVtLXByb3BlcnR5JyxcbiAgICAgICAgJ1R5cGUgYWxpYXNlcyc6ICcuaHMtaXRlbS1hbGlhcycsXG4gICAgICAgICdBY2Nlc3NvcnMnOiAnLmhzLWl0ZW0tYWNjZXNzb3JzJ1xuICAgIH07XG4gICAgY29uc3QgZm4gPSBncm91cE1hcFtncm91cC50aXRsZV0gfHwgJy5ocy1pdGVtLXVua25vd24tbWVtYmVyJztcbiAgICBjb25zdCBpc1B1YmxpYyA9IChmbGFncykgPT4gZmxhZ3MuaXNQdWJsaWMgfHwgKGZsYWdzLmlzRXhwb3J0ZWQgJiYgIWZsYWdzLmlzUHJpdmF0ZSk7XG4gICAgY29uc3QgY29udGVudCA9IGdyb3VwLmNoaWxkcmVuXG4gICAgICAgIC5tYXAocmVzb2x2ZSlcbiAgICAgICAgLmZpbHRlcihkaXJlY3RDaGlsZHJlbilcbiAgICAgICAgLmZpbHRlcigobWRsKSA9PiBzdGF0YyA/IG1kbC5mbGFncy5pc1N0YXRpYyA6ICFtZGwuZmxhZ3MuaXNTdGF0aWMpXG4gICAgICAgIC5maWx0ZXIoKG1kbCkgPT4gcHVibGMgPyBpc1B1YmxpYyhtZGwuZmxhZ3MpIDogIWlzUHVibGljKG1kbC5mbGFncykpXG4gICAgICAgIC5tYXAoKG1kbCkgPT4gaW5kZXhfanNfMS5tKGZuLCB7IGlkOiBQYXJ0c18xLm1ha2VJRChncm91cC50aXRsZSwgbWRsKSB9LCBpdGVtQ2hpbGQobWRsKSkpO1xuICAgIGNvbnN0IGluaGVyaXRlZCA9IGdyb3VwLmNoaWxkcmVuXG4gICAgICAgIC5tYXAocmVzb2x2ZSlcbiAgICAgICAgLmZpbHRlcihpbmhlcml0ZWRDaGlsZHJlbilcbiAgICAgICAgLmZpbHRlcigobWRsKSA9PiBzdGF0YyA/IG1kbC5mbGFncy5pc1N0YXRpYyA6ICFtZGwuZmxhZ3MuaXNTdGF0aWMpXG4gICAgICAgIC5maWx0ZXIoKG1kbCkgPT4gcHVibGMgPyBtZGwuZmxhZ3MuaXNQdWJsaWMgOiAhbWRsLmZsYWdzLmlzUHVibGljKVxuICAgICAgICAubWFwKChtZGwpID0+IGluZGV4X2pzXzEubShgLmhzLWl0ZW0taW5oZXJpdGVkICR7Zm59YCwgeyBpZDogUGFydHNfMS5tYWtlSUQoZ3JvdXAudGl0bGUsIG1kbCkgfSwgaXRlbUNoaWxkKG1kbCkpKTtcbiAgICBjb25zdCBwdWJsU3RyID0gcHVibGMgPyAnUHVibGljJyA6ICdQcm90ZWN0ZWQgb3IgUHJpdmF0ZSc7XG4gICAgY29uc3Qgc3RhdFN0ciA9IHN0YXRjID8gJ1N0YXRpYycgOiAnJztcbiAgICBpZiAoaW5oZXJpdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaW5oZXJpdGVkLnVuc2hpZnQoaW5kZXhfanNfMS5tKCcuaHMtaXRlbS1pbmhlcml0ZWQgLmhzLWl0ZW0tbWVtYmVyLXRpdGxlJywgaW5kZXhfanNfMS5tKCdzcGFuJywgYCR7cHVibFN0cn0gJHtzdGF0U3RyfSBJbmhlcml0ZWQgJHtncm91cC50aXRsZX1gKSkpO1xuICAgIH1cbiAgICBpZiAoY29udGVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnRlbnQudW5zaGlmdChpbmRleF9qc18xLm0oJy5ocy1pdGVtLW1lbWJlci10aXRsZScsIHsgaWQ6IGdyb3VwLnRpdGxlLnRvTG93ZXJDYXNlKCkgfSwgaW5kZXhfanNfMS5tKCdzcGFuJywgYCR7cHVibFN0cn0gJHtzdGF0U3RyfSAke2dyb3VwLnRpdGxlfWApKSk7XG4gICAgfVxuICAgIHJldHVybiBpbmRleF9qc18xLm0oYC5ocy1pdGVtLW1lbWJlciAke3N0YXRjID8gJy5ocy1pdGVtLXN0YXRpYycgOiAnJ30gJHtwdWJsYyA/ICcuaHMtaXRlbS1wdWJsaWMnIDogJyd9YCwgY29udGVudC5jb25jYXQoaW5oZXJpdGVkKSk7XG59XG5mdW5jdGlvbiBpdGVtRGVzY3JpcHRvcihtZGwsIHNpZykge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJy5ocy1pdGVtLWRlc2MnLCBbXG4gICAgICAgICAgICBQYXJ0c18xLmZsYWdzKG1kbCksXG4gICAgICAgICAgICBQYXJ0c18xLmtpbmRTdHJpbmcobWRsKSxcbiAgICAgICAgICAgIFBhcnRzXzEuaXRlbU5hbWUobWRsLCBtZGwpLFxuICAgICAgICAgICAgUGFydHNfMS5zaWduYXR1cmUoc2lnLCBtZGwpLFxuICAgICAgICAgICAgUGFydHNfMS50eXBlKHNpZywgbWRsLmxpYiksXG4gICAgICAgICAgICBQYXJ0c18xLmV4dGVuc2lvbk9mKG1kbCksXG4gICAgICAgICAgICBQYXJ0c18xLmluaGVyaXRlZEZyb20obWRsKSxcbiAgICAgICAgICAgIFBhcnRzXzEuc291cmNlTGluayhtZGwpXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgY29uc29sZS5sb2cobWRsKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpdGVtQ2hpbGQobWRsLCBzaWcgPSBtZGwpIHtcbiAgICByZXR1cm4gbWRsLnNpZ25hdHVyZXMgP1xuICAgICAgICBtZGwuc2lnbmF0dXJlcy5tYXAoKHMpID0+IGluZGV4X2pzXzEubSgnLmhzLWl0ZW0tY2hpbGQtc2lnbmF0dXJlJywgW2l0ZW1EZXNjcmlwdG9yKG1kbCwgcyksIE1haW5Db21tZW50XzEuY29tbWVudChzLCB0cnVlKV0pKSA6XG4gICAgICAgIFtpdGVtRGVzY3JpcHRvcihtZGwsIHNpZyksIE1haW5Db21tZW50XzEuY29tbWVudChzaWcsIHRydWUpXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRXRnBia1JsZEdGcGJDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MmFXVjNMMDFoYVc1RVpYUmhhV3d1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3h0UlVGQk5FVTdRVUZETlVVc2JVVkJRVFJGTzBGQlF6VkZMSGREUVVGclJEdEJRVU5zUkN3clEwRkJjVVE3UVVGRGNrUXNiVU5CU1N0RE8wRkJUUzlETEUxQlFXRXNWVUZCVnl4VFFVRlJMR2xDUVVGTk8wbEJRMnhETEdGQlFXRXNRMEZCUXl4SlFVRlZPMUZCUTNCQ0xFMUJRVTBzUjBGQlJ5eEhRVUZKTEZsQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEyeERMRTFCUVUwc1MwRkJTeXhIUVVGSExGbEJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRM0pETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExGTkJRVk1zUTBGQlF6dFJRVVUzUWl4SlFVRkpMRTFCUVUwc1IwRkJSeXhYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SlFVRkpMRTlCUVU4c1EwRkJReXhwUWtGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTTdVVUZETDBVc1QwRkJUeXhaUVVGRExFTkJRVU1zYVVKQlFXbENMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6RkRMRU5CUVVNN1EwRkRTanRCUVZSRUxHZERRVk5ETzBGQlVVUXNVMEZCVXl4WFFVRlhMRU5CUVVNc1IwRkJWU3hGUVVGRkxFZEJRVlU3U1VGRGRrTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1IwRkJSeXhKUVVGSkxFZEJRVWNzUzBGQlN5eEZRVUZGTEVWQlFVVTdVVUZETTBJc1IwRkJSeXhIUVVGSExHbENRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFZEJRVWNzVjBGQlZ5eERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hIUVVGSExFVkJRVVU3V1VGRFRDeFBRVUZQTEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVNelFqdExRVU5LTzBsQlEwUXNUMEZCVHl4VFFVRlRMRU5CUVVNN1FVRkRja0lzUTBGQlF6dEJRVTFFTEZOQlFWTXNUMEZCVHl4RFFVRkRMRWRCUVU4N1NVRkRjRUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJRU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETzBsQlEzQkVMRTlCUVU4c1dVRkJReXhEUVVGRExHTkJRV01zUlVGQlJUdFJRVU55UWl4TFFVRkxMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF6dFJRVU5tTEhsQ1FVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRE8xRkJRMmhDTEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRE8wdEJRM0JDTEVOQlFVTXNRMEZCUXp0QlFVTlFMRU5CUVVNN1FVRk5SQ3hUUVVGVExGZEJRVmNzUTBGQlF5eEhRVUZQTzBsQlEzaENMRTFCUVUwc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRKUVVOd1JDeFBRVUZQTEZsQlFVTXNRMEZCUXl4alFVRmpMRVZCUVVVN1VVRkRja0lzZVVKQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNN1MwRkRia0lzUTBGQlF5eERRVUZETzBGQlExQXNRMEZCUXp0QlFVOUVMRk5CUVZNc1MwRkJTeXhEUVVGRExFZEJRVThzUlVGQlJTeEhRVUZQTzBsQlF6TkNMRTlCUVU4c1dVRkJReXhEUVVGRExHZENRVUZuUWl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRkxHTkJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVNc1JVRkJSU3hqUVVGakxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRja1lzUTBGQlF6dEJRVVZFTEZOQlFWTXNUMEZCVHl4RFFVRkRMRWRCUVU4c1JVRkJSU3hIUVVGUE8wbEJRemRDTEVsQlFVa3NSMEZCUnl4RFFVRkRMRTFCUVUwc1JVRkJSVHRSUVVOYUxFOUJRVThzV1VGQlF5eERRVUZETEd0Q1FVRnJRaXhGUVVGRk8xbEJRM3BDTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRE5VUXNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU0zUkN4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCU3l4RlFVRkZMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF6ZEVMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVMEZEYWtVc1EwRkJReXhEUVVGRE8wdEJRMDQ3VTBGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4VlFVRlZMRVZCUVVVN1VVRkRka0lzVDBGQlR5eFpRVUZETEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRVZCUVVVc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdTMEZEY0VVN1UwRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVU3VVVGRGVrTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkRia01zVDBGQlR5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZETjBNN1UwRkJUVHRSUVVOSUxFOUJRVThzV1VGQlF5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU03UzBGRGFFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhUUVVGVExFTkJRVU1zUTBGQlR5eEZRVUZGTEVkQlFWVTdTVUZEYkVNc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zV1VGQlF5eERRVUZETEc5Q1FVRnZRaXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEdOQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMjVITEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJReXhEUVVGRExIVkNRVUYxUWl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExGbEJRVmtzUlVGQlF5eEZRVUZGTEZsQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaEdMRTlCUVU4c1dVRkJReXhEUVVGRExHbENRVUZwUWl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRM3BETEVOQlFVTTdRVUZGUkN4VFFVRlRMRTFCUVUwc1EwRkJReXhMUVVGVExFVkJRVVVzUjBGQlZTeEZRVUZGTEV0QlFXRXNSVUZCUlN4TFFVRmpPMGxCUTJoRkxFMUJRVTBzVDBGQlR5eEhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1JVRkJSU3hEUVVGRExHbENRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEVMRTFCUVUwc1kwRkJZeXhIUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZQTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZETDBRc1RVRkJUU3hwUWtGQmFVSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJUeXhGUVVGRkxFVkJRVVVzUTBGQlJTeEhRVUZITEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNdlJDeE5RVUZOTEZGQlFWRXNSMEZCUnp0UlFVTmlMR3RDUVVGclFpeEZRVUZGTERCQ1FVRXdRanRSUVVNNVF5eGpRVUZqTEVWQlFVMHNjMEpCUVhOQ08xRkJRekZETEZOQlFWTXNSVUZCVnl4blFrRkJaMEk3VVVGRGNFTXNXVUZCV1N4RlFVRlJMRzlDUVVGdlFqdFJRVU40UXl4WFFVRlhMRVZCUVZNc2JVSkJRVzFDTzFGQlEzWkRMRk5CUVZNc1JVRkJWeXhwUWtGQmFVSTdVVUZEY2tNc1YwRkJWeXhGUVVGVExHMUNRVUZ0UWp0UlFVTjJReXhwUWtGQmFVSXNSVUZCUnl4NVFrRkJlVUk3VVVGRE4wTXNXVUZCV1N4RlFVRlJMRzFDUVVGdFFqdFJRVU4yUXl4alFVRmpMRVZCUVUwc1owSkJRV2RDTzFGQlEzQkRMRmRCUVZjc1JVRkJVeXh2UWtGQmIwSTdTMEZETTBNc1EwRkJRenRKUVVOR0xFMUJRVTBzUlVGQlJTeEhRVUZITEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzZVVKQlFYbENMRU5CUVVNN1NVRkRPVVFzVFVGQlRTeFJRVUZSTEVkQlFVY3NRMEZCUXl4TFFVRlRMRVZCUVVVc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJWU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMGxCUlhwR0xFMUJRVTBzVDBGQlR5eEhRVUZITEV0QlFVc3NRMEZCUXl4UlFVRlJPMU5CUTNwQ0xFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTTdVMEZEV2l4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRE8xTkJRM1JDTEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVU4c1JVRkJSU3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZCTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF6dFRRVU53UlN4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUVN4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMU5CUTNSRkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVOHNSVUZCUlN4RlFVRkZMRU5CUVVNc1dVRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4alFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUXl4RlFVRkZMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZETlVVc1RVRkJUU3hUUVVGVExFZEJRVWNzUzBGQlN5eERRVUZETEZGQlFWRTdVMEZETTBJc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF6dFRRVU5hTEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dFRRVU42UWl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUVN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVTTdVMEZEY0VVc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlR5eEZRVUZGTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVFc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRPMU5CUTNCRkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVOHNSVUZCUlN4RlFVRkZMRU5CUVVNc1dVRkJReXhEUVVGRExITkNRVUZ6UWl4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eGpRVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUlVGQlF5eEZRVUZGTEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmNFY3NUVUZCVFN4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGQkxFTkJRVU1zUTBGQlFTeFJRVUZSTEVOQlFVRXNRMEZCUXl4RFFVRkJMSE5DUVVGelFpeERRVUZETzBsQlEzUkVMRTFCUVUwc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlFTeERRVUZETEVOQlFVRXNVVUZCVVN4RFFVRkJMRU5CUVVNc1EwRkJRU3hGUVVGRkxFTkJRVU03U1VGRGJFTXNTVUZCU1N4VFFVRlRMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUlVGQlJUdFJRVU53UWl4VFFVRlRMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVU1zUTBGQlF5d3dRMEZCTUVNc1JVRkJSU3haUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NUMEZCVHl4SlFVRkpMRTlCUVU4c1kwRkJZeXhMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRha2s3U1VGRFJDeEpRVUZKTEU5QlFVOHNRMEZCUXl4TlFVRk5MRWRCUVVNc1EwRkJReXhGUVVGRk8xRkJRMnhDTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJReXhEUVVGRExIVkNRVUYxUWl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RlFVRkZMRVZCUVVNc1JVRkJSU3haUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NUMEZCVHl4SlFVRkpMRTlCUVU4c1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRiRWs3U1VGRFJDeFBRVUZQTEZsQlFVTXNRMEZCUXl4dFFrRkJiVUlzUzBGQlN5eERRVUZCTEVOQlFVTXNRMEZCUVN4cFFrRkJhVUlzUTBGQlFTeERRVUZETEVOQlFVRXNSVUZCUlN4SlFVRkpMRXRCUVVzc1EwRkJRU3hEUVVGRExFTkJRVUVzYVVKQlFXbENMRU5CUVVFc1EwRkJReXhEUVVGQkxFVkJRVVVzUlVGQlJTeEZRVUZGTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU4yU0N4RFFVRkRPMEZCUlVRc1UwRkJVeXhqUVVGakxFTkJRVU1zUjBGQlR5eEZRVUZGTEVkQlFVODdTVUZEY0VNc1NVRkJTVHRSUVVGRkxFOUJRVThzV1VGQlF5eERRVUZETEdWQlFXVXNSVUZCUlR0WlFVTjRRaXhoUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETzFsQlExWXNhMEpCUVZVc1EwRkJReXhIUVVGSExFTkJRVU03V1VGRFppeG5Ra0ZCVVN4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU03V1VGRGJFSXNhVUpCUVZNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETzFsQlEyNUNMRmxCUVVrc1EwRkJReXhIUVVGSExFVkJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXp0WlFVTnVRaXh0UWtGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXp0WlFVTm9RaXh4UWtGQllTeERRVUZETEVkQlFVY3NRMEZCUXp0WlFVTnNRaXhyUWtGQlZTeERRVUZETEVkQlFVY3NRMEZCUXp0VFFVTnNRaXhEUVVGRExFTkJRVU03UzBGRFRqdEpRVU5FTEU5QlFVMHNRMEZCUXl4RlFVRkZPMUZCUVVVc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZCUlR0QlFVTnNSQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFRRVUZUTEVOQlFVTXNSMEZCVHl4RlFVRkZMRWRCUVVjc1IwRkJReXhIUVVGSE8wbEJReTlDTEU5QlFVOHNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJRU3hEUVVGRE8xRkJRMnhDTEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4WlFVRkRMRU5CUVVNc01FSkJRVEJDTEVWQlFVTXNRMEZCUXl4alFVRmpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEhGQ1FVRlBMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRla2NzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxIRkNRVUZQTEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGRFUXNRMEZCUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaHNsYXlvdXRfMSA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmNvbnN0IGhzd2lkZ2V0XzEgPSByZXF1aXJlKFwiaHN3aWRnZXRcIik7XG5jb25zdCBoc3dpZGdldCA9IHJlcXVpcmUoXCJoc3dpZGdldFwiKTtcbmNvbnN0IGhzbGF5b3V0ID0gcmVxdWlyZShcImhzbGF5b3V0XCIpO1xuY29uc3QgaHNsYXlvdXRfMiA9IHJlcXVpcmUoXCJoc2xheW91dFwiKTtcbmNvbnN0IGhzdXRpbF8xID0gcmVxdWlyZShcImhzdXRpbFwiKTtcbmNvbnN0IGhzdXRpbF8yID0gcmVxdWlyZShcImhzdXRpbFwiKTtcbmNvbnN0IGhzdXRpbCA9IHJlcXVpcmUoXCJoc3V0aWxcIik7XG5jb25zdCBtb2R1bGVzID0ge1xuICAgIG06IFByb21pc2UucmVzb2x2ZShoc2xheW91dF8xLm0pLFxuICAgIGhzdXRpbDogUHJvbWlzZS5yZXNvbHZlKGhzdXRpbCksXG4gICAgaHNsYXlvdXQ6IFByb21pc2UucmVzb2x2ZShoc2xheW91dCksXG4gICAgaHN3aWRnZXQ6IFByb21pc2UucmVzb2x2ZShoc3dpZGdldCksXG4gICAgaHNkYXRhYjogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiByZXF1aXJlKCdoc2RhdGFiJykpLFxuICAgIGhzZ3JhcGg6IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gcmVxdWlyZSgnaHNncmFwaCcpKVxufTtcbmNvbnN0IGdJbml0aWFsaXplZCA9IHt9O1xuZnVuY3Rpb24gZXhhbXBsZShleG1wbCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gaHN1dGlsXzEuc2hvcnRDaGVja1N1bShleG1wbCk7XG4gICAgbGV0IElEcyA9IGdJbml0aWFsaXplZFtpbnN0YW5jZV07XG4gICAgaWYgKCFJRHMpIHtcbiAgICAgICAgSURzID0gZ0luaXRpYWxpemVkW2luc3RhbmNlXSA9IGluaXREZXNjKElEcyk7XG4gICAgICAgIElEcy5leGVjdXRlU291cmNlID0gZXhtcGw7XG4gICAgICAgIGNyZWF0ZUV4ZWN1dGVTY3JpcHQoSURzLCBleG1wbCk7XG4gICAgfVxuICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLm1lbnVJRCkpIHtcbiAgICAgICAgYWRkRXhhbXBsZShJRHMpLnRoZW4oaHN1dGlsXzIuZGVsYXkoMSkpLnRoZW4oZXhlY3V0ZVNjcmlwdCkuY2F0Y2goZXhlY3V0ZUVycm9yKTtcbiAgICB9XG4gICAgY29uc3QgZnJhbWVIZWlnaHQgPSAoSURzLmF0dHJzID8gSURzLmF0dHJzLmhlaWdodCA6IHVuZGVmaW5lZCkgfHwgJzMwMHB4JztcbiAgICBjb25zdCB3cmFwV2l0aElEID0gKGNzcykgPT4gY3NzID09PSAnJGV4YW1wbGVJRCcgPyBgIyR7SURzLmV4YW1wbGVJRH1gIDogYCMke0lEcy5tZW51SUR9ICR7Y3NzfWA7XG4gICAgY29uc3Qgc3R5bGUgPSAoIUlEcy5wYWdlc1snY3NzJ10pID8gJycgOlxuICAgICAgICBJRHMucGFnZXNbJ2NzcyddLnJlcGxhY2UoLyhefH0pXFxzKj8oXFxTKj8pXFxzKj97L2dpLCAoeCwgLi4uYXJncykgPT4geC5yZXBsYWNlKGFyZ3NbMV0sIHdyYXBXaXRoSUQoYXJnc1sxXSkpKTtcbiAgICByZXR1cm4gYDxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PGV4YW1wbGUgaWQ9JHtJRHMuZXhhbXBsZUlEfSBzdHlsZT1cImhlaWdodDoke2ZyYW1lSGVpZ2h0fVwiIGNsYXNzPVwiaHMtbGF5b3V0LWZyYW1lXCI+PC9leGFtcGxlPmA7XG59XG5leHBvcnRzLmV4YW1wbGUgPSBleGFtcGxlO1xuZnVuY3Rpb24gY3JlYXRlRXhlY3V0ZVNjcmlwdChJRHMsIGV4bXBsKSB7XG4gICAgY29uc3QgbGliTmFtZXMgPSBPYmplY3Qua2V5cyhtb2R1bGVzKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwobGliTmFtZXMubWFwKG5hbWUgPT4gbW9kdWxlc1tuYW1lXSkpXG4gICAgICAgIC50aGVuKChsaWJzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHRGbiA9IG5ldyBGdW5jdGlvbigncm9vdCcsIC4uLmxpYk5hbWVzLCBnZXRDb21tZW50RGVzY3JpcHRvcihJRHMsIGV4bXBsKSk7XG4gICAgICAgICAgICBJRHMuZXhlY3V0ZVNjcmlwdCA9IChyb290KSA9PiBzY3JpcHRGbihyb290LCAuLi5saWJzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3JlYXRpbmcgc2NyaXB0OicgKyBlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gaW5pdERlc2MoSURzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXhhbXBsZUlEOiBnZXROZXdJRCgpLFxuICAgICAgICBtZW51SUQ6IGdldE5ld0lEKCksXG4gICAgICAgIGRlc2M6IHtcbiAgICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogJ2pzJyxcbiAgICAgICAgICAgIGNsaWNrZWQ6ICgpID0+IGFkZEV4YW1wbGUoSURzKVxuICAgICAgICAgICAgICAgIC50aGVuKGV4ZWN1dGVTY3JpcHQpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGV4ZWN1dGVFcnJvciksXG4gICAgICAgICAgICBzaXplOiBbXCI1MHB4XCJdXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2VzOiB7fSxcbiAgICAgICAgYWN0aXZlU3JjUGFnZTogdW5kZWZpbmVkXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldE5ld0lEKCkge1xuICAgIHJldHVybiAnaHMnICsgTWF0aC5mbG9vcigxMDAwMDAwICogTWF0aC5yYW5kb20oKSk7XG59XG5mdW5jdGlvbiBhZGRFeGFtcGxlKElEcykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoSURzKS50aGVuKGFkZEV4YW1wbGVTdHJ1Y3R1cmUpLnRoZW4oaHN1dGlsXzIuZGVsYXkoMSkpO1xufVxuZnVuY3Rpb24gYWRkRXhhbXBsZVN0cnVjdHVyZShJRHMpIHtcbiAgICBsZXQgaXRlbSA9IElEcy5hY3RpdmVTcmNQYWdlIHx8ICdqcyc7XG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5leGFtcGxlSUQpO1xuICAgIElEcy5kZXNjLmNsaWNrZWQgPSAobmV3SXRlbSkgPT4ge1xuICAgICAgICBpdGVtID0gSURzLmFjdGl2ZVNyY1BhZ2UgPSBuZXdJdGVtO1xuICAgIH07XG4gICAgaHNsYXlvdXRfMS5tLm1vdW50KHJvb3QsIHsgdmlldzogKCkgPT4gaHNsYXlvdXRfMS5tKGhzbGF5b3V0XzIuTGF5b3V0LCB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXCI1MCVcIl0sXG4gICAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICAgICAgaHNsYXlvdXRfMS5tKGhzbGF5b3V0XzIuTGF5b3V0LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGhzbGF5b3V0XzEubSgnLmhzLWxheW91dCAuaHMtZXhlY3V0aW9uJywgeyBpZDogSURzLm1lbnVJRCB9LCAncGxhY2Vob2xkZXInKVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGhzbGF5b3V0XzEubShoc2xheW91dF8yLkxheW91dCwge1xuICAgICAgICAgICAgICAgICAgICByb3dzOiBbXCIzMHB4XCIsIFwiZmlsbFwiXSxcbiAgICAgICAgICAgICAgICAgICAgY3NzOiAnLmhzLXNvdXJjZScsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhzbGF5b3V0XzEubShoc3dpZGdldF8xLk1lbnUsIHsgZGVzYzogSURzLmRlc2MsIHNpemU6IFsnNTBweCddIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgaHNsYXlvdXRfMS5tKGhzbGF5b3V0XzIuTGF5b3V0LCB7IGNvbnRlbnQ6IGhzbGF5b3V0XzEubSgnLmhzLWxheW91dCAuaHMtc291cmNlLW1haW4nLCBoc2xheW91dF8xLm0udHJ1c3QoYDxjb2RlPjxwcmU+JHtJRHMucGFnZXNbaXRlbV19PC9wcmU+PC9jb2RlPmApKSB9KVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9KTtcbiAgICByZXR1cm4gSURzO1xufVxuZnVuY3Rpb24gZXhlY3V0ZVNjcmlwdChJRHMpIHtcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLm1lbnVJRCk7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIElEcy5leGVjdXRlU2NyaXB0KHJvb3QpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yIGV4ZWN1dGluZyBzY3JpcHQ6IFwiICsgZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhJRHMuZXhlY3V0ZVNvdXJjZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYHJvb3Qgbm90IGZvdW5kIGZvciBtZW51SUQgJHtJRHMubWVudUlEfWApO1xuICAgIH1cbiAgICBoc2xheW91dF8xLm0ucmVkcmF3KCk7XG4gICAgcmV0dXJuIElEcztcbn1cbmZ1bmN0aW9uIGV4ZWN1dGVFcnJvcihlKSB7XG4gICAgY29uc29sZS5sb2coJ3JlamVjdGlvbiBleGVjdXRpbmcgc2NyaXB0OicpO1xuICAgIGNvbnNvbGUubG9nKGUpO1xufVxuZnVuY3Rpb24gZ2V0Q29tbWVudERlc2NyaXB0b3IoSURzLCBleGFtcGxlKSB7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIGxldCBhdHRycyA9IGV4YW1wbGUubWF0Y2goLzxleGFtcGxlXFxzKFxcUyo/KShcXHN8PikvaSk7XG4gICAgaWYgKGF0dHJzICYmIGF0dHJzWzFdKSB7XG4gICAgICAgIGNvbnN0IGF0ID0gYXR0cnNbMV0uc3BsaXQoJz0nKTtcbiAgICAgICAgSURzLmF0dHJzID0geyBbYXRbMF1dOiBhdFsxXSB9O1xuICAgIH1cbiAgICBleGFtcGxlLnJlcGxhY2UoLzxmaWxlW1xcc10qbmFtZT1bXFxTXSo/XFwuKFtcXHNcXFNdKj8pWyd8XCJdPihbXFxTXFxzXSo/KTxcXC9maWxlPi9naSwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IFsuLi5hcmd1bWVudHNdO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXJnc1syXS50cmltKCk7XG4gICAgICAgIElEcy5kZXNjLml0ZW1zLnB1c2goYXJnc1sxXSk7XG4gICAgICAgIElEcy5wYWdlc1thcmdzWzFdXSA9IGNvbnRlbnQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIElEcy5wYWdlc1snanMnXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRXRnBia1Y0WVcxd2JHVXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmRtbGxkeTlOWVdsdVJYaGhiWEJzWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVEJGUVN4MVEwRkJaMFE3UVVGRGFFUXNkVU5CUVdkRU8wRkJRMmhFTEhGRFFVRm5SRHRCUVVOb1JDeHhRMEZCWjBRN1FVRkRhRVFzZFVOQlFXZEVPMEZCUTJoRUxHMURRVUU0UXp0QlFVTTVReXh0UTBGQk9FTTdRVUZET1VNc2FVTkJRVGhETzBGQlJUbERMRTFCUVUwc1QwRkJUeXhIUVVGSE8wbEJRMW9zUTBGQlF5eEZRVUZYTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJReXhEUVVGRE8wbEJRemxDTEUxQlFVMHNSVUZCVFN4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU51UXl4UlFVRlJMRVZCUVVrc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTTdTVUZEY2tNc1VVRkJVU3hGUVVGSkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUTNKRExFOUJRVThzZFVOQlFTdERMRk5CUVZNc1JVRkJRenRKUVVOb1JTeFBRVUZQTEhWRFFVRXJReXhUUVVGVExFVkJRVU03UTBGRGJrVXNRMEZCUXp0QlFXMUNSaXhOUVVGTkxGbEJRVmtzUjBGQkswSXNSVUZCUlN4RFFVRkRPMEZCWjBKd1JDeFRRVUZuUWl4UFFVRlBMRU5CUVVNc1MwRkJXVHRKUVVOb1F5eE5RVUZOTEZGQlFWRXNSMEZCUnl4elFrRkJZU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlEzUkRMRWxCUVVrc1IwRkJSeXhIUVVGSExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0SlFVTnFReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTzFGQlEwNHNSMEZCUnl4SFFVRkhMRmxCUVZrc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkROME1zUjBGQlJ5eERRVUZETEdGQlFXRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkRNVUlzYlVKQlFXMUNMRU5CUVVNc1IwRkJSeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzB0QlEyNURPMGxCUTBRc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRk8xRkJRM1JETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRMUVVNeFJUdEpRVVZFTEUxQlFVMHNWMEZCVnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlFTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRTlCUVU4c1EwRkJRenRKUVVONlJTeE5RVUZOTEZWQlFWVXNSMEZCUnl4RFFVRkRMRWRCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZITEZsQlFWa3NRMEZCUVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVOXdSeXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVFc1EwRkJRenRSUVVOMFFpeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eDNRa0ZCZDBJc1JVRkROME1zUTBGQlF5eERRVUZSTEVWQlFVVXNSMEZCUnl4SlFVRlZMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVOMlJpeERRVUZETzBsQlEwWXNUMEZCVHl4VlFVRlZMRXRCUVVzc2RVSkJRWFZDTEVkQlFVY3NRMEZCUXl4VFFVRlRMR3RDUVVGclFpeFhRVUZYTEhORFFVRnpReXhEUVVGRE8wRkJRMnhKTEVOQlFVTTdRVUY2UWtRc01FSkJlVUpETzBGQlJVUXNVMEZCVXl4dFFrRkJiVUlzUTBGQlF5eEhRVUZ4UWl4RlFVRkZMRXRCUVZrN1NVRkROVVFzVFVGQlRTeFJRVUZSTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU4wUXl4UFFVRlBMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNSRUxFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZPMUZCUTFnc1NVRkJTVHRaUVVOQkxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NVVUZCVVN4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExGRkJRVkVzUlVGQlJTeHZRa0ZCYjBJc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTnlSaXhIUVVGSExFTkJRVU1zWVVGQllTeEhRVUZITEVOQlFVTXNTVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRNVVFzVDBGQlR5eEpRVUZKTEVOQlFVTTdVMEZEWmp0UlFVTkVMRTlCUVUwc1EwRkJReXhGUVVGRk8xbEJRMHdzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4clFrRkJhMElzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTndReXhQUVVGUExFdEJRVXNzUTBGQlF6dFRRVU5vUWp0SlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMUFzUTBGQlF6dEJRVXRFTEZOQlFWTXNVVUZCVVN4RFFVRkRMRWRCUVhGQ08wbEJRMjVETEU5QlFVODdVVUZEU0N4VFFVRlRMRVZCUVVjc1VVRkJVU3hGUVVGRk8xRkJRM1JDTEUxQlFVMHNSVUZCVFN4UlFVRlJMRVZCUVVVN1VVRkRkRUlzU1VGQlNTeEZRVUZsTzFsQlEyWXNTMEZCU3l4RlFVRlhMRVZCUVVVN1dVRkRiRUlzV1VGQldTeEZRVUZGTEVsQlFVazdXVUZEYkVJc1QwRkJUeXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNN2FVSkJRMnBDTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNN2FVSkJRMjVDTEV0QlFVc3NRMEZCUXl4WlFVRlpMRU5CUVVNN1dVRkRhRU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRPMU5CUTJwQ08xRkJRMFFzUzBGQlN5eEZRVUZETEVWQlFVVTdVVUZEVWl4aFFVRmhMRVZCUVVVc1UwRkJVenRMUVVNelFpeERRVUZETzBGQlEwNHNRMEZCUXp0QlFVZEVMRk5CUVZNc1VVRkJVVHRKUVVOaUxFOUJRVThzU1VGQlNTeEhRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUTJ4RUxFTkJRVU03UVVGSFJDeFRRVUZUTEZWQlFWVXNRMEZCUXl4SFFVRnhRanRKUVVOeVF5eFBRVUZQTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEcxQ1FVRnRRaXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM3BGTEVOQlFVTTdRVUZQUkN4VFFVRlRMRzFDUVVGdFFpeERRVUZETEVkQlFYRkNPMGxCUXpsRExFbEJRVWtzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4aFFVRmhMRWxCUVVrc1NVRkJTU3hEUVVGRE8wbEJRM0pETEUxQlFVMHNTVUZCU1N4SFFVRkhMRkZCUVZFc1EwRkJReXhqUVVGakxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMGxCUlhCRUxFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1QwRkJZeXhGUVVGRkxFVkJRVVU3VVVGRGJFTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhoUVVGaExFZEJRVWNzVDBGQlR5eERRVUZETzBsQlEzWkRMRU5CUVVNc1EwRkJRenRKUVVWR0xGbEJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVNc1NVRkJTU3hGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEZsQlFVTXNRMEZCUXl4cFFrRkJUU3hGUVVGRk8xbEJRMnBETEU5QlFVOHNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVOb1FpeFBRVUZQTEVWQlFVVTdaMEpCUTB3c1dVRkJReXhEUVVGRExHbENRVUZOTEVWQlFVVTdiMEpCUTA0c1QwRkJUeXhGUVVGRkxGbEJRVU1zUTBGQlF5d3dRa0ZCTUVJc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkRMRVZCUVVVc1lVRkJZU3hEUVVGRE8ybENRVU42UlN4RFFVRkRPMmRDUVVOR0xGbEJRVU1zUTBGQlF5eHBRa0ZCVFN4RlFVRkZPMjlDUVVOT0xFbEJRVWtzUlVGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNN2IwSkJRM0pDTEVkQlFVY3NSVUZCUlN4WlFVRlpPMjlDUVVOcVFpeFBRVUZQTEVWQlFVTTdkMEpCUTBvc1dVRkJReXhEUVVGRExHVkJRVWtzUlVGQlJTeEZRVUZETEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNN2QwSkJRM3BETEZsQlFVTXNRMEZCUXl4cFFrRkJUU3hGUVVGRkxFVkJRVVVzVDBGQlR5eEZRVUZGTEZsQlFVTXNRMEZCUXl3MFFrRkJORUlzUlVGQlJTeFpRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMR05CUVdNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRE8zRkNRVU5vU0R0cFFrRkRTaXhEUVVGRE8yRkJRMHc3VTBGQlF5eERRVUZETzB0QlEwNHNRMEZCUXl4RFFVRkRPMGxCUTBnc1QwRkJUeXhIUVVGSExFTkJRVU03UVVGRFppeERRVUZETzBGQlRVUXNVMEZCVXl4aFFVRmhMRU5CUVVNc1IwRkJjVUk3U1VGRGVFTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1VVRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRha1FzU1VGQlNTeEpRVUZKTEVWQlFVVTdVVUZGVGl4SlFVRkpPMWxCUVVVc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVRkZPMUZCUTJoRExFOUJRVTBzUTBGQlF5eEZRVUZGTzFsQlEwd3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXd3UWtGQk1FSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNMVF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhoUVVGaExFTkJRVU1zUTBGQlF6dFpRVU12UWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0VFFVTjRRanRMUVVOS08xTkJRVTA3VVVGRFNDeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRFpDUVVFMlFpeEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJRenRMUVVNeFJEdEpRVU5FTEZsQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVOWUxFOUJRVThzUjBGQlJ5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1dVRkJXU3hEUVVGRExFTkJRVXM3U1VGRGRrSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4RFFVRkRPMGxCUXpORExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRia0lzUTBGQlF6dEJRVkZFTEZOQlFWTXNiMEpCUVc5Q0xFTkJRVU1zUjBGQmNVSXNSVUZCUlN4UFFVRmpPMGxCUXk5RUxFbEJRVWtzVFVGQlRTeEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTm9RaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMSGxDUVVGNVFpeERRVUZETEVOQlFVTTdTVUZEY2tRc1NVRkJTU3hMUVVGTExFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMUZCUTI1Q0xFMUJRVTBzUlVGQlJTeEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZETDBJc1IwRkJSeXhEUVVGRExFdEJRVXNzUjBGQlNTeEZRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNN1MwRkRha003U1VGRFJDeFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRFpFUVVFMlJDeEZRVUZGTEZWQlFWTXNTVUZCVnp0UlFVTXZSaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkROVUlzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFGQlF5OUNMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU0zUWl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJRenRSUVVNM1FpeFBRVUZQTEUxQlFVMHNRMEZCUXp0SlFVTnNRaXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5JTEU5QlFVOHNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU16UWl4RFFVRkRJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpbmRleF9qc18xID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9oc2xheW91dC9pbmRleC5qc1wiKTtcbmNvbnN0IFRvb2x0aXBfMSA9IHJlcXVpcmUoXCIuL1Rvb2x0aXBcIik7XG5jb25zdCBEb2NTZXRzXzEgPSByZXF1aXJlKFwiLi4vRG9jU2V0c1wiKTtcbmNvbnN0IGluZGV4X2pzXzIgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2hzdXRpbC9pbmRleC5qc1wiKTtcbmNvbnN0IGxvZyA9IGluZGV4X2pzXzIubG9nKCdQYXJ0cycpO1xuY29uc3QgU291cmNlQmFzZSA9ICdkYXRhL3NyYy8nO1xuZnVuY3Rpb24gZmxhZ3MobWRsLCBpZ25vcmUgPSBbXSkge1xuICAgIGNvbnN0IGlnbm9yZUV4cG9ydEluS2luZCA9IFsnTWV0aG9kJywgJ1Byb3BlcnR5J107XG4gICAgY29uc3Qga25vd25GbGFncyA9IHtcbiAgICAgICAgaXNFeHBvcnRlZDogJ2V4cG9ydCcsXG4gICAgICAgIGlzRXh0ZXJuYWw6ICdleHRlcm5hbCcsXG4gICAgICAgIGlzUHVibGljOiAncHVibGljJyxcbiAgICAgICAgaXNQcml2YXRlOiAncHJpdmF0ZScsXG4gICAgICAgIGlzUHJvdGVjdGVkOiAncHJvdGVjdGVkJyxcbiAgICAgICAgaXNDb25zdHJ1Y3RvclByb3BlcnR5OiAnY29uc3RydWN0b3JQcm9wZXJ0eScsXG4gICAgICAgIGlzQWJzdHJhY3Q6ICdhYnN0cmFjdCcsXG4gICAgICAgIGlzQ29uc3Q6ICdjb25zdCcsXG4gICAgICAgIGlzTGV0OiAnbGV0JyxcbiAgICAgICAgaXNWYXI6ICd2YXInLFxuICAgICAgICBpc1N0YXRpYzogJ3N0YXRpYycsXG4gICAgICAgIGlzT3B0aW9uYWw6ICdvcHRpb25hbCdcbiAgICB9O1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1mbGFncycsICFtZGwuZmxhZ3MgPyBbXSA6XG4gICAgICAgIE9iamVjdC5rZXlzKG1kbC5mbGFncykubWFwKChmKSA9PiB7XG4gICAgICAgICAgICBsZXQgaWduID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZmxhZyA9IGtub3duRmxhZ3NbZl07XG4gICAgICAgICAgICBpZiAoZmxhZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmxhZyA9IGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZ24gPSAoaWdub3JlLmluZGV4T2YoZmxhZykgPj0gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmxhZyA9PT0gJ2V4cG9ydCcgJiYgaWdub3JlRXhwb3J0SW5LaW5kLmluZGV4T2YobWRsLmtpbmRTdHJpbmcpID49IDApIHtcbiAgICAgICAgICAgICAgICBpZ24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubShgc3Bhbi5ocy1pdGVtLSR7aWduID8gJ2lnbm9yZScgOiAoZmxhZyA9PT0gZiA/ICd1bmtub3duJyA6IGZsYWcpfS1mbGFnYCwgaWduID8gdW5kZWZpbmVkIDogZmxhZyk7XG4gICAgICAgIH0pKTtcbn1cbmV4cG9ydHMuZmxhZ3MgPSBmbGFncztcbmZ1bmN0aW9uIGtpbmRTdHJpbmcobWRsKSB7XG4gICAgcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWtpbmQnLCBtZGwua2luZFN0cmluZyk7XG59XG5leHBvcnRzLmtpbmRTdHJpbmcgPSBraW5kU3RyaW5nO1xuZnVuY3Rpb24gaXRlbU5hbWUobWRsLCBzdWIpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tbmFtZScsICFtZGwuZnVsbFBhdGggPyBzdWIubmFtZSA6IGxpYkxpbmsoJ2EnLCBtZGwubGliLCBtZGwuZnVsbFBhdGgsIHN1Yi5uYW1lKSk7XG59XG5leHBvcnRzLml0ZW1OYW1lID0gaXRlbU5hbWU7XG5mdW5jdGlvbiBpdGVtVG9vbHRpcChtZGwpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tbmFtZScsIFRvb2x0aXBfMS50b29sdGlwKG1kbC5uYW1lLCAnY2xhc3MgbmFtZSBhbmQgdGhlbiBzb21lJywgJ2JvdHRvbScpKTtcbn1cbmV4cG9ydHMuaXRlbVRvb2x0aXAgPSBpdGVtVG9vbHRpcDtcbmZ1bmN0aW9uIGV4dGVuc2lvbk9mKG1kbCkge1xuICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1leHRlbnNpb25zJywgIW1kbC5leHRlbmRlZFR5cGVzID8gdW5kZWZpbmVkIDogW1xuICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1leHRlbmRzJywgJ2V4dGVuZHMnKSxcbiAgICAgICAgaW5kZXhfanNfMS5tKCdzcGFuJywgbWRsLmV4dGVuZGVkVHlwZXMubWFwKCh0LCBpKSA9PiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS1leHRlbnNpb24nLCBbXG4gICAgICAgICAgICBsaWJMaW5rKCdhJywgbWRsLmxpYiwgRG9jU2V0c18xLkRvY1NldHMuZ2V0KG1kbC5saWIsIHQuaWQpLmZ1bGxQYXRoLCB0Lm5hbWUpLFxuICAgICAgICAgICAgbWRsLmV4dGVuZGVkVHlwZXMubWFwLmxlbmd0aCA+IChpICsgMSkgPyAnLCAnIDogJydcbiAgICAgICAgXSkpKSxcbiAgICBdKTtcbn1cbmV4cG9ydHMuZXh0ZW5zaW9uT2YgPSBleHRlbnNpb25PZjtcbmZ1bmN0aW9uIGluaGVyaXRlZEZyb20obWRsKSB7XG4gICAgaWYgKG1kbC5pbmhlcml0ZWRGcm9tKSB7XG4gICAgICAgIGxldCBwYXJlbnQgPSBEb2NTZXRzXzEuRG9jU2V0cy5nZXQobWRsLmxpYiwgbWRsLmluaGVyaXRlZEZyb20uaWQpO1xuICAgICAgICBwYXJlbnQgPSBEb2NTZXRzXzEuRG9jU2V0cy5nZXQobWRsLmxpYiwgcGFyZW50LmZ1bGxQYXRoLnN1YnN0cmluZygwLCBwYXJlbnQuZnVsbFBhdGgubGFzdEluZGV4T2YoJy4nKSkpO1xuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0taW5oZXJpdGVkLWZyb20nLCBbXG4gICAgICAgICAgICBpbmRleF9qc18xLm0oJ3NwYW4nLCAnaW5oZXJpdGVkIGZyb20gJyksXG4gICAgICAgICAgICBsaWJMaW5rKCdhJywgcGFyZW50LmxpYiwgcGFyZW50LmZ1bGxQYXRoLCBwYXJlbnQubmFtZSlcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0taW5oZXJpdGVkLWZyb20nLCB1bmRlZmluZWQpO1xuICAgIH1cbn1cbmV4cG9ydHMuaW5oZXJpdGVkRnJvbSA9IGluaGVyaXRlZEZyb207XG5mdW5jdGlvbiBzb3VyY2VMaW5rKG1kbCkge1xuICAgIGNvbnN0IHNvdXJjZSA9IG1kbC5zb3VyY2VzID8gbWRsLnNvdXJjZXNbMF0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBsZXQgZmlsZSA9IChzb3VyY2UuZmlsZU5hbWUgfHwgJycpLnJlcGxhY2UoJy50cycsICcuaHRtbCcpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGZpbGUuaW5kZXhPZihtZGwubGliKTtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tbWVtYmVyLXNvdXJjZScsIGluZGV4X2pzXzEubSgnYScsIHsgaHJlZjogYCR7U291cmNlQmFzZX0ke21kbC5saWJ9LyR7ZmlsZX0jJHtNYXRoLm1heCgwLCBzb3VyY2UubGluZSAtIDUpfWAsIHRhcmdldDogXCJfYmxhbmtcIiB9LCAnW3NvdXJjZV0nKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tbWVtYmVyLXNvdXJjZScsICcnKTtcbiAgICB9XG59XG5leHBvcnRzLnNvdXJjZUxpbmsgPSBzb3VyY2VMaW5rO1xuZnVuY3Rpb24gbGliTGluayhjc3MsIGxpYiwgaWQsIG5hbWUpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKGNzcywgeyBocmVmOiBgL2FwaS8ke2xpYn0vJHtpZH1gLCBvbmNyZWF0ZTogaW5kZXhfanNfMS5tLnJvdXRlLmxpbmssIG9udXBkYXRlOiBpbmRleF9qc18xLm0ucm91dGUubGluayB9LCBuYW1lKTtcbn1cbmV4cG9ydHMubGliTGluayA9IGxpYkxpbms7XG47XG5mdW5jdGlvbiBzaWduYXR1cmUocywgbWRsKSB7XG4gICAgY29uc3QgY29tbWEgPSAoaSkgPT4gKGkgPiAwKSA/ICcsICcgOiAnJztcbiAgICBmdW5jdGlvbiBvcHRpb25hbChmbGFncykge1xuICAgICAgICByZXR1cm4gKGZsYWdzICYmIGZsYWdzLmlzT3B0aW9uYWwpID8gJy5ocy1pdGVtLW9wdGlvbmFsJyA6ICcnO1xuICAgIH1cbiAgICBsZXQgc2lnID0gW107XG4gICAgaWYgKHMpIHtcbiAgICAgICAgaWYgKHMucGFyYW1ldGVycykge1xuICAgICAgICAgICAgc2lnID0gcy5wYXJhbWV0ZXJzLm1hcCgocCwgaSkgPT4gaW5kZXhfanNfMS5tKCdzcGFuJywgW1xuICAgICAgICAgICAgICAgIGNvbW1hKGkpLFxuICAgICAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLXNpZy1wYXJhbScsIFtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhfanNfMS5tKGBzcGFuLmhzLWl0ZW0tbmFtZSR7b3B0aW9uYWwocC5mbGFncyl9YCwgcC5uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZShwLCBtZGwubGliKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChtZGwua2luZFN0cmluZykge1xuICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTWV0aG9kJzpcbiAgICAgICAgICAgIGNhc2UgJ0Z1bmN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0NvbnN0cnVjdG9yJzpcbiAgICAgICAgICAgIGNhc2UgJ0V4dGVybmFsIG1vZHVsZSc6XG4gICAgICAgICAgICBjYXNlICdDbGFzcyc6XG4gICAgICAgICAgICBjYXNlICdWYXJpYWJsZSc6XG4gICAgICAgICAgICAgICAgc2lnLnVuc2hpZnQoaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tbmFtZScsICcoJykpO1xuICAgICAgICAgICAgICAgIHNpZy5wdXNoKGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLW5hbWUnLCAnKScpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IGxvZy53YXJuKGB1bmV4cGVjdGVkIGtpbmRTdHJpbmcgJHttZGwua2luZFN0cmluZ31gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tc2lnbmF0dXJlJywgc2lnKTtcbn1cbmV4cG9ydHMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuZnVuY3Rpb24gZGVmYXVsdFZhbChzLCBsaWIpIHtcbiAgICBpZiAocyAmJiBzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBsZXQgdmFsID0gYCA9ICR7cy5kZWZhdWx0VmFsdWV9YC5yZXBsYWNlKC97L2dpLCAneyAnKS5yZXBsYWNlKC99L2dpLCAnIH0nKTtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLWRlZmF1bHQnLCB2YWwpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdFZhbCA9IGRlZmF1bHRWYWw7XG5mdW5jdGlvbiB0eXBlKHQsIGxpYikge1xuICAgIGZ1bmN0aW9uIF90eXBlKHR0KSB7XG4gICAgICAgIHN3aXRjaCAodHQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6IHJldHVybiAnJztcbiAgICAgICAgICAgIGNhc2UgJ2FycmF5JzogcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLXR5cGUtYXJyYXknLCBbJ0FycmF5PCcsIF90eXBlKHR0LmVsZW1lbnRUeXBlKSwgJz4nXSk7XG4gICAgICAgICAgICBjYXNlICd0dXBsZSc6IHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS10eXBlLXR1cGxlJywgW1xuICAgICAgICAgICAgICAgICdbICcsXG4gICAgICAgICAgICAgICAgLi4udHQuZWxlbWVudHMubWFwKChlLCBpKSA9PiBbaSA+IDAgPyAnLCAnIDogdW5kZWZpbmVkLCBfdHlwZShlKV0pLFxuICAgICAgICAgICAgICAgICcgXSdcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY2FzZSAnaW50cmluc2ljJzpcbiAgICAgICAgICAgIGNhc2UgJ2luc3RyaW5jdCc6IHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS10eXBlLWluc3RyaW5jdCcsIHR0LmlkID8gbGliTGluaygnc3BhbicsIGxpYiwgdHQuZnVsbFBhdGgsIHR0Lm5hbWUpIDogdHQubmFtZSk7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmdMaXRlcmFsJzogcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLXR5cGUtc3RyaW5nLWxpdGVyYWwnLCB0dC50eXBlKTtcbiAgICAgICAgICAgIGNhc2UgJ3VuaW9uJzogcmV0dXJuIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLXR5cGUtdW5pb24nLCBbLi4udHQudHlwZXMubWFwKChlLCBpKSA9PiBbaSA+IDAgPyAnIHwgJyA6IHVuZGVmaW5lZCwgX3R5cGUoZSldKV0pO1xuICAgICAgICAgICAgY2FzZSAncmVmZXJlbmNlJzpcbiAgICAgICAgICAgICAgICBsZXQgcmVmUmVzID0gdHQubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAodHQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZVJlZiA9IERvY1NldHNfMS5Eb2NTZXRzLmdldChsaWIsIHR0LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVSZWYudHlwZUFyZ3VtZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmUmVzID0gdHlwZVJlZi5uYW1lICsgJzwnICsgdHlwZVJlZi50eXBlQXJndW1lbnRzLm1hcChfdHlwZSkuam9pbignLCAnKSArICc+JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlUmVmLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZSZXMgPSBsaWJMaW5rKCdhJywgbGliLCB0eXBlUmVmLmZ1bGxQYXRoLCB0eXBlUmVmLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmUmVzID0gdHlwZVJlZi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleF9qc18xLm0oJ3NwYW4uaHMtaXRlbS10eXBlLXJlZmVyZW5jZScsIHJlZlJlcyk7XG4gICAgICAgICAgICBjYXNlICdyZWZsZWN0aW9uJzpcbiAgICAgICAgICAgICAgICBsZXQgcmZsUmVzO1xuICAgICAgICAgICAgICAgIGlmICh0dC5kZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZmxSZXMgPSAhdHQuZGVjbGFyYXRpb24uY2hpbGRyZW4gPyB0dC5kZWNsYXJhdGlvbi5raW5kU3RyaW5nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLXJlZmxlY3Rpb24nLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50dC5kZWNsYXJhdGlvbi5jaGlsZHJlbi5tYXAoKGMsIGkpID0+IFtpID4gMCA/ICcsICcgOiB1bmRlZmluZWQsIGMubmFtZSwgJzogJywgX3R5cGUoYy50eXBlKV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgfSdcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmZsUmVzID0gJ1VOS05PV04nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tdHlwZS1yZWZsZWN0aW9uJywgcmZsUmVzKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oJ3Vua25vd24gdHlwZSAnICsgdHQudHlwZSk7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4obG9nLmluc3BlY3QodCwgMykpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0LnR5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGluZGV4X2pzXzEubSgnc3BhbicsICF0LnR5cGUgPyAnJyA6IFtcbiAgICAgICAgICAgIGluZGV4X2pzXzEubSgnc3Bhbi5ocy1pdGVtLW5hbWUnLCAnOicpLFxuICAgICAgICAgICAgaW5kZXhfanNfMS5tKCdzcGFuLmhzLWl0ZW0tc2lnLXR5cGUnLCBfdHlwZSh0LnR5cGUpKSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWwodCwgbGliKVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yKGUpO1xuICAgICAgICBsb2cuZXJyb3IoZS50cmFjZSk7XG4gICAgfVxufVxuZXhwb3J0cy50eXBlID0gdHlwZTtcbmZ1bmN0aW9uIG1ha2VJRChzZWN0aW9uLCBtZGwpIHtcbiAgICBsZXQgcmVzdWx0ID0gc2VjdGlvbiA/IHNlY3Rpb24gKyAnXycgOiAnJztcbiAgICByZXN1bHQgPSAocmVzdWx0ICsgKG1kbC5uYW1lIHx8ICcnKSkudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKHJlc3VsdCAhPT0gJycpID8gcmVzdWx0IDogdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5tYWtlSUQgPSBtYWtlSUQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVR0Z5ZEhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12ZG1sbGR5OVFZWEowY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEcxRlFVRXJSRHRCUVVNdlJDeDFRMEZCYjBNN1FVRkRjRU1zZDBOQlFYRkRPMEZCUTNKRExHbEZRVUZyUlR0QlFVRkZMRTFCUVUwc1IwRkJSeXhIUVVGSExHTkJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVVTVSaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eFhRVUZYTEVOQlFVTTdRVUZKTDBJc1UwRkJaMElzUzBGQlN5eERRVUZETEVkQlFVOHNSVUZCUlN4VFFVRm5RaXhGUVVGRk8wbEJRemRETEUxQlFVMHNhMEpCUVd0Q0xFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1NVRkRiRVFzVFVGQlRTeFZRVUZWTEVkQlFVYzdVVUZEWml4VlFVRlZMRVZCUVdNc1VVRkJVVHRSUVVOb1F5eFZRVUZWTEVWQlFXTXNWVUZCVlR0UlFVTnNReXhSUVVGUkxFVkJRV2RDTEZGQlFWRTdVVUZEYUVNc1UwRkJVeXhGUVVGbExGTkJRVk03VVVGRGFrTXNWMEZCVnl4RlFVRmhMRmRCUVZjN1VVRkRia01zY1VKQlFYRkNMRVZCUVVjc2NVSkJRWEZDTzFGQlF6ZERMRlZCUVZVc1JVRkJZeXhWUVVGVk8xRkJRMnhETEU5QlFVOHNSVUZCYVVJc1QwRkJUenRSUVVNdlFpeExRVUZMTEVWQlFXMUNMRXRCUVVzN1VVRkROMElzUzBGQlN5eEZRVUZ0UWl4TFFVRkxPMUZCUXpkQ0xGRkJRVkVzUlVGQlowSXNVVUZCVVR0UlFVTm9ReXhWUVVGVkxFVkJRV01zVlVGQlZUdExRVU55UXl4RFFVRkRPMGxCUTBZc1QwRkJUeXhaUVVGRExFTkJRVU1zYjBKQlFXOUNMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVNelF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1JVRkJSVHRaUVVOd1F5eEpRVUZKTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRhRUlzU1VGQlNTeEpRVUZKTEVkQlFVY3NWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM3BDTEVsQlFVa3NTVUZCU1N4TFFVRkxMRk5CUVZNc1JVRkJSVHRuUWtGQlJTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMkZCUVVVN2FVSkJRMmhETzJkQ1FVRkZMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03WVVGQlJUdFpRVU16UXl4SlFVRkpMRWxCUVVrc1MwRkJTeXhSUVVGUkxFbEJRVWtzYTBKQlFXdENMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJRVVVzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXp0aFFVRkZPMWxCUTNaR0xFOUJRVThzV1VGQlF5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVUVzUTBGQlF5eERRVUZCTEZGQlFWRXNRMEZCUVN4RFFVRkRMRU5CUVVFc1EwRkJReXhKUVVGSkxFdEJRVWNzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4VFFVRlRMRU5CUVVFc1EwRkJReXhEUVVGQkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNSMEZCUnl4RFFVRkJMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTI1SExFTkJRVU1zUTBGQlF5eERRVU5NTEVOQlFVTTdRVUZEVGl4RFFVRkRPMEZCTVVKRUxITkNRVEJDUXp0QlFVVkVMRk5CUVdkQ0xGVkJRVlVzUTBGQlF5eEhRVUZQTzBsQlF6bENMRTlCUVU4c1dVRkJReXhEUVVGRExHMUNRVUZ0UWl4RlFVRkZMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEJRVU5zUkN4RFFVRkRPMEZCUmtRc1owTkJSVU03UVVGRlJDeFRRVUZuUWl4UlFVRlJMRU5CUVVNc1IwRkJUeXhGUVVGRkxFZEJRVTg3U1VGRGNrTXNUMEZCVHl4WlFVRkRMRU5CUVVNc2JVSkJRVzFDTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGQkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNelJ5eERRVUZETzBGQlJrUXNORUpCUlVNN1FVRkhSQ3hUUVVGblFpeFhRVUZYTEVOQlFVTXNSMEZCVHp0SlFVTXZRaXhQUVVGUExGbEJRVU1zUTBGQlF5eHRRa0ZCYlVJc1JVRkJSU3hwUWtGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRVZCUVVVc01FSkJRVEJDTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNelJpeERRVUZETzBGQlJrUXNhME5CUlVNN1FVRkZSQ3hUUVVGblFpeFhRVUZYTEVOQlFVTXNSMEZCVHp0SlFVTXZRaXhQUVVGUExGbEJRVU1zUTBGQlF5eDVRa0ZCZVVJc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVRXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGFFVXNXVUZCUXl4RFFVRkRMSE5DUVVGelFpeEZRVUZGTEZOQlFWTXNRMEZCUXp0UlFVTndReXhaUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlN5eEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUTJoRUxGbEJRVU1zUTBGQlF5eDNRa0ZCZDBJc1JVRkJSVHRaUVVONFFpeFBRVUZQTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzYVVKQlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZEYkVVc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVU3VTBGREwwTXNRMEZCUXl4RFFVTk1MRU5CUVVNN1MwRkRUQ3hEUVVGRExFTkJRVU03UVVGRFVDeERRVUZETzBGQlZrUXNhME5CVlVNN1FVRkZSQ3hUUVVGblFpeGhRVUZoTEVOQlFVTXNSMEZCVHp0SlFVTnFReXhKUVVGSkxFZEJRVWNzUTBGQlF5eGhRVUZoTEVWQlFVVTdVVUZEYmtJc1NVRkJTU3hOUVVGTkxFZEJRVWNzYVVKQlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNZVUZCWVN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM2hFTEUxQlFVMHNSMEZCUnl4cFFrRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRPVVlzVDBGQlR5eFpRVUZETEVOQlFVTXNOa0pCUVRaQ0xFVkJRVVU3V1VGRGNFTXNXVUZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXp0WlFVTTFRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1RVRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRPMU5CUTNwRUxFTkJRVU1zUTBGQlF6dExRVU5PTzFOQlFVMDdVVUZEU0N4UFFVRlBMRmxCUVVNc1EwRkJReXcyUWtGQk5rSXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRMUVVOMFJEdEJRVU5NTEVOQlFVTTdRVUZZUkN4elEwRlhRenRCUVVWRUxGTkJRV2RDTEZWQlFWVXNRMEZCUXl4SFFVRlBPMGxCUXpsQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVFc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF6dEpRVU4yUkN4SlFVRkpMRTFCUVUwc1JVRkJSVHRSUVVOU0xFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVZFc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRek5FTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNCRExFbEJRVWtzUzBGQlN5eEhRVUZETEVOQlFVTXNSVUZCUlR0WlFVTlVMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMU5CUXpkQ08xRkJRMFFzVDBGQlR5eFpRVUZETEVOQlFVTXNORUpCUVRSQ0xFVkJRMnBETEZsQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hKUVVGSkxFVkJRVU1zUjBGQlJ5eFZRVUZWTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1NVRkJTU3hKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRTFCUVUwc1JVRkJReXhSUVVGUkxFVkJRVU1zUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZET1Vjc1EwRkJRenRMUVVOTU8xTkJRVTA3VVVGRFNDeFBRVUZQTEZsQlFVTXNRMEZCUXl3MFFrRkJORUlzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTTVRenRCUVVOTUxFTkJRVU03UVVGa1JDeG5RMEZqUXp0QlFWZEVMRk5CUVdkQ0xFOUJRVThzUTBGQlF5eEhRVUZWTEVWQlFVVXNSMEZCVlN4RlFVRkZMRVZCUVZNc1JVRkJSU3hKUVVGWE8wbEJRMnhGTEU5QlFVOHNXVUZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RlFVRkZMRVZCUVVVc1JVRkJSU3hSUVVGUkxFVkJRVVVzV1VGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRVZCUVVVc1VVRkJVU3hGUVVGRkxGbEJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRGRFY3NRMEZCUXp0QlFVWkVMREJDUVVWRE8wRkJRVUVzUTBGQlF6dEJRVXRHTEZOQlFXZENMRk5CUVZNc1EwRkJReXhEUVVGTExFVkJRVVVzUjBGQlR6dEpRVU53UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRelZETEZOQlFWTXNVVUZCVVN4RFFVRkRMRXRCUVZVN1VVRkRlRUlzVDBGQlR5eERRVUZETEV0QlFVc3NTVUZCU1N4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZEYWtVc1EwRkJRenRKUVVWRUxFbEJRVWtzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTmlMRWxCUVVrc1EwRkJReXhGUVVGRk8xRkJRMGdzU1VGQlNTeERRVUZETEVOQlFVTXNWVUZCVlN4RlFVRkZPMWxCUTJRc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJTeXhGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNXVUZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSVHRuUWtGRGJFUXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRFVpeFpRVUZETEVOQlFVTXNkMEpCUVhkQ0xFVkJRVVU3YjBKQlEzaENMRmxCUVVNc1EwRkJReXh2UWtGQmIwSXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN2IwSkJRMnhFTEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF6dHBRa0ZEYmtJc1EwRkJRenRoUVVOTUxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlExQTdVVUZEUkN4UlFVRlJMRWRCUVVjc1EwRkJReXhWUVVGVkxFVkJRVVU3V1VGRGNFSXNTMEZCU3l4VFFVRlRMRU5CUVVNc1EwRkJReXhOUVVGTk8xbEJRM1JDTEV0QlFVc3NVVUZCVVN4RFFVRkRPMWxCUTJRc1MwRkJTeXhWUVVGVkxFTkJRVU03V1VGRGFFSXNTMEZCU3l4aFFVRmhMRU5CUVVNN1dVRkRia0lzUzBGQlN5eHBRa0ZCYVVJc1EwRkJRenRaUVVOMlFpeExRVUZMTEU5QlFVOHNRMEZCUXp0WlFVTmlMRXRCUVVzc1ZVRkJWVHRuUWtGRFdDeEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVVNc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU42UXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVU1zUTBGQlF5eHRRa0ZCYlVJc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjBReXhOUVVGTk8xbEJRMVlzVDBGQlR5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXg1UWtGQmVVSXNSMEZCUnl4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRExFTkJRVU03VTBGRGFFVTdTMEZEU2p0SlFVTkVMRTlCUVU4c1dVRkJReXhEUVVGRExIZENRVUYzUWl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRelZETEVOQlFVTTdRVUZvUTBRc09FSkJaME5ETzBGQlMwUXNVMEZCWjBJc1ZVRkJWU3hEUVVGRExFTkJRVXNzUlVGQlJTeEhRVUZWTzBsQlEzaERMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eFpRVUZaTEVWQlFVVTdVVUZEY2tJc1NVRkJTU3hIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF6TkZMRTlCUVU4c1dVRkJReXhEUVVGRExITkNRVUZ6UWl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wdEJRM3BETzFOQlFVMDdVVUZEU0N4UFFVRlBPMHRCUTFZN1FVRkRUQ3hEUVVGRE8wRkJVRVFzWjBOQlQwTTdRVUZGUkN4VFFVRm5RaXhKUVVGSkxFTkJRVU1zUTBGQlN5eEZRVUZGTEVkQlFWVTdTVUZEYkVNc1UwRkJVeXhMUVVGTExFTkJRVU1zUlVGQlRUdFJRVU5xUWl4UlFVRlJMRVZCUVVVc1EwRkJReXhKUVVGSkxFVkJRVVU3V1VGRFlpeExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRlRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xbEJRMnhETEV0QlFVc3NUMEZCVHl4RFFVRkRMRU5CUVZjc1QwRkJUeXhaUVVGRExFTkJRVU1zZVVKQlFYbENMRVZCUVVVc1EwRkJReXhSUVVGUkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJYQkhMRXRCUVVzc1QwRkJUeXhEUVVGRExFTkJRVmNzVDBGQlR5eFpRVUZETEVOQlFVTXNlVUpCUVhsQ0xFVkJRVVU3WjBKQlEyaERMRWxCUVVrN1owSkJRMG9zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVXNzUlVGQlJTeERRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVRXNTVUZCU1N4RFFVRkJMRU5CUVVNc1EwRkJRU3hUUVVGVExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRM1pGTEVsQlFVazdZVUZEVUN4RFFVRkRMRU5CUVVNN1dVRkRNMElzUzBGQlN5eFhRVUZYTEVOQlFVTTdXVUZEYWtJc1MwRkJTeXhYUVVGWExFTkJRVU1zUTBGQlR5eFBRVUZQTEZsQlFVTXNRMEZCUXl3MlFrRkJOa0lzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkJMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF6ZElMRXRCUVVzc1pVRkJaU3hEUVVGRExFTkJRVWNzVDBGQlR5eFpRVUZETEVOQlFVTXNhME5CUVd0RExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpsRkxFdEJRVXNzVDBGQlR5eERRVUZETEVOQlFWY3NUMEZCVHl4WlFVRkRMRU5CUVVNc2VVSkJRWGxDTEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCU3l4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkJMRU5CUVVNc1EwRkJRU3hMUVVGTExFTkJRVUVzUTBGQlF5eERRVUZCTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTnlTU3hMUVVGTExGZEJRVmM3WjBKQlFWRXNTVUZCU1N4TlFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEY2tJc1NVRkJTU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzI5Q1FVTlFMRTFCUVUwc1QwRkJUeXhIUVVGSExHbENRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdiMEpCUTNoRExFbEJRVWtzVDBGQlR5eERRVUZETEdGQlFXRXNSVUZCUlR0M1FrRkJSU3hOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NSMEZCUXl4SFFVRkhMRWRCUVVVc1QwRkJUeXhEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXp0eFFrRkJSVHQ1UWtGRGRrY3NTVUZCU1N4UFFVRlBMRU5CUVVNc1JVRkJSU3hGUVVGUk8zZENRVUZGTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkZMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dHhRa0ZCUlR0NVFrRkRMMFE3ZDBKQlFVVXNUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU03Y1VKQlFVVTdhVUpCUTNoRU8yZENRVU5FTEU5QlFVOHNXVUZCUXl4RFFVRkRMRFpDUVVFMlFpeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMWxCUTNoRkxFdEJRVXNzV1VGQldUdG5Ra0ZCVHl4SlFVRkpMRTFCUVUwc1EwRkJRenRuUWtGRFdDeEpRVUZKTEVWQlFVVXNRMEZCUXl4WFFVRlhMRVZCUVVVN2IwSkJRMmhDTEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhYUVVGWExFTkJRVU1zVVVGQlVTeERRVUZCTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1YwRkJWeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzNkQ1FVTXhSQ3haUVVGRExFTkJRVU1zZVVKQlFYbENMRVZCUVVVN05FSkJRM3BDTEVsQlFVazdORUpCUTBvc1IwRkJSeXhGUVVGRkxFTkJRVU1zVjBGQlZ5eERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGTExFVkJRVVVzUTBGQlVTeEZRVUZGTEVWQlFVVXNRMEZETDBNc1EwRkJReXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUVN4SlFVRkpMRU5CUVVFc1EwRkJReXhEUVVGQkxGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUTNCRU96UkNRVU5FTEVsQlFVazdlVUpCUTFBc1EwRkJReXhEUVVGRE8ybENRVU5XTzNGQ1FVRk5PMjlDUVVOSUxFMUJRVTBzUjBGQlJ5eFRRVUZUTEVOQlFVTTdhVUpCUTNSQ08yZENRVU5FTEU5QlFVOHNXVUZCUXl4RFFVRkRMRGhDUVVFNFFpeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMWxCUTNwRk8yZENRVUZUTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hIUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkRia01zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVNelFpeFBRVUZQTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1UwRkRNVUk3U1VGRFRDeERRVUZETzBsQlJVUXNTVUZCU1R0UlFVTkVMRTlCUVU4c1dVRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlFTeERRVUZETEVOQlFVTTdXVUZETVVJc1dVRkJReXhEUVVGRExHMUNRVUZ0UWl4RlFVRkRMRWRCUVVjc1EwRkJRenRaUVVNeFFpeFpRVUZETEVOQlFVTXNkVUpCUVhWQ0xFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVONlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJRenRUUVVOd1FpeERRVUZETEVOQlFVTTdTMEZEVGp0SlFVRkRMRTlCUVUwc1EwRkJReXhGUVVGRk8xRkJRVVVzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wdEJRVVU3UVVGRGNFUXNRMEZCUXp0QlFXeEVSQ3h2UWtGclJFTTdRVUZGUkN4VFFVRm5RaXhOUVVGTkxFTkJRVU1zVDBGQll5eEZRVUZGTEVkQlFVODdTVUZETVVNc1NVRkJTU3hOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZCTEVOQlFVTXNRMEZCUXl4UFFVRlBMRWRCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZEZGtNc1RVRkJUU3hIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRPMGxCUTI1RUxFOUJRVThzUTBGQlF5eE5RVUZOTEV0QlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRPMEZCUXpkRExFTkJRVU03UVVGS1JDeDNRa0ZKUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaW5kZXhfanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvaHNsYXlvdXQvaW5kZXguanNcIik7XG5mdW5jdGlvbiB0b29sdGlwKHRleHQsIHRpcCwgcG9zaXRpb24pIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5tKCcuaHMtdG9vbHRpcFtocmVmPSNdJywgW3RleHQsIGluZGV4X2pzXzEubShgc3Bhbi5ocy10b29sdGlwLSR7cG9zaXRpb259YCwgdGlwKV0pO1xufVxuZXhwb3J0cy50b29sdGlwID0gdG9vbHRpcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVZHOXZiSFJwY0M1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkyYVdWM0wxUnZiMngwYVhBdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4dFJVRkJLMFE3UVVGRkwwUXNVMEZCWjBJc1QwRkJUeXhEUVVGRExFbEJRVmNzUlVGQlJTeEhRVUZWTEVWQlFVVXNVVUZCWlR0SlFVVTFSQ3hQUVVGUExGbEJRVU1zUTBGQlF5eHhRa0ZCY1VJc1JVRkJSU3hEUVVGRExFbEJRVWtzUlVGQlJTeFpRVUZETEVOQlFVTXNiVUpCUVcxQ0xGRkJRVkVzUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOdVJpeERRVUZETzBGQlNFUXNNRUpCUjBNaWZRPT0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/docs/hsDocs.min.js b/docs/hsDocs.min.js index f64ef7a..77509dd 100644 --- a/docs/hsDocs.min.js +++ b/docs/hsDocs.min.js @@ -1,2 +1,2 @@ -!function(e){var t={};function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)r.d(n,a,function(t){return e[t]}.bind(null,a));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=25)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(27),r(28);var n=r(29);t.Layout=n.Layout;var a=r(5);t.FILL=a.FILL,t.px=a.px,t.pc=a.pc,t.LayoutToken=a.LayoutToken;var s=r(4);t.Layouter=s.Layouter;var i=r(33);t.Config=i.Config;var o=r(11);t.m=o.m},function(e,t,r){(function(t,r){!function(){"use strict";function n(e,t,r,n,a,s){return{tag:e,key:t,attrs:r,children:n,text:a,dom:s,domSize:void 0,state:void 0,_state:void 0,events:void 0,instance:void 0,skip:!1}}n.normalize=function(e){return Array.isArray(e)?n("[",void 0,void 0,n.normalizeChildren(e),void 0,void 0):null!=e&&"object"!=typeof e?n("#",void 0,void 0,!1===e?"":e,void 0,void 0):e},n.normalizeChildren=function(e){for(var t=0;t0&&(i.className=n.join(" ")),s[e]={tag:r,attrs:i}}(e);if(null==r?r={}:("object"!=typeof r||null!=r.tag||Array.isArray(r))&&(r={},l=1),arguments.length===l+1)t=arguments[l],Array.isArray(t)||(t=[t]);else for(t=[];l0||e(r)}}var n=r(i);try{e(r(s),n)}catch(e){n(e)}}d(e)}).prototype.then=function(e,t){var r,n,a=this._instance;function s(e,t,s,i){t.push(function(t){if("function"!=typeof e)s(t);else try{r(e(t))}catch(e){n&&n(e)}}),"function"==typeof a.retry&&i===a.state&&a.retry()}var i=new u(function(e,t){r=e,n=t});return s(e,a.resolvers,r,!0),s(t,a.rejectors,n,!1),i},u.prototype.catch=function(e){return this.then(null,e)},u.resolve=function(e){return e instanceof u?e:new u(function(t){t(e)})},u.reject=function(e){return new u(function(t,r){r(e)})},u.all=function(e){return new u(function(t,r){var n=e.length,a=0,s=[];if(0===e.length)t([]);else for(var i=0;i=200&&s.status<300||304===s.status||h.test(r.url))t(u(r.type,e));else{var a=new Error(s.responseText);for(var i in e)a[i]=e[i];n(a)}}catch(e){n(e)}},a&&null!=r.data?s.send(r.data):s.send()});return!0===r.background?m:d(m)},jsonp:function(r,l){var c=a();r=s(r,l);var d=new t(function(t,a){var s=r.callbackName||"_mithril_"+Math.round(1e16*Math.random())+"_"+n++,l=e.document.createElement("script");e[s]=function(n){l.parentNode.removeChild(l),t(u(r.type,n)),delete e[s]},l.onerror=function(){l.parentNode.removeChild(l),a(new Error("JSONP request failed")),delete e[s]},null==r.data&&(r.data={}),r.url=i(r.url,r.data),r.data[r.callbackKey||"callback"]=s,l.src=o(r.url,r.data),e.document.documentElement.appendChild(l)});return!0===r.background?d:c(d)},setCompletionCallback:function(e){r=e}}}(window,u),f=function(e){var t,r=e.document,a=r.createDocumentFragment(),s={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"};function i(e){return e.attrs&&e.attrs.xmlns||s[e.tag]}function o(e,t,r,n,a,s,i){for(var o=r;o=y&&k>=v;)if((S=t[y])!==(P=r[v])||n)if(null==S)y++;else if(null==P)v++;else if(S.key===P.key){var x=null!=d&&y>=t.length-d.length||null==d&&n;v++,m(e,S,P,a,f(t,++y,s),x,i),n&&S.tag===P.tag&&g(e,p(S),s)}else if((S=t[w])!==P||n)if(null==S)w--;else if(null==P)v++;else{if(S.key!==P.key)break;x=null!=d&&w>=t.length-d.length||null==d&&n,m(e,S,P,a,f(t,w+1,s),x,i),(n||v=y&&k>=v;){var S,P;if((S=t[w])!==(P=r[k])||n)if(null==S)w--;else if(null==P)k--;else if(S.key===P.key)x=null!=d&&w>=t.length-d.length||null==d&&n,m(e,S,P,a,f(t,w+1,s),x,i),n&&S.tag===P.tag&&g(e,p(S),s),null!=S.dom&&(s=S.dom),w--,k--;else{if(b||(b=h(t,w)),null!=P){var j=b[P.key];if(null!=j){var M=t[j];x=null!=d&&j>=t.length-d.length||null==d&&n,m(e,M,P,a,f(t,w+1,s),n,i),g(e,p(M),s),t[j].skip=!0,null!=M.dom&&(s=M.dom)}else s=l(e,P,a,i,s)}k--}else w--,k--;if(k0){for(var a=e.dom;--t;)n.appendChild(a.nextSibling);n.insertBefore(a,n.firstChild)}return n}return e.dom}function f(e,t,r){for(;t1)for(var s=e.dom;--r;)v(s.nextSibling);v(e.dom),null==t||null!=e.domSize||null!=(i=e.attrs)&&(i.oncreate||i.onupdate||i.onbeforeremove||i.onremove)||"string"!=typeof e.tag||(t.pool?t.pool.push(e):t.pool=[e])}var i}e.attrs&&"function"==typeof e.attrs.onbeforeremove&&null!=(r=e.attrs.onbeforeremove.call(e.state,e))&&"function"==typeof r.then&&(n++,r.then(s,s)),"string"!=typeof e.tag&&"function"==typeof e._state.onbeforeremove&&null!=(r=e._state.onbeforeremove.call(e.state,e))&&"function"==typeof r.then&&(n++,r.then(s,s)),s()}function v(e){var t=e.parentNode;null!=t&&t.removeChild(e)}function w(e,t,n,a,s){var i=e.dom;if("key"!==t&&"is"!==t&&(n!==a||function(e,n){return"value"===t||"checked"===t||"selectedIndex"===t||"selected"===t&&e.dom===r.activeElement}(e)||"object"==typeof a)&&void 0!==a&&!k(t)){var o=t.indexOf(":");if(o>-1&&"xlink"===t.substr(0,o))i.setAttributeNS("http://www.w3.org/1999/xlink",t.slice(o+1),a);else if("o"===t[0]&&"n"===t[1]&&"function"==typeof a)x(e,t,a);else if("style"===t)!function(e,t,r){if(t===r&&(e.style.cssText="",t=null),null==r)e.style.cssText="";else if("string"==typeof r)e.style.cssText=r;else{for(var n in"string"==typeof t&&(e.style.cssText=""),r)e.style[n]=r[n];if(null!=t&&"string"!=typeof t)for(var n in t)n in r||(e.style[n]="")}}(i,n,a);else if(t in i&&"href"!==t&&"list"!==t&&"form"!==t&&"width"!==t&&"height"!==t&&void 0===s&&!function(e){return e.attrs.is||e.tag.indexOf("-")>-1}(e)){if("value"===t){var l=""+a;if(("input"===e.tag||"textarea"===e.tag)&&e.dom.value===l&&e.dom===r.activeElement)return;if("select"===e.tag)if(null===a){if(-1===e.dom.selectedIndex&&e.dom===r.activeElement)return}else if(null!==n&&e.dom.value===l&&e.dom===r.activeElement)return;if("option"===e.tag&&null!=n&&e.dom.value===l)return}if("input"===e.tag&&"type"===t)return void i.setAttribute(t,a);i[t]=a}else"boolean"==typeof a?a?i.setAttribute(t,""):i.removeAttribute(t):i.setAttribute("className"===t?"class":t,a)}}function k(e){return"oninit"===e||"oncreate"===e||"onupdate"===e||"onremove"===e||"onbeforeremove"===e||"onbeforeupdate"===e}function x(e,r,n){var a=e.dom,s="function"!=typeof t?n:function(e){var r=n.call(a,e);return t.call(a,e),r};if(r in a)a[r]="function"==typeof n?s:null;else{var i=r.slice(2);if(void 0===e.events&&(e.events={}),e.events[r]===s)return;null!=e.events[r]&&a.removeEventListener(i,e.events[r],!1),"function"==typeof n&&(e.events[r]=s,a.addEventListener(i,e.events[r],!1))}}function S(e,t,r){"function"==typeof e.oninit&&e.oninit.call(t.state,t),"function"==typeof e.oncreate&&r.push(e.oncreate.bind(t.state,t))}function P(e,t,r){"function"==typeof e.onupdate&&r.push(e.onupdate.bind(t.state,t))}return{render:function(e,t){if(!e)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var a=[],s=r.activeElement,i=e.namespaceURI;null==e.vnodes&&(e.textContent=""),Array.isArray(t)||(t=[t]),d(e,e.vnodes,n.normalizeChildren(t),!1,a,null,"http://www.w3.org/1999/xhtml"===i?void 0:i),e.vnodes=t,null!=s&&r.activeElement!==s&&s.focus();for(var o=0;o-1&&r.splice(t,2)}function a(){for(var e=1;e=16?(t=a,e()):null===r&&(r=n(function(){r=null,e(),t=Date.now()},16-(a-t)))}}(t))},unsubscribe:n,redraw:a,render:t.render}}(window);p.setCompletionCallback(g.redraw),c.mount=(d=g,function(e,t){if(null===t)return d.render(e,[]),void d.unsubscribe(e);if(null==t.view&&"function"!=typeof t)throw new Error("m.mount(element, component) expects a component, not a vnode");d.subscribe(e,function(){d.render(e,n(t))}),d.redraw()});var b=u,_=function(e){if(""===e||null==e)return{};"?"===e.charAt(0)&&(e=e.slice(1));for(var t=e.split("&"),r={},n={},a=0;a-1&&l.pop();for(var u=0;u-1?n:a>-1?a:e.length;if(n>-1){var i=a>-1?a:e.length,o=_(e.slice(n+1,i));for(var l in o)t[l]=o[l]}if(a>-1){var c=_(e.slice(a+1));for(var l in c)r[l]=c[l]}return e.slice(0,s)}var o={prefix:"#!",getPath:function(){switch(o.prefix.charAt(0)){case"#":return s("hash").slice(o.prefix.length);case"?":return s("search").slice(o.prefix.length)+s("hash");default:return s("pathname").slice(o.prefix.length)+s("search")+s("hash")}},setPath:function(t,r,a){var s={},l={};if(t=i(t,s,l),null!=r){for(var c in r)s[c]=r[c];t=t.replace(/:([^\/]+)/g,function(e,t){return delete s[t],r[t]})}var u=m(s);u&&(t+="?"+u);var d=m(l);if(d&&(t+="#"+d),n){var h=a?a.state:null,p=a?a.title:null;e.onpopstate(),a&&a.replace?e.history.replaceState(h,p,o.prefix+t):e.history.pushState(h,p,o.prefix+t)}else e.location.href=o.prefix+t},defineRoutes:function(t,s,l){function c(){var r=o.getPath(),n={},a=i(r,n,n),c=e.history.state;if(null!=c)for(var u in c)n[u]=c[u];for(var d in t){var m=new RegExp("^"+d.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(m.test(a))return void a.replace(m,function(){for(var e=d.match(/:[^\/]+/g)||[],a=[].slice.call(arguments,1,-2),i=0;i`${n(s.x.convert(e[r]))},${n(s.y.convert(e[a]))}`).join(" ")},t.m("title",l))}polygon(e,r,a,s,i,o,l,c,u){const d=void 0===a,m=e=>n(o.x.convert(e)),h=e=>n(o.y.convert(e)),p=l?`url(#${l})`:void 0,f=e.map((e,t)=>`${m(d?t:e[a])},${h(e[s])}`).concat(r.map((e,t)=>`${m(d?r.length-t-1:e[a])},${h(i?e[i]:0)}`)).join(" ");return t.m("polygon",{"clip-path":p,style:c,points:f},t.m("title",u))}shape(e,r,a,s){return t.m("polyline",{"clip-path":r?`url(#${r})`:void 0,style:a,points:e.map(e=>`${n(e[0])},${n(e[1])}`).join(" ")},t.m("title",s))}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(5);class a{constructor(e){this.areaDesc=e,this.spacing=0}static translate(e){return 0===e.length&&e.push(""),e.map(e=>"string"!=typeof e?e:e.endsWith("px")?n.px(parseInt(e)):e.endsWith("%")?n.pc(parseInt(e)):"fill"===e.toLowerCase()?n.FILL:void 0)}static register(e,t){a.layoutStyles[e]=t}static createLayout(e,t){let r="";return Object.keys(a.layoutStyles).some(n=>!!e[n]&&(r=new a.layoutStyles[n](a.translate(e[n])).getStyles(t),e[n]=void 0,!0)),r}}a.layoutStyles={},t.Layouter=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class n{constructor(e){this.size=e}getSize(){return this.size}}t.LayoutToken=n;class a extends n{constructor(e){super(e)}}t.DefinedToken=a;class s extends n{constructor(){super(-1)}}t.FillToken=s;class i extends a{constructor(e){super(e)}}t.PixelToken=i;class o extends a{constructor(e){super(e)}}t.PercentToken=o,t.px=function(e){return new i(e)},t.pc=function(e){return new o(e)},t.FILL=new s},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a="./data/index.json";class s{static add(e,t){const r=e.name,n=s.gList.docs.indexOf(t);s.gList.set[n]=r,s.gList.index[r]={},function e(t,r,n,a=""){if(t.lib=n,"object"==typeof t&&t.name){const s=function(e){e.name=e.name.replace(/["'](.+)["']|(.+)/g,"$1$2");const t=e.name.match(/([^\/]+)$/)[1];return e.name=t,e.fullPath=""===a?t:`${a}.${t}`}(t);!function(e){e.comment&&e.comment.tags&&e.comment.tags.forEach(t=>{"module"===t.tag&&(e.innerModule=t.text.trim())})}(t),r[t.id+""]=t,s.length>0&&(r[s]=t),t.children&&t.children.map(t=>e(t,r,n,s)),t.signatures&&t.signatures.map(t=>e(t,r,n,s)),t.parameters&&t.parameters.map(t=>e(t,r,n,s)),t.type&&t.type.declaration&&t.type.declaration.children&&t.type.declaration.children.map(t=>e(t,r,n,s))}}(e,s.gList.index[r],r)}static loadList(e){let t=(e=e).lastIndexOf("/");const r=e.substring(0,t+1);return n.m.request({method:"GET",url:e||a}).then(e=>(s.gTitle=e.title,s.gList.docs=e.docs,Promise.all(e.docs.map(e=>(function(e,t){return n.m.request({method:"GET",url:e+t}).then(e=>s.add(e,t)).catch(console.log)})(r,e))))).catch(console.log)}static get(e,t=0){return e&&s.gList.index[e]?s.gList.index[e][t+""]:s.gList.set}}s.gList={set:[],index:{},docs:[]},t.DocSets=s},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(35);t.Menu=n.Menu;var a=r(36);t.Button=a.Button;var s=r(37);t.Label=s.Label;var i=r(38);t.Slider=i.Slider;var o=r(17);t.RadioButton=o.RadioButton;var l=r(39);t.OptionsButton=l.OptionsButton;var c=r(18);t.ToggleButton=c.ToggleButton;var u=r(13);t.ToolbarButton=u.ToolbarButton;var d=r(13);t.ButtonSymbols=d.ButtonSymbols;var m=r(40);t.Collapsible=m.Collapsible;var h=r(41);t.Modal=h.Modal;var p=r(42);t.TypeAhead=p.TypeAhead},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0);function a(e,t){return e.forEach(e=>{e.isSelected=e.title===t}),e.some(e=>e.isSelected)||(e[0].isSelected=!0),e.filter(e=>e.isSelected)[0]}t.oneOfItems=a,t.anyItems=function(e,t){return e[t].isSelected=!e[t].isSelected,e[t]};class s{static updateItems(e){(e.attrs.desc.items||[]).map((t,r)=>{const n=e.state.items[t]||{title:t,isSelected:!1};e.state.items[r]=n,e.state.items[t]=n})}static init(e,t=a){e.state={updateModel:t,items:[],events:{},itemClicked:e=>e,defaultItem:e.attrs.desc.defaultItem},e.state.events.mouseDown=e.attrs.desc.mouseDown,e.state.events.mouseUp=e.attrs.desc.mouseUp,e.attrs.desc.clicked=e.attrs.desc.clicked||(e=>console.log(`missing clicked() function for selector item ${e}`)),e.state.events.clicked=e.attrs.desc.clicked,s.updateItems(e)}oninit(e){s.init(e)}onupdate(e){s.updateItems(e)}static ensureSelected(e){!e.state.items.some(e=>e.isSelected)&&e.state.items.length>0&&(e.state.defaultItem?e.state.items[e.state.defaultItem].isSelected=!0:e.state.items[0].isSelected=!0)}static renderItem(e,t){t<0&&(console.log(`illegal render index ${t} ${e.state.items.map(e=>e.title).join("|")}`),t=0);const r=e.state.items[t],n=r.title||"";return i({title:n,css:r.css||"",isSelected:!!e.state.items[n]&&e.state.items[n].isSelected,mouseDown:e.state.events.mouseDown,mouseUp:e.state.events.mouseUp,clicked:(t=>r=>{e.state.updateModel(e.state.items,r),r=e.state.itemClicked(r),"function"==typeof t&&t(r)})(e.state.events.clicked)})}}function i(e){const t=e.clicked?()=>{e.clicked(e.title)}:void 0,r=e.mouseDown?()=>{e.mouseDown(e.title)}:void 0,a=e.mouseUp?()=>{e.mouseUp(e.title)}:void 0;return n.m(`.hs-selectable ${e.css||""} ${e.isSelected?"hs-selected":""}`,{style:e.style,onclick:t,onmousedown:r,onmouseup:a},e.title)}t.Selector=s,t.renderSelectable=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(3);class a extends n.SVGElem{static defaultConfig(e){function t(e,t,r){return{visible:r,text:"",xpos:t?n.TextHAlign.middle:e?n.TextHAlign.end:n.TextHAlign.start,ypos:t?e?n.TextVAlign.top:n.TextVAlign.bottom:n.TextVAlign.center,hOffset:t?0:e?-1:.7,vOffset:t?e?.7:-.7:0}}function r(e,t){return{visible:t,length:(e?1:-1)*(t?10:5)}}function a(e,a){return{visible:!!e,crossesAt:e?"min":"max",scale:{type:"auto",domain:["auto","auto"]},title:function(e,t){return{visible:!0,text:(t?"x":"y")+(e?"":"2"),xpos:t?n.TextHAlign.end:e?n.TextHAlign.middle:n.TextHAlign.start,ypos:t?n.TextVAlign.top:e?n.TextVAlign.bottom:n.TextVAlign.top,hOffset:t?-2:e?0:.3,vOffset:t?e?.4:-1.2:e?-.5:.7}}(e,a),ticks:{major:{marks:r(e,!0),labels:t(e,a,!0),labelFmt:void 0},minor:{marks:r(e,!1),labels:t(e,a,!1),labelFmt:void 0}}}}e.axes={primary:{x:a(!0,!0),y:a(!0,!1)},secondary:{x:a(!1,!0),y:a(!1,!1)}}}static adjustConfig(e){}drawAxisLine(e,t,r){return e?this.horLine(t[0],t[1],r,"hs-graph-axis-line"):this.verLine(r,t[0],t[1],"hs-graph-axis-line")}drawTitle(e,r,n,a,s){r.cssClass="hs-graph-axis-title";const i={transform:`translate(${e?a[1]:s}, ${e?s:a[1]})`};return r.visible?t.m("g",i,this.text(r,r.text)):void 0}drawTickMarks(e,r,n,a,s,i){return t.m("svg",{class:`hs-graph-axis-${r}-tick-marks`},i.marks.visible?s.marks.map(t=>e?this.verLine(a.convert(t),n,n+i.marks.length):this.horLine(n,n-i.marks.length,a.convert(t))):"")}drawTickLabels(e,r,a,s,i,o){s.setLabelFormat(o.labelFmt);const l={};return Object.keys(o.labels).forEach(e=>l[e]=o.labels[e]),t.m("svg",{class:`hs-graph-axis-${r}-tick-label`},l.visible?i.labels.map((r,o)=>{const c=s.convert(r.pos),u={transform:`translate(${e?c:a}, ${e?a:c})`};return e&&0===o?l.xpos=n.TextHAlign.start:e&&o===i.labels.length-1?l.xpos=n.TextHAlign.end:l.xpos=n.TextHAlign.middle,t.m("g",u,this.text(l,r.text))}):"")}drawAxis(e,r,n,a){const s="x"===e,i=r[e].range(),o=a[n][e],l=function(e,t){let r;switch(e){case"min":r=t.domain()[0];break;case"max":r=t.domain()[1];break;default:r=e||0}return t.convert(r)}(o.crossesAt,r[s?"y":"x"]),c=r[e].ticks();return o.visible?t.m("svg",{class:`hs-graph-axis-${e} hs-graph-axis-${n}`},[this.drawAxisLine(s,i,l),this.drawTitle(s,o.title,n,i,l),this.drawTickMarks(s,"minor",l,r[e],c.minor,o.ticks.minor),this.drawTickMarks(s,"major",l,r[e],c.major,o.ticks.major),this.drawTickLabels(s,"minor",l,r[e],c.minor,o.ticks.minor),this.drawTickLabels(s,"major",l,r[e],c.major,o.ticks.major)]):void 0}view(e){const r=e.attrs.cfg,n=e.attrs.scales;return t.m("svg",{class:"hs-graph-axis"},[this.drawAxis("x",n.primary,"primary",r),this.drawAxis("y",n.primary,"primary",r),this.drawAxis("x",n.secondary,"secondary",r),this.drawAxis("y",n.secondary,"secondary",r)])}}a.type={linear:"linear axis",log:"log axis",date:"date axis",index:"index axis",percent:"percent axis",ordinal:"ordinal axis",nominal:"nominal axis",auto:"auto"},t.Axes=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(3),a=r(16),s=r(2);t.Plot=class extends n.SVGElem{drawLine(e,r,n,a,s,i,o){const l=`stroke: ${i.line.color}; stroke-width:${i.line.width};`;return i.line.visible?this.polyline(r,n,a,s,e,l,o):t.m(".invisible-line","")}drawMarker(e,r,n,s,i,o,l){const c=a.Series.marker;let u=`fill:${o.marker.color}`;return o.marker.visible?t.m("svg",{class:"hs-graph-series-markers"},r.map(e=>{const r=i.x.convert(e[n]),a=i.y.convert(e[s]),d=o.marker.size;switch(o.marker.shape){case c.circle:return this.circle({x:r,y:a},d,u,l);case c.square:return this.rect({x:r-d,y:a-d},{w:2*d,h:2*d},u,l);case c.diamond:return this.shape([[r-d,a],[r,a+d],[r+d,a],[r,a-d]],void 0,u,l);case c.upTriangle:return this.shape([[r-d,a+d],[r+d,a+d],[r,a-d]],void 0,u,l);case c.downTriangle:return this.shape([[r-d,a-d],[r+d,a-d],[r,a+d]],void 0,u,l)}return t.m(`.unkown-marker-${o.marker.shape}`,"")})):t.m(".invisible-marker","")}drawLabel(e,r,a,i,o,l,c){const u=c.style,d={text:"",cssClass:"",style:`fill:${u.label.color}`,xpos:n.TextHAlign.middle,ypos:n.TextVAlign.center,hOffset:c.hOffset,vOffset:c.vOffset};return u.marker.visible?t.m("svg",{class:"hs-graph-series-labels"},r.map(e=>(d.x=""+l.x.convert(e[a]),d.y=""+l.y.convert(e[i]),this.text(d,s.round(e[o],3))))):t.m(".invisible-marker","")}drawArea(e,r,n,a,s,i,o,l){if(o.fill.visible){const t=`fill: ${o.fill.color};`,c=r,u=r.slice().reverse();return this.polygon(c,u,n,a,s,i,e,t,l)}t.m(".invisible-line","")}setDefaults(e,t,r){}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1)},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0);t.ButtonSymbols={cross:{sym:"×"},minus:{sym:"−"},plus:{sym:"+"},dLeft:{sym:"«"},dRight:{sym:"»"},left:{sym:"‹"},right:{sym:"›"},leftTri:{sym:"◂"},rightTri:{sym:"▸"},upTri:{sym:"▴"},downTri:{sym:"▾"},up:{sym:"∧"},down:{sym:"∨"},lArrow:{sym:"←"},rArrow:{sym:"→"},uArrow:{sym:"↑"},dArrow:{sym:"↓"},empty:{sym:"○"},emptySlash:{sym:"∅"},oSlash:{sym:"ø"},o:{sym:"ο"},lines3:{sym:"≡"},sum:{sym:"Σ"},ellipsis:{sym:"…"},vertEllips:{sym:"⁝"},bullet:{sym:"•"},enter:{sym:"↵"},again:{sym:"↻"},start:{sym:"⇱"},end:{sym:"⇲"}},t.ToolbarButton=class{static getSymbol(e){return t.ButtonSymbols[e]?t.ButtonSymbols[e].sym:""}view(e){return"string"==typeof e.attrs.symbols?n.m(".hs-corner-button",{onclick:e.attrs.onclick},n.m.trust(e.attrs.symbols)):n.m(".hs-corner-button",{onclick:e.attrs.onclick},e.attrs.symbols.map(e=>n.m.trust(e)))}}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))(function(a,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function o(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?a(e.value):new r(function(t){t(e.value)}).then(i,o)}l((n=n.apply(e,t||[])).next())})};function a(e){return t=>new Promise(r=>{setTimeout(()=>{r(t)},e)})}Object.defineProperty(t,"__esModule",{value:!0}),t.timeout=function(e){return new Promise((t,r)=>{setTimeout(r,e)})},t.delay=a,t.Pace=class{constructor(e=100,t=-1){this.maxConcurrent=-1,this.waitUntil=0,this.waitCount=0,this.beingCalled=0,this.pace=e+5,this.maxConcurrent=t}getWaitCount(){return this.waitCount}getCallingCount(){return this.beingCalled}add(e){const t=Date.now();this.waitUntiln(this,void 0,void 0,function*(){return yield new Promise(e=>{const t=()=>{this.maxConcurrent<0||this.beingCalled(this.beingCalled--,e))}},t.promiseChain=function(e,t=[]){return e.reduce((e,t)=>e.then(e=>Promise.resolve(t(e)).then(t=>(e.push(t),e))),Promise.resolve(t))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(21);t.Data=n.Data},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(3),a=r(9),s=r(57),i=r(58),o=r(59),l=r(60);let c=0;class u extends n.SVGElem{static defaultConfig(e){e.series=new d}static adjustConfig(e){e.series.series.forEach(t=>{void 0===t.x&&(e.axes.primary.x.title.hOffset=0,e.axes.primary.x.scale.type=a.Axes.type.index,e.grid.minor.ver.visible=!1)})}drawClipRect(e,r){return e?this.clipRect({x:r.x.range()[0],y:r.y.range()[1]},{w:r.x.range()[1]-r.x.range()[0],h:r.y.range()[0]-r.y.range()[1]},e):t.m("")}view(e){const r=e.attrs.cfg,n=e.attrs.scales.primary,a=e.attrs.data,s=r.clip?"hs"+c++:void 0;return r.series.map(e=>{e.map===u.map.shared&&(e.ySum="$sum",a[e.dataIndex].colAdd(e.ySum),a[e.dataIndex].colInitialize(e.ySum,0))}),r.series.map(e=>{const t=a[e.dataIndex];if(e.map===u.map.shared){const r=t.colNumber(e.y);t.colInitialize(e.ySum,(e,t,n)=>e+n[r])}e.map&&(e.yBase="$"+e.map,t.colAdd(e.yBase),t.colInitialize(e.yBase,0))}),t.m("svg",{class:"hs-graph-series"},[this.drawClipRect(s,n),t.m("svg",r.series.map((e,r)=>{const i=a[e.dataIndex],o=u.plot[e.type]||u.plot.line;o.setDefaults(i,e,n);const l=e.cond?i.filter(e.cond):i,c=o.plot(l,e,n,r,s);if(e.map){const t=l.colNumber(e.y);l.colInitialize(e.yBase,(e,r,n)=>e+n[t])}return t.m("svg",{class:`hs-graph-series-${r}`},c)}))])}}u.marker={circle:Symbol("circle marker"),square:Symbol("square marker"),diamond:Symbol("diamond marker"),upTriangle:Symbol("upward triangle marker"),downTriangle:Symbol("downward triangle marker")},u.plot={line:new s.PlotLine,marker:new i.PlotMarkers,bar:new o.PlotBar,area:new l.PlotArea},u.map={stacked:"stacked",shared:"shared"},u.defaultStyle={line:{color:"default",visible:!0,width:2},marker:{color:"default",visible:!1,size:10,shape:u.marker.circle},label:{color:"default",visible:!1},fill:{color:"default",visible:!1},bar:{color:"default",visible:!1,width:50,offset:30}},u.defaultColors=["#f00","#0f0","#00f","#ff0","#0ff","#f0f","#000","#444","#888","#ccc"],t.Series=u;class d{constructor(){this.seriesDefs=[],this.clip=!0}set data(e){this._data=e}get data(){return this._data}set series(e){const t=u.defaultStyle,r=u.defaultColors;e.forEach(e=>{e.type=e.type||"line",e.style=e.style||{},e.dataIndex=e.dataIndex||0;const n={color:r[this.seriesDefs.length]};switch(function e(t,r,n){Object.keys(r).forEach(a=>{"object"==typeof r[a]?(void 0===t[a]&&(t[a]={}),e(t[a],r[a],n)):(void 0===t[a]&&(t[a]=r[a]),"default"===t[a]&&(t[a]=n[a]))})}(e.style,t,n),this.seriesDefs.push(e),e.type){case"line":e.style.line.visible=!0;break;case"marker":e.style.marker.visible=!0;break;case"area":case"bar":e.style.fill.visible=!0}})}get series(){return this.seriesDefs}}t.SeriesConfig=d},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(0),s=r(8);class i extends s.Selector{static viewGroup(e,t){e=`${e} ${t.attrs.css||""}`;const r=t.attrs.style||"";return n.m(e,{style:r},n.m(a.Layout,{columns:[],content:t.state.items.map((e,r)=>s.Selector.renderItem(t,r))}))}oninit(e){super.oninit(e),s.Selector.ensureSelected(e)}onupdate(e){super.onupdate(e),s.Selector.ensureSelected(e)}view(e){return i.viewGroup(".hs-radio-buttons",e)}}t.RadioButton=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(8);t.ToggleButton=class extends a.Selector{oninit(e){super.oninit(e),e.state.mouseDownCSS="",e.state.events.mouseDown=()=>e.state.mouseDownCSS=".hs-button-pressed",e.state.events.mouseUp=()=>e.state.mouseDownCSS="",e.state.itemClicked=t=>{const r=e.state.items.map(e=>e.title).indexOf(t),n=e.state.items[(r+1)%e.state.items.length].title;return e.state.items[t].isSelected=!1,e.state.items[n].isSelected=!0,n},a.Selector.ensureSelected(e)}onupdate(e){super.onupdate(e),a.Selector.ensureSelected(e)}view(e){const t=e.attrs.css||"",r=e.attrs.style||"",s=e.state.items.findIndex(e=>e.isSelected);return n.m(`.hs-toggle-button ${t} ${e.state.mouseDownCSS}`,{style:r},n.m("span",a.Selector.renderItem(e,s)))}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(44),s=r(6),i=r(2).log("Parts");function o(e,t,r,a){return n.m(e,{href:`/api/${t}/${r}`,oncreate:n.m.route.link,onupdate:n.m.route.link},a)}function l(e,t){if(e&&e.defaultValue){let t=` = ${e.defaultValue}`.replace(/{/gi,"{ ").replace(/}/gi," }");return n.m("span.hs-item-default",t)}}function c(e,t){try{return n.m("span",e.type?[n.m("span.hs-item-name",":"),n.m("span.hs-item-sig-type",function r(a){switch(a.type){case void 0:return"";case"array":return n.m("span.hs-item-type-array",["Array<",r(a.elementType),">"]);case"tuple":return n.m("span.hs-item-type-tuple",["[ ",...a.elements.map((e,t)=>[t>0?", ":void 0,r(e)])," ]"]);case"intrinsic":case"instrinct":return n.m("span.hs-item-type-instrinct",a.id?o("span",t,a.fullPath,a.name):a.name);case"stringLiteral":return n.m("span.hs-item-type-string-literal",a.type);case"union":return n.m("span.hs-item-type-union",[...a.types.map((e,t)=>[t>0?" | ":void 0,r(e)])]);case"reference":let l=a.name;if(a.id){const e=s.DocSets.get(t,a.id);l=e.typeArguments?e.name+"<"+e.typeArguments.map(r).join(", ")+">":e.id?o("a",t,e.fullPath,e.name):e.name}return n.m("span.hs-item-type-reference",l);case"reflection":let c;return c=a.declaration?a.declaration.children?n.m("span.hs-item-reflection",["{ ",...a.declaration.children.map((e,t)=>[t>0?", ":void 0,e.name,": ",r(e.type)])," }"]):a.declaration.kindString:"UNKNOWN",n.m("span.hs-item-type-reflection",c);default:return i.warn("unknown type "+a.type),i.warn(i.inspect(e,3)),e.type}}(e.type)),l(e)]:"")}catch(e){i.error(e),i.error(e.trace)}}t.flags=function(e,t=[]){const r=["Method","Property"],a={isExported:"export",isExternal:"external",isPublic:"public",isPrivate:"private",isProtected:"protected",isConstructorProperty:"constructorProperty",isAbstract:"abstract",isConst:"const",isLet:"let",isVar:"var",isStatic:"static",isOptional:"optional"};return n.m("span.hs-item-flags",e.flags?Object.keys(e.flags).map(s=>{let i=!1,o=a[s];return void 0===o?o=s:i=t.indexOf(o)>=0,"export"===o&&r.indexOf(e.kindString)>=0&&(i=!0),n.m(`span.hs-item-${i?"ignore":o===s?"unknown":o}-flag`,i?void 0:o)}):[])},t.kindString=function(e){return n.m("span.hs-item-kind",e.kindString)},t.itemName=function(e,t){return n.m("span.hs-item-name",e.fullPath?o("a",e.lib,e.fullPath,t.name):t.name)},t.itemTooltip=function(e){return n.m("span.hs-item-name",a.tooltip(e.name,"class name and then some","bottom"))},t.extensionOf=function(e){return n.m("span.hs-item-extensions",e.extendedTypes?[n.m("span.hs-item-extends","extends"),n.m("span",e.extendedTypes.map((t,r)=>n.m("span.hs-item-extension",[o("a",e.lib,s.DocSets.get(e.lib,t.id).fullPath,t.name),e.extendedTypes.map.length>r+1?", ":""])))]:void 0)},t.inheritedFrom=function(e){if(e.inheritedFrom){let t=s.DocSets.get(e.lib,e.inheritedFrom.id);return t=s.DocSets.get(e.lib,t.fullPath.substring(0,t.fullPath.lastIndexOf("."))),n.m("span.hs-item-inherited-from",[n.m("span","inherited from "),o("a",t.lib,t.fullPath,t.name)])}return n.m("span.hs-item-inherited-from",void 0)},t.sourceLink=function(e){const t=e.sources?e.sources[0]:void 0;if(t){let r=(t.fileName||"").replace(".ts",".html");const a=r.indexOf(e.lib);return a>0&&(r=r.substr(a)),n.m("span.hs-item-member-source",n.m("a",{href:`data/src/${e.lib}/${r}#${Math.max(0,t.line-5)}`,target:"_blank"},"[source]"))}return n.m("span.hs-item-member-source","")},t.libLink=o,t.signature=function(e,t){let r=[];if(e)switch(e.parameters&&(r=e.parameters.map((e,r)=>n.m("span",[(e=>e>0?", ":"")(r),n.m("span.hs-item-sig-param",[n.m(`span.hs-item-name${function(e){return e&&e.isOptional?".hs-item-optional":""}(e.flags)}`,e.name),c(e,t.lib)])]))),t.kindString){case void 0:break;case"Method":case"Function":case"Constructor":r.unshift(n.m("span.hs-item-name","(")),r.push(n.m("span.hs-item-name",")"));break;default:i.warn(`unexpected kindString ${t.kindString}`)}return n.m("span.hs-item-signature",r)},t.defaultVal=l,t.type=c,t.makeID=function(e,t){let r=e?e+"_":"";return""!==(r=(r+(t.name||"")).toLowerCase())?r:void 0}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=[["Jan","January"],["Feb","February"],["Mar","March"],["Apr","April"],["May","May"],["Jun","June"],["Jul","July"],["Aug","August"],["Sep","September"],["Oct","October"],["Nov","November"],["Dec","December"]],a=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];function s(e,t){for(var r=""+e;r.length6e4*e,fromHours:e=>36e5*e,fromDays:e=>864e5*e,fromWeeks:e=>6048e5*e,toMinutes:e=>e/6e4,toHours:e=>e/36e5,toDays:e=>e/864e5,toWeeks:e=>e/6048e5}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(53);class a{constructor(e){this.data=[],this.meta=[],this.import(e)}static toDataSet(e,t){e=e||[{}];const r=Object.keys(e[0]);return{rows:e.map(e=>r.map(t=>e[t])),colNames:r,name:t||void 0}}getName(){return this.name}import(e){this.name=e.name,this.setData(e.rows,e.colNames)}export(){return{rows:this.getData(),colNames:this.colNames()}}getData(){return this.data}getColumn(e){const t=this.colNumber(e);return this.data.map(e=>e[t])}colAdd(e){let t=this.getMeta(e);return void 0===t&&((t=this.meta[e]={}).name=e,t.column=this.meta.length,this.meta.push(t),t.cast=!1,t.accessed=!1),t}colInitialize(e,t){const r="function"==typeof t;let n=this.getMeta(e);if(!n){if("string"!=typeof e)throw new Error(`column ${e} does not exist in Data`);n=this.colAdd(e)}return this.data.map((e,a)=>e[n.column]=r?t(e[n.column],a,e):t),n.column}colNumber(e){const t=this.getMeta(e);return t?(t.accessed=!0,t.column):void 0}colName(e){var t=this.getMeta(e);if(t)return t.accessed=!0,t.name}colNames(){return this.meta.map(e=>e.name)}colType(e){const t=this.getMeta(e);return t?t.types[0].type:a.type.name}findDomain(e,t){if(void 0===t&&(t=[]),void 0===e)t[0]=0,t[1]=this.data.length-1;else{const r=this.colNumber(e);switch(this.colType(e)){case a.type.name:this.data.forEach(e=>{const n=t;n.indexOf(""+e[r])<0&&n.push(""+e[r])});break;case a.type.date:this.data.forEach(e=>{let n=this.toDate(e[r]);void 0===t[0]&&(t[0]=n),void 0===t[1]&&(t[1]=n),null!=n&&(nt[1]&&(t[1]=n))});break;default:this.data.forEach(e=>{let n=parseFloat(e[r].toString());void 0===t[0]&&(t[0]=n),void 0===t[1]&&(t[1]=n),null!=n&&(nt[1]&&(t[1]=n))})}}return t}castData(){this.meta.forEach(e=>{const t=e.column;e.cast||this.data.forEach(r=>r[t]=this.castVal(e.types[0].type,r[t])),e.cast=!0})}filter(e){return n.filter(this,e)}sort(e,t){let r=e;return t?(t=this.colNumber(t),"descending"===e&&(r=(e,t)=>t>e?1:tte?-1:0),this.data.sort((e,n)=>r(e[t],n[t]))):this.data.sort(r),this}map(e,t){const r=e=>e;let n=function(){let t;switch(e){case"cumulate":t=(()=>{let e=0;return(t,r)=>e+=+t})();break;case"noop":t=r;break;default:t=e}return t}();const s=t?this.colNumber(t):void 0;return new a({colNames:this.colNames(),rows:this.data.map((e,t,r)=>(s?e[s]=n(e[s],s,t,r):r[t]=n(e,t,r),e)),name:this.getName()})}getMeta(e){if(this.meta[e])return this.meta[e].accessed=!0,this.meta[e]}setData(e,t,r=!0){this.meta=[],this.data=e,t.forEach(e=>this.colAdd(e)),t.forEach(e=>this.findTypes(e)),this.castData()}findTypes(e){const t=this.getMeta(e),r=[];Object.keys(a.type).forEach(e=>{const t={type:a.type[e],count:0};r.push(t),r[a.type[e]]=t});for(let t of this.allRows(e)){const e=this.findType(t);null!==e&&r[e].count++}return r.sort(function(e,t){return"currency"===e.type&&e.count>0?-1:"currency"===t.type&&t.count>0?1:t.count-e.count}),t.types=r,r[0].type}findType(e){if(e&&""!==e){if(e instanceof Date)return a.type.date;if("number"==typeof e)return a.type.number;const t=""+e;if(""+parseFloat(t)===t)return a.type.number;if(t.startsWith("$")&&!isNaN(parseFloat(t.slice(1))))return a.type.currency;if(t.endsWith("%")&&!isNaN(parseFloat(t)))return a.type.percent;if(!isNaN(this.toDate(t).getTime()))return a.type.date;switch(t.toLowerCase()){case"null":case"#ref!":break;default:if(e.length>0)return a.type.name}}return null}*allRows(e){const t=this.colNumber(e);for(let e=0;ee.pos-t.pos;function u(){m.minor.labels.sort(c),m.major.labels.sort(c)}const d=[t[0],t[1]],m={major:{marks:[],labels:[]},minor:{marks:[],labels:[]}};switch(e){case a.Axes.type.log:!function(e,t){e[0]=Math.max(e[0],1e-20),e[1]=Math.max(e[1],1e-20);let r=Math.pow(10,Math.floor(Math.log10(e[1]-e[0]))),n=Math.pow(10,Math.floor(Math.log10(e[0]))),a=Math.pow(10,Math.ceil(Math.log10(e[1])));if(r>n)for(let e=n;e<=a;e*=10)for(let r=1;r<=20;r++)1===r&&e*r365?t[0]=1:n>270?t[1]=3:n>20?t[1]=1:n>4?t[2]=7:r>300?t[2]=1:r>75?t[3]=1:r>45?t[4]=15:r>10?t[4]=5:r>2?t[4]=1:t[5]=1,t}(a[1].getTime()-a[0].getTime()),l=n(a[0],i,Math.floor),c=n(a[1],i,Math.ceil);let u=l;for(;u<=c;)o(t.major,u,r),u=new Date(u.getFullYear()+i[0],u.getMonth()+i[1],u.getDate()+i[2],u.getHours()+i[3],u.getMinutes()+i[4],u.getSeconds()+i[5])}(d,m,n),u();break;case a.Axes.type.percent:!function(e,t,r){const n=e=>e.text=`${100*Math.round(e.pos)}%`;l(e,t,r),t.major.labels.forEach(n),t.minor.labels.forEach(n)}(d,m,r),u();break;case a.Axes.type.ordinal:case a.Axes.type.nominal:break;case a.Axes.type.index:case a.Axes.type.linear:default:l(d,m,r),u()}return m}t.Scale=class{constructor(e){this.cfg=e,this.typeVal=a.Axes.type.linear,this.rangeVal=[0,1],this.domVal=[0,1],this.domMinAuto=0,this.domMaxAuto=0,this.typeVal=e.type,this.domain(e.domain)}setLabelFormat(e){this.labelFmt=e}range(e){return e&&(this.rangeVal=e),this.rangeVal}domain(e){if(e){switch(this.scaleType()===a.Axes.type.date?"string"!=typeof e[0]&&"string"!=typeof e[1]||(this.domVal[0]="auto"===e[0]?0:Date.parse(e[0]),this.domVal[1]="auto"===e[1]?1:Date.parse(e[1])):(this.domVal[0]="auto"===e[0]?0:e[0],this.domVal[1]="auto"===e[1]?1:e[1]),e[0]){case"tight":this.domMinAuto=2;break;case"auto":this.domMinAuto=1;break;default:this.domMinAuto=0}switch(e[1]){case"tight":this.domMaxAuto=2;break;case"auto":this.domMaxAuto=1;break;default:this.domMaxAuto=0}}return this.typeVal===a.Axes.type.log&&(this.domVal[1]<=0&&(this.domVal[1]=10),this.domVal[0]<=0&&(this.domVal[0]=this.domVal[1]/10)),this.domVal}scaleType(e){if(e)switch(e){case n.Data.type.date:this.typeVal=a.Axes.type.date;break;case n.Data.type.name:this.typeVal=a.Axes.type.nominal;break;case n.Data.type.percent:this.typeVal=a.Axes.type.percent;break;case n.Data.type.number:case n.Data.type.currency:default:this.typeVal=a.Axes.type.linear}return this.typeVal}setAutoDomain(e){const t=c(this.scaleType(),e,4,this.labelFmt);switch(this.domMinAuto){case 1:this.domVal[0]=t.major.labels[0]?t.major.labels[0].pos:e[0];break;case 2:this.domVal[0]=e[0]}switch(this.domMaxAuto){case 1:this.domVal[1]=t.major.labels.length>1?t.major.labels[t.major.labels.length-1].pos:e[1];break;case 2:this.domVal[1]=e[1]}}ticks(e=4){const t=[this.domain()[0],this.domain()[1]],r=e=>e.pos>=t[0]&&e.pos<=t[1],n=c(this.scaleType(),this.domain(),e,this.labelFmt);return n.minor.labels=n.minor.labels.filter(r),n.major.labels=n.major.labels.filter(r),0===n.major.labels.length&&(n.major.labels=n.minor.labels,n.minor.labels=[]),function(e,t){switch(t){case a.Axes.type.nominal:case a.Axes.type.index:const r=e.major.labels.length;e.major.marks=Array(r+1).fill(1).map((e,t)=>t-.5),e.minor.marks=e.minor.labels?e.minor.labels.map(e=>e.pos):[];break;case a.Axes.type.log:case a.Axes.type.date:case a.Axes.type.percent:case a.Axes.type.ordinal:case a.Axes.type.linear:default:e.major.marks=e.major.labels?e.major.labels.map(e=>e.pos):[],e.minor.marks=e.minor.labels?e.minor.labels.map(e=>e.pos):[]}}(n,this.scaleType()),n}convert(e){const t=this.domain(),r=this.range(),n=t[0],s=t[1];let i;switch(this.scaleType()){case a.Axes.type.log:i=Math.log(e/n)/Math.log(s/n)*(r[1]-r[0])+r[0];break;case a.Axes.type.nominal:break;case a.Axes.type.date:case a.Axes.type.percent:case a.Axes.type.index:case a.Axes.type.ordinal:case a.Axes.type.linear:default:i=(e-n)/(s-n)*(r[1]-r[0])+r[0]}return i}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(3);t.Grid=class extends n.SVGElem{static defaultConfig(e){e.grid={major:{hor:{visible:!0},ver:{visible:!0}},minor:{hor:{visible:!1},ver:{visible:!1}}}}static adjustConfig(e){}drawHorGrid(e,r,n,a){return e.visible?t.m("svg",{class:"hs-graph-grid-hor"},a.marks.map(e=>this.horLine(n[0],n[1],r.convert(e)))):t.m("svg")}drawVerGrid(e,r,n,a){return e.visible?t.m("svg",{class:"hs-graph-grid-ver"},a.marks.map(e=>this.verLine(r.convert(e),n[0],n[1]))):t.m("svg")}view(e){const r=e.attrs.cfg,n=e.attrs.scales.primary;return t.m("svg",{class:"hs-graph-grid"},[t.m("svg",{class:"hs-graph-grid-minor"},[this.drawHorGrid(r.minor.hor,n.y,n.x.range(),n.y.ticks().minor),this.drawVerGrid(r.minor.ver,n.x,n.y.range(),n.x.ticks().minor)]),t.m("svg",{class:"hs-graph-grid-major"},[this.drawHorGrid(r.major.hor,n.y,n.x.range(),n.y.ticks().major),this.drawVerGrid(r.major.ver,n.x,n.y.range(),n.x.ticks().major)])])}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1),t.Legend=class{static defaultConfig(e){e.legend={}}static adjustConfig(e){}view(e){return t.m("svg",{class:"hs-graph-legend",width:"100%",height:"100%"})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(26).init()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(34),s=r(43),i=r(48),o=r(0),l=r(0),c={root:{Layout:{rows:["30px","fill","10px"],css:".hs-site-main",content:["header","body","footer"]}},header:{Layout:{columns:["200px","fill"],css:".hs-site-header",content:["title","menu"]}},body:{Layout:{columns:["200px","fill"],content:["leftnav","mainDetail"]}},footer:{Layout:{css:".hs-site-footer",content:"(c) Helpful Scripts"}},title:{Layout:{css:".hs-site-title",content:"HSDocs",href:"https://github.com/HelpfulScripts/hsDocs"}},menu:{DocsMenu:{docSet:"./data/index.json"}},leftnav:{LeftNav:{}},mainDetail:{MainDetail:{}}};t.init=function(){const e={view:e=>o.m(l.Config,Object.assign({source:c,context:[n,a,s,i]},{route:{field:o.m.route.param("field"),lib:o.m.route.param("lib")}}))};o.m.route(document.body,"/api",{"/api":e,"/api/:lib":e,"/api/:lib/:field":e})}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(4),a=r(5);t.PillarLayouts=["columns","rows"];const s={columns:{cssClass:".hs-column-layout",fields:["top","bottom","left","right","height","width"]},rows:{cssClass:".hs-row-layout",fields:["left","right","top","bottom","width","height"]}};class i extends n.Layouter{constructor(e,t){super(t),this.areaDesc=t,this.fields=e.fields,this.cssClass=e.cssClass;let r=t.length-1,n=0,s=0;this.unit=t.some(e=>e instanceof a.PixelToken)?this.unitPixel:this.unitPercent,t.some((e,r)=>!(t[r]instanceof a.DefinedToken)||++n<0),t.some((e,n)=>!(t[r-n]instanceof a.DefinedToken)||++s<0),this.firstFixed=n,this.lastFixed=Math.min(s,t.length-n)}getSizes(e){const t=this.firstFixed,r=this.lastFixed,n=this.areaDesc,a=n.length;return[...Array(e).keys()].map(s=>{let i=null,o=null;return s>e-1-r?(i=n[a-(e-s)].getSize(),o="end"):s0&&a===t&&(i=n[a-1].getSize(),o="start"),{size:i,code:o,fields:{}}})}unitPercent(e){let t=this.fields,r=100,n=this.getSizes(e);n.forEach(t=>{t.size&&(r-=t.size,e--)});let a=r/e;function s(e,r,n,s){let i=0;e.some(e=>{let o=e.size||a;return!!s(e.code)||(e.fields[r]=i+"%",i+=o,e.fields[n]=100-i+"%",e.fields[t[5]]="auto",!1)})}return s(n,t[2],t[3],e=>"end"===e),s(n.reverse(),t[3],t[2],e=>"end"!==e),n.reverse()}unitPixel(e){let t=this.getSizes(e),r=this.fields,n=100/e,a=0;return t.some((e,t)=>{if("start"===e.code)e.fields[r[2]]=a+"px",a+=e.size+(this.spacing||0)+(this.spacing||0),e.fields[r[3]]="auto",e.fields[r[5]]=e.size+"px";else if(null===e.code)e.fields[r[2]]=a>0?a+"px":t*n+"%",a=-1,e.fields[r[3]]=100-(t+1)*n+"%",e.fields[r[5]]="auto";else if("end"===e.code)return!0;return!1}),a=0,t.slice().reverse().some((e,t)=>(e.fields[r[3]]=a+"px","end"!==e.code?(a>0&&"start"!==e.code&&(e.fields[r[5]]="auto"),!0):(a+=e.size+(this.spacing||0)+(this.spacing||0),e.fields[r[2]]="auto",e.fields[r[5]]=e.size+"px",!1))),t}getStyles(e){let t=this.fields,r=this.unit(e.length);return e.map((e,n)=>{e.style=`${t[0]}:0%; ${t[1]}:0%; `,Object.keys(r[n].fields).forEach(t=>{e.style+=`${t}: ${r[n].fields[t]};`})}),this.cssClass}}n.Layouter.register(t.PillarLayouts[0],class extends i{constructor(e){super(s[t.PillarLayouts[0]],e),this.areaDesc=e}}),n.Layouter.register(t.PillarLayouts[1],class extends i{constructor(e){super(s[t.PillarLayouts[1]],e),this.areaDesc=e}})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(4),a=r(5);n.Layouter.register("tiles",class extends n.Layouter{constructor(e){super(e),this.areaDesc=e,this.unit=e.some(e=>e instanceof a.PixelToken)?this.unitPixel:this.unitPercent}unitPercent(e){const t=this.areaDesc,r=this.areaDesc.some(e=>e instanceof a.FillToken),n=Math.sqrt(e),s=Math.round(n);let i=Math.floor(n);n>i&&i++;let o=t[0]instanceof a.DefinedToken?t[0].getSize():void 0,l=t[1]instanceof a.DefinedToken?t[1].getSize():o;o=o||100/i,l=l||100/s;let c=0,u=0;return[...Array(e).keys()].map(e=>{let t="auto",n=o+"%",a="auto",s=l+"%";c+2*o>100&&r&&(t="0%",n="auto"),u+2*l>100&&r&&(a="0%",s="auto");const i=`\n top: ${Math.floor(u)}%; bottom:${a};\n left: ${c}%; right:${t};\n width: ${n}; height: ${s};\n `;return Math.round(c+=o)>100-Math.floor(o)&&(c=0,u+=l),i})}unitPixel(e){const t=this.areaDesc,r=Math.sqrt(e),n=Math.round(r);let s=Math.floor(r);r>s&&s++;let i=t[0]instanceof a.DefinedToken?t[0].getSize():void 0,o=t[1]instanceof a.DefinedToken?t[1].getSize():i;i=i||100/s,o=o||100/n;let l=0,c=0;return[...Array(e).keys()].map(e=>{let t=i+"px",r=o+"px";const n=`\n top: ${Math.floor(c)}%; bottom:auto;\n left: ${l}%; right:auto;\n width: ${t}; height: ${r};\n `;return Math.round(l+=i)>100-Math.floor(i)&&(l=0,c+=o),n})}getStyles(e){let t=this.unit(e.length);return e.map((e,r)=>{e.style=t[r]}),".hs-tile-layout"}})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(11),a=r(4);class s{getComponents(e){return Array.isArray(e.attrs.content)?e.attrs.content.map(t=>t.compClass?(t.attrs.route=e.attrs.route,n.m(t.compClass,t.attrs)):t):e.attrs.content}getCSS(e){return e.attrs.css||""}normalizeContent(e){return"string"==typeof e?[n.m(".hs-leaf",n.m.trust(e))]:e.length>0?e.map(e=>e instanceof s?e:n.m(s,{content:e})):[e]}view(e){const t=this.normalizeContent(this.getComponents(e));let r=a.Layouter.createLayout(e.attrs,t);const s={style:e.style,route:e.attrs.route,onclick:e.attrs.onclick};return e.attrs.route=void 0,e.attrs.href&&(s.href=e.attrs.href,s.oncreate=n.m.route.link,s.onupdate=n.m.route.link),n.m(`.hs-layout ${r} ${this.getCSS(e)}`,s,t.map(e=>e))}}t.Layout=s},function(e,t,r){(function(e){var n=void 0!==e&&e||"undefined"!=typeof self&&self||window,a=Function.prototype.apply;function s(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new s(a.call(setTimeout,n,arguments),clearTimeout)},t.setInterval=function(){return new s(a.call(setInterval,n,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},s.prototype.unref=s.prototype.ref=function(){},s.prototype.close=function(){this._clearFn.call(n,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(31),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,r(12))},function(e,t,r){(function(e,t){!function(e,r){"use strict";if(!e.setImmediate){var n,a=1,s={},i=!1,o=e.document,l=Object.getPrototypeOf&&Object.getPrototypeOf(e);l=l&&l.setTimeout?l:e,"[object process]"==={}.toString.call(e.process)?n=function(e){t.nextTick(function(){p(e)})}:function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=r,t}}()?(d="setImmediate$"+Math.random()+"$",m=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(d)&&p(+t.data.slice(d.length))},e.addEventListener?e.addEventListener("message",m,!1):e.attachEvent("onmessage",m),n=function(t){e.postMessage(d+t,"*")}):e.MessageChannel?((u=new MessageChannel).port1.onmessage=function(e){p(e.data)},n=function(e){u.port2.postMessage(e)}):o&&"onreadystatechange"in o.createElement("script")?(c=o.documentElement,n=function(e){var t=o.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,c.removeChild(t),t=null},c.appendChild(t)}):n=function(e){setTimeout(p,0,e)},l.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r1)for(var r=1;r=0)return t;let n=t.length?[]:{};const s=Object.keys(t);return s.map(i=>{const o=function(e,t){let r;return t.some(t=>r=t[e]),r}(i,r),l=a(e,t[i],r);if(o){const e={compClass:o,attrs:l};Array.isArray(t)||1!==s.length?n[i]=e:n=e}else n[i]=l}),n}t.Config=class{oninit(e){const t=e.attrs.context;"string"==typeof e.attrs.source?e.state.cfg||n.m.request({method:"GET",url:e.attrs.source}).then(r=>{e.state.cfg=a(r,r.root,t)}):e.state.cfg=a(e.attrs.source,e.attrs.source.root,t)}view(e){const t=e.state.cfg;return t&&t.compClass?n.m(t.compClass,Object.assign(t.attrs,e.attrs)):n.m("div","waiting")}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(6),s=r(7);t.DocsMenu=class extends n.Layout{constructor(){super(...arguments),this.docSet=""}getDesc(e){this.docSet!==e.docSet&&(this.docSet=e.docSet,a.DocSets.loadList(e.docSet).then(()=>n.m.redraw));const t=a.DocSets.get();return{items:t.map(e=>e),defaultItem:n.m.route.param("lib")||t[0],clicked:e=>n.m.route.set("/api/:lib/0",{lib:e})}}getComponents(e){const t=this.getDesc(e.attrs);return n.m(s.Menu,{desc:t})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(17);t.Menu=class extends n.RadioButton{view(e){return n.RadioButton.viewGroup(".hs-menu",e)}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(18);t.Button=class extends n.ToggleButton{oninit(e){e.attrs.desc.items=[e.attrs.desc.name||"button"],super.oninit(e),n.ToggleButton.ensureSelected(e)}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0);t.Label=class{view(e){const t=e.attrs.css||"",r=e.attrs.style||"",a=e.attrs.text||"unspecified";return n.m(`.hs-label ${t}`,{style:r},n.m.trust(a))}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0);function a(e,t,r){const a=t/(r.length-1),s=r.length<2?0:100*a;return n.m(".hs-slider-marker",{style:`left: ${s}%`},function(e){return n.m(".hs-slider-label",e)}(e))}function s(e,t){e.stopPropagation(),e.preventDefault();const r=e.currentTarget.lastChild.clientWidth;return t.state.value=(e.clientX-t.state.mouse)/r+t.state.slider,function(e){if(e.state.range.length>1&&"string"==typeof e.state.range[0]){const t=Math.floor(e.state.value*(e.state.range.length-1)+.5);return e.state.notified!==e.state.range[t]&&(e.state.onchange(e.state.range[t]),e.state.notified=e.state.range[t]),t/(e.state.range.length-1)}{const t=e.state.range,r=Math.floor(100*(t[0]*(1-e.state.value)+t[1]*e.state.value))/100;return e.state.onchange(Math.min(e.state.range[1],Math.max(e.state.range[0],r))),e.state.value}}(t)}function i(e,t){t.state.mouse>0&&(t.state.value=s(e,t),t.state.mouse=-1)}t.Slider=class{oninit(e){e.state={range:[],value:.5,mouse:-1,slider:0,notified:"",onchange:()=>{}}}view(e){const t=e.attrs.id,r=e.attrs.css||"";return e.state.range=e.attrs.range||[],e.state.onchange=e.attrs.onchange,n.m(`.hs-slider ${r}`,{id:t,onmousedown:t=>(function(e,t){const r=function(e){let t=e.target,r=0;for(;t.className.trim()!==e.currentTarget.className.trim();)r+=t.offsetLeft,t=t.parentNode;return r-t.lastChild.offsetLeft}(e);if(t.state.mouse=e.clientX,["hs-slider","hs-slider-slot"].indexOf(e.target.className.trim())>=0){const n=e.currentTarget.lastChild.clientWidth,a=e.currentTarget.lastChild.lastChild.clientWidth;t.state.mouse-=a/2,t.state.value=(e.offsetX-a/2+r)/n}t.state.slider=t.state.value,s(e,t)})(t,e),onmousemove:t=>(function(e,t){t.state.mouse>0&&(s(e,t),(t.state.value>1||t.state.value<0)&&i(e,t))})(t,e),onmouseup:t=>i(t,e),onmouseout:t=>(function(e,t){t.state.mouse>0&&"hs-slider"===e.target.className.trim()&&i(e,t)})(t,e)},[function(e){return n.m(".hs-slider-slot",[n.m(".hs-slider-markers",e.state.range.map(a)),n.m(".hs-slider-handle",{style:`left:${100*e.state.value}%`})])}(e)])}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(0),s=r(8),i=r(8);class o extends s.Selector{oninit(e){s.Selector.init(e,i.anyItems)}static viewGroup(e,t){e=`${e} ${t.attrs.css||""}`;const r=t.attrs.style||"";return n.m(e,{style:r},n.m(a.Layout,{columns:[],content:t.state.items.map((e,r)=>s.Selector.renderItem(t,r))}))}view(e){return o.viewGroup(".hs-options-buttons",e)}}t.OptionsButton=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0);t.Collapsible=class{oninit(e){e.state={initial:!0,expanded:!1,toggle:()=>{e.state.expanded=!e.state.expanded,e.state.initial=!1}}}view(e){const t=e.attrs.css,r=e.attrs.components,a=e.attrs.preArrow,s=e.attrs.postArrow;e.state.initial&&void 0!==e.attrs.isExpanded&&(e.state.expanded=e.attrs.isExpanded);const i=e.state.expanded?"hs-collapsible-expanded":"";return n.m(`.hs-collapsible ${t}`,[n.m(".hs-collapsible-title",{onclick:e.state.toggle},[a?n.m(`.hs-collapsible-pre .hs-collapsible-arrow-${e.state.expanded?"down":"right"}`):n.m(""),r[0],s?n.m(`.hs-collapsible-post .hs-collapsible-arrow-${e.state.expanded?"down":"left"}`):n.m("")]),r[1]?n.m(`.hs-collapsible-content ${i}`,r[1].map(e=>n.m("",e))):void 0])}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(13);t.Modal=class{oninit(e){e.state.id=Math.floor(1e3*Math.random()),e.state.showModal=!1}view(e){const t=()=>{e.state.showModal=!1,e.attrs.dismiss&&e.attrs.dismiss()},r={style:`width:${e.attrs.width||"auto"}; height:${e.attrs.height||"auto"};`};return e.attrs.setTrigger?e.attrs.setTrigger(()=>{e.state.showModal=!0,n.m.redraw()}):console.log("required attribute function 'setTrigger' is not defined"),e.state.showModal?n.m(".hs-modal-frame",[n.m(".hs-modal-background",{onclick:t},""),n.m(".hs-modal-foreground",r,e.attrs.content?[e.attrs.content,n.m(a.ToolbarButton,{onclick:t,symbols:a.ToolbarButton.getSymbol("cross")})]:"modal pane")]):n.m("span")}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0);class a{constructor(e,t){this.list=[],"string"==typeof e?n.m.request({method:"GET",url:e}).then(e=>this.captureList(e,t)):this.captureList(e,t)}captureList(e,t){this.list=t?t(e):e}}t.TypeAhead=class{oninit(e){e.state.inputNode="",e.state.hidePopdown=!0,e.state.value="",e.state.typeAheadList=[],e.state.onsubmit=e.attrs.onsubmit,e.state.list=e.attrs.list}view(e){const t=new a(e.state.list),r=t=>(e.state.inputNode.setSelectionRange(0,e.state.inputNode.value.length),e.state.hidePopdown=!0,e.state.onsubmit?e.state.onsubmit(t):console.log("no submit function defined")),s=t=>{t&&(e.state.inputNode.value=t.target.attributes.name.value,r(t.target.attributes.name.value))},i={contenteditable:!0,placeholder:e.attrs.placeholder,autofocus:e.attrs.autofocus||!0,onkeydown:t=>{const n=e.state.inputNode=t.target;if("Enter"===t.code)r(n.value);else if("Backspace"===t.code){const e=n.firstChild.data;e.length>0&&(n.value=e.slice(0))}},oninput:r=>{const n=e.state.inputNode=r.target,a=e.state.value=n.value,s=new RegExp(`${a}`,"gi"),i=new RegExp(`^${a}`,"gi");e.state.typeAheadList=t.list.filter(e=>e.match(s)),n.value=e.state.typeAheadList.filter(e=>e.match(i))[0]||a,e.state.hidePopdown=0===n.value.length;let o=a.length;n.setSelectionRange(o,n.value.length)}};return n.m(".hs-form",[n.m(`input.hs-typeahead-input${e.state.value?".hs-typeahead-value":".hs-typeahead-placeholder"}`,i,n.m.trust(e.state.value?e.state.value:e.attrs.placeholder)),e.state.hidePopdown?void 0:n.m(".hs-typeahead-list",e.state.typeAheadList.map(t=>n.m("",{onclick:s},function(e,t){const r=new RegExp(t,"gi"),a=e.replace(r,e=>`${e}`).split("<").map(t=>t.startsWith("/b>")?n.m("span",{name:e},t.slice(3)):t.startsWith("b>")?n.m("b",{name:e},t.slice(2)):n.m("span",{name:e},t));return n.m("span",a)}(t,e.state.value))))])}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(0),s=r(7),i=r(6),o=r(19);t.LeftNav=class extends a.Layout{getComponents(e){let t=n.m.route.param("lib"),r=n.m.route.param("field");const a=i.DocSets.get(t,0)||{name:"unknown",id:0};return n.m(".hs-left",[n.m(".hs-left-nav",function(e,t){if(0===e.kind){!function(e){const t={};e.modules=[],e.children&&e.children.forEach(r=>{if(!(r.flags&&r.flags.isExternal||l[r.name])){const n=r.innerModule?r.innerModule:r.name;let a=t[n];a||e.modules.push(a=t[n]={name:n,lib:e.lib,fullPath:e.fullPath+"."+n,groups:[]});const s={};a.groups.forEach(e=>s[e.title]=e),r.groups&&r.groups.forEach(e=>{let t=s[e.title];t||(t=s[e.title]={children:[],kind:e.kind,title:e.title},a.groups.push(t)),t.children=t.children.concat(e.children)})}})}(e);const r=e.modules.map(function(e){let r=!1;return t!==""+e.id&&0!==t.indexOf(e.fullPath)||(r=!0),n.m(s.Collapsible,{css:".hs-left-nav-module",preArrow:!0,isExpanded:r,components:[n.m(`${r?".hs-left-nav-selected":""}`,o.libLink("a.hs-left-nav-module-name ",e.lib,e.fullPath,e.name)),e.groups?e.groups.map(r=>(function(e,t,r){let a=[];return e&&e.children&&(a=e.children.map(function(e){return i.DocSets.get(t.lib,e)}).sort(c).map(function(t){const a=r===""+t.id||r===t.fullPath?".hs-left-nav-selected":"",s=t.flags&&t.flags.isExported,i=t.flags&&t.flags.isStatic,l=`a.hs-left-nav-entry ${a} ${s?".hs-left-nav-exported":""}`;return s||"Variables"!==e.title?n.m("",[i?"static":"",o.libLink(l,t.lib,t.fullPath,t.name)]):""}).filter(function(e){return""!==e})).length>0&&a.unshift(n.m(".hs-left-nav-header",e.title)),a.length>1?n.m(".hs-left-nav-entries",a):""})(r,e,t)):void 0]})});return r.unshift(n.m(".hs-left-nav-header","Modules")),[n.m(".hs-left-nav-content",r)]}}(a,r))])}};const l={overview:!0,index:!0};function c(e,t){return e.flags&&t.flags?e.flags.isExported&&t.flags.isExported?e.name>t.name:e.flags.isExported?-1:t.flags.isExported?1:e.name>t.name:e.name>t.name}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0);t.tooltip=function(e,t,r){return n.m(".hs-tooltip[href=#]",[e,n.m(`span.hs-tooltip-${r}`,t)])}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shortCheckSum=function(e){for(var t=305419896,r=e.length,n=0;n=g.importance){const s=a.date(h);let i="string"==typeof t?t:S(t,0);const o=`${s} ${b.prefix} ${m.desc} ${i}`,l=`${n[e]||""} ${s} ${b.prefix} ${m.desc} ${f.clear} ${i}`;if(console.log(p?l:o),t&&t.stack&&console.log(t.stack),c&&r)return yield b.logToFile(a.date(c),o)}})}function S(e,t=1,r=""){return null===t&&(t=999),null===e?"null":void 0===e?"undefined":"function"==typeof e?"function":"string"==typeof e?`'${e}'`:"object"==typeof e?t<0?void 0===e.length?"{...}":"[...]":void 0!==e.length?`[${e.map(e=>void 0===e?"":S(e,t-1,r)).join(", ")}]`:"{\n"+Object.keys(e).map(n=>` ${r}${n}: ${S(e[n],t-1,r+" ")}`).join(",\n")+`\n${r}}`:e.toString()}const P=function(t,r=b.logToFile,n=b.pathExists){return e(t,r,n)};return P.DEBUG=s,P.INFO=i,P.WARN=o,P.ERROR=l,P.level=_,P.debug=function(e,t=!0){return n(this,void 0,void 0,function*(){return yield x(s,e,t)})},P.info=y,P.warn=v,P.error=w,P.format=k,P.prefix=function(e){return e&&(b.prefix=e),b.prefix},P.out=x,P.logFile=function(e){return n(this,void 0,void 0,function*(){return null===e?(c=void 0,yield y("disabling logfile")):void 0===e?a.date(c):e.indexOf("/")>=0?yield b.pathExists(e).then(t=>n(this,void 0,void 0,function*(){return t?(c=e,yield y("now logging to file "+a.date(e))):(c=void 0,yield v(`path '${e}' doesn't exists; logfile disabled`))})).catch(()=>n(this,void 0,void 0,function*(){return c=void 0,yield w(`checking path ${e}; logfile disabled`)})):(""===e&&(e="log-%YYYY-%MM-%DD.txt"),yield y((c=e)?`now logging to file ${a.date(c)}`:"logfile disbaled"))})},P.config=function(e){void 0!==e.colors&&(p=e.colors),void 0!==e.format&&k(e.format),void 0!==e.level&&_(e.level)},P.inspect=S,P}("",(e,t)=>Promise.resolve(void 0),e=>Promise.resolve(!(e.indexOf("/")>=0)))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(0),s=r(6),i=r(49),o=r(19);function l(e,t,r,a){const i=e=>s.DocSets.get(t,e),l={"External modules":".hs-item-external-module",Constructors:".hs-item-constructor",Classes:".hs-item-class",Interfaces:".hs-item-interface",Functions:".hs-item-function",Methods:".hs-item-method",Variables:".hs-item-variable","Object literals":".hs-item-object-literal",Properties:".hs-item-property","Type aliases":".hs-item-alias",Accessors:".hs-item-accessors"}[e.title]||".hs-item-unknown-member",c=e=>e.isPublic||e.isExported&&!e.isPrivate,d=e.children.map(i).filter(e=>!e.inheritedFrom).filter(e=>r?e.flags.isStatic:!e.flags.isStatic).filter(e=>a?c(e.flags):!c(e.flags)).map(t=>n.m(l,{id:o.makeID(e.title,t)},u(t))),m=e.children.map(i).filter(e=>e.inheritedFrom).filter(e=>r?e.flags.isStatic:!e.flags.isStatic).filter(e=>a?e.flags.isPublic:!e.flags.isPublic).map(t=>n.m(`.hs-item-inherited ${l}`,{id:o.makeID(e.title,t)},u(t))),h=a?"Public":"Protected or Private",p=r?"Static":"";return m.length>0&&m.unshift(n.m(".hs-item-inherited .hs-item-member-title",n.m("span",`${h} ${p} Inherited ${e.title}`))),d.length>0&&d.unshift(n.m(".hs-item-member-title",{id:e.title.toLowerCase()},n.m("span",`${h} ${p} ${e.title}`))),n.m(`.hs-item-member ${r?".hs-item-static":""} ${a?".hs-item-public":""}`,d.concat(m))}function c(e,t){try{return n.m(".hs-item-desc",[o.flags(e),o.kindString(e),o.itemName(e,e),o.signature(t,e),o.type(t,e.lib),o.extensionOf(e),o.inheritedFrom(e),o.sourceLink(e)])}catch(t){console.log(t),console.log(e)}}function u(e,t=e){return e.signatures?e.signatures.map(t=>n.m(".hs-item-child-signature",[c(e,t),i.comment(t,!0)])):[c(e,t),i.comment(t,!0)]}t.MainDetail=class extends a.Layout{getComponents(e){const t=n.m.route.param("lib"),r=n.m.route.param("field");e.attrs.route=void 0;let a=function(e,t){if(("0"===t||""===t)&&(t=s.DocSets.get(e,`${e}.overview`)))return function(e){const t=e.signatures?e.signatures[0]:e;return n.m(".hs-item-doc",[i.commentLong(t)])}(t)}(t,r)||function(e){const t=e.signatures?e.signatures[0]:e;return n.m(".hs-item-doc",[function(e,t){return n.m(".hs-item-title",{id:o.makeID("title",e)},c(e,t))}(e,t),i.commentLong(t),function e(t,r){return t.groups?n.m(".hs-item-members",[...t.groups.map(e=>l(e,t.lib,!0,!0)),...t.groups.map(e=>l(e,t.lib,!0,!1)),...t.groups.map(e=>l(e,t.lib,!1,!0)),...t.groups.map(e=>l(e,t.lib,!1,!1))]):t.parameters?n.m(".hs-item-members",function(e,t){let r=e.map(e=>n.m(".hs-item-parameter",{id:o.makeID("parameter",e)},u(e)));return r.unshift(n.m(".hs-item-member-title",{id:"parameters"},n.m("span","Parameters"))),n.m(".hs-item-member",r)}(t.parameters,t.lib)):t.type&&t.type.declaration?(t.type.declaration.lib=t.lib,e(t.type.declaration,r)):n.m(".hs-item-members")}(t,t)])}(s.DocSets.get(t,r)||"");return n.m(".hs-main-detail",[a])}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(50),s=r(52);function i(e,t){let r=e.shortText||"";return e.text&&(r+="\n"+(e.text||"")),e.tags&&e.tags.map(e=>{"description"===e.tag&&(r=e.text)}),r=r.replace(//gi,t?"":s.example),n.m(".hs-item-comment-desc",function(e,t){let s=r;return s=s.replace(/([\S\s]*?)<\/code>/gi,function(e){let t=0;return"
"+e.substring(6,e.length-7).trim().replace(/(<)/g,"<").replace(/(>)/g,">").split("\n").map(e=>{let r=t,n=e.trim();return t+=Math.max(-1,Math.min(1,n.split("{").length-n.split("}").length)),t+=Math.max(-1,Math.min(1,n.split("[").length-n.split("]").length)),''.repeat(t
"}),n.m.trust(a.markDown(s,t,n.m.route.get()))}(0,t))}function o(e,t){let r=e.returns;return n.m(".hs-item-comment-return",r?[n.m("span.hs-item-comment-tag","returns:"),n.m("span.hs-item-comment-text",r)]:"")}function l(e){return n.m("",Object.keys(e).map(t=>{switch(t){case"tags":case"shortText":case"text":case"description":case"returns":return"";default:return n.m(".hs-item-comment-special",[n.m("span.hs-item-comment-tag",t),n.m("span.hs-item-comment-text",e[t])])}}))}t.commentLong=function(e){let t=[];return e.comment&&(t.push(i(e.comment,!1)),t.push(o(e.comment)),t.push(l(e.comment))),n.m(".hs-item-comment",t)},t.comment=function(e,t=!1){let r=[];return e.comment&&(r.push(i(e.comment,t)),t||(r.push((s=e.comment,n.m("",s.tags?s.tags.map(e=>{switch(e.tag){case"description":return"";default:return n.m(".hs-item-comment-special",[n.m("span.hs-item-comment-tag",e.tag),n.m("span.hs-item-comment-text",e.text)])}}):[]))),e.parameters&&(r=r.concat((a=e.parameters,n.m(".hs-item-comment-params",a.map(e=>n.m(".hs-item-comment-param",[n.m("span.hs-item-comment-tag",e.name+":"),n.m("span.hs-item-comment-text",e.comment?(void 0!==e.defaultValue?`[default: ${e.defaultValue}] `:"")+e.comment.text:"")]))))))),r.push(o(e.comment)),r.push(l(e.comment))),n.m(".hs-item-comment",r);var a,s}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(51),a=r(0);t.markDown=function(e,t=!1,r=a.m.route.get()){const s=new n.Converter({tables:!0,ghCompatibleHeaderId:!0,smartIndentationFix:!0,takslists:!0,strikethrough:!0});let i=e?s.makeHtml(e):"";if(t){const e=i.indexOf("

");e>0&&(i=i.substring(0,e))}return function(e,t){let[r]=function(e){let r,n;return t.replace(/\/([^\/.]*)\/([^\/\s]*$)/gi,(e,...t)=>(r=t[0],n=t[1],"")),[r,n]}();return e.replace(/\s{@link ([\S]*)\s*([^}]+)}/gi,(e,...t)=>{const n=t[0],a=t[1];let[s,i]=function(e){let t,n,a;return e.indexOf(":")>0?[t,n]=e.split(":"):(t=r,n=e),n.indexOf("#")>0&&([n,a]=n.split("#")),[t,n,a]}(n);return""===i||"0"===i||"overview"===i?` ${a}`:` ${a}`})}(i,r)}},function(e,t,r){var n;/*! showdown v 1.9.0 - 10-11-2018 */ /*! showdown v 1.9.0 - 10-11-2018 */ -(function(){function a(e){"use strict";var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex:
foo
",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including ``, `` and `` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n].defaultValue);return r}var s={},i={},o={},l=a(!0),c="vanilla",u={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:a(!0),allOn:function(){"use strict";var e=a(!0),t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=!0);return t}()};function d(e,t){"use strict";var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};s.helper.isArray(e)||(e=[e]);for(var a=0;a").replace(/&/g,"&")};var h=function(e,t,r,n){"use strict";var a,s,i,o,l,c=n||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),m=new RegExp(t,c.replace(/g/g,"")),h=[];do{for(a=0;i=d.exec(e);)if(m.test(i[0]))a++||(o=(s=d.lastIndex)-i[0].length);else if(a&&!--a){l=i.index+i[0].length;var p={left:{start:o,end:s},match:{start:s,end:i.index},right:{start:i.index,end:l},wholeMatch:{start:o,end:l}};if(h.push(p),!u)return h}}while(a&&(d.lastIndex=s));return h};s.helper.matchRecursiveRegExp=function(e,t,r,n){"use strict";for(var a=h(e,t,r,n),s=[],i=0;i0){var u=[];0!==o[0].wholeMatch.start&&u.push(e.slice(0,o[0].wholeMatch.start));for(var d=0;d=0?n+(r||0):n},s.helper.splitAtIndex=function(e,t){"use strict";if(!s.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},s.helper.encodeEmailAddress=function(e){"use strict";var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},s.helper.padEnd=function(e,t,r){"use strict";return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){"use strict";alert(e)},log:function(e){"use strict";alert(e)},error:function(e){"use strict";throw e}}),s.helper.regexes={asteriskDashAndColon:/([*_:~])/g},s.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:':octocat:',showdown:"S"},s.Converter=function(e){"use strict";var t={},r=[],n=[],a={},i=c,m={parsed:{},raw:"",format:""};function h(e,t){if(t=t||null,s.helper.isString(e)){if(t=e=s.helper.stdExtName(e),s.extensions[e])return console.warn("DEPRECATION WARNING: "+e+" is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!"),void function(e,t){"function"==typeof e&&(e=e(new s.Converter)),s.helper.isArray(e)||(e=[e]);var a=d(e,t);if(!a.valid)throw Error(a.error);for(var i=0;i[ \t]+¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var n={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],n=0;n'}else r.push(t[n].innerHTML),t[n].innerHTML="",t[n].setAttribute("prenum",n.toString());return r}(r)};!function e(t){for(var r=0;r? ?(['"].*['"])?\)$/m)>-1)i="";else if(!i){if(a||(a=n.toLowerCase().replace(/ ?\n/g," ")),i="#"+a,s.helper.isUndefined(r.gUrls[a]))return e;i=r.gUrls[a],s.helper.isUndefined(r.gTitles[a])||(c=r.gTitles[a])}var u='"+n+""};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,n)).replace(/\[([^\[\]]+)]()()()()()/g,n),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,n,a,i){if("\\"===n)return r+a;if(!s.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var o=t.ghMentionsLink.replace(/\{u}/g,i),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'"+a+""})),r.converter._dispatch("anchors.after",e,t,r)});var p=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,g=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,b=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-\/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,_=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,y=function(e){"use strict";return function(t,r,n,a,i,o,l){var c=n=n.replace(s.helper.regexes.asteriskDashAndColon,s.helper.escapeCharactersCallback),u="",d="",m=r||"",h=l||"";return/^www\./i.test(n)&&(n=n.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&o&&(u=o),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),m+'"+c+""+u+h}},v=function(e,t){"use strict";return function(r,n,a){var i="mailto:";return n=n||"",a=s.subParser("unescapeSpecialChars")(a,e,t),e.encodeEmails?(i=s.helper.encodeEmailAddress(i+a),a=s.helper.encodeEmailAddress(a)):i+=a,n+''+a+""}};s.subParser("autoLinks",function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(g,y(t))).replace(_,v(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),s.subParser("simplifiedAutoLinks",function(e,t,r){"use strict";return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,y(t)):e.replace(p,y(t))).replace(b,v(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),s.subParser("blockGamut",function(e,t,r){"use strict";return e=r.converter._dispatch("blockGamut.before",e,t,r),e=s.subParser("blockQuotes")(e,t,r),e=s.subParser("headers")(e,t,r),e=s.subParser("horizontalRule")(e,t,r),e=s.subParser("lists")(e,t,r),e=s.subParser("codeBlocks")(e,t,r),e=s.subParser("tables")(e,t,r),e=s.subParser("hashHTMLBlocks")(e,t,r),e=s.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),s.subParser("blockQuotes",function(e,t,r){"use strict";e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var n=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(n=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(n,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=s.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=s.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*
[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^  /gm,"¨0")).replace(/¨0/g,"")}),s.subParser("hashBlock")("
\n"+e+"\n
",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),s.subParser("codeBlocks",function(e,t,r){"use strict";return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,n,a){var i=n,o=a,l="\n";return i=s.subParser("outdent")(i,t,r),i=s.subParser("encodeCode")(i,t,r),i=(i=(i=s.subParser("detab")(i,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),i="
"+i+l+"
",s.subParser("hashBlock")(i,t,r)+o})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),s.subParser("codeSpans",function(e,t,r){"use strict";return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,n,a,i){var o=i;return o=(o=o.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),o=n+""+(o=s.subParser("encodeCode")(o,t,r))+"",s.subParser("hashHTMLSpans")(o,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),s.subParser("completeHTMLDocument",function(e,t,r){"use strict";if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var n="html",a="\n",s="",i='\n',o="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(a="\n","html"!==(n=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==n||(i='')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":s=""+r.metadata.parsed.title+"\n";break;case"charset":i="html"===n||"html5"===n?'\n':'\n';break;case"language":case"lang":o=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=a+"\n\n"+s+i+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),s.subParser("detab",function(e,t,r){"use strict";return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,n=4-r.length%4,a=0;a/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),s.subParser("encodeBackslashEscapes",function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,s.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,s.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),s.subParser("encodeCode",function(e,t,r){"use strict";return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,s.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),s.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,s.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,s.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),s.subParser("githubCodeBlocks",function(e,t,r){"use strict";return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,n,a,i){var o=t.omitExtraWLInCodeBlocks?"":"\n";return i=s.subParser("encodeCode")(i,t,r),i="
"+(i=(i=(i=s.subParser("detab")(i,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""))+o+"
",i=s.subParser("hashBlock")(i,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:i})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),s.subParser("hashBlock",function(e,t,r){"use strict";return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),s.subParser("hashCodeTags",function(e,t,r){"use strict";return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=s.helper.replaceRecursiveRegExp(e,function(e,n,a,i){var o=a+s.subParser("encodeCode")(n,t,r)+i;return"¨C"+(r.gHtmlSpans.push(o)-1)+"C"},"]*>","
","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),s.subParser("hashElement",function(e,t,r){"use strict";return function(e,t){var n=t;return n=(n=(n=n.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(n)-1)+"K\n\n"}}),s.subParser("hashHTMLBlocks",function(e,t,r){"use strict";e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var n=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],a=function(e,t,n,a){var s=e;return-1!==n.search(/\bmarkdown\b/)&&(s=n+r.converter.makeHtml(t)+a),"\n\n¨K"+(r.gHtmlBlocks.push(s)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var i=0;i]*>)","im"),c="<"+n[i]+"\\b[^>]*>",u="";-1!==(o=s.helper.regexIndexOf(e,l));){var d=s.helper.splitAtIndex(e,o),m=s.helper.replaceRecursiveRegExp(d[1],a,c,u,"im");if(m===d[1])break;e=d[0].concat(m)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,s.subParser("hashElement")(e,t,r)),e=(e=s.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,s.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),s.subParser("hashHTMLSpans",function(e,t,r){"use strict";function n(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return n(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return n(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return n(e)})).replace(/<[^>]+?>/gi,function(e){return n(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),s.subParser("unhashHTMLSpans",function(e,t,r){"use strict";e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var n=0;n]*>\\s*]*>","^ {0,3}\\s*
","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),s.subParser("headers",function(e,t,r){"use strict";e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),a=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,i=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(a,function(e,a){var i=s.subParser("spanGamut")(a,t,r),o=t.noHeaderId?"":' id="'+l(a)+'"',c=""+i+"";return s.subParser("hashBlock")(c,t,r)})).replace(i,function(e,a){var i=s.subParser("spanGamut")(a,t,r),o=t.noHeaderId?"":' id="'+l(a)+'"',c=n+1,u=""+i+"";return s.subParser("hashBlock")(u,t,r)});var o=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;function l(e){var n,a;if(t.customizedHeaderId){var i=e.match(/\{([^{]+?)}\s*$/);i&&i[1]&&(e=i[1])}return n=e,a=s.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(n=a+n),n=t.ghCompatibleHeaderId?n.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?n.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():n.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(n=a+n),r.hashLinkCounts[n]?n=n+"-"+r.hashLinkCounts[n]++:r.hashLinkCounts[n]=1,n}return e=e.replace(o,function(e,a,i){var o=i;t.customizedHeaderId&&(o=i.replace(/\s?\{([^{]+?)}\s*$/,""));var c=s.subParser("spanGamut")(o,t,r),u=t.noHeaderId?"":' id="'+l(i)+'"',d=n-1+a.length,m=""+c+"";return s.subParser("hashBlock")(m,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),s.subParser("horizontalRule",function(e,t,r){"use strict";e=r.converter._dispatch("horizontalRule.before",e,t,r);var n=s.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,n)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,n)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,n),r.converter._dispatch("horizontalRule.after",e,t,r)}),s.subParser("images",function(e,t,r){"use strict";function n(e,t,n,a,i,o,l,c){var u=r.gUrls,d=r.gTitles,m=r.gDimensions;if(n=n.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)a="";else if(""===a||null===a){if(""!==n&&null!==n||(n=t.toLowerCase().replace(/ ?\n/g," ")),a="#"+n,s.helper.isUndefined(u[n]))return e;a=u[n],s.helper.isUndefined(d[n])||(c=d[n]),s.helper.isUndefined(m[n])||(i=m[n].width,o=m[n].height)}t=t.replace(/"/g,""").replace(s.helper.regexes.asteriskDashAndColon,s.helper.escapeCharactersCallback);var h=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,n)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,a,s,i,o,l){return n(e,t,r,a=a.replace(/\s/g,""),s,i,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,n)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,n)).replace(/!\[([^\[\]]+)]()()()()()/g,n),r.converter._dispatch("images.after",e,t,r)}),s.subParser("italicsAndBold",function(e,t,r){"use strict";function n(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return n(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return n(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return n(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?n(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?n(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?n(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return n(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return n(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return n(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?n(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?n(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?n(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),s.subParser("lists",function(e,t,r){"use strict";function n(e,n){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var a=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,i=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(a=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(a,function(e,n,a,o,l,c,u){u=u&&""!==u.trim();var d=s.subParser("outdent")(l,t,r),m="";return c&&t.tasklists&&(m=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),n||d.search(/\n{2,}/)>-1?(d=s.subParser("githubCodeBlocks")(d,t,r),d=s.subParser("blockGamut")(d,t,r)):(d=(d=s.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=s.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=i?s.subParser("paragraphs")(d,t,r):s.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,n&&(e=e.replace(/\s+$/,"")),e}function a(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function i(e,r,s){var i=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,o=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?i:o,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),m=a(e,r);-1!==d?(c+="\n\n<"+r+m+">\n"+n(u.slice(0,d),!!s)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?i:o,t(u.slice(d))):c+="\n\n<"+r+m+">\n"+n(u,!!s)+"\n"}(e);else{var u=a(e,r);c="\n\n<"+r+u+">\n"+n(e,!!s)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return i(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,n){return i(r,n.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),s.subParser("metadata",function(e,t,r){"use strict";if(!t.metadata)return e;function n(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,n){return r.metadata.parsed[t]=n,""})}return e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return n(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,a){return t&&(r.metadata.format=t),n(a),"¨M"})).replace(/¨M/g,""),r.converter._dispatch("metadata.after",e,t,r)}),s.subParser("outdent",function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),s.subParser("paragraphs",function(e,t,r){"use strict";for(var n=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),a=[],i=n.length,o=0;o=0?a.push(l):l.search(/\S/)>=0&&(l=(l=s.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",a.push(l))}for(i=a.length,o=0;o]*>\s*]*>/.test(u)&&(d=!0)}a[o]=u}return e=(e=(e=a.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),s.subParser("runExtension",function(e,t,r,n){"use strict";if(e.filter)t=e.filter(t,n.converter,r);else if(e.regex){var a=e.regex;a instanceof RegExp||(a=new RegExp(a,"g")),t=t.replace(a,e.replace)}return t}),s.subParser("spanGamut",function(e,t,r){"use strict";return e=r.converter._dispatch("spanGamut.before",e,t,r),e=s.subParser("codeSpans")(e,t,r),e=s.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=s.subParser("encodeBackslashEscapes")(e,t,r),e=s.subParser("images")(e,t,r),e=s.subParser("anchors")(e,t,r),e=s.subParser("autoLinks")(e,t,r),e=s.subParser("simplifiedAutoLinks")(e,t,r),e=s.subParser("emoji")(e,t,r),e=s.subParser("underline")(e,t,r),e=s.subParser("italicsAndBold")(e,t,r),e=s.subParser("strikethrough")(e,t,r),e=s.subParser("ellipsis")(e,t,r),e=s.subParser("hashHTMLSpans")(e,t,r),e=s.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),s.subParser("strikethrough",function(e,t,r){"use strict";return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,n){return function(e){return t.simplifiedAutoLink&&(e=s.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(n)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),s.subParser("stripLinkDefinitions",function(e,t,r){"use strict";var n=function(e,n,a,i,o,l,c){return n=n.toLowerCase(),a.match(/^data:.+?\/.+?;base64,/)?r.gUrls[n]=a.replace(/\s/g,""):r.gUrls[n]=s.subParser("encodeAmpsAndAngles")(a,t,r),l?l+c:(c&&(r.gTitles[n]=c.replace(/"|'/g,""")),t.parseImgDimensions&&i&&o&&(r.gDimensions[n]={width:i,height:o}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,n)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,n)).replace(/¨0/,"")}),s.subParser("tables",function(e,t,r){"use strict";if(!t.tables)return e;function n(e,n){return""+s.subParser("spanGamut")(e,t,r)+"\n"}function a(e){var a,i=e.split("\n");for(a=0;a"+(l=s.subParser("spanGamut")(l,t,r))+"\n"));for(a=0;a\n\n\n",a=0;a\n";for(var s=0;s\n"}return r+"\n\n"}(p,g)}return e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,s.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,a)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,a),r.converter._dispatch("tables.after",e,t,r)}),s.subParser("underline",function(e,t,r){"use strict";return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,s.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),s.subParser("unescapeSpecialChars",function(e,t,r){"use strict";return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),s.subParser("makeMarkdown.blockquote",function(e,t){"use strict";var r="";if(e.hasChildNodes())for(var n=e.childNodes,a=n.length,i=0;i "+(r=r.trim()).split("\n").join("\n> ")}),s.subParser("makeMarkdown.codeBlock",function(e,t){"use strict";var r=e.getAttribute("language"),n=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[n]+"\n```"}),s.subParser("makeMarkdown.codeSpan",function(e){"use strict";return"`"+e.innerHTML+"`"}),s.subParser("makeMarkdown.emphasis",function(e,t){"use strict";var r="";if(e.hasChildNodes()){r+="*";for(var n=e.childNodes,a=n.length,i=0;i",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),s.subParser("makeMarkdown.links",function(e,t){"use strict";var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var n=e.childNodes,a=n.length;r="[";for(var i=0;i",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),s.subParser("makeMarkdown.list",function(e,t,r){"use strict";var n="";if(!e.hasChildNodes())return"";for(var a=e.childNodes,i=a.length,o=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),s.subParser("makeMarkdown.strikethrough",function(e,t){"use strict";var r="";if(e.hasChildNodes()){r+="~~";for(var n=e.childNodes,a=n.length,i=0;itr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=f)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),void 0===(n=function(){"use strict";return s}.call(t,r,t,e))||(e.exports=n)}).call(this)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(0),a=r(7),s=r(7),i=r(0),o=r(0),l=r(2),c=r(2),u=r(2),d={m:Promise.resolve(n.m),hsutil:Promise.resolve(u),hslayout:Promise.resolve(i),hswidget:Promise.resolve(s),hsdatab:Promise.resolve().then(()=>r(15)),hsgraph:Promise.resolve().then(()=>r(54))},m={};function h(){return"hs"+Math.floor(1e6*Math.random())}function p(e){return Promise.resolve(e).then(f).then(c.delay(1))}function f(e){let t=e.activeSrcPage||"js";const r=document.getElementById(e.exampleID);return e.desc.clicked=r=>{t=e.activeSrcPage=r},n.m.mount(r,{view:()=>n.m(o.Layout,{columns:["50%"],content:[n.m(o.Layout,{content:n.m(".hs-layout .hs-execution",{id:e.menuID},"placeholder")}),n.m(o.Layout,{rows:["30px","fill"],css:".hs-source",content:[n.m(a.Menu,{desc:e.desc,size:["50px"]}),n.m(o.Layout,{content:n.m(".hs-layout .hs-source-main",n.m.trust(`
${e.pages[t]}
`))})]})]})}),e}function g(e){const t=document.getElementById(e.menuID);if(t)try{e.executeScript(t)}catch(t){console.log("error executing script: "+t),console.log(e.executeSource),console.log(t.stack)}else console.log(`root not found for menuID ${e.menuID}`);return n.m.redraw(),e}function b(e){console.log("rejection executing script:"),console.log(e)}t.example=function(e){const t=l.shortCheckSum(e);let r=m[t];r||((r=m[t]=function(e){return{exampleID:h(),menuID:h(),desc:{items:[],selectedItem:"js",clicked:()=>p(e).then(g).catch(b),size:["50px"]},pages:{},activeSrcPage:void 0}}(r)).executeSource=e,function(e,t){const r=Object.keys(d);Promise.all(r.map(e=>d[e])).then(n=>{try{const a=new Function("root",...r,function(e,t){let r=t.match(/)/i);if(r&&r[1]){const t=r[1].split("=");e.attrs={[t[0]]:t[1]}}return t.replace(/([\S\s]*?)<\/file>/gi,function(t){const r=[...arguments],n=r[2].trim();return e.desc.items.push(r[1]),e.pages[r[1]]=n,""}),e.pages.js}(e,t));return e.executeScript=e=>a(e,...n),!0}catch(e){return console.log("creating script:"+e),!1}})}(r,e)),document.getElementById(r.menuID)||p(r).then(c.delay(1)).then(g).catch(b);const n=(r.attrs?r.attrs.height:void 0)||"300px";return``}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(21);function a(e,t,r,n){const a=n(e),s="function"==typeof t,i="object"==typeof t&&void 0!==t.length;return isNaN(a)?(console.log(`column name '${e}' cannot be resolved in terminal condition ${e}=${t}`),console.log(r),!1):s?t(r[a],r):i?0===t.length||t.some(e=>r[a]===e):r[a]===t}t.filter=function(e,t){const r=t=>e.colNumber(t);try{return new n.Data({name:e.getName(),colNames:e.colNames(),rows:e.getData().filter((e,n)=>(function e(t,r,n,s,i){let o=!1,l=!0;if(void 0===t)return!0;if("number"==typeof t)return t===n;if("object"!=typeof t)return console.error(`unrecognized condition: ${JSON.stringify(t)}`),!1;{const c=t;if(void 0!==c.length)return void 0===i&&(i=!1),0!==c.length&&(i?c.every(t=>e(t,r,n,s,i)):c.some(t=>e(t,r,n,s,i)));void 0===i&&(i=!0);for(const c in t){let u=i;const d=t;switch(c){case"or":u=e(d.or,r,n,s,!1);break;case"and":u=e(d.and,r,n,s,!0);break;case"not":u=!e(d.not,r,n,s);break;default:u=a(c,t[c],r,s)}if(u){if(o=!0,!i)break}else if(l=!1,i)break}}return i?l:o})(t,e,n,r))})}catch(e){console.log(e),console.log(e.stack)}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(55);t.Graph=n.Graph;var a=r(16);t.Series=a.Series;var s=r(9);t.Axes=s.Axes;var i=r(22);t.Scale=i.Scale;var o=r(23);t.Grid=o.Grid;var l=r(24);t.Legend=l.Legend},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(15),a=r(9),s=r(22),i=r(56),o=r(16),l=r(61),c=r(23),u=r(24),d=r(3),m=r(2),h=1e3;let p=700;class f extends d.SVGElem{constructor(){super(...arguments),this.marginOffset={left:0,right:0,top:0,bottom:0}}static makeConfig(e){const t={};if(f.defaultConfig(t),i.Canvas.defaultConfig(t),a.Axes.defaultConfig(t),o.Series.defaultConfig(t),c.Grid.defaultConfig(t),l.Chart.defaultConfig(t),u.Legend.defaultConfig(t),e)try{e(t)}catch(e){console.log("error in usercfg"),console.log(e),console.log(e.stack)}return t}static defaultConfig(e){e.graph={margin:{top:10,left:10,bottom:10,right:10},timeCond:{}}}static adjustConfig(e){i.Canvas.adjustConfig(e),a.Axes.adjustConfig(e),o.Series.adjustConfig(e),c.Grid.adjustConfig(e),l.Chart.adjustConfig(e),u.Legend.adjustConfig(e)}createPlotArea(e){return{tl:{x:e.left+this.marginOffset.left,y:e.top+this.marginOffset.top},br:{x:h-e.right-this.marginOffset.right,y:p-e.bottom-this.marginOffset.bottom}}}createData(e){e.series.data||console.log("cfg.series.data not set"),e.series.data.length>0||console.log("cfg.series.data not initialised with array of DataSets");const t=e.graph.timeCond;return e.series.data.map(e=>(e instanceof n.Data?e:new n.Data(e)).filter(t))}createScales(e){return this.scales||(this.scales={primary:{x:new s.Scale(e.primary.x.scale),y:new s.Scale(e.primary.y.scale)},secondary:{x:new s.Scale(e.secondary.x.scale),y:new s.Scale(e.secondary.y.scale)}}),this.scales}setScaleRange(e,t){t.primary.x.range([e.tl.x,e.br.x]),t.primary.y.range([e.br.y,e.tl.y]),t.secondary.x.range([e.tl.x,e.br.x]),t.secondary.y.range([e.br.y,e.tl.y])}setScaleDomains(e,t,r){const n=[[1e20,-1e20],[1e20,-1e20]];e.series.map(function(e){let s;e.x?(r[e.dataIndex].findDomain(e.x,n[0]),s=r[e.dataIndex].colType(e.x)):(n[0][0]=0,n[0][1]=r[e.dataIndex].export().rows.length-1),e.y&&r[e.dataIndex].findDomain(e.y,n[1]),e.yBase&&r[e.dataIndex].findDomain(e.yBase,n[1]),s&&t.primary.x.scaleType()===a.Axes.type.auto&&t.primary.x.scaleType(s)}),t.primary.x.setAutoDomain(n[0]),t.primary.y.setAutoDomain(n[1])}adjustHeight(e){if(e.dom&&e.dom.parentElement){const t=e.dom.parentElement,r=h*t.clientHeight/t.clientWidth;isNaN(r)||r===p||(p=r)}}adjustMargins(e){const t=e.graph.margin,r={t:-1e6,l:-1e6,b:-1e6,r:-1e6};function n(e){const n=document.getElementsByClassName(e),a=Array.prototype.map.call(n,e=>e.getBBox());a&&a[0]&&(r.t=Math.max(r.t,t.top-a[0].y),r.l=Math.max(r.l,t.left-a[0].x),r.b=Math.max(r.b,a[0].y+a[0].height+t.bottom-p),r.r=Math.max(r.r,a[0].x+a[0].width+t.right-h))}n("hs-graph-axis"),n("hs-graph-chart"),this.marginOffset.top=r.t,this.marginOffset.left=r.l,this.marginOffset.bottom=r.b,this.marginOffset.right=r.r}onupdate(e){this.adjustHeight(e)}oncreate(e){window.addEventListener("resize",function(){t.m.redraw()}),this.adjustHeight(e),Promise.resolve(e.attrs.cfg).then(m.delay(10)).then(this.adjustMargins.bind(this)).then(t.m.redraw)}view(e){const r=e.attrs.cfgFn,n=f.makeConfig(r),s=this.createData(n),m=this.createPlotArea(n.graph.margin),g=this.createScales(n.axes);return this.setScaleRange(m,g),this.setScaleDomains(n.series,g,s),f.adjustConfig(n),e.attrs.cfg=n,t.m("svg",{class:"hs-graph",width:"100%",height:"100%",viewBox:`0 0 ${d.round(h)} ${d.round(p)}`},[t.m(i.Canvas,{cfg:n.canvas}),t.m(l.Chart,{cfg:n.chart,plotArea:m}),t.m(c.Grid,{cfg:n.grid,scales:g}),t.m(o.Series,{cfg:n.series,scales:g,data:s}),t.m(a.Axes,{cfg:n.axes,scales:g}),t.m(u.Legend,{cfg:n.legend})])}}t.Graph=f},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(3);t.Canvas=class extends n.SVGElem{static defaultConfig(e){e.canvas={range:{w:100,wunit:"%",h:100,hunit:"%"}}}static adjustConfig(e){}view(e){const r=e.attrs.cfg;return t.m("svg",{class:"hs-graph-canvas",width:"100%",height:"100%"},[this.rect({x:0,y:0},{w:r.range.w,h:r.range.h,wunit:r.range.wunit,hunit:r.range.hunit},"")])}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(10);t.PlotLine=class extends n.Plot{plot(e,r,n,a,s){const i=e.colNumber(r.x),o=e.colNumber(r.y);return void 0===i?t.m(".error",""):void 0===o?t.m(".error",""):[this.drawLine(s,e.getData(),i,o,n,r.style,r.y),this.drawMarker(s,e.getData(),i,o,n,r.style,r.y)]}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(10);t.PlotMarkers=class extends n.Plot{plot(e,r,n,a,s){const i=e.colNumber(r.x),o=e.colNumber(r.y),l=r.l?e.colNumber(r.l):void 0;return void 0===i?t.m(".error",""):void 0===o?t.m(".error",""):[this.drawMarker(s,e.getData(),i,o,n,r.style,r.y),void 0===l?void 0:this.drawLabel(s,e.getData(),i,o,l,n,r)]}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(10);t.PlotBar=class extends n.Plot{drawBar(e,r,n,a,s,i,o,l){const c=`fill: ${o.bar.color};`,u=void 0===n,d=i.x.domain(),m=l*o.bar.offset*(d[1]-d[0])/(100*r.getData().length),h=o.bar.width*(d[1]-d[0])/(100*r.getData().length);return t.m("svg",{class:"hs-graph-series-bars"},r.getData().map((e,t)=>{const r=i.x.convert((u?t:e[n])+m-h/2),o=i.x.convert((u?t:e[n])+m+h/2),l=i.y.convert(void 0===s?0:e[s]),d=i.y.convert(e[a]);return this.rect({x:r,y:l},{h:d-l,w:o-r},c)}))}setDefaults(e,t,r){super.setDefaults(e,t,r);let n=r.y.domain();n[0]>0&&(n[0]=0,r.y.domain(n)),void 0===t.x&&r.x.domain([-.5,e.getData().length-.5])}plot(e,r,n,a,s){const i=e.colNumber(r.x),o=e.colNumber(r.y),l=r.yBase?e.colNumber(r.yBase):void 0;return void 0===o?t.m(".error",""):[this.drawBar(s,e,i,o,l,n,r.style,a)]}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(10);t.PlotArea=class extends n.Plot{plot(e,r,n,a,s){const i=e.colNumber(r.x),o=e.colNumber(r.y),l=e.colNumber(r.yBase),c=e.colNumber("$sum"),u=e=>void 0===c?[e[i],e[o]+e[l],e[l]]:[e[i],(e[o]+e[l])/e[c],e[l]/e[c]];if(void 0===o)return t.m(".error","");if(r.map){const t=e.getData().map(u);return[this.drawArea(s,t,0,1,2,n,r.style,r.y)]}{const t=e.getData();return[this.drawArea(s,t,i,o,l,n,r.style,r.y)]}}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.m=r(1);const n=r(3);class a extends n.SVGElem{static defaultConfig(e){return e.chart={visible:!0,title:{visible:!0,text:"",hOffset:0,vOffset:-1.5,xpos:"middle",ypos:"top"}},e}static adjustConfig(e){}onupdate(e){this.updateTitleSize(e)}updateTitleSize(e){if(e.dom){const t=e.dom.lastChild;t&&t.clientWidth>0&&a.clientWidth!==t.clientWidth&&(a.clientWidth=t.clientWidth,a.clientHeight=t.clientHeight)}}drawBackground(e){const t=e.tl,r=e.br;return this.rect({x:t.x,y:t.y},{w:r.x-t.x,h:r.y-t.y},"")}drawTitle(e,t){const r=e.tl,n=e.br;switch(t.title.cssClass="hs-graph-chart-title",t.title.xpos){case"start":t.title.x=r.x+"";break;case"middle":t.title.x=(r.x+n.x)/2+"";break;case"end":t.title.x=n.x+""}switch(t.title.ypos){case"top":t.title.y=r.y+"";break;case"center":t.title.y=(r.y+n.y)/2+"";break;case"bottom":t.title.y=n.y+""}return t.title.visible?this.text(t.title,t.title.text):void 0}view(e){const r=e.attrs.cfg,n=e.attrs.plotArea;return t.m("svg",{class:"hs-graph-chart"},[this.drawBackground(n),this.drawTitle(n,r)])}}t.Chart=a}]); \ No newline at end of file +!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=25)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n(27),n(28);var r=n(29);e.Layout=r.Layout;var i=n(5);e.FILL=i.FILL,e.px=i.px,e.pc=i.pc,e.LayoutToken=i.LayoutToken;var a=n(4);e.Layouter=a.Layouter;var o=n(33);e.Config=o.Config;var u=n(11);e.m=u.m},function(t,e,n){(function(e,n){!function(){"use strict";function r(t,e,n,r,i,a){return{tag:t,key:e,attrs:n,children:r,text:i,dom:a,domSize:void 0,state:void 0,_state:void 0,events:void 0,instance:void 0,skip:!1}}r.normalize=function(t){return Array.isArray(t)?r("[",void 0,void 0,r.normalizeChildren(t),void 0,void 0):null!=t&&"object"!=typeof t?r("#",void 0,void 0,!1===t?"":t,void 0,void 0):t},r.normalizeChildren=function(t){for(var e=0;e0&&(o.className=r.join(" ")),a[t]={tag:n,attrs:o}}(t);if(null==n?n={}:("object"!=typeof n||null!=n.tag||Array.isArray(n))&&(n={},s=1),arguments.length===s+1)e=arguments[s],Array.isArray(e)||(e=[e]);else for(e=[];s0||t(n)}}var r=n(o);try{t(n(a),r)}catch(t){r(t)}}f(t)}).prototype.then=function(t,e){var n,r,i=this._instance;function a(t,e,a,o){e.push(function(e){if("function"!=typeof t)a(e);else try{n(t(e))}catch(t){r&&r(t)}}),"function"==typeof i.retry&&o===i.state&&i.retry()}var o=new l(function(t,e){n=t,r=e});return a(t,i.resolvers,n,!0),a(e,i.rejectors,r,!1),o},l.prototype.catch=function(t){return this.then(null,t)},l.resolve=function(t){return t instanceof l?t:new l(function(e){e(t)})},l.reject=function(t){return new l(function(e,n){n(t)})},l.all=function(t){return new l(function(e,n){var r=t.length,i=0,a=[];if(0===t.length)e([]);else for(var o=0;o=200&&a.status<300||304===a.status||d.test(n.url))e(l(n.type,t));else{var i=new Error(a.responseText);for(var o in t)i[o]=t[o];r(i)}}catch(t){r(t)}},i&&null!=n.data?a.send(n.data):a.send()});return!0===n.background?h:f(h)},jsonp:function(n,s){var c=i();n=a(n,s);var f=new e(function(e,i){var a=n.callbackName||"_mithril_"+Math.round(1e16*Math.random())+"_"+r++,s=t.document.createElement("script");t[a]=function(r){s.parentNode.removeChild(s),e(l(n.type,r)),delete t[a]},s.onerror=function(){s.parentNode.removeChild(s),i(new Error("JSONP request failed")),delete t[a]},null==n.data&&(n.data={}),n.url=o(n.url,n.data),n.data[n.callbackKey||"callback"]=a,s.src=u(n.url,n.data),t.document.documentElement.appendChild(s)});return!0===n.background?f:c(f)},setCompletionCallback:function(t){n=t}}}(window,l),m=function(t){var e,n=t.document,i=n.createDocumentFragment(),a={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"};function o(t){return t.attrs&&t.attrs.xmlns||a[t.tag]}function u(t,e,n,r,i,a,o){for(var u=n;u=y&&x>=_;)if((M=e[y])!==(S=n[_])||r)if(null==M)y++;else if(null==S)_++;else if(M.key===S.key){var k=null!=f&&y>=e.length-f.length||null==f&&r;_++,h(t,M,S,i,m(e,++y,a),k,o),r&&M.tag===S.tag&&g(t,p(M),a)}else if((M=e[w])!==S||r)if(null==M)w--;else if(null==S)_++;else{if(M.key!==S.key)break;k=null!=f&&w>=e.length-f.length||null==f&&r,h(t,M,S,i,m(e,w+1,a),k,o),(r||_=y&&x>=_;){var M,S;if((M=e[w])!==(S=n[x])||r)if(null==M)w--;else if(null==S)x--;else if(M.key===S.key)k=null!=f&&w>=e.length-f.length||null==f&&r,h(t,M,S,i,m(e,w+1,a),k,o),r&&M.tag===S.tag&&g(t,p(M),a),null!=M.dom&&(a=M.dom),w--,x--;else{if(v||(v=d(e,w)),null!=S){var A=v[S.key];if(null!=A){var T=e[A];k=null!=f&&A>=e.length-f.length||null==f&&r,h(t,T,S,i,m(e,w+1,a),r,o),g(t,p(T),a),e[A].skip=!0,null!=T.dom&&(a=T.dom)}else a=s(t,S,i,o,a)}x--}else w--,x--;if(x<_)break}u(t,n,_,x+1,i,a,o),b(e,y,w+1,n)}}function h(t,e,n,i,a,u,d){var m=e.tag;if(m===n.tag){if(n.state=e.state,n._state=e._state,n.events=e.events,!u&&function(t,e){var n,r;return null!=t.attrs&&"function"==typeof t.attrs.onbeforeupdate&&(n=t.attrs.onbeforeupdate.call(t.state,t,e)),"string"!=typeof t.tag&&"function"==typeof t._state.onbeforeupdate&&(r=t._state.onbeforeupdate.call(t.state,t,e)),!(void 0===n&&void 0===r||n||r)&&(t.dom=e.dom,t.domSize=e.domSize,t.instance=e.instance,!0)}(n,e))return;if("string"==typeof m)switch(null!=n.attrs&&(u?(n.state={},M(n.attrs,n,i)):S(n.attrs,n,i)),m){case"#":!function(t,e){t.children.toString()!==e.children.toString()&&(t.dom.nodeValue=e.children),e.dom=t.dom}(e,n);break;case"<":!function(t,e,n,r){e.children!==n.children?(p(e),c(t,n,r)):(n.dom=e.dom,n.domSize=e.domSize)}(t,e,n,a);break;case"[":!function(t,e,n,r,i,a,o){f(t,e.children,n.children,r,i,a,o);var u=0,s=n.children;if(n.dom=null,null!=s){for(var c=0;c0){for(var i=t.dom;--e;)r.appendChild(i.nextSibling);r.insertBefore(i,r.firstChild)}return r}return t.dom}function m(t,e,n){for(;e1)for(var a=t.dom;--n;)_(a.nextSibling);_(t.dom),null==e||null!=t.domSize||null!=(o=t.attrs)&&(o.oncreate||o.onupdate||o.onbeforeremove||o.onremove)||"string"!=typeof t.tag||(e.pool?e.pool.push(t):e.pool=[t])}var o}t.attrs&&"function"==typeof t.attrs.onbeforeremove&&null!=(n=t.attrs.onbeforeremove.call(t.state,t))&&"function"==typeof n.then&&(r++,n.then(a,a)),"string"!=typeof t.tag&&"function"==typeof t._state.onbeforeremove&&null!=(n=t._state.onbeforeremove.call(t.state,t))&&"function"==typeof n.then&&(r++,n.then(a,a)),a()}function _(t){var e=t.parentNode;null!=e&&e.removeChild(t)}function w(t,e,r,i,a){var o=t.dom;if("key"!==e&&"is"!==e&&(r!==i||function(t,r){return"value"===e||"checked"===e||"selectedIndex"===e||"selected"===e&&t.dom===n.activeElement}(t)||"object"==typeof i)&&void 0!==i&&!x(e)){var u=e.indexOf(":");if(u>-1&&"xlink"===e.substr(0,u))o.setAttributeNS("http://www.w3.org/1999/xlink",e.slice(u+1),i);else if("o"===e[0]&&"n"===e[1]&&"function"==typeof i)k(t,e,i);else if("style"===e)!function(t,e,n){if(e===n&&(t.style.cssText="",e=null),null==n)t.style.cssText="";else if("string"==typeof n)t.style.cssText=n;else{for(var r in"string"==typeof e&&(t.style.cssText=""),n)t.style[r]=n[r];if(null!=e&&"string"!=typeof e)for(var r in e)r in n||(t.style[r]="")}}(o,r,i);else if(e in o&&"href"!==e&&"list"!==e&&"form"!==e&&"width"!==e&&"height"!==e&&void 0===a&&!function(t){return t.attrs.is||t.tag.indexOf("-")>-1}(t)){if("value"===e){var s=""+i;if(("input"===t.tag||"textarea"===t.tag)&&t.dom.value===s&&t.dom===n.activeElement)return;if("select"===t.tag)if(null===i){if(-1===t.dom.selectedIndex&&t.dom===n.activeElement)return}else if(null!==r&&t.dom.value===s&&t.dom===n.activeElement)return;if("option"===t.tag&&null!=r&&t.dom.value===s)return}if("input"===t.tag&&"type"===e)return void o.setAttribute(e,i);o[e]=i}else"boolean"==typeof i?i?o.setAttribute(e,""):o.removeAttribute(e):o.setAttribute("className"===e?"class":e,i)}}function x(t){return"oninit"===t||"oncreate"===t||"onupdate"===t||"onremove"===t||"onbeforeremove"===t||"onbeforeupdate"===t}function k(t,n,r){var i=t.dom,a="function"!=typeof e?r:function(t){var n=r.call(i,t);return e.call(i,t),n};if(n in i)i[n]="function"==typeof r?a:null;else{var o=n.slice(2);if(void 0===t.events&&(t.events={}),t.events[n]===a)return;null!=t.events[n]&&i.removeEventListener(o,t.events[n],!1),"function"==typeof r&&(t.events[n]=a,i.addEventListener(o,t.events[n],!1))}}function M(t,e,n){"function"==typeof t.oninit&&t.oninit.call(e.state,e),"function"==typeof t.oncreate&&n.push(t.oncreate.bind(e.state,e))}function S(t,e,n){"function"==typeof t.onupdate&&n.push(t.onupdate.bind(e.state,e))}return{render:function(t,e){if(!t)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var i=[],a=n.activeElement,o=t.namespaceURI;null==t.vnodes&&(t.textContent=""),Array.isArray(e)||(e=[e]),f(t,t.vnodes,r.normalizeChildren(e),!1,i,null,"http://www.w3.org/1999/xhtml"===o?void 0:o),t.vnodes=e,null!=a&&n.activeElement!==a&&a.focus();for(var u=0;u-1&&n.splice(e,2)}function i(){for(var t=1;t=16?(e=i,t()):null===n&&(n=r(function(){n=null,t(),e=Date.now()},16-(i-e)))}}(e))},unsubscribe:r,redraw:i,render:e.render}}(window);p.setCompletionCallback(g.redraw),c.mount=(f=g,function(t,e){if(null===e)return f.render(t,[]),void f.unsubscribe(t);if(null==e.view&&"function"!=typeof e)throw new Error("m.mount(element, component) expects a component, not a vnode");f.subscribe(t,function(){f.render(t,r(e))}),f.redraw()});var v=l,b=function(t){if(""===t||null==t)return{};"?"===t.charAt(0)&&(t=t.slice(1));for(var e=t.split("&"),n={},r={},i=0;i-1&&s.pop();for(var l=0;l-1?r:i>-1?i:t.length;if(r>-1){var o=i>-1?i:t.length,u=b(t.slice(r+1,o));for(var s in u)e[s]=u[s]}if(i>-1){var c=b(t.slice(i+1));for(var s in c)n[s]=c[s]}return t.slice(0,a)}var u={prefix:"#!",getPath:function(){switch(u.prefix.charAt(0)){case"#":return a("hash").slice(u.prefix.length);case"?":return a("search").slice(u.prefix.length)+a("hash");default:return a("pathname").slice(u.prefix.length)+a("search")+a("hash")}},setPath:function(e,n,i){var a={},s={};if(e=o(e,a,s),null!=n){for(var c in n)a[c]=n[c];e=e.replace(/:([^\/]+)/g,function(t,e){return delete a[e],n[e]})}var l=h(a);l&&(e+="?"+l);var f=h(s);if(f&&(e+="#"+f),r){var d=i?i.state:null,p=i?i.title:null;t.onpopstate(),i&&i.replace?t.history.replaceState(d,p,u.prefix+e):t.history.pushState(d,p,u.prefix+e)}else t.location.href=u.prefix+e},defineRoutes:function(e,a,s){function c(){var n=u.getPath(),r={},i=o(n,r,r),c=t.history.state;if(null!=c)for(var l in c)r[l]=c[l];for(var f in e){var h=new RegExp("^"+f.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(h.test(i))return void i.replace(h,function(){for(var t=f.match(/:[^\/]+/g)||[],i=[].slice.call(arguments,1,-2),o=0;o`${r(a.x.convert(t[n]))},${r(a.y.convert(t[i]))}`).join(" ")},e.m("title",s))}polygon(t,n,i,a,o,u,s,c,l){const f=void 0===i,h=t=>r(u.x.convert(t)),d=t=>r(u.y.convert(t)),p=s?`url(#${s})`:void 0,m=t.map((t,e)=>`${h(f?e:t[i])},${d(t[a])}`).concat(n.map((t,e)=>`${h(f?n.length-e-1:t[i])},${d(o?t[o]:0)}`)).join(" ");return e.m("polygon",{"clip-path":p,style:c,points:m},e.m("title",l))}shape(t,n,i,a){return e.m("polyline",{"clip-path":n?`url(#${n})`:void 0,style:i,points:t.map(t=>`${r(t[0])},${r(t[1])}`).join(" ")},e.m("title",a))}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(5);class i{constructor(t){this.areaDesc=t,this.spacing=0}static translate(t){return 0===t.length&&t.push(""),t.map(t=>"string"!=typeof t?t:t.endsWith("px")?r.px(parseInt(t)):t.endsWith("%")?r.pc(parseInt(t)):"fill"===t.toLowerCase()?r.FILL:void 0)}static register(t,e){i.layoutStyles[t]=e}static createLayout(t,e){let n="";return Object.keys(i.layoutStyles).some(r=>!!t[r]&&(n=new i.layoutStyles[r](i.translate(t[r])).getStyles(e),t[r]=void 0,!0)),n}}i.layoutStyles={},e.Layouter=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class r{constructor(t){this.size=t}getSize(){return this.size}}e.LayoutToken=r;class i extends r{constructor(t){super(t)}}e.DefinedToken=i;class a extends r{constructor(){super(-1)}}e.FillToken=a;class o extends i{constructor(t){super(t)}}e.PixelToken=o;class u extends i{constructor(t){super(t)}}e.PercentToken=u,e.px=function(t){return new o(t)},e.pc=function(t){return new u(t)},e.FILL=new a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i="./data/index.json";class a{static add(t,e){const n=t.name,r=a.gList.docs.indexOf(e);a.gList.set[r]=n,a.gList.index[n]={},function t(e,n,r,i=""){if(e.lib=r,"object"==typeof e&&e.name){const a=function(t){t.name=t.name.replace(/["'](.+)["']|(.+)/g,"$1$2");const e=t.name.match(/([^\/]+)$/)[1];return t.name=e,t.fullPath=""===i?e:`${i}.${e}`}(e);!function(t){t.comment&&t.comment.tags&&t.comment.tags.forEach(e=>{"module"===e.tag&&(t.innerModule=e.text.trim())})}(e),n[e.id+""]=e,a.length>0&&(n[a]=e),e.children&&e.children.map(e=>t(e,n,r,a)),e.signatures&&e.signatures.map(e=>t(e,n,r,a)),e.parameters&&e.parameters.map(e=>t(e,n,r,a)),e.type&&e.type.declaration&&e.type.declaration.children&&e.type.declaration.children.map(e=>t(e,n,r,a))}}(t,a.gList.index[n],n)}static loadList(t){let e=(t=t).lastIndexOf("/");const n=t.substring(0,e+1);return r.m.request({method:"GET",url:t||i}).then(t=>(a.gTitle=t.title,a.gList.docs=t.docs,Promise.all(t.docs.map(t=>(function(t,e){return r.m.request({method:"GET",url:t+e}).then(t=>a.add(t,e)).catch(console.log)})(n,t))))).catch(console.log)}static get(t,e=0){return t&&a.gList.index[t]?a.gList.index[t][e+""]:a.gList.set}}a.gList={set:[],index:{},docs:[]},e.DocSets=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(35);e.Menu=r.Menu;var i=n(36);e.Button=i.Button;var a=n(37);e.Label=a.Label;var o=n(38);e.Slider=o.Slider;var u=n(17);e.RadioButton=u.RadioButton;var s=n(39);e.OptionsButton=s.OptionsButton;var c=n(18);e.ToggleButton=c.ToggleButton;var l=n(13);e.ToolbarButton=l.ToolbarButton;var f=n(13);e.ButtonSymbols=f.ButtonSymbols;var h=n(40);e.Collapsible=h.Collapsible;var d=n(41);e.Modal=d.Modal;var p=n(42);e.TypeAhead=p.TypeAhead},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0);function i(t,e){return t.forEach(t=>{t.isSelected=t.title===e}),t.some(t=>t.isSelected)||(t[0].isSelected=!0),t.filter(t=>t.isSelected)[0]}e.oneOfItems=i,e.anyItems=function(t,e){return t[e].isSelected=!t[e].isSelected,t[e]};class a{static updateItems(t){(t.attrs.desc.items||[]).map((e,n)=>{const r=t.state.items[e]||{title:e,isSelected:!1};t.state.items[n]=r,t.state.items[e]=r})}static init(t,e=i){t.state={updateModel:e,items:[],events:{},itemClicked:t=>t,defaultItem:t.attrs.desc.defaultItem},t.state.events.mouseDown=t.attrs.desc.mouseDown,t.state.events.mouseUp=t.attrs.desc.mouseUp,t.attrs.desc.clicked=t.attrs.desc.clicked||(t=>console.log(`missing clicked() function for selector item ${t}`)),t.state.events.clicked=t.attrs.desc.clicked,a.updateItems(t)}oninit(t){a.init(t)}onupdate(t){a.updateItems(t)}static ensureSelected(t){!t.state.items.some(t=>t.isSelected)&&t.state.items.length>0&&(t.state.defaultItem?t.state.items[t.state.defaultItem].isSelected=!0:t.state.items[0].isSelected=!0)}static renderItem(t,e){e<0&&(console.log(`illegal render index ${e} ${t.state.items.map(t=>t.title).join("|")}`),e=0);const n=t.state.items[e],r=n.title||"";return o({title:r,css:n.css||"",isSelected:!!t.state.items[r]&&t.state.items[r].isSelected,mouseDown:t.state.events.mouseDown,mouseUp:t.state.events.mouseUp,clicked:(e=>n=>{t.state.updateModel(t.state.items,n),n=t.state.itemClicked(n),"function"==typeof e&&e(n)})(t.state.events.clicked)})}}function o(t){const e=t.clicked?()=>{t.clicked(t.title)}:void 0,n=t.mouseDown?()=>{t.mouseDown(t.title)}:void 0,i=t.mouseUp?()=>{t.mouseUp(t.title)}:void 0;return r.m(`.hs-selectable ${t.css||""} ${t.isSelected?"hs-selected":""}`,{style:t.style,onclick:e,onmousedown:n,onmouseup:i},t.title)}e.Selector=a,e.renderSelectable=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(3);class i extends r.SVGElem{static defaultConfig(t){function e(t,e,n){return{visible:n,text:"",xpos:e?r.TextHAlign.middle:t?r.TextHAlign.end:r.TextHAlign.start,ypos:e?t?r.TextVAlign.top:r.TextVAlign.bottom:r.TextVAlign.center,hOffset:e?0:t?-1:.7,vOffset:e?t?.7:-.7:0}}function n(t,e){return{visible:e,length:(t?1:-1)*(e?10:5)}}function i(t,i){return{visible:!!t,crossesAt:t?"min":"max",scale:{type:"auto",domain:["auto","auto"]},title:function(t,e){return{visible:!0,text:(e?"x":"y")+(t?"":"2"),xpos:e?r.TextHAlign.end:t?r.TextHAlign.middle:r.TextHAlign.start,ypos:e?r.TextVAlign.top:t?r.TextVAlign.bottom:r.TextVAlign.top,hOffset:e?-2:t?0:.3,vOffset:e?t?.4:-1.2:t?-.5:.7}}(t,i),ticks:{major:{marks:n(t,!0),labels:e(t,i,!0),labelFmt:void 0},minor:{marks:n(t,!1),labels:e(t,i,!1),labelFmt:void 0}}}}t.axes={primary:{x:i(!0,!0),y:i(!0,!1)},secondary:{x:i(!1,!0),y:i(!1,!1)}}}static adjustConfig(t){}drawAxisLine(t,e,n){return t?this.horLine(e[0],e[1],n,"hs-graph-axis-line"):this.verLine(n,e[0],e[1],"hs-graph-axis-line")}drawTitle(t,n,r,i,a){n.cssClass="hs-graph-axis-title";const o={transform:`translate(${t?i[1]:a}, ${t?a:i[1]})`};return n.visible?e.m("g",o,this.text(n,n.text)):void 0}drawTickMarks(t,n,r,i,a,o){return e.m("svg",{class:`hs-graph-axis-${n}-tick-marks`},o.marks.visible?a.marks.map(e=>t?this.verLine(i.convert(e),r,r+o.marks.length):this.horLine(r,r-o.marks.length,i.convert(e))):"")}drawTickLabels(t,n,i,a,o,u){a.setLabelFormat(u.labelFmt);const s={};return Object.keys(u.labels).forEach(t=>s[t]=u.labels[t]),e.m("svg",{class:`hs-graph-axis-${n}-tick-label`},s.visible?o.labels.map((n,u)=>{const c=a.convert(n.pos),l={transform:`translate(${t?c:i}, ${t?i:c})`};return t&&0===u?s.xpos=r.TextHAlign.start:t&&u===o.labels.length-1?s.xpos=r.TextHAlign.end:s.xpos=r.TextHAlign.middle,e.m("g",l,this.text(s,n.text))}):"")}drawAxis(t,n,r,i){const a="x"===t,o=n[t].range(),u=i[r][t],s=function(t,e){let n;switch(t){case"min":n=e.domain()[0];break;case"max":n=e.domain()[1];break;default:n=t||0}return e.convert(n)}(u.crossesAt,n[a?"y":"x"]),c=n[t].ticks();return u.visible?e.m("svg",{class:`hs-graph-axis-${t} hs-graph-axis-${r}`},[this.drawAxisLine(a,o,s),this.drawTitle(a,u.title,r,o,s),this.drawTickMarks(a,"minor",s,n[t],c.minor,u.ticks.minor),this.drawTickMarks(a,"major",s,n[t],c.major,u.ticks.major),this.drawTickLabels(a,"minor",s,n[t],c.minor,u.ticks.minor),this.drawTickLabels(a,"major",s,n[t],c.major,u.ticks.major)]):void 0}view(t){const n=t.attrs.cfg,r=t.attrs.scales;return e.m("svg",{class:"hs-graph-axis"},[this.drawAxis("x",r.primary,"primary",n),this.drawAxis("y",r.primary,"primary",n),this.drawAxis("x",r.secondary,"secondary",n),this.drawAxis("y",r.secondary,"secondary",n)])}}i.type={linear:"linear axis",log:"log axis",date:"date axis",index:"index axis",percent:"percent axis",ordinal:"ordinal axis",nominal:"nominal axis",auto:"auto"},e.Axes=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(3),i=n(16),a=n(2);e.Plot=class extends r.SVGElem{drawLine(t,n,r,i,a,o,u){const s=`stroke: ${o.line.color}; stroke-width:${o.line.width};`;return o.line.visible?this.polyline(n,r,i,a,t,s,u):e.m(".invisible-line","")}drawMarker(t,n,r,a,o,u,s){const c=i.Series.marker;let l=`fill:${u.marker.color}`;return u.marker.visible?e.m("svg",{class:"hs-graph-series-markers"},n.map(t=>{const n=o.x.convert(t[r]),i=o.y.convert(t[a]),f=u.marker.size;switch(u.marker.shape){case c.circle:return this.circle({x:n,y:i},f,l,s);case c.square:return this.rect({x:n-f,y:i-f},{w:2*f,h:2*f},l,s);case c.diamond:return this.shape([[n-f,i],[n,i+f],[n+f,i],[n,i-f]],void 0,l,s);case c.upTriangle:return this.shape([[n-f,i+f],[n+f,i+f],[n,i-f]],void 0,l,s);case c.downTriangle:return this.shape([[n-f,i-f],[n+f,i-f],[n,i+f]],void 0,l,s)}return e.m(`.unkown-marker-${u.marker.shape}`,"")})):e.m(".invisible-marker","")}drawLabel(t,n,i,o,u,s,c){const l=c.style,f={text:"",cssClass:"",style:`fill:${l.label.color}`,xpos:r.TextHAlign.middle,ypos:r.TextVAlign.center,hOffset:c.hOffset,vOffset:c.vOffset};return l.marker.visible?e.m("svg",{class:"hs-graph-series-labels"},n.map(t=>(f.x=""+s.x.convert(t[i]),f.y=""+s.y.convert(t[o]),this.text(f,a.round(t[u],3))))):e.m(".invisible-marker","")}drawArea(t,n,r,i,a,o,u,s){if(u.fill.visible){const e=`fill: ${u.fill.color};`,c=n,l=n.slice().reverse();return this.polygon(c,l,r,i,a,o,t,e,s)}e.m(".invisible-line","")}setDefaults(t,e,n){}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1)},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0);e.ButtonSymbols={cross:{sym:"×"},minus:{sym:"−"},plus:{sym:"+"},dLeft:{sym:"«"},dRight:{sym:"»"},left:{sym:"‹"},right:{sym:"›"},leftTri:{sym:"◂"},rightTri:{sym:"▸"},upTri:{sym:"▴"},downTri:{sym:"▾"},up:{sym:"∧"},down:{sym:"∨"},lArrow:{sym:"←"},rArrow:{sym:"→"},uArrow:{sym:"↑"},dArrow:{sym:"↓"},empty:{sym:"○"},emptySlash:{sym:"∅"},oSlash:{sym:"ø"},o:{sym:"ο"},lines3:{sym:"≡"},sum:{sym:"Σ"},ellipsis:{sym:"…"},vertEllips:{sym:"⁝"},bullet:{sym:"•"},enter:{sym:"↵"},again:{sym:"↻"},start:{sym:"⇱"},end:{sym:"⇲"}},e.ToolbarButton=class{static getSymbol(t){return e.ButtonSymbols[t]?e.ButtonSymbols[t].sym:""}view(t){return"string"==typeof t.attrs.symbols?r.m(".hs-corner-button",{onclick:t.attrs.onclick},r.m.trust(t.attrs.symbols)):r.m(".hs-corner-button",{onclick:t.attrs.onclick},t.attrs.symbols.map(t=>r.m.trust(t)))}}},function(t,e,n){"use strict";var r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))(function(i,a){function o(t){try{s(r.next(t))}catch(t){a(t)}}function u(t){try{s(r.throw(t))}catch(t){a(t)}}function s(t){t.done?i(t.value):new n(function(e){e(t.value)}).then(o,u)}s((r=r.apply(t,e||[])).next())})};function i(t){return e=>new Promise(n=>{setTimeout(()=>{n(e)},t)})}Object.defineProperty(e,"__esModule",{value:!0}),e.timeout=function(t){return new Promise((e,n)=>{setTimeout(n,t)})},e.delay=i,e.Pace=class{constructor(t=100,e=-1){this.maxConcurrent=-1,this.waitUntil=0,this.waitCount=0,this.beingCalled=0,this.pace=t+5,this.maxConcurrent=e}getWaitCount(){return this.waitCount}getCallingCount(){return this.beingCalled}add(t){const e=Date.now();this.waitUntilr(this,void 0,void 0,function*(){return yield new Promise(t=>{const e=()=>{this.maxConcurrent<0||this.beingCalled(this.beingCalled--,t))}},e.promiseChain=function(t,e=[]){return t.reduce((t,e)=>t.then(t=>Promise.resolve(e(t)).then(e=>(t.push(e),t))),Promise.resolve(e))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(21);e.Data=r.Data},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(3),i=n(9),a=n(57),o=n(58),u=n(59),s=n(60);let c=0;class l extends r.SVGElem{static defaultConfig(t){t.series=new f}static adjustConfig(t){t.series.series.forEach(e=>{void 0===e.x&&(t.axes.primary.x.title.hOffset=0,t.axes.primary.x.scale.type=i.Axes.type.index,t.grid.minor.ver.visible=!1)})}drawClipRect(t,n){return t?this.clipRect({x:n.x.range()[0],y:n.y.range()[1]},{w:n.x.range()[1]-n.x.range()[0],h:n.y.range()[0]-n.y.range()[1]},t):e.m("")}view(t){const n=t.attrs.cfg,r=t.attrs.scales.primary,i=t.attrs.data,a=n.clip?"hs"+c++:void 0;return n.series.map(t=>{t.map===l.map.shared&&(t.ySum="$sum",i[t.dataIndex].colAdd(t.ySum),i[t.dataIndex].colInitialize(t.ySum,0))}),n.series.map(t=>{const e=i[t.dataIndex];if(t.map===l.map.shared){const n=e.colNumber(t.y);e.colInitialize(t.ySum,(t,e,r)=>t+r[n])}t.map&&(t.yBase="$"+t.map,e.colAdd(t.yBase),e.colInitialize(t.yBase,0))}),e.m("svg",{class:"hs-graph-series"},[this.drawClipRect(a,r),e.m("svg",n.series.map((t,n)=>{const o=i[t.dataIndex],u=l.plot[t.type]||l.plot.line;u.setDefaults(o,t,r);const s=t.cond?o.filter(t.cond):o,c=u.plot(s,t,r,n,a);if(t.map){const e=s.colNumber(t.y);s.colInitialize(t.yBase,(t,n,r)=>t+r[e])}return e.m("svg",{class:`hs-graph-series-${n}`},c)}))])}}l.marker={circle:Symbol("circle marker"),square:Symbol("square marker"),diamond:Symbol("diamond marker"),upTriangle:Symbol("upward triangle marker"),downTriangle:Symbol("downward triangle marker")},l.plot={line:new a.PlotLine,marker:new o.PlotMarkers,bar:new u.PlotBar,area:new s.PlotArea},l.map={stacked:"stacked",shared:"shared"},l.defaultStyle={line:{color:"default",visible:!0,width:2},marker:{color:"default",visible:!1,size:10,shape:l.marker.circle},label:{color:"default",visible:!1},fill:{color:"default",visible:!1},bar:{color:"default",visible:!1,width:50,offset:30}},l.defaultColors=["#f00","#0f0","#00f","#ff0","#0ff","#f0f","#000","#444","#888","#ccc"],e.Series=l;class f{constructor(){this.seriesDefs=[],this.clip=!0}set data(t){this._data=t}get data(){return this._data}set series(t){const e=l.defaultStyle,n=l.defaultColors;t.forEach(t=>{t.type=t.type||"line",t.style=t.style||{},t.dataIndex=t.dataIndex||0;const r={color:n[this.seriesDefs.length]};switch(function t(e,n,r){Object.keys(n).forEach(i=>{"object"==typeof n[i]?(void 0===e[i]&&(e[i]={}),t(e[i],n[i],r)):(void 0===e[i]&&(e[i]=n[i]),"default"===e[i]&&(e[i]=r[i]))})}(t.style,e,r),this.seriesDefs.push(t),t.type){case"line":t.style.line.visible=!0;break;case"marker":t.style.marker.visible=!0;break;case"area":case"bar":t.style.fill.visible=!0}})}get series(){return this.seriesDefs}}e.SeriesConfig=f},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(0),a=n(8);class o extends a.Selector{static viewGroup(t,e){t=`${t} ${e.attrs.css||""}`;const n=e.attrs.style||"";return r.m(t,{style:n},r.m(i.Layout,{columns:[],content:e.state.items.map((t,n)=>a.Selector.renderItem(e,n))}))}oninit(t){super.oninit(t),a.Selector.ensureSelected(t)}onupdate(t){super.onupdate(t),a.Selector.ensureSelected(t)}view(t){return o.viewGroup(".hs-radio-buttons",t)}}e.RadioButton=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(8);e.ToggleButton=class extends i.Selector{oninit(t){super.oninit(t),t.state.mouseDownCSS="",t.state.events.mouseDown=()=>t.state.mouseDownCSS=".hs-button-pressed",t.state.events.mouseUp=()=>t.state.mouseDownCSS="",t.state.itemClicked=e=>{const n=t.state.items.map(t=>t.title).indexOf(e),r=t.state.items[(n+1)%t.state.items.length].title;return t.state.items[e].isSelected=!1,t.state.items[r].isSelected=!0,r},i.Selector.ensureSelected(t)}onupdate(t){super.onupdate(t),i.Selector.ensureSelected(t)}view(t){const e=t.attrs.css||"",n=t.attrs.style||"",a=t.state.items.findIndex(t=>t.isSelected);return r.m(`.hs-toggle-button ${e} ${t.state.mouseDownCSS}`,{style:n},r.m("span",i.Selector.renderItem(t,a)))}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(44),a=n(6),o=n(2).log("Parts");function u(t,e,n,i){return r.m(t,{href:`/api/${e}/${n}`,oncreate:r.m.route.link,onupdate:r.m.route.link},i)}function s(t,e){if(t&&t.defaultValue){let e=` = ${t.defaultValue}`.replace(/{/gi,"{ ").replace(/}/gi," }");return r.m("span.hs-item-default",e)}}function c(t,e){try{return r.m("span",t.type?[r.m("span.hs-item-name",":"),r.m("span.hs-item-sig-type",function n(i){switch(i.type){case void 0:return"";case"array":return r.m("span.hs-item-type-array",["Array<",n(i.elementType),">"]);case"tuple":return r.m("span.hs-item-type-tuple",["[ ",...i.elements.map((t,e)=>[e>0?", ":void 0,n(t)])," ]"]);case"intrinsic":case"instrinct":return r.m("span.hs-item-type-instrinct",i.id?u("span",e,i.fullPath,i.name):i.name);case"stringLiteral":return r.m("span.hs-item-type-string-literal",i.type);case"union":return r.m("span.hs-item-type-union",[...i.types.map((t,e)=>[e>0?" | ":void 0,n(t)])]);case"reference":let s=i.name;if(i.id){const t=a.DocSets.get(e,i.id);s=t.typeArguments?t.name+"<"+t.typeArguments.map(n).join(", ")+">":t.id?u("a",e,t.fullPath,t.name):t.name}return r.m("span.hs-item-type-reference",s);case"reflection":let c;return c=i.declaration?i.declaration.children?r.m("span.hs-item-reflection",["{ ",...i.declaration.children.map((t,e)=>[e>0?", ":void 0,t.name,": ",n(t.type)])," }"]):i.declaration.kindString:"UNKNOWN",r.m("span.hs-item-type-reflection",c);default:return o.warn("unknown type "+i.type),o.warn(o.inspect(t,3)),t.type}}(t.type)),s(t)]:"")}catch(t){o.error(t),o.error(t.trace)}}e.flags=function(t,e=[]){const n=["Method","Property"],i={isExported:"export",isExternal:"external",isPublic:"public",isPrivate:"private",isProtected:"protected",isConstructorProperty:"constructorProperty",isAbstract:"abstract",isConst:"const",isLet:"let",isVar:"var",isStatic:"static",isOptional:"optional"};return r.m("span.hs-item-flags",t.flags?Object.keys(t.flags).map(a=>{let o=!1,u=i[a];return void 0===u?u=a:o=e.indexOf(u)>=0,"export"===u&&n.indexOf(t.kindString)>=0&&(o=!0),r.m(`span.hs-item-${o?"ignore":u===a?"unknown":u}-flag`,o?void 0:u)}):[])},e.kindString=function(t){return r.m("span.hs-item-kind",t.kindString)},e.itemName=function(t,e){return r.m("span.hs-item-name",t.fullPath?u("a",t.lib,t.fullPath,e.name):e.name)},e.itemTooltip=function(t){return r.m("span.hs-item-name",i.tooltip(t.name,"class name and then some","bottom"))},e.extensionOf=function(t){return r.m("span.hs-item-extensions",t.extendedTypes?[r.m("span.hs-item-extends","extends"),r.m("span",t.extendedTypes.map((e,n)=>r.m("span.hs-item-extension",[u("a",t.lib,a.DocSets.get(t.lib,e.id).fullPath,e.name),t.extendedTypes.map.length>n+1?", ":""])))]:void 0)},e.inheritedFrom=function(t){if(t.inheritedFrom){let e=a.DocSets.get(t.lib,t.inheritedFrom.id);return e=a.DocSets.get(t.lib,e.fullPath.substring(0,e.fullPath.lastIndexOf("."))),r.m("span.hs-item-inherited-from",[r.m("span","inherited from "),u("a",e.lib,e.fullPath,e.name)])}return r.m("span.hs-item-inherited-from",void 0)},e.sourceLink=function(t){const e=t.sources?t.sources[0]:void 0;if(e){let n=(e.fileName||"").replace(".ts",".html");const i=n.indexOf(t.lib);return i>0&&(n=n.substr(i)),r.m("span.hs-item-member-source",r.m("a",{href:`data/src/${t.lib}/${n}#${Math.max(0,e.line-5)}`,target:"_blank"},"[source]"))}return r.m("span.hs-item-member-source","")},e.libLink=u,e.signature=function(t,e){let n=[];if(t)switch(t.parameters&&(n=t.parameters.map((t,n)=>r.m("span",[(t=>t>0?", ":"")(n),r.m("span.hs-item-sig-param",[r.m(`span.hs-item-name${function(t){return t&&t.isOptional?".hs-item-optional":""}(t.flags)}`,t.name),c(t,e.lib)])]))),e.kindString){case void 0:break;case"Method":case"Function":case"Constructor":case"External module":case"Class":case"Variable":n.unshift(r.m("span.hs-item-name","(")),n.push(r.m("span.hs-item-name",")"));break;default:o.warn(`unexpected kindString ${e.kindString}`)}return r.m("span.hs-item-signature",n)},e.defaultVal=s,e.type=c,e.makeID=function(t,e){let n=t?t+"_":"";return""!==(n=(n+(e.name||"")).toLowerCase())?n:void 0}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=[["Jan","January"],["Feb","February"],["Mar","March"],["Apr","April"],["May","May"],["Jun","June"],["Jul","July"],["Aug","August"],["Sep","September"],["Oct","October"],["Nov","November"],["Dec","December"]],i=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];function a(t,e){for(var n=""+t;n.length6e4*t,fromHours:t=>36e5*t,fromDays:t=>864e5*t,fromWeeks:t=>6048e5*t,toMinutes:t=>t/6e4,toHours:t=>t/36e5,toDays:t=>t/864e5,toWeeks:t=>t/6048e5}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(53);class i{constructor(t){this.data=[],this.meta=[],this.import(t)}static toDataSet(t,e){t=t||[{}];const n=Object.keys(t[0]);return{rows:t.map(t=>n.map(e=>t[e])),colNames:n,name:e||void 0}}getName(){return this.name}import(t){this.name=t.name,this.setData(t.rows,t.colNames)}export(){return{rows:this.getData(),colNames:this.colNames()}}getData(){return this.data}getColumn(t){const e=this.colNumber(t);return this.data.map(t=>t[e])}colAdd(t){let e=this.getMeta(t);return void 0===e&&((e=this.meta[t]={}).name=t,e.column=this.meta.length,this.meta.push(e),e.cast=!1,e.accessed=!1),e}colInitialize(t,e){const n="function"==typeof e;let r=this.getMeta(t);if(!r){if("string"!=typeof t)throw new Error(`column ${t} does not exist in Data`);r=this.colAdd(t)}return this.data.map((t,i)=>t[r.column]=n?e(t[r.column],i,t):e),r.column}colNumber(t){const e=this.getMeta(t);return e?(e.accessed=!0,e.column):void 0}colName(t){var e=this.getMeta(t);if(e)return e.accessed=!0,e.name}colNames(){return this.meta.map(t=>t.name)}colType(t){const e=this.getMeta(t);return e?e.types[0].type:i.type.name}findDomain(t,e){if(void 0===e&&(e=[]),void 0===t)e[0]=0,e[1]=this.data.length-1;else{const n=this.colNumber(t);switch(this.colType(t)){case i.type.name:this.data.forEach(t=>{const r=e;r.indexOf(""+t[n])<0&&r.push(""+t[n])});break;case i.type.date:this.data.forEach(t=>{let r=this.toDate(t[n]);void 0===e[0]&&(e[0]=r),void 0===e[1]&&(e[1]=r),null!=r&&(re[1]&&(e[1]=r))});break;default:this.data.forEach(t=>{let r=parseFloat(t[n].toString());void 0===e[0]&&(e[0]=r),void 0===e[1]&&(e[1]=r),null!=r&&(re[1]&&(e[1]=r))})}}return e}castData(){this.meta.forEach(t=>{const e=t.column;t.cast||this.data.forEach(n=>n[e]=this.castVal(t.types[0].type,n[e])),t.cast=!0})}filter(t){return r.filter(this,t)}sort(t,e){let n=t;return e?(e=this.colNumber(e),"descending"===t&&(n=(t,e)=>e>t?1:eet?-1:0),this.data.sort((t,r)=>n(t[e],r[e]))):this.data.sort(n),this}map(t,e){const n=t=>t;let r=function(){let e;switch(t){case"cumulate":e=(()=>{let t=0;return(e,n)=>t+=+e})();break;case"noop":e=n;break;default:e=t}return e}();const a=e?this.colNumber(e):void 0;return new i({colNames:this.colNames(),rows:this.data.map((t,e,n)=>(a?t[a]=r(t[a],a,e,n):n[e]=r(t,e,n),t)),name:this.getName()})}getMeta(t){if(this.meta[t])return this.meta[t].accessed=!0,this.meta[t]}setData(t,e,n=!0){this.meta=[],this.data=t,e.forEach(t=>this.colAdd(t)),e.forEach(t=>this.findTypes(t)),this.castData()}findTypes(t){const e=this.getMeta(t),n=[];Object.keys(i.type).forEach(t=>{const e={type:i.type[t],count:0};n.push(e),n[i.type[t]]=e});for(let e of this.allRows(t)){const t=this.findType(e);null!==t&&n[t].count++}return n.sort(function(t,e){return"currency"===t.type&&t.count>0?-1:"currency"===e.type&&e.count>0?1:e.count-t.count}),e.types=n,n[0].type}findType(t){if(t&&""!==t){if(t instanceof Date)return i.type.date;if("number"==typeof t)return i.type.number;const e=""+t;if(""+parseFloat(e)===e)return i.type.number;if(e.startsWith("$")&&!isNaN(parseFloat(e.slice(1))))return i.type.currency;if(e.endsWith("%")&&!isNaN(parseFloat(e)))return i.type.percent;if(!isNaN(this.toDate(e).getTime()))return i.type.date;switch(e.toLowerCase()){case"null":case"#ref!":break;default:if(t.length>0)return i.type.name}}return null}*allRows(t){const e=this.colNumber(t);for(let t=0;tt.pos-e.pos;function l(){h.minor.labels.sort(c),h.major.labels.sort(c)}const f=[e[0],e[1]],h={major:{marks:[],labels:[]},minor:{marks:[],labels:[]}};switch(t){case i.Axes.type.log:!function(t,e){t[0]=Math.max(t[0],1e-20),t[1]=Math.max(t[1],1e-20);let n=Math.pow(10,Math.floor(Math.log10(t[1]-t[0]))),r=Math.pow(10,Math.floor(Math.log10(t[0]))),i=Math.pow(10,Math.ceil(Math.log10(t[1])));if(n>r)for(let t=r;t<=i;t*=10)for(let n=1;n<=20;n++)1===n&&t*n365?e[0]=1:r>270?e[1]=3:r>20?e[1]=1:r>4?e[2]=7:n>300?e[2]=1:n>75?e[3]=1:n>45?e[4]=15:n>10?e[4]=5:n>2?e[4]=1:e[5]=1,e}(i[1].getTime()-i[0].getTime()),s=r(i[0],o,Math.floor),c=r(i[1],o,Math.ceil);let l=s;for(;l<=c;)u(e.major,l,n),l=new Date(l.getFullYear()+o[0],l.getMonth()+o[1],l.getDate()+o[2],l.getHours()+o[3],l.getMinutes()+o[4],l.getSeconds()+o[5])}(f,h,r),l();break;case i.Axes.type.percent:!function(t,e,n){const r=t=>t.text=`${100*Math.round(t.pos)}%`;s(t,e,n),e.major.labels.forEach(r),e.minor.labels.forEach(r)}(f,h,n),l();break;case i.Axes.type.ordinal:case i.Axes.type.nominal:break;case i.Axes.type.index:case i.Axes.type.linear:default:s(f,h,n),l()}return h}e.Scale=class{constructor(t){this.cfg=t,this.typeVal=i.Axes.type.linear,this.rangeVal=[0,1],this.domVal=[0,1],this.domMinAuto=0,this.domMaxAuto=0,this.typeVal=t.type,this.domain(t.domain)}setLabelFormat(t){this.labelFmt=t}range(t){return t&&(this.rangeVal=t),this.rangeVal}domain(t){if(t){switch(this.scaleType()===i.Axes.type.date?"string"!=typeof t[0]&&"string"!=typeof t[1]||(this.domVal[0]="auto"===t[0]?0:Date.parse(t[0]),this.domVal[1]="auto"===t[1]?1:Date.parse(t[1])):(this.domVal[0]="auto"===t[0]?0:t[0],this.domVal[1]="auto"===t[1]?1:t[1]),t[0]){case"tight":this.domMinAuto=2;break;case"auto":this.domMinAuto=1;break;default:this.domMinAuto=0}switch(t[1]){case"tight":this.domMaxAuto=2;break;case"auto":this.domMaxAuto=1;break;default:this.domMaxAuto=0}}return this.typeVal===i.Axes.type.log&&(this.domVal[1]<=0&&(this.domVal[1]=10),this.domVal[0]<=0&&(this.domVal[0]=this.domVal[1]/10)),this.domVal}scaleType(t){if(t)switch(t){case r.Data.type.date:this.typeVal=i.Axes.type.date;break;case r.Data.type.name:this.typeVal=i.Axes.type.nominal;break;case r.Data.type.percent:this.typeVal=i.Axes.type.percent;break;case r.Data.type.number:case r.Data.type.currency:default:this.typeVal=i.Axes.type.linear}return this.typeVal}setAutoDomain(t){const e=c(this.scaleType(),t,4,this.labelFmt);switch(this.domMinAuto){case 1:this.domVal[0]=e.major.labels[0]?e.major.labels[0].pos:t[0];break;case 2:this.domVal[0]=t[0]}switch(this.domMaxAuto){case 1:this.domVal[1]=e.major.labels.length>1?e.major.labels[e.major.labels.length-1].pos:t[1];break;case 2:this.domVal[1]=t[1]}}ticks(t=4){const e=[this.domain()[0],this.domain()[1]],n=t=>t.pos>=e[0]&&t.pos<=e[1],r=c(this.scaleType(),this.domain(),t,this.labelFmt);return r.minor.labels=r.minor.labels.filter(n),r.major.labels=r.major.labels.filter(n),0===r.major.labels.length&&(r.major.labels=r.minor.labels,r.minor.labels=[]),function(t,e){switch(e){case i.Axes.type.nominal:case i.Axes.type.index:const n=t.major.labels.length;t.major.marks=Array(n+1).fill(1).map((t,e)=>e-.5),t.minor.marks=t.minor.labels?t.minor.labels.map(t=>t.pos):[];break;case i.Axes.type.log:case i.Axes.type.date:case i.Axes.type.percent:case i.Axes.type.ordinal:case i.Axes.type.linear:default:t.major.marks=t.major.labels?t.major.labels.map(t=>t.pos):[],t.minor.marks=t.minor.labels?t.minor.labels.map(t=>t.pos):[]}}(r,this.scaleType()),r}convert(t){const e=this.domain(),n=this.range(),r=e[0],a=e[1];let o;switch(this.scaleType()){case i.Axes.type.log:o=Math.log(t/r)/Math.log(a/r)*(n[1]-n[0])+n[0];break;case i.Axes.type.nominal:break;case i.Axes.type.date:case i.Axes.type.percent:case i.Axes.type.index:case i.Axes.type.ordinal:case i.Axes.type.linear:default:o=(t-r)/(a-r)*(n[1]-n[0])+n[0]}return o}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(3);e.Grid=class extends r.SVGElem{static defaultConfig(t){t.grid={major:{hor:{visible:!0},ver:{visible:!0}},minor:{hor:{visible:!1},ver:{visible:!1}}}}static adjustConfig(t){}drawHorGrid(t,n,r,i){return t.visible?e.m("svg",{class:"hs-graph-grid-hor"},i.marks.map(t=>this.horLine(r[0],r[1],n.convert(t)))):e.m("svg")}drawVerGrid(t,n,r,i){return t.visible?e.m("svg",{class:"hs-graph-grid-ver"},i.marks.map(t=>this.verLine(n.convert(t),r[0],r[1]))):e.m("svg")}view(t){const n=t.attrs.cfg,r=t.attrs.scales.primary;return e.m("svg",{class:"hs-graph-grid"},[e.m("svg",{class:"hs-graph-grid-minor"},[this.drawHorGrid(n.minor.hor,r.y,r.x.range(),r.y.ticks().minor),this.drawVerGrid(n.minor.ver,r.x,r.y.range(),r.x.ticks().minor)]),e.m("svg",{class:"hs-graph-grid-major"},[this.drawHorGrid(n.major.hor,r.y,r.x.range(),r.y.ticks().major),this.drawVerGrid(n.major.ver,r.x,r.y.range(),r.x.ticks().major)])])}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1),e.Legend=class{static defaultConfig(t){t.legend={}}static adjustConfig(t){}view(t){return e.m("svg",{class:"hs-graph-legend",width:"100%",height:"100%"})}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n(26).init()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(34),a=n(43),o=n(48),u=n(0),s=n(0),c={root:{Layout:{rows:["30px","fill","10px"],css:".hs-site-main",content:["header","body","footer"]}},header:{Layout:{columns:["200px","fill"],css:".hs-site-header",content:["title","menu"]}},body:{Layout:{columns:["200px","fill"],content:["leftnav","mainDetail"]}},footer:{Layout:{css:".hs-site-footer",content:"(c) Helpful Scripts"}},title:{Layout:{css:".hs-site-title",content:"HSDocs",href:"https://github.com/HelpfulScripts/hsDocs"}},menu:{DocsMenu:{docSet:"./data/index.json"}},leftnav:{LeftNav:{}},mainDetail:{MainDetail:{}}};e.init=function(){const t={view:t=>u.m(s.Config,Object.assign({source:c,context:[r,i,a,o]},{route:{field:u.m.route.param("field"),lib:u.m.route.param("lib")}}))};u.m.route(document.body,"/api",{"/api":t,"/api/:lib":t,"/api/:lib/:field":t})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(4),i=n(5);e.PillarLayouts=["columns","rows"];const a={columns:{cssClass:".hs-column-layout",fields:["top","bottom","left","right","height","width"]},rows:{cssClass:".hs-row-layout",fields:["left","right","top","bottom","width","height"]}};class o extends r.Layouter{constructor(t,e){super(e),this.areaDesc=e,this.fields=t.fields,this.cssClass=t.cssClass;let n=e.length-1,r=0,a=0;this.unit=e.some(t=>t instanceof i.PixelToken)?this.unitPixel:this.unitPercent,e.some((t,n)=>!(e[n]instanceof i.DefinedToken)||++r<0),e.some((t,r)=>!(e[n-r]instanceof i.DefinedToken)||++a<0),this.firstFixed=r,this.lastFixed=Math.min(a,e.length-r)}getSizes(t){const e=this.firstFixed,n=this.lastFixed,r=this.areaDesc,i=r.length;return[...Array(t).keys()].map(a=>{let o=null,u=null;return a>t-1-n?(o=r[i-(t-a)].getSize(),u="end"):a0&&i===e&&(o=r[i-1].getSize(),u="start"),{size:o,code:u,fields:{}}})}unitPercent(t){let e=this.fields,n=100,r=this.getSizes(t);r.forEach(e=>{e.size&&(n-=e.size,t--)});let i=n/t;function a(t,n,r,a){let o=0;t.some(t=>{let u=t.size||i;return!!a(t.code)||(t.fields[n]=o+"%",o+=u,t.fields[r]=100-o+"%",t.fields[e[5]]="auto",!1)})}return a(r,e[2],e[3],t=>"end"===t),a(r.reverse(),e[3],e[2],t=>"end"!==t),r.reverse()}unitPixel(t){let e=this.getSizes(t),n=this.fields,r=100/t,i=0;return e.some((t,e)=>{if("start"===t.code)t.fields[n[2]]=i+"px",i+=t.size+(this.spacing||0)+(this.spacing||0),t.fields[n[3]]="auto",t.fields[n[5]]=t.size+"px";else if(null===t.code)t.fields[n[2]]=i>0?i+"px":e*r+"%",i=-1,t.fields[n[3]]=100-(e+1)*r+"%",t.fields[n[5]]="auto";else if("end"===t.code)return!0;return!1}),i=0,e.slice().reverse().some((t,e)=>(t.fields[n[3]]=i+"px","end"!==t.code?(i>0&&"start"!==t.code&&(t.fields[n[5]]="auto"),!0):(i+=t.size+(this.spacing||0)+(this.spacing||0),t.fields[n[2]]="auto",t.fields[n[5]]=t.size+"px",!1))),e}getStyles(t){let e=this.fields,n=this.unit(t.length);return t.map((t,r)=>{t.style=`${e[0]}:0%; ${e[1]}:0%; `,Object.keys(n[r].fields).forEach(e=>{t.style+=`${e}: ${n[r].fields[e]};`})}),this.cssClass}}r.Layouter.register(e.PillarLayouts[0],class extends o{constructor(t){super(a[e.PillarLayouts[0]],t),this.areaDesc=t}}),r.Layouter.register(e.PillarLayouts[1],class extends o{constructor(t){super(a[e.PillarLayouts[1]],t),this.areaDesc=t}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(4),i=n(5);r.Layouter.register("tiles",class extends r.Layouter{constructor(t){super(t),this.areaDesc=t,this.unit=t.some(t=>t instanceof i.PixelToken)?this.unitPixel:this.unitPercent}unitPercent(t){const e=this.areaDesc,n=this.areaDesc.some(t=>t instanceof i.FillToken),r=Math.sqrt(t),a=Math.round(r);let o=Math.floor(r);r>o&&o++;let u=e[0]instanceof i.DefinedToken?e[0].getSize():void 0,s=e[1]instanceof i.DefinedToken?e[1].getSize():u;u=u||100/o,s=s||100/a;let c=0,l=0;return[...Array(t).keys()].map(t=>{let e="auto",r=u+"%",i="auto",a=s+"%";c+2*u>100&&n&&(e="0%",r="auto"),l+2*s>100&&n&&(i="0%",a="auto");const o=`\n top: ${Math.floor(l)}%; bottom:${i};\n left: ${c}%; right:${e};\n width: ${r}; height: ${a};\n `;return Math.round(c+=u)>100-Math.floor(u)&&(c=0,l+=s),o})}unitPixel(t){const e=this.areaDesc,n=Math.sqrt(t),r=Math.round(n);let a=Math.floor(n);n>a&&a++;let o=e[0]instanceof i.DefinedToken?e[0].getSize():void 0,u=e[1]instanceof i.DefinedToken?e[1].getSize():o;o=o||100/a,u=u||100/r;let s=0,c=0;return[...Array(t).keys()].map(t=>{let e=o+"px",n=u+"px";const r=`\n top: ${Math.floor(c)}%; bottom:auto;\n left: ${s}%; right:auto;\n width: ${e}; height: ${n};\n `;return Math.round(s+=o)>100-Math.floor(o)&&(s=0,c+=u),r})}getStyles(t){let e=this.unit(t.length);return t.map((t,n)=>{t.style=e[n]}),".hs-tile-layout"}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(11),i=n(4);class a{getComponents(t){return Array.isArray(t.attrs.content)?t.attrs.content.map(e=>e.compClass?(e.attrs.route=t.attrs.route,r.m(e.compClass,e.attrs)):e):t.attrs.content}getCSS(t){return t.attrs.css||""}normalizeContent(t){return"string"==typeof t?[r.m(".hs-leaf",r.m.trust(t))]:t.length>0?t.map(t=>t instanceof a?t:r.m(a,{content:t})):[t]}view(t){const e=this.normalizeContent(this.getComponents(t));let n=i.Layouter.createLayout(t.attrs,e);const a={style:t.style,route:t.attrs.route,onclick:t.attrs.onclick};return t.attrs.route=void 0,t.attrs.href&&(a.href=t.attrs.href,a.oncreate=r.m.route.link,a.onupdate=r.m.route.link),r.m(`.hs-layout ${n} ${this.getCSS(t)}`,a,e.map(t=>t))}}e.Layout=a},function(t,e,n){(function(t){var r=void 0!==t&&t||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function a(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new a(i.call(setTimeout,r,arguments),clearTimeout)},e.setInterval=function(){return new a(i.call(setInterval,r,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(r,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(31),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(12))},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,i=1,a={},o=!1,u=t.document,s=Object.getPrototypeOf&&Object.getPrototypeOf(t);s=s&&s.setTimeout?s:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick(function(){p(t)})}:function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?(f="setImmediate$"+Math.random()+"$",h=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(f)&&p(+e.data.slice(f.length))},t.addEventListener?t.addEventListener("message",h,!1):t.attachEvent("onmessage",h),r=function(e){t.postMessage(f+e,"*")}):t.MessageChannel?((l=new MessageChannel).port1.onmessage=function(t){p(t.data)},r=function(t){l.port2.postMessage(t)}):u&&"onreadystatechange"in u.createElement("script")?(c=u.documentElement,r=function(t){var e=u.createElement("script");e.onreadystatechange=function(){p(t),e.onreadystatechange=null,c.removeChild(e),e=null},c.appendChild(e)}):r=function(t){setTimeout(p,0,t)},s.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n1)for(var n=1;n=0)return e;let r=e.length?[]:{};const a=Object.keys(e);return a.map(o=>{const u=function(t,e){let n;return e.some(e=>n=e[t]),n}(o,n),s=i(t,e[o],n);if(u){const t={compClass:u,attrs:s};Array.isArray(e)||1!==a.length?r[o]=t:r=t}else r[o]=s}),r}e.Config=class{oninit(t){const e=t.attrs.context;"string"==typeof t.attrs.source?t.state.cfg||r.m.request({method:"GET",url:t.attrs.source}).then(n=>{t.state.cfg=i(n,n.root,e)}):t.state.cfg=i(t.attrs.source,t.attrs.source.root,e)}view(t){const e=t.state.cfg;return e&&e.compClass?r.m(e.compClass,Object.assign(e.attrs,t.attrs)):r.m("div","waiting")}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(6),a=n(7);e.DocsMenu=class extends r.Layout{constructor(){super(...arguments),this.docSet=""}getDesc(t){this.docSet!==t.docSet&&(this.docSet=t.docSet,i.DocSets.loadList(t.docSet).then(()=>r.m.redraw));const e=i.DocSets.get();return{items:e.map(t=>t),defaultItem:r.m.route.param("lib")||e[0],clicked:t=>r.m.route.set("/api/:lib/0",{lib:t})}}getComponents(t){const e=this.getDesc(t.attrs);return r.m(a.Menu,{desc:e})}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(17);e.Menu=class extends r.RadioButton{view(t){return r.RadioButton.viewGroup(".hs-menu",t)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(18);e.Button=class extends r.ToggleButton{oninit(t){t.attrs.desc.items=[t.attrs.desc.name||"button"],super.oninit(t),r.ToggleButton.ensureSelected(t)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0);e.Label=class{view(t){const e=t.attrs.css||"",n=t.attrs.style||"",i=t.attrs.text||"unspecified";return r.m(`.hs-label ${e}`,{style:n},r.m.trust(i))}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0);function i(t,e,n){const i=e/(n.length-1),a=n.length<2?0:100*i;return r.m(".hs-slider-marker",{style:`left: ${a}%`},function(t){return r.m(".hs-slider-label",t)}(t))}function a(t,e){t.stopPropagation(),t.preventDefault();const n=t.currentTarget.lastChild.clientWidth;return e.state.value=(t.clientX-e.state.mouse)/n+e.state.slider,function(t){if(t.state.range.length>1&&"string"==typeof t.state.range[0]){const e=Math.floor(t.state.value*(t.state.range.length-1)+.5);return t.state.notified!==t.state.range[e]&&(t.state.onchange(t.state.range[e]),t.state.notified=t.state.range[e]),e/(t.state.range.length-1)}{const e=t.state.range,n=Math.floor(100*(e[0]*(1-t.state.value)+e[1]*t.state.value))/100;return t.state.onchange(Math.min(t.state.range[1],Math.max(t.state.range[0],n))),t.state.value}}(e)}function o(t,e){e.state.mouse>0&&(e.state.value=a(t,e),e.state.mouse=-1)}e.Slider=class{oninit(t){t.state={range:[],value:.5,mouse:-1,slider:0,notified:"",onchange:()=>{}}}view(t){const e=t.attrs.id,n=t.attrs.css||"";return t.state.range=t.attrs.range||[],t.state.onchange=t.attrs.onchange,r.m(`.hs-slider ${n}`,{id:e,onmousedown:e=>(function(t,e){const n=function(t){let e=t.target,n=0;for(;e.className.trim()!==t.currentTarget.className.trim();)n+=e.offsetLeft,e=e.parentNode;return n-e.lastChild.offsetLeft}(t);if(e.state.mouse=t.clientX,["hs-slider","hs-slider-slot"].indexOf(t.target.className.trim())>=0){const r=t.currentTarget.lastChild.clientWidth,i=t.currentTarget.lastChild.lastChild.clientWidth;e.state.mouse-=i/2,e.state.value=(t.offsetX-i/2+n)/r}e.state.slider=e.state.value,a(t,e)})(e,t),onmousemove:e=>(function(t,e){e.state.mouse>0&&(a(t,e),(e.state.value>1||e.state.value<0)&&o(t,e))})(e,t),onmouseup:e=>o(e,t),onmouseout:e=>(function(t,e){e.state.mouse>0&&"hs-slider"===t.target.className.trim()&&o(t,e)})(e,t)},[function(t){return r.m(".hs-slider-slot",[r.m(".hs-slider-markers",t.state.range.map(i)),r.m(".hs-slider-handle",{style:`left:${100*t.state.value}%`})])}(t)])}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(0),a=n(8),o=n(8);class u extends a.Selector{oninit(t){a.Selector.init(t,o.anyItems)}static viewGroup(t,e){t=`${t} ${e.attrs.css||""}`;const n=e.attrs.style||"";return r.m(t,{style:n},r.m(i.Layout,{columns:[],content:e.state.items.map((t,n)=>a.Selector.renderItem(e,n))}))}view(t){return u.viewGroup(".hs-options-buttons",t)}}e.OptionsButton=u},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0);e.Collapsible=class{oninit(t){t.state={initial:!0,expanded:!1,toggle:()=>{t.state.expanded=!t.state.expanded,t.state.initial=!1}}}view(t){const e=t.attrs.css,n=t.attrs.components,i=t.attrs.preArrow,a=t.attrs.postArrow;t.state.initial&&void 0!==t.attrs.isExpanded&&(t.state.expanded=t.attrs.isExpanded);const o=t.state.expanded?"hs-collapsible-expanded":"";return r.m(`.hs-collapsible ${e}`,[r.m(".hs-collapsible-title",{onclick:t.state.toggle},[i?r.m(`.hs-collapsible-pre .hs-collapsible-arrow-${t.state.expanded?"down":"right"}`):r.m(""),n[0],a?r.m(`.hs-collapsible-post .hs-collapsible-arrow-${t.state.expanded?"down":"left"}`):r.m("")]),n[1]?r.m(`.hs-collapsible-content ${o}`,n[1].map(t=>r.m("",t))):void 0])}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(13);e.Modal=class{oninit(t){t.state.id=Math.floor(1e3*Math.random()),t.state.showModal=!1}view(t){const e=()=>{t.state.showModal=!1,t.attrs.dismiss&&t.attrs.dismiss()},n={style:`width:${t.attrs.width||"auto"}; height:${t.attrs.height||"auto"};`};return t.attrs.setTrigger?t.attrs.setTrigger(()=>{t.state.showModal=!0,r.m.redraw()}):console.log("required attribute function 'setTrigger' is not defined"),t.state.showModal?r.m(".hs-modal-frame",[r.m(".hs-modal-background",{onclick:e},""),r.m(".hs-modal-foreground",n,t.attrs.content?[t.attrs.content,r.m(i.ToolbarButton,{onclick:e,symbols:i.ToolbarButton.getSymbol("cross")})]:"modal pane")]):r.m("span")}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0);class i{constructor(t,e){this.list=[],"string"==typeof t?r.m.request({method:"GET",url:t}).then(t=>this.captureList(t,e)):this.captureList(t,e)}captureList(t,e){this.list=e?e(t):t}}e.TypeAhead=class{oninit(t){t.state.inputNode="",t.state.hidePopdown=!0,t.state.value="",t.state.typeAheadList=[],t.state.onsubmit=t.attrs.onsubmit,t.state.list=t.attrs.list}view(t){const e=new i(t.state.list),n=e=>(t.state.inputNode.setSelectionRange(0,t.state.inputNode.value.length),t.state.hidePopdown=!0,t.state.onsubmit?t.state.onsubmit(e):console.log("no submit function defined")),a=e=>{e&&(t.state.inputNode.value=e.target.attributes.name.value,n(e.target.attributes.name.value))},o={contenteditable:!0,placeholder:t.attrs.placeholder,autofocus:t.attrs.autofocus||!0,onkeydown:e=>{const r=t.state.inputNode=e.target;if("Enter"===e.code)n(r.value);else if("Backspace"===e.code){const t=r.firstChild.data;t.length>0&&(r.value=t.slice(0))}},oninput:n=>{const r=t.state.inputNode=n.target,i=t.state.value=r.value,a=new RegExp(`${i}`,"gi"),o=new RegExp(`^${i}`,"gi");t.state.typeAheadList=e.list.filter(t=>t.match(a)),r.value=t.state.typeAheadList.filter(t=>t.match(o))[0]||i,t.state.hidePopdown=0===r.value.length;let u=i.length;r.setSelectionRange(u,r.value.length)}};return r.m(".hs-form",[r.m(`input.hs-typeahead-input${t.state.value?".hs-typeahead-value":".hs-typeahead-placeholder"}`,o,r.m.trust(t.state.value?t.state.value:t.attrs.placeholder)),t.state.hidePopdown?void 0:r.m(".hs-typeahead-list",t.state.typeAheadList.map(e=>r.m("",{onclick:a},function(t,e){const n=new RegExp(e,"gi"),i=t.replace(n,t=>`${t}`).split("<").map(e=>e.startsWith("/b>")?r.m("span",{name:t},e.slice(3)):e.startsWith("b>")?r.m("b",{name:t},e.slice(2)):r.m("span",{name:t},e));return r.m("span",i)}(e,t.state.value))))])}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(0),a=n(7),o=n(6),u=n(19);e.LeftNav=class extends i.Layout{getComponents(t){let e=r.m.route.param("lib"),n=r.m.route.param("field");const i=o.DocSets.get(e,0)||{name:"unknown",id:0};return r.m(".hs-left",[r.m(".hs-left-nav",function(t,e){if(0===t.kind){!function(t){const e={};t.modules=[],t.children&&t.children.forEach(n=>{if(!(n.flags&&n.flags.isExternal||s[n.name])){const r=n.innerModule?n.innerModule:n.name;let i=e[r];i||t.modules.push(i=e[r]={name:r,lib:t.lib,fullPath:t.fullPath+"."+r,groups:[]});const a={};i.groups.forEach(t=>a[t.title]=t),n.groups&&n.groups.forEach(t=>{let e=a[t.title];e||(e=a[t.title]={children:[],kind:t.kind,title:t.title},i.groups.push(e)),e.children=e.children.concat(t.children)})}})}(t);const n=t.modules.map(function(t){let n=!1;return e!==""+t.id&&0!==e.indexOf(t.fullPath)||(n=!0),r.m(a.Collapsible,{css:".hs-left-nav-module",preArrow:!0,isExpanded:n,components:[r.m(`${n?".hs-left-nav-selected":""}`,u.libLink("a.hs-left-nav-module-name ",t.lib,t.fullPath,t.name)),t.groups?t.groups.map(n=>(function(t,e,n){let i=[];return t&&t.children&&(i=t.children.map(function(t){return o.DocSets.get(e.lib,t)}).sort(c).map(function(e){const i=n===""+e.id||n===e.fullPath?".hs-left-nav-selected":"",a=e.flags&&e.flags.isExported,o=e.flags&&e.flags.isStatic,s=`a.hs-left-nav-entry ${i} ${a?".hs-left-nav-exported":""}`;return a||"Variables"!==t.title?r.m("",[o?"static":"",u.libLink(s,e.lib,e.fullPath,e.name)]):""}).filter(function(t){return""!==t})).length>0&&i.unshift(r.m(".hs-left-nav-header",t.title)),i.length>1?r.m(".hs-left-nav-entries",i):""})(n,t,e)):void 0]})});return n.unshift(r.m(".hs-left-nav-header","Modules")),[r.m(".hs-left-nav-content",n)]}}(i,n))])}};const s={overview:!0,index:!0};function c(t,e){return t.flags&&e.flags?t.flags.isExported&&e.flags.isExported?t.name>e.name:t.flags.isExported?-1:e.flags.isExported?1:t.name>e.name:t.name>e.name}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0);e.tooltip=function(t,e,n){return r.m(".hs-tooltip[href=#]",[t,r.m(`span.hs-tooltip-${n}`,e)])}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.shortCheckSum=function(t){for(var e=305419896,n=t.length,r=0;r=v.importance){const i=r.date(h);let a="string"==typeof e?e:k(e,0);const o=i+" "+g.prefix+m.desc+" "+a,u=`${f[t]||""} ${i} ${g.prefix} ${m.desc} ${p.clear} ${a}`;if(console.log(d?u:o),e&&e.stack&&console.log(e.stack),s&&n)return g.logToFile(r.date(s),o)}return Promise.resolve(void 0)}function k(t,e=1,n=""){return null===e&&(e=999),null===t?"null":void 0===t?"undefined":"function"==typeof t?"function":"string"==typeof t?`'${t}'`:"object"==typeof t?e<0?void 0===t.length?"{...}":"[...]":void 0!==t.length?`[${t.map(t=>void 0===t?"":k(t,e-1,n)).join(", ")}]`:"{\n"+Object.keys(t).map(r=>` ${n}${r}: ${k(t[r],e-1,n+" ")}`).join(",\n")+`\n${n}}`:t.toString()}const M=function(e,n=g.logToFile,r=g.pathExists){return t(e,n,r)};return M.DEBUG=i,M.INFO=a,M.WARN=o,M.ERROR=u,M.level=v,M.debug=function(t,e=!0){return x(i,t,e)},M.info=b,M.warn=y,M.error=_,M.format=w,M.prefix=function(t){return t&&(g.prefix=t),g.prefix},M.out=x,M.logFile=function(t){return null===t?(s=void 0,b("disabling logfile")):void 0===t?Promise.resolve(r.date(s)):t.indexOf("/")>=0?g.pathExists(t).then(e=>e?(s=t,b("now logging to file "+r.date(t))):(s=void 0,y(`path '${t}' doesn't exists; logfile disabled`))).catch(()=>(s=void 0,_(`checking path ${t}; logfile disabled`))):(""===t&&(t="log-%YYYY-%MM-%DD.txt"),b((s=t)?`now logging to file ${r.date(s)}`:"logfile disbaled"))},M.config=function(t){let e=!0;void 0!==t.colors&&(d=t.colors),void 0!==t.format&&w(t.format),void 0!==t.level&&v(t.level)},M.inspect=k,M}("",(t,e)=>Promise.resolve(void 0),t=>Promise.resolve(!(t.indexOf("/")>=0)))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(0),a=n(6),o=n(49),u=n(19);function s(t,e,n,i){const o=t=>a.DocSets.get(e,t),s={"External modules":".hs-item-external-module",Constructors:".hs-item-constructor",Classes:".hs-item-class",Interfaces:".hs-item-interface",Functions:".hs-item-function",Methods:".hs-item-method",Variables:".hs-item-variable","Object literals":".hs-item-object-literal",Properties:".hs-item-property","Type aliases":".hs-item-alias",Accessors:".hs-item-accessors"}[t.title]||".hs-item-unknown-member",c=t=>t.isPublic||t.isExported&&!t.isPrivate,f=t.children.map(o).filter(t=>!t.inheritedFrom).filter(t=>n?t.flags.isStatic:!t.flags.isStatic).filter(t=>i?c(t.flags):!c(t.flags)).map(e=>r.m(s,{id:u.makeID(t.title,e)},l(e))),h=t.children.map(o).filter(t=>t.inheritedFrom).filter(t=>n?t.flags.isStatic:!t.flags.isStatic).filter(t=>i?t.flags.isPublic:!t.flags.isPublic).map(e=>r.m(`.hs-item-inherited ${s}`,{id:u.makeID(t.title,e)},l(e))),d=i?"Public":"Protected or Private",p=n?"Static":"";return h.length>0&&h.unshift(r.m(".hs-item-inherited .hs-item-member-title",r.m("span",`${d} ${p} Inherited ${t.title}`))),f.length>0&&f.unshift(r.m(".hs-item-member-title",{id:t.title.toLowerCase()},r.m("span",`${d} ${p} ${t.title}`))),r.m(`.hs-item-member ${n?".hs-item-static":""} ${i?".hs-item-public":""}`,f.concat(h))}function c(t,e){try{return r.m(".hs-item-desc",[u.flags(t),u.kindString(t),u.itemName(t,t),u.signature(e,t),u.type(e,t.lib),u.extensionOf(t),u.inheritedFrom(t),u.sourceLink(t)])}catch(e){console.log(e),console.log(t)}}function l(t,e=t){return t.signatures?t.signatures.map(e=>r.m(".hs-item-child-signature",[c(t,e),o.comment(e,!0)])):[c(t,e),o.comment(e,!0)]}e.MainDetail=class extends i.Layout{getComponents(t){const e=r.m.route.param("lib"),n=r.m.route.param("field");t.attrs.route=void 0;let i=function(t,e){if(("0"===e||""===e)&&(e=a.DocSets.get(t,`${t}.overview`)))return function(t){const e=t.signatures?t.signatures[0]:t;return r.m(".hs-item-doc",[o.commentLong(e)])}(e)}(e,n)||function(t){const e=t.signatures?t.signatures[0]:t;return r.m(".hs-item-doc",[function(t,e){return r.m(".hs-item-title",{id:u.makeID("title",t)},c(t,e))}(t,e),o.commentLong(e),function t(e,n){return e.groups?r.m(".hs-item-members",[...e.groups.map(t=>s(t,e.lib,!0,!0)),...e.groups.map(t=>s(t,e.lib,!0,!1)),...e.groups.map(t=>s(t,e.lib,!1,!0)),...e.groups.map(t=>s(t,e.lib,!1,!1))]):e.parameters?r.m(".hs-item-members",function(t,e){let n=t.map(t=>r.m(".hs-item-parameter",{id:u.makeID("parameter",t)},l(t)));return n.unshift(r.m(".hs-item-member-title",{id:"parameters"},r.m("span","Parameters"))),r.m(".hs-item-member",n)}(e.parameters,e.lib)):e.type&&e.type.declaration?(e.type.declaration.lib=e.lib,t(e.type.declaration,n)):r.m(".hs-item-members")}(e,e)])}(a.DocSets.get(e,n)||"");return r.m(".hs-main-detail",[i])}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(50),a=n(52);function o(t,e){let n=t.shortText||"";return t.text&&(n+="\n"+(t.text||"")),t.tags&&t.tags.map(t=>{"description"===t.tag&&(n=t.text)}),n=n.replace(//gi,e?"":a.example),r.m(".hs-item-comment-desc",function(t,e){let a=n;return a=a.replace(/([\S\s]*?)<\/code>/gi,function(t){let e=0;return"
"+t.substring(6,t.length-7).trim().replace(/(<)/g,"<").replace(/(>)/g,">").split("\n").map(t=>{let n=e,r=t.trim();return e+=Math.max(-1,Math.min(1,r.split("{").length-r.split("}").length)),e+=Math.max(-1,Math.min(1,r.split("[").length-r.split("]").length)),''.repeat(e
"}),r.m.trust(i.markDown(a,e,r.m.route.get()))}(0,e))}function u(t,e){let n=t.returns;return r.m(".hs-item-comment-return",n?[r.m("span.hs-item-comment-tag","returns:"),r.m("span.hs-item-comment-text",n)]:"")}function s(t){return r.m("",Object.keys(t).map(e=>{switch(e){case"tags":case"shortText":case"text":case"description":case"returns":return"";default:return r.m(".hs-item-comment-special",[r.m("span.hs-item-comment-tag",e),r.m("span.hs-item-comment-text",t[e])])}}))}e.commentLong=function(t){let e=[];return t.comment&&(e.push(o(t.comment,!1)),e.push(u(t.comment)),e.push(s(t.comment))),r.m(".hs-item-comment",e)},e.comment=function(t,e=!1){let n=[];return t.comment&&(n.push(o(t.comment,e)),e||(n.push((a=t.comment,r.m("",a.tags?a.tags.map(t=>{switch(t.tag){case"description":return"";default:return r.m(".hs-item-comment-special",[r.m("span.hs-item-comment-tag",t.tag),r.m("span.hs-item-comment-text",t.text)])}}):[]))),t.parameters&&(n=n.concat((i=t.parameters,r.m(".hs-item-comment-params",i.map(t=>r.m(".hs-item-comment-param",[r.m("span.hs-item-comment-tag",t.name+":"),r.m("span.hs-item-comment-text",t.comment?(void 0!==t.defaultValue?`[default: ${t.defaultValue}] `:"")+t.comment.text:"")]))))))),n.push(u(t.comment)),n.push(s(t.comment))),r.m(".hs-item-comment",n);var i,a}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(51),i=n(0);e.markDown=function(t,e=!1,n=i.m.route.get()){const a=new r.Converter({tables:!0,ghCompatibleHeaderId:!0,smartIndentationFix:!0,takslists:!0,strikethrough:!0});let o=t?a.makeHtml(t):"";if(e){const t=o.indexOf("

");t>0&&(o=o.substring(0,t))}return function(t,e){let[n]=function(t){let n,r;return e.replace(/\/([^\/.]*)\/([^\/\s]*$)/gi,(t,...e)=>(n=e[0],r=e[1],"")),[n,r]}();return t.replace(/\s{@link ([\S]*)\s*([^}]+)}/gi,(t,...e)=>{const r=e[0],i=e[1];let[a,o]=function(t){let e,r,i;return t.indexOf(":")>0?[e,r]=t.split(":"):(e=n,r=t),r.indexOf("#")>0&&([r,i]=r.split("#")),[e,r,i]}(r);return""===o||"0"===o||"overview"===o?` ${i}`:` ${i}`})}(o,n)}},function(t,e,n){var r;/*! showdown v 1.9.0 - 10-11-2018 */ /*! showdown v 1.9.0 - 10-11-2018 */ +(function(){function i(t){"use strict";var e={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex:
foo
",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including ``, `` and `` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===t)return JSON.parse(JSON.stringify(e));var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=e[r].defaultValue);return n}var a={},o={},u={},s=i(!0),c="vanilla",l={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:i(!0),allOn:function(){"use strict";var t=i(!0),e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=!0);return e}()};function f(t,e){"use strict";var n=e?"Error in "+e+" extension->":"Error in unnamed extension",r={valid:!0,error:""};a.helper.isArray(t)||(t=[t]);for(var i=0;i").replace(/&/g,"&")};var d=function(t,e,n,r){"use strict";var i,a,o,u,s,c=r||"",l=c.indexOf("g")>-1,f=new RegExp(e+"|"+n,"g"+c.replace(/g/g,"")),h=new RegExp(e,c.replace(/g/g,"")),d=[];do{for(i=0;o=f.exec(t);)if(h.test(o[0]))i++||(u=(a=f.lastIndex)-o[0].length);else if(i&&!--i){s=o.index+o[0].length;var p={left:{start:u,end:a},match:{start:a,end:o.index},right:{start:o.index,end:s},wholeMatch:{start:u,end:s}};if(d.push(p),!l)return d}}while(i&&(f.lastIndex=a));return d};a.helper.matchRecursiveRegExp=function(t,e,n,r){"use strict";for(var i=d(t,e,n,r),a=[],o=0;o0){var l=[];0!==u[0].wholeMatch.start&&l.push(t.slice(0,u[0].wholeMatch.start));for(var f=0;f=0?r+(n||0):r},a.helper.splitAtIndex=function(t,e){"use strict";if(!a.helper.isString(t))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[t.substring(0,e),t.substring(e)]},a.helper.encodeEmailAddress=function(t){"use strict";var e=[function(t){return"&#"+t.charCodeAt(0)+";"},function(t){return"&#x"+t.charCodeAt(0).toString(16)+";"},function(t){return t}];return t.replace(/./g,function(t){if("@"===t)t=e[Math.floor(2*Math.random())](t);else{var n=Math.random();t=n>.9?e[2](t):n>.45?e[1](t):e[0](t)}return t})},a.helper.padEnd=function(t,e,n){"use strict";return e>>=0,n=String(n||" "),t.length>e?String(t):((e-=t.length)>n.length&&(n+=n.repeat(e/n.length)),String(t)+n.slice(0,e))},"undefined"==typeof console&&(console={warn:function(t){"use strict";alert(t)},log:function(t){"use strict";alert(t)},error:function(t){"use strict";throw t}}),a.helper.regexes={asteriskDashAndColon:/([*_:~])/g},a.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:':octocat:',showdown:"S"},a.Converter=function(t){"use strict";var e={},n=[],r=[],i={},o=c,h={parsed:{},raw:"",format:""};function d(t,e){if(e=e||null,a.helper.isString(t)){if(e=t=a.helper.stdExtName(t),a.extensions[t])return console.warn("DEPRECATION WARNING: "+t+" is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!"),void function(t,e){"function"==typeof t&&(t=t(new a.Converter)),a.helper.isArray(t)||(t=[t]);var i=f(t,e);if(!i.valid)throw Error(i.error);for(var o=0;o[ \t]+¨NBSP;<"),!e){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");e=window.document}var n=e.createElement("div");n.innerHTML=t;var r={preList:function(t){for(var e=t.querySelectorAll("pre"),n=[],r=0;r'}else n.push(e[r].innerHTML),e[r].innerHTML="",e[r].setAttribute("prenum",r.toString());return n}(n)};!function t(e){for(var n=0;n? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(i||(i=r.toLowerCase().replace(/ ?\n/g," ")),o="#"+i,a.helper.isUndefined(n.gUrls[i]))return t;o=n.gUrls[i],a.helper.isUndefined(n.gTitles[i])||(c=n.gTitles[i])}var l='"+r+""};return t=(t=(t=(t=(t=n.converter._dispatch("anchors.before",t,e,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,r)).replace(/\[([^\[\]]+)]()()()()()/g,r),e.ghMentions&&(t=t.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(t,n,r,i,o){if("\\"===r)return n+i;if(!a.helper.isString(e.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var u=e.ghMentionsLink.replace(/\{u}/g,o),s="";return e.openLinksInNewWindow&&(s=' target="¨E95Eblank"'),n+'"+i+""})),n.converter._dispatch("anchors.after",t,e,n)});var p=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,m=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,g=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,v=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-\/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,b=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,y=function(t){"use strict";return function(e,n,r,i,o,u,s){var c=r=r.replace(a.helper.regexes.asteriskDashAndColon,a.helper.escapeCharactersCallback),l="",f="",h=n||"",d=s||"";return/^www\./i.test(r)&&(r=r.replace(/^www\./i,"http://www.")),t.excludeTrailingPunctuationFromURLs&&u&&(l=u),t.openLinksInNewWindow&&(f=' target="¨E95Eblank"'),h+'"+c+""+l+d}},_=function(t,e){"use strict";return function(n,r,i){var o="mailto:";return r=r||"",i=a.subParser("unescapeSpecialChars")(i,t,e),t.encodeEmails?(o=a.helper.encodeEmailAddress(o+i),i=a.helper.encodeEmailAddress(i)):o+=i,r+''+i+""}};a.subParser("autoLinks",function(t,e,n){"use strict";return t=(t=(t=n.converter._dispatch("autoLinks.before",t,e,n)).replace(g,y(e))).replace(b,_(e,n)),n.converter._dispatch("autoLinks.after",t,e,n)}),a.subParser("simplifiedAutoLinks",function(t,e,n){"use strict";return e.simplifiedAutoLink?(t=n.converter._dispatch("simplifiedAutoLinks.before",t,e,n),t=(t=e.excludeTrailingPunctuationFromURLs?t.replace(m,y(e)):t.replace(p,y(e))).replace(v,_(e,n)),t=n.converter._dispatch("simplifiedAutoLinks.after",t,e,n)):t}),a.subParser("blockGamut",function(t,e,n){"use strict";return t=n.converter._dispatch("blockGamut.before",t,e,n),t=a.subParser("blockQuotes")(t,e,n),t=a.subParser("headers")(t,e,n),t=a.subParser("horizontalRule")(t,e,n),t=a.subParser("lists")(t,e,n),t=a.subParser("codeBlocks")(t,e,n),t=a.subParser("tables")(t,e,n),t=a.subParser("hashHTMLBlocks")(t,e,n),t=a.subParser("paragraphs")(t,e,n),n.converter._dispatch("blockGamut.after",t,e,n)}),a.subParser("blockQuotes",function(t,e,n){"use strict";t=n.converter._dispatch("blockQuotes.before",t,e,n),t+="\n\n";var r=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return e.splitAdjacentBlockquotes&&(r=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),t=t.replace(r,function(t){return t=(t=(t=t.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),t=a.subParser("githubCodeBlocks")(t,e,n),t=(t=(t=a.subParser("blockGamut")(t,e,n)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*
[^\r]+?<\/pre>)/gm,function(t,e){var n=e;return(n=n.replace(/^  /gm,"¨0")).replace(/¨0/g,"")}),a.subParser("hashBlock")("
\n"+t+"\n
",e,n)}),n.converter._dispatch("blockQuotes.after",t,e,n)}),a.subParser("codeBlocks",function(t,e,n){"use strict";return t=n.converter._dispatch("codeBlocks.before",t,e,n),t=(t=(t+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(t,r,i){var o=r,u=i,s="\n";return o=a.subParser("outdent")(o,e,n),o=a.subParser("encodeCode")(o,e,n),o=(o=(o=a.subParser("detab")(o,e,n)).replace(/^\n+/g,"")).replace(/\n+$/g,""),e.omitExtraWLInCodeBlocks&&(s=""),o="
"+o+s+"
",a.subParser("hashBlock")(o,e,n)+u})).replace(/¨0/,""),n.converter._dispatch("codeBlocks.after",t,e,n)}),a.subParser("codeSpans",function(t,e,n){"use strict";return void 0===(t=n.converter._dispatch("codeSpans.before",t,e,n))&&(t=""),t=t.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(t,r,i,o){var u=o;return u=(u=u.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),u=r+""+(u=a.subParser("encodeCode")(u,e,n))+"",a.subParser("hashHTMLSpans")(u,e,n)}),n.converter._dispatch("codeSpans.after",t,e,n)}),a.subParser("completeHTMLDocument",function(t,e,n){"use strict";if(!e.completeHTMLDocument)return t;t=n.converter._dispatch("completeHTMLDocument.before",t,e,n);var r="html",i="\n",a="",o='\n',u="",s="";for(var c in void 0!==n.metadata.parsed.doctype&&(i="\n","html"!==(r=n.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==r||(o='')),n.metadata.parsed)if(n.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":a=""+n.metadata.parsed.title+"\n";break;case"charset":o="html"===r||"html5"===r?'\n':'\n';break;case"language":case"lang":u=' lang="'+n.metadata.parsed[c]+'"',s+='\n';break;default:s+='\n'}return t=i+"\n\n"+a+o+s+"\n\n"+t.trim()+"\n\n",n.converter._dispatch("completeHTMLDocument.after",t,e,n)}),a.subParser("detab",function(t,e,n){"use strict";return t=(t=(t=(t=(t=(t=n.converter._dispatch("detab.before",t,e,n)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(t,e){for(var n=e,r=4-n.length%4,i=0;i/g,">"),n.converter._dispatch("encodeAmpsAndAngles.after",t,e,n)}),a.subParser("encodeBackslashEscapes",function(t,e,n){"use strict";return t=(t=(t=n.converter._dispatch("encodeBackslashEscapes.before",t,e,n)).replace(/\\(\\)/g,a.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,a.helper.escapeCharactersCallback),n.converter._dispatch("encodeBackslashEscapes.after",t,e,n)}),a.subParser("encodeCode",function(t,e,n){"use strict";return t=(t=n.converter._dispatch("encodeCode.before",t,e,n)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,a.helper.escapeCharactersCallback),n.converter._dispatch("encodeCode.after",t,e,n)}),a.subParser("escapeSpecialCharsWithinTagAttributes",function(t,e,n){"use strict";return t=(t=(t=n.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",t,e,n)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(t){return t.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,a.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(t){return t.replace(/([\\`*_~=|])/g,a.helper.escapeCharactersCallback)}),n.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",t,e,n)}),a.subParser("githubCodeBlocks",function(t,e,n){"use strict";return e.ghCodeBlocks?(t=n.converter._dispatch("githubCodeBlocks.before",t,e,n),t=(t=(t+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(t,r,i,o){var u=e.omitExtraWLInCodeBlocks?"":"\n";return o=a.subParser("encodeCode")(o,e,n),o="
"+(o=(o=(o=a.subParser("detab")(o,e,n)).replace(/^\n+/g,"")).replace(/\n+$/g,""))+u+"
",o=a.subParser("hashBlock")(o,e,n),"\n\n¨G"+(n.ghCodeBlocks.push({text:t,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),n.converter._dispatch("githubCodeBlocks.after",t,e,n)):t}),a.subParser("hashBlock",function(t,e,n){"use strict";return t=(t=n.converter._dispatch("hashBlock.before",t,e,n)).replace(/(^\n+|\n+$)/g,""),t="\n\n¨K"+(n.gHtmlBlocks.push(t)-1)+"K\n\n",n.converter._dispatch("hashBlock.after",t,e,n)}),a.subParser("hashCodeTags",function(t,e,n){"use strict";return t=n.converter._dispatch("hashCodeTags.before",t,e,n),t=a.helper.replaceRecursiveRegExp(t,function(t,r,i,o){var u=i+a.subParser("encodeCode")(r,e,n)+o;return"¨C"+(n.gHtmlSpans.push(u)-1)+"C"},"]*>","
","gim"),n.converter._dispatch("hashCodeTags.after",t,e,n)}),a.subParser("hashElement",function(t,e,n){"use strict";return function(t,e){var r=e;return r=(r=(r=r.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(n.gHtmlBlocks.push(r)-1)+"K\n\n"}}),a.subParser("hashHTMLBlocks",function(t,e,n){"use strict";t=n.converter._dispatch("hashHTMLBlocks.before",t,e,n);var r=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],i=function(t,e,r,i){var a=t;return-1!==r.search(/\bmarkdown\b/)&&(a=r+n.converter.makeHtml(e)+i),"\n\n¨K"+(n.gHtmlBlocks.push(a)-1)+"K\n\n"};e.backslashEscapesHTMLTags&&(t=t.replace(/\\<(\/?[^>]+?)>/g,function(t,e){return"<"+e+">"}));for(var o=0;o]*>)","im"),c="<"+r[o]+"\\b[^>]*>",l="";-1!==(u=a.helper.regexIndexOf(t,s));){var f=a.helper.splitAtIndex(t,u),h=a.helper.replaceRecursiveRegExp(f[1],i,c,l,"im");if(h===f[1])break;t=f[0].concat(h)}return t=t.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,a.subParser("hashElement")(t,e,n)),t=(t=a.helper.replaceRecursiveRegExp(t,function(t){return"\n\n¨K"+(n.gHtmlBlocks.push(t)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,a.subParser("hashElement")(t,e,n)),n.converter._dispatch("hashHTMLBlocks.after",t,e,n)}),a.subParser("hashHTMLSpans",function(t,e,n){"use strict";function r(t){return"¨C"+(n.gHtmlSpans.push(t)-1)+"C"}return t=(t=(t=(t=(t=n.converter._dispatch("hashHTMLSpans.before",t,e,n)).replace(/<[^>]+?\/>/gi,function(t){return r(t)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(t){return r(t)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(t){return r(t)})).replace(/<[^>]+?>/gi,function(t){return r(t)}),n.converter._dispatch("hashHTMLSpans.after",t,e,n)}),a.subParser("unhashHTMLSpans",function(t,e,n){"use strict";t=n.converter._dispatch("unhashHTMLSpans.before",t,e,n);for(var r=0;r]*>\\s*]*>","^ {0,3}\\s*
","gim"),n.converter._dispatch("hashPreCodeTags.after",t,e,n)}),a.subParser("headers",function(t,e,n){"use strict";t=n.converter._dispatch("headers.before",t,e,n);var r=isNaN(parseInt(e.headerLevelStart))?1:parseInt(e.headerLevelStart),i=e.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,o=e.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;t=(t=t.replace(i,function(t,i){var o=a.subParser("spanGamut")(i,e,n),u=e.noHeaderId?"":' id="'+s(i)+'"',c=""+o+"";return a.subParser("hashBlock")(c,e,n)})).replace(o,function(t,i){var o=a.subParser("spanGamut")(i,e,n),u=e.noHeaderId?"":' id="'+s(i)+'"',c=r+1,l=""+o+"";return a.subParser("hashBlock")(l,e,n)});var u=e.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;function s(t){var r,i;if(e.customizedHeaderId){var o=t.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(t=o[1])}return r=t,i=a.helper.isString(e.prefixHeaderId)?e.prefixHeaderId:!0===e.prefixHeaderId?"section-":"",e.rawPrefixHeaderId||(r=i+r),r=e.ghCompatibleHeaderId?r.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():e.rawHeaderId?r.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():r.replace(/[^\w]/g,"").toLowerCase(),e.rawPrefixHeaderId&&(r=i+r),n.hashLinkCounts[r]?r=r+"-"+n.hashLinkCounts[r]++:n.hashLinkCounts[r]=1,r}return t=t.replace(u,function(t,i,o){var u=o;e.customizedHeaderId&&(u=o.replace(/\s?\{([^{]+?)}\s*$/,""));var c=a.subParser("spanGamut")(u,e,n),l=e.noHeaderId?"":' id="'+s(o)+'"',f=r-1+i.length,h=""+c+"";return a.subParser("hashBlock")(h,e,n)}),n.converter._dispatch("headers.after",t,e,n)}),a.subParser("horizontalRule",function(t,e,n){"use strict";t=n.converter._dispatch("horizontalRule.before",t,e,n);var r=a.subParser("hashBlock")("
",e,n);return t=(t=(t=t.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,r)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,r)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,r),n.converter._dispatch("horizontalRule.after",t,e,n)}),a.subParser("images",function(t,e,n){"use strict";function r(t,e,r,i,o,u,s,c){var l=n.gUrls,f=n.gTitles,h=n.gDimensions;if(r=r.toLowerCase(),c||(c=""),t.search(/\(? ?(['"].*['"])?\)$/m)>-1)i="";else if(""===i||null===i){if(""!==r&&null!==r||(r=e.toLowerCase().replace(/ ?\n/g," ")),i="#"+r,a.helper.isUndefined(l[r]))return t;i=l[r],a.helper.isUndefined(f[r])||(c=f[r]),a.helper.isUndefined(h[r])||(o=h[r].width,u=h[r].height)}e=e.replace(/"/g,""").replace(a.helper.regexes.asteriskDashAndColon,a.helper.escapeCharactersCallback);var d=''+e+'"}return t=(t=(t=(t=(t=(t=n.converter._dispatch("images.before",t,e,n)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,r)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(t,e,n,i,a,o,u,s){return r(t,e,n,i=i.replace(/\s/g,""),a,o,0,s)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,r)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,r)).replace(/!\[([^\[\]]+)]()()()()()/g,r),n.converter._dispatch("images.after",t,e,n)}),a.subParser("italicsAndBold",function(t,e,n){"use strict";function r(t,e,n){return e+t+n}return t=n.converter._dispatch("italicsAndBold.before",t,e,n),t=e.literalMidWordUnderscores?(t=(t=t.replace(/\b___(\S[\s\S]*?)___\b/g,function(t,e){return r(e,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(t,e){return r(e,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(t,e){return r(e,"","")}):(t=(t=t.replace(/___(\S[\s\S]*?)___/g,function(t,e){return/\S$/.test(e)?r(e,"",""):t})).replace(/__(\S[\s\S]*?)__/g,function(t,e){return/\S$/.test(e)?r(e,"",""):t})).replace(/_([^\s_][\s\S]*?)_/g,function(t,e){return/\S$/.test(e)?r(e,"",""):t}),t=e.literalMidWordAsterisks?(t=(t=t.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(t,e,n){return r(n,e+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(t,e,n){return r(n,e+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(t,e,n){return r(n,e+"","")}):(t=(t=t.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(t,e){return/\S$/.test(e)?r(e,"",""):t})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(t,e){return/\S$/.test(e)?r(e,"",""):t})).replace(/\*([^\s*][\s\S]*?)\*/g,function(t,e){return/\S$/.test(e)?r(e,"",""):t}),n.converter._dispatch("italicsAndBold.after",t,e,n)}),a.subParser("lists",function(t,e,n){"use strict";function r(t,r){n.gListLevel++,t=t.replace(/\n{2,}$/,"\n");var i=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(t+="¨0");return e.disableForced4SpacesIndentedSublists&&(i=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),t=(t=t.replace(i,function(t,r,i,u,s,c,l){l=l&&""!==l.trim();var f=a.subParser("outdent")(s,e,n),h="";return c&&e.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',f=f.replace(/^[ \t]*\[(x|X| )?]/m,function(){var t='"})),f=f.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(t){return"¨A"+t}),r||f.search(/\n{2,}/)>-1?(f=a.subParser("githubCodeBlocks")(f,e,n),f=a.subParser("blockGamut")(f,e,n)):(f=(f=a.subParser("lists")(f,e,n)).replace(/\n$/,""),f=(f=a.subParser("hashHTMLBlocks")(f,e,n)).replace(/\n\n+/g,"\n\n"),f=o?a.subParser("paragraphs")(f,e,n):a.subParser("spanGamut")(f,e,n)),""+(f=f.replace("¨A",""))+"\n"})).replace(/¨0/g,""),n.gListLevel--,r&&(t=t.replace(/\s+$/,"")),t}function i(t,e){if("ol"===e){var n=t.match(/^ *(\d+)\./);if(n&&"1"!==n[1])return' start="'+n[1]+'"'}return""}function o(t,n,a){var o=e.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,u=e.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,s="ul"===n?o:u,c="";if(-1!==t.search(s))!function e(l){var f=l.search(s),h=i(t,n);-1!==f?(c+="\n\n<"+n+h+">\n"+r(l.slice(0,f),!!a)+"\n",s="ul"==(n="ul"===n?"ol":"ul")?o:u,e(l.slice(f))):c+="\n\n<"+n+h+">\n"+r(l,!!a)+"\n"}(t);else{var l=i(t,n);c="\n\n<"+n+l+">\n"+r(t,!!a)+"\n"}return c}return t=n.converter._dispatch("lists.before",t,e,n),t+="¨0",t=(t=n.gListLevel?t.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(t,e,n){return o(e,n.search(/[*+-]/g)>-1?"ul":"ol",!0)}):t.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(t,e,n,r){return o(n,r.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),n.converter._dispatch("lists.after",t,e,n)}),a.subParser("metadata",function(t,e,n){"use strict";if(!e.metadata)return t;function r(t){n.metadata.raw=t,(t=(t=t.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(t,e,r){return n.metadata.parsed[e]=r,""})}return t=(t=(t=(t=n.converter._dispatch("metadata.before",t,e,n)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(t,e,n){return r(n),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(t,e,i){return e&&(n.metadata.format=e),r(i),"¨M"})).replace(/¨M/g,""),n.converter._dispatch("metadata.after",t,e,n)}),a.subParser("outdent",function(t,e,n){"use strict";return t=(t=(t=n.converter._dispatch("outdent.before",t,e,n)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),n.converter._dispatch("outdent.after",t,e,n)}),a.subParser("paragraphs",function(t,e,n){"use strict";for(var r=(t=(t=(t=n.converter._dispatch("paragraphs.before",t,e,n)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),i=[],o=r.length,u=0;u=0?i.push(s):s.search(/\S/)>=0&&(s=(s=a.subParser("spanGamut")(s,e,n)).replace(/^([ \t]*)/g,"

"),s+="

",i.push(s))}for(o=i.length,u=0;u]*>\s*]*>/.test(l)&&(f=!0)}i[u]=l}return t=(t=(t=i.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),n.converter._dispatch("paragraphs.after",t,e,n)}),a.subParser("runExtension",function(t,e,n,r){"use strict";if(t.filter)e=t.filter(e,r.converter,n);else if(t.regex){var i=t.regex;i instanceof RegExp||(i=new RegExp(i,"g")),e=e.replace(i,t.replace)}return e}),a.subParser("spanGamut",function(t,e,n){"use strict";return t=n.converter._dispatch("spanGamut.before",t,e,n),t=a.subParser("codeSpans")(t,e,n),t=a.subParser("escapeSpecialCharsWithinTagAttributes")(t,e,n),t=a.subParser("encodeBackslashEscapes")(t,e,n),t=a.subParser("images")(t,e,n),t=a.subParser("anchors")(t,e,n),t=a.subParser("autoLinks")(t,e,n),t=a.subParser("simplifiedAutoLinks")(t,e,n),t=a.subParser("emoji")(t,e,n),t=a.subParser("underline")(t,e,n),t=a.subParser("italicsAndBold")(t,e,n),t=a.subParser("strikethrough")(t,e,n),t=a.subParser("ellipsis")(t,e,n),t=a.subParser("hashHTMLSpans")(t,e,n),t=a.subParser("encodeAmpsAndAngles")(t,e,n),e.simpleLineBreaks?/\n\n¨K/.test(t)||(t=t.replace(/\n+/g,"
\n")):t=t.replace(/ +\n/g,"
\n"),n.converter._dispatch("spanGamut.after",t,e,n)}),a.subParser("strikethrough",function(t,e,n){"use strict";return e.strikethrough&&(t=(t=n.converter._dispatch("strikethrough.before",t,e,n)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(t,r){return function(t){return e.simplifiedAutoLink&&(t=a.subParser("simplifiedAutoLinks")(t,e,n)),""+t+""}(r)}),t=n.converter._dispatch("strikethrough.after",t,e,n)),t}),a.subParser("stripLinkDefinitions",function(t,e,n){"use strict";var r=function(t,r,i,o,u,s,c){return r=r.toLowerCase(),i.match(/^data:.+?\/.+?;base64,/)?n.gUrls[r]=i.replace(/\s/g,""):n.gUrls[r]=a.subParser("encodeAmpsAndAngles")(i,e,n),s?s+c:(c&&(n.gTitles[r]=c.replace(/"|'/g,""")),e.parseImgDimensions&&o&&u&&(n.gDimensions[r]={width:o,height:u}),"")};return(t=(t=(t+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,r)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,r)).replace(/¨0/,"")}),a.subParser("tables",function(t,e,n){"use strict";if(!e.tables)return t;function r(t,r){return""+a.subParser("spanGamut")(t,e,n)+"\n"}function i(t){var i,o=t.split("\n");for(i=0;i"+(s=a.subParser("spanGamut")(s,e,n))+"\n"));for(i=0;i\n\n\n",i=0;i\n";for(var a=0;a\n"}return n+"\n\n"}(p,g)}return t=(t=(t=(t=n.converter._dispatch("tables.before",t,e,n)).replace(/\\(\|)/g,a.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,i)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,i),n.converter._dispatch("tables.after",t,e,n)}),a.subParser("underline",function(t,e,n){"use strict";return e.underline?(t=n.converter._dispatch("underline.before",t,e,n),t=(t=e.literalMidWordUnderscores?(t=t.replace(/\b___(\S[\s\S]*?)___\b/g,function(t,e){return""+e+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(t,e){return""+e+""}):(t=t.replace(/___(\S[\s\S]*?)___/g,function(t,e){return/\S$/.test(e)?""+e+"":t})).replace(/__(\S[\s\S]*?)__/g,function(t,e){return/\S$/.test(e)?""+e+"":t})).replace(/(_)/g,a.helper.escapeCharactersCallback),t=n.converter._dispatch("underline.after",t,e,n)):t}),a.subParser("unescapeSpecialChars",function(t,e,n){"use strict";return t=(t=n.converter._dispatch("unescapeSpecialChars.before",t,e,n)).replace(/¨E(\d+)E/g,function(t,e){var n=parseInt(e);return String.fromCharCode(n)}),n.converter._dispatch("unescapeSpecialChars.after",t,e,n)}),a.subParser("makeMarkdown.blockquote",function(t,e){"use strict";var n="";if(t.hasChildNodes())for(var r=t.childNodes,i=r.length,o=0;o "+(n=n.trim()).split("\n").join("\n> ")}),a.subParser("makeMarkdown.codeBlock",function(t,e){"use strict";var n=t.getAttribute("language"),r=t.getAttribute("precodenum");return"```"+n+"\n"+e.preList[r]+"\n```"}),a.subParser("makeMarkdown.codeSpan",function(t){"use strict";return"`"+t.innerHTML+"`"}),a.subParser("makeMarkdown.emphasis",function(t,e){"use strict";var n="";if(t.hasChildNodes()){n+="*";for(var r=t.childNodes,i=r.length,o=0;o",t.hasAttribute("width")&&t.hasAttribute("height")&&(e+=" ="+t.getAttribute("width")+"x"+t.getAttribute("height")),t.hasAttribute("title")&&(e+=' "'+t.getAttribute("title")+'"'),e+=")"),e}),a.subParser("makeMarkdown.links",function(t,e){"use strict";var n="";if(t.hasChildNodes()&&t.hasAttribute("href")){var r=t.childNodes,i=r.length;n="[";for(var o=0;o",t.hasAttribute("title")&&(n+=' "'+t.getAttribute("title")+'"'),n+=")"}return n}),a.subParser("makeMarkdown.list",function(t,e,n){"use strict";var r="";if(!t.hasChildNodes())return"";for(var i=t.childNodes,o=i.length,u=t.getAttribute("start")||1,s=0;s"+e.preList[n]+""}),a.subParser("makeMarkdown.strikethrough",function(t,e){"use strict";var n="";if(t.hasChildNodes()){n+="~~";for(var r=t.childNodes,i=r.length,o=0;otr>th"),s=t.querySelectorAll("tbody>tr");for(n=0;np&&(p=m)}for(n=0;n/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),void 0===(r=function(){"use strict";return a}.call(e,n,e,t))||(t.exports=r)}).call(this)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(0),i=n(7),a=n(7),o=n(0),u=n(0),s=n(2),c=n(2),l=n(2),f={m:Promise.resolve(r.m),hsutil:Promise.resolve(l),hslayout:Promise.resolve(o),hswidget:Promise.resolve(a),hsdatab:Promise.resolve().then(()=>n(15)),hsgraph:Promise.resolve().then(()=>n(54))},h={};function d(){return"hs"+Math.floor(1e6*Math.random())}function p(t){return Promise.resolve(t).then(m).then(c.delay(1))}function m(t){let e=t.activeSrcPage||"js";const n=document.getElementById(t.exampleID);return t.desc.clicked=n=>{e=t.activeSrcPage=n},r.m.mount(n,{view:()=>r.m(u.Layout,{columns:["50%"],content:[r.m(u.Layout,{content:r.m(".hs-layout .hs-execution",{id:t.menuID},"placeholder")}),r.m(u.Layout,{rows:["30px","fill"],css:".hs-source",content:[r.m(i.Menu,{desc:t.desc,size:["50px"]}),r.m(u.Layout,{content:r.m(".hs-layout .hs-source-main",r.m.trust(`
${t.pages[e]}
`))})]})]})}),t}function g(t){const e=document.getElementById(t.menuID);if(e)try{t.executeScript(e)}catch(e){console.log("error executing script: "+e),console.log(t.executeSource),console.log(e.stack)}else console.log(`root not found for menuID ${t.menuID}`);return r.m.redraw(),t}function v(t){console.log("rejection executing script:"),console.log(t)}e.example=function(t){const e=s.shortCheckSum(t);let n=h[e];n||((n=h[e]=function(t){return{exampleID:d(),menuID:d(),desc:{items:[],selectedItem:"js",clicked:()=>p(t).then(g).catch(v),size:["50px"]},pages:{},activeSrcPage:void 0}}(n)).executeSource=t,function(t,e){const n=Object.keys(f);Promise.all(n.map(t=>f[t])).then(r=>{try{const i=new Function("root",...n,function(t,e){let n=e.match(/)/i);if(n&&n[1]){const e=n[1].split("=");t.attrs={[e[0]]:e[1]}}return e.replace(/([\S\s]*?)<\/file>/gi,function(e){const n=[...arguments],r=n[2].trim();return t.desc.items.push(n[1]),t.pages[n[1]]=r,""}),t.pages.js}(t,e));return t.executeScript=t=>i(t,...r),!0}catch(t){return console.log("creating script:"+t),!1}})}(n,t)),document.getElementById(n.menuID)||p(n).then(c.delay(1)).then(g).catch(v);const r=(n.attrs?n.attrs.height:void 0)||"300px";return``}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(21);function i(t,e,n,r){const i=r(t),a="function"==typeof e,o="object"==typeof e&&void 0!==e.length;return isNaN(i)?(console.log(`column name '${t}' cannot be resolved in terminal condition ${t}=${e}`),console.log(n),!1):a?e(n[i],n):o?0===e.length||e.some(t=>n[i]===t):n[i]===e}e.filter=function(t,e){const n=e=>t.colNumber(e);try{return new r.Data({name:t.getName(),colNames:t.colNames(),rows:t.getData().filter((t,r)=>(function t(e,n,r,a,o){let u=!1,s=!0;if(void 0===e)return!0;if("number"==typeof e)return e===r;if("object"!=typeof e)return console.error(`unrecognized condition: ${JSON.stringify(e)}`),!1;{const c=e;if(void 0!==c.length)return void 0===o&&(o=!1),0!==c.length&&(o?c.every(e=>t(e,n,r,a,o)):c.some(e=>t(e,n,r,a,o)));void 0===o&&(o=!0);for(const c in e){let l=o;const f=e;switch(c){case"or":l=t(f.or,n,r,a,!1);break;case"and":l=t(f.and,n,r,a,!0);break;case"not":l=!t(f.not,n,r,a);break;default:l=i(c,e[c],n,a)}if(l){if(u=!0,!o)break}else if(s=!1,o)break}}return o?s:u})(e,t,r,n))})}catch(t){console.log(t),console.log(t.stack)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(55);e.Graph=r.Graph;var i=n(16);e.Series=i.Series;var a=n(9);e.Axes=a.Axes;var o=n(22);e.Scale=o.Scale;var u=n(23);e.Grid=u.Grid;var s=n(24);e.Legend=s.Legend;var c=n(62);e.d3=c.d3},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(15),i=n(9),a=n(22),o=n(56),u=n(16),s=n(61),c=n(23),l=n(24),f=n(3),h=n(2),d=1e3;let p=700;class m extends f.SVGElem{constructor(){super(...arguments),this.marginOffset={left:0,right:0,top:0,bottom:0}}static makeConfig(t){const e={};if(m.defaultConfig(e),o.Canvas.defaultConfig(e),i.Axes.defaultConfig(e),u.Series.defaultConfig(e),c.Grid.defaultConfig(e),s.Chart.defaultConfig(e),l.Legend.defaultConfig(e),t)try{t(e)}catch(t){console.log("error in usercfg"),console.log(t),console.log(t.stack)}return e}static defaultConfig(t){t.graph={margin:{top:10,left:10,bottom:10,right:10},timeCond:{}}}static adjustConfig(t){o.Canvas.adjustConfig(t),i.Axes.adjustConfig(t),u.Series.adjustConfig(t),c.Grid.adjustConfig(t),s.Chart.adjustConfig(t),l.Legend.adjustConfig(t)}createPlotArea(t){return{tl:{x:t.left+this.marginOffset.left,y:t.top+this.marginOffset.top},br:{x:d-t.right-this.marginOffset.right,y:p-t.bottom-this.marginOffset.bottom}}}createData(t){t.series.data||console.log("cfg.series.data not set"),t.series.data.length>0||console.log("cfg.series.data not initialised with array of DataSets");const e=t.graph.timeCond;return t.series.data.map(t=>(t instanceof r.Data?t:new r.Data(t)).filter(e))}createScales(t){return this.scales||(this.scales={primary:{x:new a.Scale(t.primary.x.scale),y:new a.Scale(t.primary.y.scale)},secondary:{x:new a.Scale(t.secondary.x.scale),y:new a.Scale(t.secondary.y.scale)}}),this.scales}setScaleRange(t,e){e.primary.x.range([t.tl.x,t.br.x]),e.primary.y.range([t.br.y,t.tl.y]),e.secondary.x.range([t.tl.x,t.br.x]),e.secondary.y.range([t.br.y,t.tl.y])}setScaleDomains(t,e,n){const r=[[1e20,-1e20],[1e20,-1e20]];t.series.map(function(t){let a;t.x?(n[t.dataIndex].findDomain(t.x,r[0]),a=n[t.dataIndex].colType(t.x)):(r[0][0]=0,r[0][1]=n[t.dataIndex].export().rows.length-1),t.y&&n[t.dataIndex].findDomain(t.y,r[1]),t.yBase&&n[t.dataIndex].findDomain(t.yBase,r[1]),a&&e.primary.x.scaleType()===i.Axes.type.auto&&e.primary.x.scaleType(a)}),e.primary.x.setAutoDomain(r[0]),e.primary.y.setAutoDomain(r[1])}adjustHeight(t){if(t.dom&&t.dom.parentElement){const e=t.dom.parentElement,n=d*e.clientHeight/e.clientWidth;isNaN(n)||n===p||(p=n)}}adjustMargins(t){const e=t.graph.margin,n={t:-1e6,l:-1e6,b:-1e6,r:-1e6};function r(t){const r=document.getElementsByClassName(t),i=Array.prototype.map.call(r,t=>t.getBBox());i&&i[0]&&(n.t=Math.max(n.t,e.top-i[0].y),n.l=Math.max(n.l,e.left-i[0].x),n.b=Math.max(n.b,i[0].y+i[0].height+e.bottom-p),n.r=Math.max(n.r,i[0].x+i[0].width+e.right-d))}r("hs-graph-axis"),r("hs-graph-chart"),this.marginOffset.top=n.t,this.marginOffset.left=n.l,this.marginOffset.bottom=n.b,this.marginOffset.right=n.r}onupdate(t){this.adjustHeight(t)}oncreate(t){window.addEventListener("resize",function(){e.m.redraw()}),this.adjustHeight(t),Promise.resolve(t.attrs.cfg).then(h.delay(10)).then(this.adjustMargins.bind(this)).then(e.m.redraw)}view(t){const n=t.attrs.cfgFn,r=m.makeConfig(n),a=this.createData(r),h=this.createPlotArea(r.graph.margin),g=this.createScales(r.axes);return this.setScaleRange(h,g),this.setScaleDomains(r.series,g,a),m.adjustConfig(r),t.attrs.cfg=r,e.m("svg",{class:"hs-graph",width:"100%",height:"100%",viewBox:`0 0 ${f.round(d)} ${f.round(p)}`},[e.m(o.Canvas,{cfg:r.canvas}),e.m(s.Chart,{cfg:r.chart,plotArea:h}),e.m(c.Grid,{cfg:r.grid,scales:g}),e.m(u.Series,{cfg:r.series,scales:g,data:a}),e.m(i.Axes,{cfg:r.axes,scales:g}),e.m(l.Legend,{cfg:r.legend})])}}e.Graph=m},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(3);e.Canvas=class extends r.SVGElem{static defaultConfig(t){t.canvas={range:{w:100,wunit:"%",h:100,hunit:"%"}}}static adjustConfig(t){}view(t){const n=t.attrs.cfg;return e.m("svg",{class:"hs-graph-canvas",width:"100%",height:"100%"},[this.rect({x:0,y:0},{w:n.range.w,h:n.range.h,wunit:n.range.wunit,hunit:n.range.hunit},"")])}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(10);e.PlotLine=class extends r.Plot{plot(t,n,r,i,a){const o=t.colNumber(n.x),u=t.colNumber(n.y);return void 0===o?e.m(".error",""):void 0===u?e.m(".error",""):[this.drawLine(a,t.getData(),o,u,r,n.style,n.y),this.drawMarker(a,t.getData(),o,u,r,n.style,n.y)]}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(10);e.PlotMarkers=class extends r.Plot{plot(t,n,r,i,a){const o=t.colNumber(n.x),u=t.colNumber(n.y),s=n.l?t.colNumber(n.l):void 0;return void 0===o?e.m(".error",""):void 0===u?e.m(".error",""):[this.drawMarker(a,t.getData(),o,u,r,n.style,n.y),void 0===s?void 0:this.drawLabel(a,t.getData(),o,u,s,r,n)]}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(10);e.PlotBar=class extends r.Plot{drawBar(t,n,r,i,a,o,u,s){const c=`fill: ${u.bar.color};`,l=void 0===r,f=o.x.domain(),h=s*u.bar.offset*(f[1]-f[0])/(100*n.getData().length),d=u.bar.width*(f[1]-f[0])/(100*n.getData().length);return e.m("svg",{class:"hs-graph-series-bars"},n.getData().map((t,e)=>{const n=o.x.convert((l?e:t[r])+h-d/2),u=o.x.convert((l?e:t[r])+h+d/2),s=o.y.convert(void 0===a?0:t[a]),f=o.y.convert(t[i]);return this.rect({x:n,y:s},{h:f-s,w:u-n},c)}))}setDefaults(t,e,n){super.setDefaults(t,e,n);let r=n.y.domain();r[0]>0&&(r[0]=0,n.y.domain(r)),void 0===e.x&&n.x.domain([-.5,t.getData().length-.5])}plot(t,n,r,i,a){const o=t.colNumber(n.x),u=t.colNumber(n.y),s=n.yBase?t.colNumber(n.yBase):void 0;return void 0===u?e.m(".error",""):[this.drawBar(a,t,o,u,s,r,n.style,i)]}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(10);e.PlotArea=class extends r.Plot{plot(t,n,r,i,a){const o=t.colNumber(n.x),u=t.colNumber(n.y),s=t.colNumber(n.yBase),c=t.colNumber("$sum"),l=t=>void 0===c?[t[o],t[u]+t[s],t[s]]:[t[o],(t[u]+t[s])/t[c],t[s]/t[c]];if(void 0===u)return e.m(".error","");if(n.map){const e=t.getData().map(l);return[this.drawArea(a,e,0,1,2,r,n.style,n.y)]}{const e=t.getData();return[this.drawArea(a,e,o,u,s,r,n.style,n.y)]}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.m=n(1);const r=n(3);class i extends r.SVGElem{static defaultConfig(t){return t.chart={visible:!0,title:{visible:!0,text:"",hOffset:0,vOffset:-1.5,xpos:"middle",ypos:"top"}},t}static adjustConfig(t){}onupdate(t){this.updateTitleSize(t)}updateTitleSize(t){if(t.dom){const e=t.dom.lastChild;e&&e.clientWidth>0&&i.clientWidth!==e.clientWidth&&(i.clientWidth=e.clientWidth,i.clientHeight=e.clientHeight)}}drawBackground(t){const e=t.tl,n=t.br;return this.rect({x:e.x,y:e.y},{w:n.x-e.x,h:n.y-e.y},"")}drawTitle(t,e){const n=t.tl,r=t.br;switch(e.title.cssClass="hs-graph-chart-title",e.title.xpos){case"start":e.title.x=n.x+"";break;case"middle":e.title.x=(n.x+r.x)/2+"";break;case"end":e.title.x=r.x+""}switch(e.title.ypos){case"top":e.title.y=n.y+"";break;case"center":e.title.y=(n.y+r.y)/2+"";break;case"bottom":e.title.y=r.y+""}return e.title.visible?this.text(e.title,e.title.text):void 0}view(t){const n=t.attrs.cfg,r=t.attrs.plotArea;return e.m("svg",{class:"hs-graph-chart"},[this.drawBackground(r),this.drawTitle(r,n)])}}e.Chart=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(63);e.d3={Graph:r.Graph2}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const r=n(2).log("d3.graph"),i=n(64);n(1),e.Graph2=class{draw(){r.info(i)}}},function(t,e,n){"use strict";n.r(e);var r=function(t,e){return te?1:t>=e?0:NaN},i=function(t){return 1===t.length&&(e=t,t=function(t,n){return r(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)>0?i=a:r=a+1}return r}};var e},a=i(r),o=a.right,u=a.left,s=o,c=function(t,e){null==e&&(e=l);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);nt?1:e>=t?0:NaN},d=function(t){return null===t?NaN:+t},p=function(t,e){var n,r,i=t.length,a=0,o=-1,u=0,s=0;if(null==e)for(;++o1)return s/(a-1)},m=function(t,e){var n=p(t,e);return n?Math.sqrt(n):n},g=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o=n)for(r=i=n;++on&&(r=n),i=n)for(r=i=n;++on&&(r=n),i0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++u=0?(a>=k?10:a>=M?5:a>=S?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=k?10:a>=M?5:a>=S?2:1)}function C(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=k?i*=10:a>=M?i*=5:a>=S&&(i*=2),ef;)h.pop(),--d;var p,m=new Array(d+1);for(i=0;i<=d;++i)(p=m[i]=[]).x0=i>0?h[i-1]:l,p.x1=i=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}},j=function(t,e,n){return t=y.call(t,d).sort(r),Math.ceil((n-e)/(2*(N(t,.75)-N(t,.25))*Math.pow(t.length,-1/3)))},z=function(t,e,n){return Math.ceil((n-e)/(3.5*m(t)*Math.pow(t.length,-1/3)))},L=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++ar&&(r=n)}else for(;++a=n)for(r=n;++ar&&(r=n);return r},D=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},I=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++an&&(r=n)}else for(;++a=n)for(r=n;++an&&(r=n);return r},B=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},R=function(t,e){if(n=t.length){var n,i,a=0,o=0,u=t[o];for(null==e&&(e=r);++a=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),o=-1,u=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++o0)for(var n,r,i=new Array(n),a=0;a=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),pt.hasOwnProperty(e)?{space:pt[e],local:t}:t},gt=function(t){var e=mt(t);return(e.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===dt&&e.documentElement.namespaceURI===dt?e.createElement(t):e.createElementNS(n,t)}})(e)};function vt(){}var bt=function(t){return null==t?vt:function(){return this.querySelector(t)}};function yt(){return[]}var _t=function(t){return null==t?yt:function(){return this.querySelectorAll(t)}},wt=function(t){return function(){return this.matches(t)}},xt=function(t){return new Array(t.length)};function kt(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}kt.prototype={constructor:kt,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var Mt="$";function St(t,e,n,r,i,a){for(var o,u=0,s=e.length,c=a.length;ue?1:t>=e?0:NaN}var Ct=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Pt(t,e){return t.style.getPropertyValue(e)||Ct(t).getComputedStyle(t,null).getPropertyValue(e)}function Et(t){return t.trim().split(/^|\s+/)}function Nt(t){return t.classList||new jt(t)}function jt(t){this._node=t,this._names=Et(t.getAttribute("class")||"")}function zt(t,e){for(var n=Nt(t),r=-1,i=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Ht={},Ut=null;function Vt(t,e,n){return t=Yt(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function Yt(t,e,n){return function(r){var i=Ut;Ut=r;try{t.call(this,this.__data__,e,n)}finally{Ut=i}}}function Gt(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=w&&(w=_+1);!(y=v[w])&&++w=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=Tt);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof e?function(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}:function(t,e,n){return function(){this.style.setProperty(t,e,n)}})(t,e,null==n?"":n)):Pt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?function(t){return function(){delete this[t]}}:"function"==typeof e?function(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}:function(t,e){return function(){this[t]=e}})(t,e)):this.node()[t]},classed:function(t,e){var n=Et(t+"");if(arguments.length<2){for(var r=Nt(this.node()),i=-1,a=n.length;++i=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}),o=a.length;if(!(arguments.length<2)){for(u=e?Wt:Gt,null==n&&(n=!1),r=0;rf}s.mouse("drag")}function m(){ee(Ut.view).on("mousemove.drag mouseup.drag",null),me(Ut.view,n),de(),s.mouse("end")}function g(){if(i.apply(this,arguments)){var t,e,n=Ut.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):(e=Ee.exec(t))?Be(parseInt(e[1],16)):(e=Ne.exec(t))?new He(e[1],e[2],e[3],1):(e=je.exec(t))?new He(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=ze.exec(t))?Re(e[1],e[2],e[3],e[4]):(e=Le.exec(t))?Re(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=De.exec(t))?Ve(e[1],e[2]/100,e[3]/100,1):(e=Oe.exec(t))?Ve(e[1],e[2]/100,e[3]/100,e[4]):$e.hasOwnProperty(t)?Be($e[t]):"transparent"===t?new He(NaN,NaN,NaN,0):null}function Be(t){return new He(t>>16&255,t>>8&255,255&t,1)}function Re(t,e,n,r){return r<=0&&(t=e=n=NaN),new He(t,e,n,r)}function qe(t){return t instanceof Se||(t=Ie(t)),t?new He((t=t.rgb()).r,t.g,t.b,t.opacity):new He}function Fe(t,e,n,r){return 1===arguments.length?qe(t):new He(t,e,n,null==r?1:r)}function He(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Ue(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Ve(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ge(t,e,n,r)}function Ye(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Ge)return new Ge(t.h,t.s,t.l,t.opacity);if(t instanceof Se||(t=Ie(t)),!t)return new Ge;if(t instanceof Ge)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,u=a-i,s=(a+i)/2;return u?(o=e===a?(n-r)/u+6*(n0&&s<1?0:o,new Ge(o,u,s,t.opacity)}(t):new Ge(t,e,n,null==r?1:r)}function Ge(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function We(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}ke(Se,Ie,{displayable:function(){return this.rgb().displayable()},hex:function(){return this.rgb().hex()},toString:function(){return this.rgb()+""}}),ke(He,Fe,Me(Se,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new He(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new He(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function(){return"#"+Ue(this.r)+Ue(this.g)+Ue(this.b)},toString:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}})),ke(Ge,Ye,Me(Se,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ge(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ge(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new He(We(t>=240?t-240:t+120,i,r),We(t,i,r),We(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Xe=Math.PI/180,Ze=180/Math.PI,Ke=.96422,Qe=1,Je=.82521,tn=4/29,en=6/29,nn=3*en*en,rn=en*en*en;function an(t){if(t instanceof sn)return new sn(t.l,t.a,t.b,t.opacity);if(t instanceof gn){if(isNaN(t.h))return new sn(t.l,0,0,t.opacity);var e=t.h*Xe;return new sn(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof He||(t=qe(t));var n,r,i=hn(t.r),a=hn(t.g),o=hn(t.b),u=cn((.2225045*i+.7168786*a+.0606169*o)/Qe);return i===a&&a===o?n=r=u:(n=cn((.4360747*i+.3850649*a+.1430804*o)/Ke),r=cn((.0139322*i+.0971045*a+.7141733*o)/Je)),new sn(116*u-16,500*(n-u),200*(u-r),t.opacity)}function on(t,e){return new sn(t,0,0,null==e?1:e)}function un(t,e,n,r){return 1===arguments.length?an(t):new sn(t,e,n,null==r?1:r)}function sn(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function cn(t){return t>rn?Math.pow(t,1/3):t/nn+tn}function ln(t){return t>en?t*t*t:nn*(t-tn)}function fn(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function hn(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function dn(t){if(t instanceof gn)return new gn(t.h,t.c,t.l,t.opacity);if(t instanceof sn||(t=an(t)),0===t.a&&0===t.b)return new gn(NaN,0,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Ze;return new gn(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function pn(t,e,n,r){return 1===arguments.length?dn(t):new gn(n,e,t,null==r?1:r)}function mn(t,e,n,r){return 1===arguments.length?dn(t):new gn(t,e,n,null==r?1:r)}function gn(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}ke(sn,un,Me(Se,{brighter:function(t){return new sn(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new sn(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new He(fn(3.1338561*(e=Ke*ln(e))-1.6168667*(t=Qe*ln(t))-.4906146*(n=Je*ln(n))),fn(-.9787684*e+1.9161415*t+.033454*n),fn(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),ke(gn,mn,Me(Se,{brighter:function(t){return new gn(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new gn(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return an(this).rgb()}}));var vn=-.29227,bn=-.90649,yn=1.97294,_n=yn*bn,wn=1.78277*yn,xn=1.78277*vn- -.14861*bn;function kn(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Mn)return new Mn(t.h,t.s,t.l,t.opacity);t instanceof He||(t=qe(t));var e=t.r/255,n=t.g/255,r=t.b/255,i=(xn*r+_n*e-wn*n)/(xn+_n-wn),a=r-i,o=(yn*(n-i)-vn*a)/bn,u=Math.sqrt(o*o+a*a)/(yn*i*(1-i)),s=u?Math.atan2(o,a)*Ze-120:NaN;return new Mn(s<0?s+360:s,u,i,t.opacity)}(t):new Mn(t,e,n,null==r?1:r)}function Mn(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Sn(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}ke(Mn,kn,Me(Se,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Mn(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Mn(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Xe,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new He(255*(e+n*(-.14861*r+1.78277*i)),255*(e+n*(vn*r+bn*i)),255*(e+n*(yn*r)),this.opacity)}}));var An=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,u=r180||n<-180?n-360*Math.round(n/360):n):Cn(isNaN(t)?e:t)}function Nn(t,e){var n=e-t;return n?Pn(t,n):Cn(isNaN(t)?e:t)}var jn=function t(e){var n=function(t){return 1==(t=+t)?Nn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):Cn(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=Fe(t)).r,(e=Fe(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=Nn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function zn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;na&&(i=e.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,s.push({i:o,x:Fn(n,r)})),a=Vn.lastIndex;return a180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Fn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,u,s),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Fn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,u,s),function(t,e,n,r,a,o){if(t!==n||e!==r){var u=a.push(i(a)+"scale(",null,",",null,")");o.push({i:u-4,x:Fn(t,n)},{i:u-2,x:Fn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,u,s),a=o=null,function(t){for(var e,n=-1,r=s.length;++n=0&&e._call.call(null,t),e=e._next;--_r}function Lr(){Sr=(Mr=Tr.now())+Ar,_r=wr=0;try{zr()}finally{_r=0,function(){for(var t,e,n=vr,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:vr=e);br=t,Or(r)}(),Sr=0}}function Dr(){var t=Tr.now(),e=t-Mr;e>kr&&(Ar-=e,Mr=t)}function Or(t){_r||(wr&&(wr=clearTimeout(wr)),t-Sr>24?(t<1/0&&(wr=setTimeout(Lr,t-Tr.now()-Ar)),xr&&(xr=clearInterval(xr))):(xr||(Mr=Tr.now(),xr=setInterval(Dr,kr)),_r=1,Cr(Lr)))}Nr.prototype=jr.prototype={constructor:Nr,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Pr():+n)+(null==e?0:+e),this._next||br===this||(br?br._next=this:vr=this,br=this),this._call=t,this._time=n,Or()},stop:function(){this._call&&(this._call=null,this._time=1/0,Or())}};var $r=function(t,e,n){var r=new Nr;return e=null==e?0:+e,r.restart(function(n){r.stop(),t(n+e)},e,n),r},Ir=function(t,e,n){var r=new Nr,i=e;return null==e?(r.restart(t,e,n),r):(e=+e,n=null==n?Pr():+n,r.restart(function a(o){o+=i,r.restart(a,i+=e,n),t(o)},e,n),r)},Br=ht("start","end","cancel","interrupt"),Rr=[],qr=0,Fr=1,Hr=2,Ur=3,Vr=4,Yr=5,Gr=6,Wr=function(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(s){var c,l,f,h;if(n.state!==Fr)return u();for(c in i)if((h=i[c]).name===n.name){if(h.state===Ur)return $r(a);h.state===Vr?(h.state=Gr,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete i[c]):+cqr)throw new Error("too late; already scheduled");return n}function Zr(t,e){var n=Kr(t,e);if(n.state>Ur)throw new Error("too late; already running");return n}function Kr(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var Qr=function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>Hr&&n.state=0&&(t=t.slice(0,e)),!t||"start"===t})}(e)?Xr:Zr;return function(){var o=a(this,t),u=o.on;u!==r&&(i=(r=u).copy()).on(e,n),o.on=i}}(n,t,e))},attr:function(t,e){var n=mt(t),r="transform"===n?nr:ti;return this.attrTween(t,"function"==typeof e?(n.local?function(t,e,n){var r,i,a;return function(){var o,u,s=n(this);if(null!=s)return(o=this.getAttributeNS(t.space,t.local))===(u=s+"")?null:o===r&&u===i?a:(i=u,a=e(r=o,s));this.removeAttributeNS(t.space,t.local)}}:function(t,e,n){var r,i,a;return function(){var o,u,s=n(this);if(null!=s)return(o=this.getAttribute(t))===(u=s+"")?null:o===r&&u===i?a:(i=u,a=e(r=o,s));this.removeAttribute(t)}})(n,r,Jr(this,"attr."+t,e)):null==e?(n.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}})(n):(n.local?function(t,e,n){var r,i,a=n+"";return function(){var o=this.getAttributeNS(t.space,t.local);return o===a?null:o===r?i:i=e(r=o,n)}}:function(t,e,n){var r,i,a=n+"";return function(){var o=this.getAttribute(t);return o===a?null:o===r?i:i=e(r=o,n)}})(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=mt(t);return this.tween(n,(r.local?function(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttributeNS(t.space,t.local,e(n))}}(t,i)),n}return i._value=e,i}:function(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttribute(t,e(n))}}(t,i)),n}return i._value=e,i})(r,e))},style:function(t,e,n){var r="transform"==(t+="")?er:ti;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=Pt(this,t),o=(this.style.removeProperty(t),Pt(this,t));return a===o?null:a===n&&o===r?i:i=e(n=a,r=o)}}(t,r)).on("end.style."+t,ni(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,i,a;return function(){var o=Pt(this,t),u=n(this),s=u+"";return null==u&&(this.style.removeProperty(t),s=u=Pt(this,t)),o===s?null:o===r&&s===i?a:(i=s,a=e(r=o,u))}}(t,r,Jr(this,"style."+t,e))).each(function(t,e){var n,r,i,a,o="style."+e,u="end."+o;return function(){var s=Zr(this,t),c=s.on,l=null==s.value[o]?a||(a=ni(e)):void 0;c===n&&i===l||(r=(n=c).copy()).on(u,i=l),s.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,i,a=n+"";return function(){var o=Pt(this,t);return o===a?null:o===r?i:i=e(r=o,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&function(t,e,n){return function(r){this.style.setProperty(t,e(r),n)}}(t,a,n)),r}return a._value=e,a}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Jr(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",(t=this._id,function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}));var t},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=Kr(this.node(),n).tween,a=0,o=i.length;aFr&&n.name===e)return new ii([[t]],Ki,e,+r);return null},Ji=function(t){return function(){return t}},ta=function(t,e,n){this.target=t,this.type=e,this.selection=n};function ea(){Ut.stopImmediatePropagation()}var na=function(){Ut.preventDefault(),Ut.stopImmediatePropagation()},ra={name:"drag"},ia={name:"space"},aa={name:"handle"},oa={name:"center"},ua={name:"x",handles:["e","w"].map(ma),input:function(t,e){return t&&[[t[0],e[0][1]],[t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},sa={name:"y",handles:["n","s"].map(ma),input:function(t,e){return t&&[[e[0][0],t[0]],[e[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},ca={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(ma),input:function(t){return t},output:function(t){return t}},la={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},fa={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},ha={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},da={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},pa={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function ma(t){return{type:t}}function ga(){return!Ut.button}function va(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function ba(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function ya(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function _a(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function wa(){return Ma(ua)}function xa(){return Ma(sa)}var ka=function(){return Ma(ca)};function Ma(t){var e,n=va,r=ga,i=ht(o,"start","brush","end"),a=6;function o(e){var n=e.property("__brush",f).selectAll(".overlay").data([ma("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",la.overlay).merge(n).each(function(){var t=ba(this).extent;ee(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])}),e.selectAll(".selection").data([ma("selection")]).enter().append("rect").attr("class","selection").attr("cursor",la.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,function(t){return t.type});r.exit().remove(),r.enter().append("rect").attr("class",function(t){return"handle handle--"+t.type}).attr("cursor",function(t){return la[t.type]}),e.each(u).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",l)}function u(){var t=ee(this),e=ba(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",function(t){return"e"===t.type[t.type.length-1]?e[1][0]-a/2:e[0][0]-a/2}).attr("y",function(t){return"s"===t.type[0]?e[1][1]-a/2:e[0][1]-a/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+a:a}).attr("height",function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+a:a})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function s(t,e){return t.__brush.emitter||new c(t,e)}function c(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function l(){if(Ut.touches){if(Ut.changedTouches.length0&&(n=i-d),x<0?f=h-p:x>0&&(a=o-p),_=ia,D.attr("cursor",la.selection),I());break;default:return}na()},!0).on("keyup.brush",function(){switch(Ut.keyCode){case 16:E&&(g=v=E=!1,I());break;case 18:_===oa&&(w<0?c=l:w>0&&(n=i),x<0?f=h:x>0&&(a=o),_=aa,I());break;case 32:_===ia&&(Ut.altKey?(w&&(c=l-d*w,n=i+d*w),x&&(f=h-p*x,a=o+p*x),_=oa):(w<0?c=l:w>0&&(n=i),x<0?f=h:x>0&&(a=o),_=aa),D.attr("cursor",la[y]),I());break;default:return}na()},!0).on("mousemove.brush",$,!0).on("mouseup.brush",B,!0);pe(Ut.view)}ea(),Qr(b),u.call(b),z.start()}function $(){var t=se(b);!E||g||v||(Math.abs(t[0]-j[0])>Math.abs(t[1]-j[1])?v=!0:g=!0),j=t,m=!0,na(),I()}function I(){var t;switch(d=j[0]-N[0],p=j[1]-N[1],_){case ia:case ra:w&&(d=Math.max(A-n,Math.min(C-c,d)),i=n+d,l=c+d),x&&(p=Math.max(T-a,Math.min(P-f,p)),o=a+p,h=f+p);break;case aa:w<0?(d=Math.max(A-n,Math.min(C-n,d)),i=n+d,l=c):w>0&&(d=Math.max(A-c,Math.min(C-c,d)),i=n,l=c+d),x<0?(p=Math.max(T-a,Math.min(P-a,p)),o=a+p,h=f):x>0&&(p=Math.max(T-f,Math.min(P-f,p)),o=a,h=f+p);break;case oa:w&&(i=Math.max(A,Math.min(C,n-d*w)),l=Math.max(A,Math.min(C,c+d*w))),x&&(o=Math.max(T,Math.min(P,a-p*x)),h=Math.max(T,Math.min(P,f+p*x)))}l1e-6)if(Math.abs(l*u-s*c)>1e-6&&i){var h=n-a,d=r-o,p=u*u+s*s,m=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),b=i*Math.tan((La-Math.acos((p+f-m)/(2*g*v)))/2),y=b/v,_=b/g;Math.abs(y-1)>1e-6&&(this._+="L"+(t+y*c)+","+(e+y*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>c*d)+","+(this._x1=t+_*u)+","+(this._y1=e+_*s)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,a){t=+t,e=+e;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),s=t+o,c=e+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+s+","+c:(Math.abs(this._x1-s)>1e-6||Math.abs(this._y1-c)>1e-6)&&(this._+="L"+s+","+c),n&&(f<0&&(f=f%Da+Da),f>Oa?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=s)+","+(this._y1=c):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=La)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Ba=Ia;function Ra(t){return t.source}function qa(t){return t.target}function Fa(t){return t.radius}function Ha(t){return t.startAngle}function Ua(t){return t.endAngle}var Va=function(){var t=Ra,e=qa,n=Fa,r=Ha,i=Ua,a=null;function o(){var o,u=ja.call(arguments),s=t.apply(this,u),c=e.apply(this,u),l=+n.apply(this,(u[0]=s,u)),f=r.apply(this,u)-Ca,h=i.apply(this,u)-Ca,d=l*Sa(f),p=l*Aa(f),m=+n.apply(this,(u[0]=c,u)),g=r.apply(this,u)-Ca,v=i.apply(this,u)-Ca;if(a||(a=o=Ba()),a.moveTo(d,p),a.arc(0,0,l,f,h),f===g&&h===v||(a.quadraticCurveTo(0,0,m*Sa(g),m*Aa(g)),a.arc(0,0,m,g,v)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:za(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:za(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:za(+t),o):i},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o};function Ya(){}function Ga(t,e){var n=new Ya;if(t instanceof Ya)t.each(function(t,e){n.set(e,t)});else if(Array.isArray(t)){var r,i=-1,a=t.length;if(null==e)for(;++i=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,c,l,f=-1,h=n.length,d=r[i++],p=Wa(),m=o();++fr.length)return n;var o,u=i[a-1];return null!=e&&a>=r.length?o=n.entries():(o=[],n.each(function(e,n){o.push({key:n,values:t(e,a)})})),null!=u?o.sort(function(t,e){return u(t.key,e.key)}):o}(a(t,0,Qa,Ja),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function Za(){return{}}function Ka(t,e,n){t[e]=n}function Qa(){return Wa()}function Ja(t,e,n){t.set(e,n)}function to(){}var eo=Wa.prototype;function no(t,e){var n=new to;if(t instanceof to)t.each(function(t){n.add(t)});else if(t){var r=-1,i=t.length;if(null==e)for(;++rr!=d>r&&n<(h-c)*(r-l)/(d-l)+c&&(i=-i)}return i}function po(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}var mo=function(){},go=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],vo=function(){var t=1,e=1,n=P,r=u;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(so);else{var r=g(t),i=r[0],o=r[1];e=C(i,o,e),e=x(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map(function(e){return a(t,e)})}function a(n,i){var a=[],u=[];return function(n,r,i){var a,u,s,c,l,f,h=new Array,d=new Array;for(a=u=-1,c=n[0]>=r,go[c<<1].forEach(p);++a=r,go[s|c<<1].forEach(p);for(go[c<<0].forEach(p);++u=r,l=n[u*t]>=r,go[c<<1|l<<2].forEach(p);++a=r,f=l,l=n[u*t+a+1]>=r,go[s|c<<1|l<<2|f<<3].forEach(p);go[c|l<<3].forEach(p)}for(a=-1,l=n[u*t]>=r,go[l<<2].forEach(p);++a=r,go[l<<2|f<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+u],s=[t[1][0]+a,t[1][1]+u],c=o(r),l=o(s);(e=d[c])?(n=h[l])?(delete d[e.end],delete h[n.start],e===n?(e.ring.push(s),i(e.ring)):h[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(s),d[e.end=l]=e):(e=h[l])?(n=d[c])?(delete h[e.start],delete d[n.end],e===n?(e.ring.push(s),i(e.ring)):h[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete h[e.start],e.ring.unshift(r),h[e.start=c]=e):h[c]=d[l]={start:c,end:l,ring:[r,s]}}go[l<<3].forEach(p)}(n,i,function(t){r(t,n,i),co(t)>0?a.push([t]):u.push(t)}),u.forEach(function(t){for(var e,n=0,r=a.length;n0&&o0&&u0&&a>0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?lo(uo.call(t)):lo(t),i):n},i.smooth=function(t){return arguments.length?(r=t?u:mo,i):r===u},i};function bo(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(u>=a&&(s-=t.data[u-a+o*r]),e.data[u-n+o*r]=s/Math.min(u+1,r-1+a-u,a))}function yo(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(u>=a&&(s-=t.data[o+(u-a)*r]),e.data[o+(u-n)*r]=s/Math.min(u+1,i-1+a-u,a))}function _o(t){return t[0]}function wo(t){return t[1]}function xo(){return 1}var ko=function(){var t=_o,e=wo,n=xo,r=960,i=500,a=20,o=2,u=3*a,s=r+2*u>>o,c=i+2*u>>o,l=lo(20);function f(r){var i=new Float32Array(s*c),f=new Float32Array(s*c);r.forEach(function(r,a,l){var f=+t(r,a,l)+u>>o,h=+e(r,a,l)+u>>o,d=+n(r,a,l);f>=0&&f=0&&h>o),yo({width:s,height:c,data:f},{width:s,height:c,data:i},a>>o),bo({width:s,height:c,data:i},{width:s,height:c,data:f},a>>o),yo({width:s,height:c,data:f},{width:s,height:c,data:i},a>>o),bo({width:s,height:c,data:i},{width:s,height:c,data:f},a>>o),yo({width:s,height:c,data:f},{width:s,height:c,data:i},a>>o);var d=l(i);if(!Array.isArray(d)){var p=L(i);d=C(0,p,d),(d=x(0,Math.floor(p/d)*d,d)).shift()}return vo().thresholds(d).size([s,c])(i).map(h)}function h(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(m)}function m(t){t[0]=t[0]*Math.pow(2,o)-u,t[1]=t[1]*Math.pow(2,o)-u}function g(){return s=r+2*(u=3*a)>>o,c=i+2*u>>o,f}return f.x=function(e){return arguments.length?(t="function"==typeof e?e:lo(+e),f):t},f.y=function(t){return arguments.length?(e="function"==typeof t?t:lo(+t),f):e},f.weight=function(t){return arguments.length?(n="function"==typeof t?t:lo(+t),f):n},f.size=function(t){if(!arguments.length)return[r,i];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return r=e,i=n,g()},f.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),g()},f.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?lo(uo.call(t)):lo(t),f):l},f.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),g()},f},Mo={},So={},Ao=34,To=10,Co=13;function Po(t){return new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}")}function Eo(t){var e=Object.create(null),n=[];return t.forEach(function(t){for(var r in t)r in e||n.push(e[r]=r)}),n}function No(t,e){var n=t+"",r=n.length;return r=a?s=!0:(r=t.charCodeAt(o++))===To?c=!0:r===Co&&(c=!0,t.charCodeAt(o)===To&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o9999?"+"+No(e,6):No(e,4))+"-"+No(t.getUTCMonth()+1,2)+"-"+No(t.getUTCDate(),2)+(a?"T"+No(n,2)+":"+No(r,2)+":"+No(i,2)+"."+No(a,3)+"Z":i?"T"+No(n,2)+":"+No(r,2)+":"+No(i,2)+"Z":r||n?"T"+No(n,2)+":"+No(r,2)+"Z":"")}(t):e.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}return{parse:function(t,e){var n,i,a=r(t,function(t,r){if(n)return n(t,r-1);i=t,n=e?function(t,e){var n=Po(t);return function(r,i){return e(n(r),i,t)}}(t,e):Po(t)});return a.columns=i||[],a},parseRows:r,format:function(e,n){return null==n&&(n=Eo(e)),[n.map(o).join(t)].concat(i(e,n)).join("\n")},formatBody:function(t,e){return null==e&&(e=Eo(t)),i(t,e).join("\n")},formatRows:function(t){return t.map(a).join("\n")}}},zo=jo(","),Lo=zo.parse,Do=zo.parseRows,Oo=zo.format,$o=zo.formatBody,Io=zo.formatRows,Bo=jo("\t"),Ro=Bo.parse,qo=Bo.parseRows,Fo=Bo.format,Ho=Bo.formatBody,Uo=Bo.formatRows;function Vo(t){for(var e in t){var n,r=t[e].trim();if(r)if("true"===r)r=!0;else if("false"===r)r=!1;else if("NaN"===r)r=NaN;else if(isNaN(n=+r)){if(!/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/.test(r))continue;r=new Date(r)}else r=n;else r=null;t[e]=r}return t}function Yo(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.blob()}var Go=function(t,e){return fetch(t,e).then(Yo)};function Wo(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.arrayBuffer()}var Xo=function(t,e){return fetch(t,e).then(Wo)};function Zo(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}var Ko=function(t,e){return fetch(t,e).then(Zo)};function Qo(t){return function(e,n,r){return 2===arguments.length&&"function"==typeof n&&(r=n,n=void 0),Ko(e,n).then(function(e){return t(e,r)})}}function Jo(t,e,n,r){3===arguments.length&&"function"==typeof n&&(r=n,n=void 0);var i=jo(t);return Ko(e,n).then(function(t){return i.parse(t,r)})}var tu=Qo(Lo),eu=Qo(Ro),nu=function(t,e){return new Promise(function(n,r){var i=new Image;for(var a in e)i[a]=e[a];i.onerror=r,i.onload=function(){n(i)},i.src=t})};function ru(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.json()}var iu=function(t,e){return fetch(t,e).then(ru)};function au(t){return function(e,n){return Ko(e,n).then(function(e){return(new DOMParser).parseFromString(e,t)})}}var ou=au("application/xml"),uu=au("text/html"),su=au("image/svg+xml"),cu=function(t,e){var n;function r(){var r,i,a=n.length,o=0,u=0;for(r=0;r=(a=(m+v)/2))?m=a:v=a,(l=n>=(o=(g+b)/2))?g=o:b=o,i=d,!(d=d[f=l<<1|c]))return i[f]=p,t;if(u=+t._x.call(null,d.data),s=+t._y.call(null,d.data),e===u&&n===s)return p.next=d,i?i[f]=p:t._root=p,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(c=e>=(a=(m+v)/2))?m=a:v=a,(l=n>=(o=(g+b)/2))?g=o:b=o}while((f=l<<1|c)==(h=(s>=o)<<1|u>=a));return i[h]=d,i[f]=p,t}var du=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function pu(t){return t[0]}function mu(t){return t[1]}function gu(t,e,n){var r=new vu(null==e?pu:e,null==n?mu:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function vu(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function bu(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var yu=gu.prototype=vu.prototype;function _u(t){return t.x+t.vx}function wu(t){return t.y+t.vy}yu.copy=function(){var t,e,n=new vu(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=bu(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=bu(e));return n},yu.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return hu(this.cover(e,n),e,n,t)},yu.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),u=new Array(a),s=1/0,c=1/0,l=-1/0,f=-1/0;for(n=0;nl&&(l=r),if&&(f=i));if(s>l||c>f)return this;for(this.cover(s,c).cover(l,f),n=0;nt||t>=i||r>e||e>=a;)switch(u=(eh||(a=s.y0)>d||(o=s.x1)=v)<<1|t>=g)&&(s=p[p.length-1],p[p.length-1]=p[p.length-1-c],p[p.length-1-c]=s)}else{var b=t-+this._x.call(null,m.data),y=e-+this._y.call(null,m.data),_=b*b+y*y;if(_=(u=(p+g)/2))?p=u:g=u,(l=o>=(s=(m+v)/2))?m=s:v=s,e=d,!(d=d[f=l<<1|c]))return this;if(!d.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(n=e,h=f)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[f]=i:delete e[f],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[h]=d:this._root=d),this):(this._root=i,this)},yu.removeAll=function(t){for(var e=0,n=t.length;es+d||ic+d||au.index){var p=s-o.x-o.vx,m=c-o.y-o.vy,g=p*p+m*m;gt.r&&(t.r=t[e].r)}function u(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r1?(null==n?u.remove(t):u.set(t,d(n)),e):u.get(t)},find:function(e,n,r){var i,a,o,u,s,c=0,l=t.length;for(null==r?r=1/0:r*=r,c=0;c1?(c.on(t,n),e):c.on(t)}}},Nu=function(){var t,e,n,r,i=lu(-30),a=1,o=1/0,u=.81;function s(r){var i,a=t.length,o=gu(t,Au,Tu).visitAfter(l);for(n=r,i=0;i=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=fu())*l),0===f&&(d+=(f=fu())*f),d1?r[0]+r.slice(2):r,+t.slice(n+1)]},Ou=function(t){return(t=Du(Math.abs(t)))?t[1]:NaN},$u=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Iu(t){return new Bu(t)}function Bu(t){if(!(e=$u.exec(t)))throw new Error("invalid format: "+t);var e;this.fill=e[1]||" ",this.align=e[2]||">",this.sign=e[3]||"-",this.symbol=e[4]||"",this.zero=!!e[5],this.width=e[6]&&+e[6],this.comma=!!e[7],this.precision=e[8]&&+e[8].slice(1),this.trim=!!e[9],this.type=e[10]||""}Iu.prototype=Bu.prototype,Bu.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Ru,qu,Fu,Hu,Uu=function(t){t:for(var e,n=t.length,r=1,i=-1;r0){if(!+t[r])break t;i=0}}return i>0?t.slice(0,i)+t.slice(e+1):t},Vu=function(t,e){var n=Du(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Yu={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return Vu(100*t,e)},r:Vu,s:function(t,e){var n=Du(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Ru=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Du(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Gu=function(t){return t},Wu=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],Xu=function(t){var e,n,r=t.grouping&&t.thousands?(e=t.grouping,n=t.thousands,function(t,r){for(var i=t.length,a=[],o=0,u=e[0],s=0;i>0&&u>0&&(s+u+1>r&&(u=Math.max(1,r-s)),a.push(t.substring(i-=u,i+u)),!((s+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(n)}):Gu,i=t.currency,a=t.decimal,o=t.numerals?function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(t.numerals):Gu,u=t.percent||"%";function s(t){var e=(t=Iu(t)).fill,n=t.align,s=t.sign,c=t.symbol,l=t.zero,f=t.width,h=t.comma,d=t.precision,p=t.trim,m=t.type;"n"===m?(h=!0,m="g"):Yu[m]||(null==d&&(d=12),p=!0,m="g"),(l||"0"===e&&"="===n)&&(l=!0,e="0",n="=");var g="$"===c?i[0]:"#"===c&&/[boxX]/.test(m)?"0"+m.toLowerCase():"",v="$"===c?i[1]:/[%p]/.test(m)?u:"",b=Yu[m],y=/[defgprs%]/.test(m);function _(t){var i,u,c,_=g,w=v;if("c"===m)w=b(t)+w,t="";else{var x=(t=+t)<0;if(t=b(Math.abs(t),d),p&&(t=Uu(t)),x&&0==+t&&(x=!1),_=(x?"("===s?s:"-":"-"===s||"("===s?"":s)+_,w=("s"===m?Wu[8+Ru/3]:"")+w+(x&&"("===s?")":""),y)for(i=-1,u=t.length;++i(c=t.charCodeAt(i))||c>57){w=(46===c?a+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}h&&!l&&(t=r(t,1/0));var k=_.length+t.length+w.length,M=k>1)+_+t+w+M.slice(k);break;default:t=M+_+t+w}return o(t)}return d=null==d?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),_.toString=function(){return t+""},_}return{format:s,formatPrefix:function(t,e){var n=s(((t=Iu(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Ou(e)/3))),i=Math.pow(10,-r),a=Wu[8+r/3];return function(t){return n(i*t)+a}}}};function Zu(t){return qu=Xu(t),Fu=qu.format,Hu=qu.formatPrefix,qu}Zu({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Ku=function(t){return Math.max(0,-Ou(Math.abs(t)))},Qu=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ou(e)/3)))-Ou(Math.abs(t)))},Ju=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ou(e)-Ou(t))+1},ts=function(){return new es};function es(){this.reset()}es.prototype={constructor:es,reset:function(){this.s=this.t=0},add:function(t){rs(ns,t,this.t),rs(this,ns.s,this.s),this.s?this.t+=ns.t:this.s=ns.t},valueOf:function(){return this.s}};var ns=new es;function rs(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var is=1e-6,as=Math.PI,os=as/2,us=as/4,ss=2*as,cs=180/as,ls=as/180,fs=Math.abs,hs=Math.atan,ds=Math.atan2,ps=Math.cos,ms=Math.ceil,gs=Math.exp,vs=(Math.floor,Math.log),bs=Math.pow,ys=Math.sin,_s=Math.sign||function(t){return t>0?1:t<0?-1:0},ws=Math.sqrt,xs=Math.tan;function ks(t){return t>1?0:t<-1?as:Math.acos(t)}function Ms(t){return t>1?os:t<-1?-os:Math.asin(t)}function Ss(t){return(t=ys(t/2))*t}function As(){}function Ts(t,e){t&&Ps.hasOwnProperty(t.type)&&Ps[t.type](t,e)}var Cs={Feature:function(t,e){Ts(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,a=ps(e),o=ys(e),u=Os*o,s=Ds*a+u*ps(i),c=u*r*ys(i);Is.add(ds(c,s)),Ls=t,Ds=a,Os=o}var Vs=function(t){return Bs.reset(),$s(t,Rs),2*Bs};function Ys(t){return[ds(t[1],t[0]),Ms(t[2])]}function Gs(t){var e=t[0],n=t[1],r=ps(n);return[r*ps(e),r*ys(e),ys(n)]}function Ws(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Xs(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Zs(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Ks(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Qs(t){var e=ws(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var Js,tc,ec,nc,rc,ic,ac,oc,uc,sc,cc=ts(),lc={point:fc,lineStart:dc,lineEnd:pc,polygonStart:function(){lc.point=mc,lc.lineStart=gc,lc.lineEnd=vc,cc.reset(),Rs.polygonStart()},polygonEnd:function(){Rs.polygonEnd(),lc.point=fc,lc.lineStart=dc,lc.lineEnd=pc,Is<0?(Js=-(ec=180),tc=-(nc=90)):cc>is?nc=90:cc<-is&&(tc=-90),sc[0]=Js,sc[1]=ec}};function fc(t,e){uc.push(sc=[Js=t,ec=t]),enc&&(nc=e)}function hc(t,e){var n=Gs([t*ls,e*ls]);if(oc){var r=Xs(oc,n),i=Xs([r[1],-r[0],0],r);Qs(i),i=Ys(i);var a,o=t-rc,u=o>0?1:-1,s=i[0]*cs*u,c=fs(o)>180;c^(u*rcnc&&(nc=a):c^(u*rc<(s=(s+360)%360-180)&&snc&&(nc=e)),c?tbc(Js,ec)&&(ec=t):bc(t,ec)>bc(Js,ec)&&(Js=t):ec>=Js?(tec&&(ec=t)):t>rc?bc(Js,t)>bc(Js,ec)&&(ec=t):bc(t,ec)>bc(Js,ec)&&(Js=t)}else uc.push(sc=[Js=t,ec=t]);enc&&(nc=e),oc=n,rc=t}function dc(){lc.point=hc}function pc(){sc[0]=Js,sc[1]=ec,lc.point=fc,oc=null}function mc(t,e){if(oc){var n=t-rc;cc.add(fs(n)>180?n+(n>0?360:-360):n)}else ic=t,ac=e;Rs.point(t,e),hc(t,e)}function gc(){Rs.lineStart()}function vc(){mc(ic,ac),Rs.lineEnd(),fs(cc)>is&&(Js=-(ec=180)),sc[0]=Js,sc[1]=ec,oc=null}function bc(t,e){return(e-=t)<0?e+360:e}function yc(t,e){return t[0]-e[0]}function _c(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:ebc(r[0],r[1])&&(r[1]=i[1]),bc(i[0],r[1])>bc(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(u=bc(r[1],i[0]))>o&&(o=u,Js=i[0],ec=r[1])}return uc=sc=null,Js===1/0||tc===1/0?[[NaN,NaN],[NaN,NaN]]:[[Js,tc],[ec,nc]]},Ic={sphere:As,point:Bc,lineStart:qc,lineEnd:Uc,polygonStart:function(){Ic.lineStart=Vc,Ic.lineEnd=Yc},polygonEnd:function(){Ic.lineStart=qc,Ic.lineEnd=Uc}};function Bc(t,e){t*=ls;var n=ps(e*=ls);Rc(n*ps(t),n*ys(t),ys(e))}function Rc(t,e,n){kc+=(t-kc)/++wc,Mc+=(e-Mc)/wc,Sc+=(n-Sc)/wc}function qc(){Ic.point=Fc}function Fc(t,e){t*=ls;var n=ps(e*=ls);Lc=n*ps(t),Dc=n*ys(t),Oc=ys(e),Ic.point=Hc,Rc(Lc,Dc,Oc)}function Hc(t,e){t*=ls;var n=ps(e*=ls),r=n*ps(t),i=n*ys(t),a=ys(e),o=ds(ws((o=Dc*a-Oc*i)*o+(o=Oc*r-Lc*a)*o+(o=Lc*i-Dc*r)*o),Lc*r+Dc*i+Oc*a);xc+=o,Ac+=o*(Lc+(Lc=r)),Tc+=o*(Dc+(Dc=i)),Cc+=o*(Oc+(Oc=a)),Rc(Lc,Dc,Oc)}function Uc(){Ic.point=Bc}function Vc(){Ic.point=Gc}function Yc(){Wc(jc,zc),Ic.point=Bc}function Gc(t,e){jc=t,zc=e,t*=ls,e*=ls,Ic.point=Wc;var n=ps(e);Lc=n*ps(t),Dc=n*ys(t),Oc=ys(e),Rc(Lc,Dc,Oc)}function Wc(t,e){t*=ls;var n=ps(e*=ls),r=n*ps(t),i=n*ys(t),a=ys(e),o=Dc*a-Oc*i,u=Oc*r-Lc*a,s=Lc*i-Dc*r,c=ws(o*o+u*u+s*s),l=Ms(c),f=c&&-l/c;Pc+=f*o,Ec+=f*u,Nc+=f*s,xc+=l,Ac+=l*(Lc+(Lc=r)),Tc+=l*(Dc+(Dc=i)),Cc+=l*(Oc+(Oc=a)),Rc(Lc,Dc,Oc)}var Xc=function(t){wc=xc=kc=Mc=Sc=Ac=Tc=Cc=Pc=Ec=Nc=0,$s(t,Ic);var e=Pc,n=Ec,r=Nc,i=e*e+n*n+r*r;return i<1e-12&&(e=Ac,n=Tc,r=Cc,xcas?t+Math.round(-t/ss)*ss:t,e]}function Jc(t,e,n){return(t%=ss)?e||n?Kc(el(t),nl(e,n)):el(t):e||n?nl(e,n):Qc}function tl(t){return function(e,n){return[(e+=t)>as?e-ss:e<-as?e+ss:e,n]}}function el(t){var e=tl(t);return e.invert=tl(-t),e}function nl(t,e){var n=ps(t),r=ys(t),i=ps(e),a=ys(e);function o(t,e){var o=ps(e),u=ps(t)*o,s=ys(t)*o,c=ys(e),l=c*n+u*r;return[ds(s*i-l*a,u*n-c*r),Ms(l*i+s*a)]}return o.invert=function(t,e){var o=ps(e),u=ps(t)*o,s=ys(t)*o,c=ys(e),l=c*i-s*a;return[ds(s*i+c*a,u*n+l*r),Ms(l*n-u*r)]},o}Qc.invert=Qc;var rl=function(t){function e(e){return(e=t(e[0]*ls,e[1]*ls))[0]*=cs,e[1]*=cs,e}return t=Jc(t[0]*ls,t[1]*ls,t.length>2?t[2]*ls:0),e.invert=function(e){return(e=t.invert(e[0]*ls,e[1]*ls))[0]*=cs,e[1]*=cs,e},e};function il(t,e,n,r,i,a){if(n){var o=ps(e),u=ys(e),s=r*n;null==i?(i=e+r*ss,a=e-s/2):(i=al(o,i),a=al(o,a),(r>0?ia)&&(i+=r*ss));for(var c,l=i;r>0?l>a:l1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},sl=function(t,e){return fs(t[0]-e[0])=0;--a)i.point((l=c[a])[0],l[1]);else r(h.x,h.p.x,-1,i);h=h.p}c=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}};function fl(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,S=M*k,A=S>as,T=m*w;if(hl.add(ds(T*M*ys(S),g*x+T*ps(S))),o+=A?k+M*ss:k,A^d>=n^y>=n){var C=Xs(Gs(h),Gs(b));Qs(C);var P=Xs(a,C);Qs(P);var E=(A^k>=0?-1:1)*Ms(P[2]);(r>E||r===E&&(C[0]||C[1]))&&(u+=A^k>=0?1:-1)}}return(o<-is||o0){for(f||(i.polygonStart(),f=!0),i.lineStart(),t=0;t1&&2&s&&h.push(h.pop().concat(h.shift())),o.push(h.filter(ml))}return h}};function ml(t){return t.length>1}function gl(t,e){return((t=t.x)[0]<0?t[1]-os-is:os-t[1])-((e=e.x)[0]<0?e[1]-os-is:os-e[1])}var vl=pl(function(){return!0},function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var u=a>0?as:-as,s=fs(a-n);fs(s-as)0?os:-os),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(a,r),e=0):i!==u&&s>=as&&(fs(n-i)is?hs((ys(e)*(a=ps(r))*ys(n)-ys(r)*(i=ps(e))*ys(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),e=0),t.point(n=a,r=o),i=u},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}},function(t,e,n,r){var i;if(null==t)i=n*os,r.point(-as,i),r.point(0,i),r.point(as,i),r.point(as,0),r.point(as,-i),r.point(0,-i),r.point(-as,-i),r.point(-as,0),r.point(-as,i);else if(fs(t[0]-e[0])>is){var a=t[0]0,i=fs(e)>is;function a(t,n){return ps(t)*ps(n)>e}function o(t,n,r){var i=[1,0,0],a=Xs(Gs(t),Gs(n)),o=Ws(a,a),u=a[0],s=o-u*u;if(!s)return!r&&t;var c=e*o/s,l=-e*u/s,f=Xs(i,a),h=Ks(i,c);Zs(h,Ks(a,l));var d=f,p=Ws(h,d),m=Ws(d,d),g=p*p-m*(Ws(h,h)-1);if(!(g<0)){var v=ws(g),b=Ks(d,(-p-v)/m);if(Zs(b,h),b=Ys(b),!r)return b;var y,_=t[0],w=n[0],x=t[1],k=n[1];w<_&&(y=_,_=w,w=y);var M=w-_,S=fs(M-as)0^b[1]<(fs(b[0]-_)as^(_<=b[0]&&b[0]<=w)){var A=Ks(d,(-p+v)/m);return Zs(A,h),[b,Ys(A)]}}}function u(e,n){var i=r?t:as-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return pl(a,function(t){var e,n,s,c,l;return{lineStart:function(){c=s=!1,l=1},point:function(f,h){var d,p=[f,h],m=a(f,h),g=r?m?0:u(f,h):m?u(f+(f<0?as:-as),h):0;if(!e&&(c=s=m)&&t.lineStart(),m!==s&&(!(d=o(e,p))||sl(e,d)||sl(p,d))&&(p[0]+=is,p[1]+=is,m=a(p[0],p[1])),m!==s)l=0,m?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1]),t.lineEnd()),e=d;else if(i&&e&&r^m){var v;g&n||!(v=o(p,e,!0))||(l=0,r?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!m||e&&sl(e,p)||t.point(p[0],p[1]),e=p,s=m,n=g},lineEnd:function(){s&&t.lineEnd(),e=null},clean:function(){return l|(c&&s)<<1}}},function(e,r,i,a){il(a,t,n,i,e,r)},r?[0,-t]:[-as,t-as])},yl=function(t,e,n,r,i,a){var o,u=t[0],s=t[1],c=0,l=1,f=e[0]-u,h=e[1]-s;if(o=n-u,f||!(o>0)){if(o/=f,f<0){if(o0){if(o>l)return;o>c&&(c=o)}if(o=i-u,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>c&&(c=o)}else if(f>0){if(o0)){if(o/=h,h<0){if(o0){if(o>l)return;o>c&&(c=o)}if(o=a-s,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>c&&(c=o)}else if(h>0){if(o0&&(t[0]=u+c*f,t[1]=s+c*h),l<1&&(e[0]=u+l*f,e[1]=s+l*h),!0}}}}},_l=1e9,wl=-_l;function xl(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,u,c){var l=0,f=0;if(null==i||(l=o(i,u))!==(f=o(a,u))||s(i,a)<0^u>0)do{c.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+u+4)%4)!==f);else c.point(a[0],a[1])}function o(r,i){return fs(r[0]-t)0?0:3:fs(r[0]-n)0?2:1:fs(r[1]-e)0?1:0:i>0?3:2}function u(t,e){return s(t.x,e.x)}function s(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var s,c,l,f,h,d,p,m,g,v,b,y=o,_=ul(),w={point:x,lineStart:function(){w.point=k,c&&c.push(l=[]),v=!0,g=!1,p=m=NaN},lineEnd:function(){s&&(k(f,h),d&&g&&_.rejoin(),s.push(_.result())),w.point=x,g&&y.lineEnd()},polygonStart:function(){y=_,s=[],c=[],b=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=c.length;nr&&(h-a)*(r-o)>(d-o)*(t-a)&&++e:d<=r&&(h-a)*(r-o)<(d-o)*(t-a)&&--e;return e}(),n=b&&e,i=(s=$(s)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&ll(s,u,e,a,o),o.polygonEnd()),y=o,s=c=l=null}};function x(t,e){i(t,e)&&y.point(t,e)}function k(a,o){var u=i(a,o);if(c&&l.push([a,o]),v)f=a,h=o,d=u,v=!1,u&&(y.lineStart(),y.point(a,o));else if(u&&g)y.point(a,o);else{var s=[p=Math.max(wl,Math.min(_l,p)),m=Math.max(wl,Math.min(_l,m))],_=[a=Math.max(wl,Math.min(_l,a)),o=Math.max(wl,Math.min(_l,o))];yl(s,_,t,e,n,r)?(g||(y.lineStart(),y.point(s[0],s[1])),y.point(_[0],_[1]),u||y.lineEnd(),b=!1):u&&(y.lineStart(),y.point(a,o),b=!1)}p=a,m=o,g=u}return w}}var kl,Ml,Sl,Al=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=xl(r,i,a,o)(e=n)},extent:function(u){return arguments.length?(r=+u[0][0],i=+u[0][1],a=+u[1][0],o=+u[1][1],t=e=null,n):[[r,i],[a,o]]}}},Tl=ts(),Cl={sphere:As,point:As,lineStart:function(){Cl.point=El,Cl.lineEnd=Pl},lineEnd:As,polygonStart:As,polygonEnd:As};function Pl(){Cl.point=Cl.lineEnd=As}function El(t,e){kl=t*=ls,Ml=ys(e*=ls),Sl=ps(e),Cl.point=Nl}function Nl(t,e){t*=ls;var n=ys(e*=ls),r=ps(e),i=fs(t-kl),a=ps(i),o=r*ys(i),u=Sl*n-Ml*r*a,s=Ml*n+Sl*r*a;Tl.add(ds(ws(o*o+u*u),s)),kl=t,Ml=n,Sl=r}var jl=function(t){return Tl.reset(),$s(t,Cl),+Tl},zl=[null,null],Ll={type:"LineString",coordinates:zl},Dl=function(t,e){return zl[0]=t,zl[1]=e,jl(Ll)},Ol={Feature:function(t,e){return Il(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++ris}).map(s)).concat(x(ms(a/d)*d,i,d).filter(function(t){return fs(t%m)>is}).map(c))}return v.lines=function(){return b().map(function(t){return{type:"LineString",coordinates:t}})},v.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(f(o).slice(1),l(n).reverse().slice(1),f(u).reverse().slice(1))]}},v.extent=function(t){return arguments.length?v.extentMajor(t).extentMinor(t):v.extentMinor()},v.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],u=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),u>o&&(t=u,u=o,o=t),v.precision(g)):[[r,u],[n,o]]},v.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),v.precision(g)):[[e,a],[t,i]]},v.step=function(t){return arguments.length?v.stepMajor(t).stepMinor(t):v.stepMinor()},v.stepMajor=function(t){return arguments.length?(p=+t[0],m=+t[1],v):[p,m]},v.stepMinor=function(t){return arguments.length?(h=+t[0],d=+t[1],v):[h,d]},v.precision=function(h){return arguments.length?(g=+h,s=Vl(a,i,90),c=Yl(e,t,g),l=Vl(u,o,90),f=Yl(r,n,g),v):g},v.extentMajor([[-180,-90+is],[180,90-is]]).extentMinor([[-180,-80-is],[180,80+is]])}function Wl(){return Gl()()}var Xl,Zl,Kl,Ql,Jl=function(t,e){var n=t[0]*ls,r=t[1]*ls,i=e[0]*ls,a=e[1]*ls,o=ps(r),u=ys(r),s=ps(a),c=ys(a),l=o*ps(n),f=o*ys(n),h=s*ps(i),d=s*ys(i),p=2*Ms(ws(Ss(a-r)+o*s*Ss(i-n))),m=ys(p),g=p?function(t){var e=ys(t*=p)/m,n=ys(p-t)/m,r=n*l+e*h,i=n*f+e*d,a=n*u+e*c;return[ds(i,r)*cs,ds(a,ws(r*r+i*i))*cs]}:function(){return[n*cs,r*cs]};return g.distance=p,g},tf=function(t){return t},ef=ts(),nf=ts(),rf={point:As,lineStart:As,lineEnd:As,polygonStart:function(){rf.lineStart=af,rf.lineEnd=sf},polygonEnd:function(){rf.lineStart=rf.lineEnd=rf.point=As,ef.add(fs(nf)),nf.reset()},result:function(){var t=ef/2;return ef.reset(),t}};function af(){rf.point=of}function of(t,e){rf.point=uf,Xl=Kl=t,Zl=Ql=e}function uf(t,e){nf.add(Ql*t-Kl*e),Kl=t,Ql=e}function sf(){uf(Xl,Zl)}var cf,lf,ff,hf,df=rf,pf=1/0,mf=pf,gf=-pf,vf=gf,bf={point:function(t,e){tgf&&(gf=t),evf&&(vf=e)},lineStart:As,lineEnd:As,polygonStart:As,polygonEnd:As,result:function(){var t=[[pf,mf],[gf,vf]];return gf=vf=-(mf=pf=1/0),t}},yf=0,_f=0,wf=0,xf=0,kf=0,Mf=0,Sf=0,Af=0,Tf=0,Cf={point:Pf,lineStart:Ef,lineEnd:zf,polygonStart:function(){Cf.lineStart=Lf,Cf.lineEnd=Df},polygonEnd:function(){Cf.point=Pf,Cf.lineStart=Ef,Cf.lineEnd=zf},result:function(){var t=Tf?[Sf/Tf,Af/Tf]:Mf?[xf/Mf,kf/Mf]:wf?[yf/wf,_f/wf]:[NaN,NaN];return yf=_f=wf=xf=kf=Mf=Sf=Af=Tf=0,t}};function Pf(t,e){yf+=t,_f+=e,++wf}function Ef(){Cf.point=Nf}function Nf(t,e){Cf.point=jf,Pf(ff=t,hf=e)}function jf(t,e){var n=t-ff,r=e-hf,i=ws(n*n+r*r);xf+=i*(ff+t)/2,kf+=i*(hf+e)/2,Mf+=i,Pf(ff=t,hf=e)}function zf(){Cf.point=Pf}function Lf(){Cf.point=Of}function Df(){$f(cf,lf)}function Of(t,e){Cf.point=$f,Pf(cf=ff=t,lf=hf=e)}function $f(t,e){var n=t-ff,r=e-hf,i=ws(n*n+r*r);xf+=i*(ff+t)/2,kf+=i*(hf+e)/2,Mf+=i,Sf+=(i=hf*t-ff*e)*(ff+t),Af+=i*(hf+e),Tf+=3*i,Pf(ff=t,hf=e)}var If=Cf;function Bf(t){this._context=t}Bf.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,ss)}},result:As};var Rf,qf,Ff,Hf,Uf,Vf=ts(),Yf={point:As,lineStart:function(){Yf.point=Gf},lineEnd:function(){Rf&&Wf(qf,Ff),Yf.point=As},polygonStart:function(){Rf=!0},polygonEnd:function(){Rf=null},result:function(){var t=+Vf;return Vf.reset(),t}};function Gf(t,e){Yf.point=Wf,qf=Hf=t,Ff=Uf=e}function Wf(t,e){Hf-=t,Uf-=e,Vf.add(ws(Hf*Hf+Uf*Uf)),Hf=t,Uf=e}var Xf=Yf;function Zf(){this._string=[]}function Kf(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}Zf.prototype={_radius:4.5,_circle:Kf(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=Kf(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var Qf=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),$s(t,n(r))),r.result()}return a.area=function(t){return $s(t,n(df)),df.result()},a.measure=function(t){return $s(t,n(Xf)),Xf.result()},a.bounds=function(t){return $s(t,n(bf)),bf.result()},a.centroid=function(t){return $s(t,n(If)),If.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,tf):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new Zf):new Bf(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)},Jf=function(t){return{stream:th(t)}};function th(t){return function(e){var n=new eh;for(var r in t)n[r]=t[r];return n.stream=e,n}}function eh(){}function nh(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),$s(n,t.stream(bf)),e(bf.result()),null!=r&&t.clipExtent(r),t}function rh(t,e,n){return nh(t,function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,u=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,u])},n)}function ih(t,e,n){return rh(t,[[0,0],e],n)}function ah(t,e,n){return nh(t,function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])},n)}function oh(t,e,n){return nh(t,function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])},n)}eh.prototype={constructor:eh,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var uh=16,sh=ps(30*ls),ch=function(t,e){return+e?function(t,e){function n(r,i,a,o,u,s,c,l,f,h,d,p,m,g){var v=c-r,b=l-i,y=v*v+b*b;if(y>4*e&&m--){var _=o+h,w=u+d,x=s+p,k=ws(_*_+w*w+x*x),M=Ms(x/=k),S=fs(fs(x)-1)e||fs((v*P+b*E)/y-.5)>.3||o*h+u*d+s*p2?t[2]%360*ls:0,T()):[g*cs,v*cs,b*cs]},S.angle=function(t){return arguments.length?(y=t%360*ls,T()):y*cs},S.precision=function(t){return arguments.length?(o=ch(u,M=t*t),C()):ws(M)},S.fitExtent=function(t,e){return rh(S,t,e)},S.fitSize=function(t,e){return ih(S,t,e)},S.fitWidth=function(t,e){return ah(S,t,e)},S.fitHeight=function(t,e){return oh(S,t,e)},function(){return e=t.apply(this,arguments),S.invert=e.invert&&A,T()}}function ph(t){var e=0,n=as/3,r=dh(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*ls,n=t[1]*ls):[e*cs,n*cs]},i}function mh(t,e){var n=ys(t),r=(n+ys(e))/2;if(fs(r)=.12&&i<.234&&r>=-.425&&r<-.214?u:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),u.stream(n),s.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n0?e<-os+is&&(e=-os+is):e>os-is&&(e=os-is);var n=i/bs(Ch(e),r);return[n*ys(r*t),i-n*ps(r*t)]}return a.invert=function(t,e){var n=i-e,a=_s(r)*ws(t*t+n*n);return[ds(t,fs(n))/r*_s(n),2*hs(bs(i/a,1/r))-os]},a}var Eh=function(){return ph(Ph).scale(109.5).parallels([30,30])};function Nh(t,e){return[t,e]}Nh.invert=Nh;var jh=function(){return hh(Nh).scale(152.63)};function zh(t,e){var n=ps(t),r=t===e?ys(t):(n-ps(e))/(e-t),i=n/r+t;if(fs(r)is&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var Gh=function(){return hh(Yh).scale(175.295)};function Wh(t,e){return[ps(e)*ys(t),ys(e)]}Wh.invert=_h(Ms);var Xh=function(){return hh(Wh).scale(249.5).clipAngle(90+is)};function Zh(t,e){var n=ps(e),r=1+ps(t)*n;return[n*ys(t)/r,ys(e)/r]}Zh.invert=_h(function(t){return 2*hs(t)});var Kh=function(){return hh(Zh).scale(250).clipAngle(142)};function Qh(t,e){return[vs(xs((os+e)/2)),-t]}Qh.invert=function(t,e){return[-e,2*hs(gs(t))-os]};var Jh=function(){var t=Th(Qh),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function td(t,e){return t.parent===e.parent?1:2}function ed(t,e){return t+e.x}function nd(t,e){return Math.max(t,e.y)}var rd=function(){var t=td,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter(function(e){var n=e.children;n?(e.x=function(t){return t.reduce(ed,0)/t.length}(n),e.y=function(t){return 1+t.reduce(nd,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)});var u=function(t){for(var e;e=t.children;)t=e[0];return t}(i),s=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),c=u.x-t(u,s)/2,l=s.x+t(s,u)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-c)/(l-c)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function id(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function ad(t,e){var n,r,i,a,o,u=new cd(t),s=+t.value&&(u.value=t.value),c=[u];for(null==e&&(e=od);n=c.pop();)if(s&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)c.push(r=n.children[a]=new cd(i[a])),r.parent=n,r.depth=n.depth+1;return u.eachBefore(sd)}function od(t){return t.children}function ud(t){t.data=t.data.data}function sd(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function cd(t){this.data=t,this.depth=this.height=0,this.parent=null}cd.prototype=ad.prototype={constructor:cd,count:function(){return this.eachAfter(id)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter(function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;for(t=n.pop(),e=r.pop();t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each(function(e){t.push(e)}),t},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(n){n!==t&&e.push({source:n.parent,target:n})}),e},copy:function(){return ad(this).eachBefore(ud)}};var ld=Array.prototype.slice,fd=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(ld.call(t))).length,a=[];r0&&n*n>r*r+i*i}function md(t,e){for(var n=0;n(o*=o)?(r=(c+o-i)/(2*c),a=Math.sqrt(Math.max(0,o/c-r*r)),n.x=t.x-r*u-a*s,n.y=t.y-r*s+a*u):(r=(c+i-o)/(2*c),a=Math.sqrt(Math.max(0,i/c-r*r)),n.x=e.x+r*u-a*s,n.y=e.y+r*s+a*u)):(n.x=e.x+n.r,n.y=e.y)}function _d(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function wd(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function xd(t){this._=t,this.next=null,this.previous=null}function kd(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,u,s,c,l,f;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;yd(n,e,r=t[2]),e=new xd(e),n=new xd(n),r=new xd(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(u=3;u0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Sd(e),n):t},n.parentId=function(t){return arguments.length?(e=Sd(t),n):e},n};function Fd(t,e){return t.parent===e.parent?1:2}function Hd(t){var e=t.children;return e?e[0]:t.t}function Ud(t){var e=t.children;return e?e[e.length-1]:t.t}function Vd(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Yd(t,e,n){return t.a.parent===e.parent?t.a:n}function Gd(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}Gd.prototype=Object.create(cd.prototype);var Wd=function(){var t=Fd,e=1,n=1,r=null;function i(i){var s=function(t){for(var e,n,r,i,a,o=new Gd(t,0),u=[o];e=u.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)u.push(n=e.children[i]=new Gd(r[i],i)),n.parent=e;return(o.parent=new Gd(null,0)).children=[o],o}(i);if(s.eachAfter(a),s.parent.m=-s.z,s.eachBefore(o),r)i.eachBefore(u);else{var c=i,l=i,f=i;i.eachBefore(function(t){t.xl.x&&(l=t),t.depth>f.depth&&(f=t)});var h=c===l?1:t(c,l)/2,d=h-c.x,p=e/(l.x+h+d),m=n/(f.depth||1);i.eachBefore(function(t){t.x=(t.x+d)*p,t.y=t.depth*m})}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,u=n,s=a.parent.children[0],c=a.m,l=o.m,f=u.m,h=s.m;u=Ud(u),a=Hd(a),u&&a;)s=Hd(s),(o=Ud(o)).a=e,(i=u.z+f-a.z-c+t(u._,a._))>0&&(Vd(Yd(u,e,r),e,i),c+=i,l+=i),f+=u.m,c+=a.m,h+=s.m,l+=o.m;u&&!Ud(o)&&(o.t=u,o.m+=f-l),a&&!Hd(s)&&(s.t=a,s.m+=c-h,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function u(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},Xd=function(t,e,n,r,i){for(var a,o=t.children,u=-1,s=o.length,c=t.value&&(i-n)/t.value;++uh&&(h=u),g=l*l*m,(d=Math.max(h/g,g/f))>p){l-=u;break}p=d}v.push(o={value:l,dice:s1?e:1)},n}(Zd),Jd=function(){var t=Qd,e=!1,n=1,r=1,i=[0],a=Ad,o=Ad,u=Ad,s=Ad,c=Ad;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(f),i=[0],e&&t.eachBefore(zd),t}function f(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,f=e.x1-n,h=e.y1-n;f=n-1){var l=u[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=s)}for(var f=c[e],h=r/2+f,d=e+1,p=n-1;d>>1;c[m]s-a){var b=(i*v+o*g)/r;t(e,d,g,i,a,b,s),t(d,n,v,b,a,o,s)}else{var y=(a*v+s*g)/r;t(e,d,g,i,a,o,y),t(d,n,v,i,y,o,s)}}(0,s,t.value,e,n,r,i)},ep=function(t,e,n,r,i){(1&t.depth?Xd:Ld)(t,e,n,r,i)},np=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,u,s,c,l,f=-1,h=o.length,d=t.value;++f1?e:1)},n}(Zd),rp=function(t){for(var e,n=-1,r=t.length,i=t[r-1],a=0;++n1&&ap(t[n[r-2]],t[n[r-1]],t[i])<=0;)--r;n[r++]=i}return n.slice(0,r)}var sp=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e=0;--e)c.push(t[r[a[e]][2]]);for(e=+u;eu!=c>u&&o<(s-n)*(u-r)/(c-r)+n&&(l=!l),s=n,c=r;return l},lp=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],u=a[1],s=0;++r1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(fp),pp=function t(e){function n(){var t=dp.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(fp),mp=function t(e){function n(t){return function(){for(var n=0,r=0;rr&&(e=n,n=r,r=e),function(t){return Math.max(n,Math.min(r,t))}}function zp(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i2?Lp:zp,i=a=null,f}function f(e){return isNaN(e=+e)?n:(i||(i=r(o.map(t),u,s)))(t(c(e)))}return f.invert=function(n){return c(e((a||(a=r(u,o.map(t),Fn)))(n)))},f.domain=function(t){return arguments.length?(o=wp.call(t,Cp),c===Ep||(c=jp(o)),l()):o.slice()},f.range=function(t){return arguments.length?(u=xp.call(t),l()):u.slice()},f.rangeRound=function(t){return u=xp.call(t),s=Zn,l()},f.clamp=function(t){return arguments.length?(c=t?jp(o):Ep,f):c!==Ep},f.interpolate=function(t){return arguments.length?(s=t,l()):s},f.unknown=function(t){return arguments.length?(n=t,f):n},function(n,r){return t=n,e=r,l()}}function $p(t,e){return Op()(t,e)}var Ip=function(t,e,n,r){var i,a=C(t,e,n);switch((r=Iu(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=Qu(a,o))||(r.precision=i),Hu(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=Ju(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Ku(a))||(r.precision=i-2*("%"===r.type))}return Fu(r)};function Bp(t){var e=t.domain;return t.ticks=function(t){var n=e();return A(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return Ip(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,u=i[a],s=i[o];return s0?r=T(u=Math.floor(u/r)*r,s=Math.ceil(s/r)*r,n):r<0&&(r=T(u=Math.ceil(u*r)/r,s=Math.floor(s*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(s/r)*r,e(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(s*r)/r,e(i)),t},t}function Rp(){var t=$p(Ep,Ep);return t.copy=function(){return Dp(t,Rp())},bp.apply(t,arguments),Bp(t)}function qp(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=wp.call(e,Cp),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return qp(t).unknown(e)},t=arguments.length?wp.call(t,Cp):[0,1],Bp(n)}var Fp=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o0){for(;hs)break;m.push(f)}}else for(;h=1;--l)if(!((f=c*l)s)break;m.push(f)}}else m=A(h,d,Math.min(d-h,p)).map(n);return r?m.reverse():m},r.tickFormat=function(t,i){if(null==i&&(i=10===a?".0e":","),"function"!=typeof i&&(i=Fu(i)),t===1/0)return i;null==t&&(t=10);var o=Math.max(1,a*t/r.ticks().length);return function(t){var r=t/n(Math.round(e(t)));return r*a0?i[r-1]:e[0],r=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return sm().domain([e,n]).range(a).unknown(t)},bp.apply(Bp(o),arguments)}function cm(){var t,e=[.5],n=[0,1],r=1;function i(i){return i<=i?n[s(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=xp.call(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=xp.call(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return cm().domain(e).range(n).unknown(t)},bp.apply(i,arguments)}var lm=new Date,fm=new Date;function hm(t,e,n,r){function i(e){return t(e=new Date(+e)),e}return i.floor=i,i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return u;do{u.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)},function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})},n&&(i.count=function(e,r){return lm.setTime(+e),fm.setTime(+r),t(lm),t(fm),Math.floor(n(lm,fm))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var dm=hm(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});dm.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?hm(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):dm:null};var pm=dm,mm=dm.range,gm=6e4,vm=6048e5,bm=hm(function(t){t.setTime(t-t.getMilliseconds())},function(t,e){t.setTime(+t+1e3*e)},function(t,e){return(e-t)/1e3},function(t){return t.getUTCSeconds()}),ym=bm,_m=bm.range,wm=hm(function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())},function(t,e){t.setTime(+t+e*gm)},function(t,e){return(e-t)/gm},function(t){return t.getMinutes()}),xm=wm,km=wm.range,Mm=hm(function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-t.getMinutes()*gm)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getHours()}),Sm=Mm,Am=Mm.range,Tm=hm(function(t){t.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*gm)/864e5},function(t){return t.getDate()-1}),Cm=Tm,Pm=Tm.range;function Em(t){return hm(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+7*e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*gm)/vm})}var Nm=Em(0),jm=Em(1),zm=Em(2),Lm=Em(3),Dm=Em(4),Om=Em(5),$m=Em(6),Im=Nm.range,Bm=jm.range,Rm=zm.range,qm=Lm.range,Fm=Dm.range,Hm=Om.range,Um=$m.range,Vm=hm(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),Ym=Vm,Gm=Vm.range,Wm=hm(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});Wm.every=function(t){return isFinite(t=Math.floor(t))&&t>0?hm(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,n){e.setFullYear(e.getFullYear()+n*t)}):null};var Xm=Wm,Zm=Wm.range,Km=hm(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*gm)},function(t,e){return(e-t)/gm},function(t){return t.getUTCMinutes()}),Qm=Km,Jm=Km.range,tg=hm(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getUTCHours()}),eg=tg,ng=tg.range,rg=hm(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/864e5},function(t){return t.getUTCDate()-1}),ig=rg,ag=rg.range;function og(t){return hm(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+7*e)},function(t,e){return(e-t)/vm})}var ug=og(0),sg=og(1),cg=og(2),lg=og(3),fg=og(4),hg=og(5),dg=og(6),pg=ug.range,mg=sg.range,gg=cg.range,vg=lg.range,bg=fg.range,yg=hg.range,_g=dg.range,wg=hm(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),xg=wg,kg=wg.range,Mg=hm(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});Mg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?hm(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)}):null};var Sg=Mg,Ag=Mg.range;function Tg(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Cg(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Pg(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function Eg(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,u=t.months,s=t.shortMonths,c=Fg(i),l=Hg(i),f=Fg(a),h=Hg(a),d=Fg(o),p=Hg(o),m=Fg(u),g=Hg(u),v=Fg(s),b=Hg(s),y={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return s[t.getMonth()]},B:function(t){return u[t.getMonth()]},c:null,d:cv,e:cv,f:pv,H:lv,I:fv,j:hv,L:dv,m:mv,M:gv,p:function(t){return i[+(t.getHours()>=12)]},Q:Uv,s:Vv,S:vv,u:bv,U:yv,V:_v,w:wv,W:xv,x:null,X:null,y:kv,Y:Mv,Z:Sv,"%":Hv},_={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return s[t.getUTCMonth()]},B:function(t){return u[t.getUTCMonth()]},c:null,d:Av,e:Av,f:Nv,H:Tv,I:Cv,j:Pv,L:Ev,m:jv,M:zv,p:function(t){return i[+(t.getUTCHours()>=12)]},Q:Uv,s:Vv,S:Lv,u:Dv,U:Ov,V:$v,w:Iv,W:Bv,x:null,X:null,y:Rv,Y:qv,Z:Fv,"%":Hv},w={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=v.exec(e.slice(n));return r?(t.m=b[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return M(t,e,n,r)},d:Jg,e:Jg,f:av,H:ev,I:ev,j:tv,L:iv,m:Qg,M:nv,p:function(t,e,n){var r=c.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:uv,s:sv,S:rv,u:Vg,U:Yg,V:Gg,w:Ug,W:Wg,x:function(t,e,r){return M(t,n,e,r)},X:function(t,e,n){return M(t,r,e,n)},y:Zg,Y:Xg,Z:Kg,"%":ov};function x(t,e){return function(n){var r,i,a,o=[],u=-1,s=0,c=t.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=Cg(Pg(a.y))).getUTCDay())>4||0===i?sg.ceil(r):sg(r),r=ig.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=e(Pg(a.y))).getDay())>4||0===i?jm.ceil(r):jm(r),r=Cm.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Cg(Pg(a.y)).getUTCDay():e(Pg(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Cg(a)):e(a)}}function M(t,e,n,r){for(var i,a,o=0,u=e.length,s=n.length;o=s)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=w[i in Og?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return y.x=x(n,y),y.X=x(r,y),y.c=x(e,y),_.x=x(n,_),_.X=x(r,_),_.c=x(e,_),{format:function(t){var e=x(t+="",y);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",Tg);return e.toString=function(){return t},e},utcFormat:function(t){var e=x(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t,Cg);return e.toString=function(){return t},e}}}var Ng,jg,zg,Lg,Dg,Og={"-":"",_:" ",0:"0"},$g=/^\s*\d+/,Ig=/^%/,Bg=/[\\^$*+?|[\]().{}]/g;function Rg(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function Kg(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Qg(t,e,n){var r=$g.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Jg(t,e,n){var r=$g.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function tv(t,e,n){var r=$g.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function ev(t,e,n){var r=$g.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function nv(t,e,n){var r=$g.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function rv(t,e,n){var r=$g.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function iv(t,e,n){var r=$g.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function av(t,e,n){var r=$g.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function ov(t,e,n){var r=Ig.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function uv(t,e,n){var r=$g.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function sv(t,e,n){var r=$g.exec(e.slice(n));return r?(t.Q=1e3*+r[0],n+r[0].length):-1}function cv(t,e){return Rg(t.getDate(),e,2)}function lv(t,e){return Rg(t.getHours(),e,2)}function fv(t,e){return Rg(t.getHours()%12||12,e,2)}function hv(t,e){return Rg(1+Cm.count(Xm(t),t),e,3)}function dv(t,e){return Rg(t.getMilliseconds(),e,3)}function pv(t,e){return dv(t,e)+"000"}function mv(t,e){return Rg(t.getMonth()+1,e,2)}function gv(t,e){return Rg(t.getMinutes(),e,2)}function vv(t,e){return Rg(t.getSeconds(),e,2)}function bv(t){var e=t.getDay();return 0===e?7:e}function yv(t,e){return Rg(Nm.count(Xm(t),t),e,2)}function _v(t,e){var n=t.getDay();return t=n>=4||0===n?Dm(t):Dm.ceil(t),Rg(Dm.count(Xm(t),t)+(4===Xm(t).getDay()),e,2)}function wv(t){return t.getDay()}function xv(t,e){return Rg(jm.count(Xm(t),t),e,2)}function kv(t,e){return Rg(t.getFullYear()%100,e,2)}function Mv(t,e){return Rg(t.getFullYear()%1e4,e,4)}function Sv(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Rg(e/60|0,"0",2)+Rg(e%60,"0",2)}function Av(t,e){return Rg(t.getUTCDate(),e,2)}function Tv(t,e){return Rg(t.getUTCHours(),e,2)}function Cv(t,e){return Rg(t.getUTCHours()%12||12,e,2)}function Pv(t,e){return Rg(1+ig.count(Sg(t),t),e,3)}function Ev(t,e){return Rg(t.getUTCMilliseconds(),e,3)}function Nv(t,e){return Ev(t,e)+"000"}function jv(t,e){return Rg(t.getUTCMonth()+1,e,2)}function zv(t,e){return Rg(t.getUTCMinutes(),e,2)}function Lv(t,e){return Rg(t.getUTCSeconds(),e,2)}function Dv(t){var e=t.getUTCDay();return 0===e?7:e}function Ov(t,e){return Rg(ug.count(Sg(t),t),e,2)}function $v(t,e){var n=t.getUTCDay();return t=n>=4||0===n?fg(t):fg.ceil(t),Rg(fg.count(Sg(t),t)+(4===Sg(t).getUTCDay()),e,2)}function Iv(t){return t.getUTCDay()}function Bv(t,e){return Rg(sg.count(Sg(t),t),e,2)}function Rv(t,e){return Rg(t.getUTCFullYear()%100,e,2)}function qv(t,e){return Rg(t.getUTCFullYear()%1e4,e,4)}function Fv(){return"+0000"}function Hv(){return"%"}function Uv(t){return+t}function Vv(t){return Math.floor(+t/1e3)}function Yv(t){return Ng=Eg(t),jg=Ng.format,zg=Ng.parse,Lg=Ng.utcFormat,Dg=Ng.utcParse,Ng}Yv({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Gv=Date.prototype.toISOString?function(t){return t.toISOString()}:Lg("%Y-%m-%dT%H:%M:%S.%LZ"),Wv=+new Date("2000-01-01T00:00:00.000Z")?function(t){var e=new Date(t);return isNaN(e)?null:e}:Dg("%Y-%m-%dT%H:%M:%S.%LZ"),Xv=1e3,Zv=60*Xv,Kv=60*Zv,Qv=24*Kv,Jv=7*Qv,tb=30*Qv,eb=365*Qv;function nb(t){return new Date(t)}function rb(t){return t instanceof Date?+t:+new Date(+t)}function ib(t,e,n,r,a,o,u,s,c){var l=$p(Ep,Ep),f=l.invert,h=l.domain,d=c(".%L"),p=c(":%S"),m=c("%I:%M"),g=c("%I %p"),v=c("%a %d"),b=c("%b %d"),y=c("%B"),_=c("%Y"),w=[[u,1,Xv],[u,5,5*Xv],[u,15,15*Xv],[u,30,30*Xv],[o,1,Zv],[o,5,5*Zv],[o,15,15*Zv],[o,30,30*Zv],[a,1,Kv],[a,3,3*Kv],[a,6,6*Kv],[a,12,12*Kv],[r,1,Qv],[r,2,2*Qv],[n,1,Jv],[e,1,tb],[e,3,3*tb],[t,1,eb]];function x(i){return(u(i)1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return Dy.h=360*t-100,Dy.s=1.5-1.5*e,Dy.l=.8-.9*e,Dy+""},$y=Fe(),Iy=Math.PI/3,By=2*Math.PI/3,Ry=function(t){var e;return t=(.5-t)*Math.PI,$y.r=255*(e=Math.sin(t))*e,$y.g=255*(e=Math.sin(t+Iy))*e,$y.b=255*(e=Math.sin(t+By))*e,$y+""};function qy(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var Fy=qy(wb("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Hy=qy(wb("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Uy=qy(wb("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Vy=qy(wb("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),Yy=function(t){return function(){return t}},Gy=Math.abs,Wy=Math.atan2,Xy=Math.cos,Zy=Math.max,Ky=Math.min,Qy=Math.sin,Jy=Math.sqrt,t_=1e-12,e_=Math.PI,n_=e_/2,r_=2*e_;function i_(t){return t>=1?n_:t<=-1?-n_:Math.asin(t)}function a_(t){return t.innerRadius}function o_(t){return t.outerRadius}function u_(t){return t.startAngle}function s_(t){return t.endAngle}function c_(t){return t&&t.padAngle}function l_(t,e,n,r,i,a,o){var u=t-n,s=e-r,c=(o?a:-a)/Jy(u*u+s*s),l=c*s,f=-c*u,h=t+l,d=e+f,p=n+l,m=r+f,g=(h+p)/2,v=(d+m)/2,b=p-h,y=m-d,_=b*b+y*y,w=i-a,x=h*m-p*d,k=(y<0?-1:1)*Jy(Zy(0,w*w*_-x*x)),M=(x*y-b*k)/_,S=(-x*b-y*k)/_,A=(x*y+b*k)/_,T=(-x*b+y*k)/_,C=M-g,P=S-v,E=A-g,N=T-v;return C*C+P*P>E*E+N*N&&(M=A,S=T),{cx:M,cy:S,x01:-l,y01:-f,x11:M*(i/w-1),y11:S*(i/w-1)}}var f_=function(){var t=a_,e=o_,n=Yy(0),r=null,i=u_,a=s_,o=c_,u=null;function s(){var s,c,l,f=+t.apply(this,arguments),h=+e.apply(this,arguments),d=i.apply(this,arguments)-n_,p=a.apply(this,arguments)-n_,m=Gy(p-d),g=p>d;if(u||(u=s=Ba()),ht_)if(m>r_-t_)u.moveTo(h*Xy(d),h*Qy(d)),u.arc(0,0,h,d,p,!g),f>t_&&(u.moveTo(f*Xy(p),f*Qy(p)),u.arc(0,0,f,p,d,g));else{var v,b,y=d,_=p,w=d,x=p,k=m,M=m,S=o.apply(this,arguments)/2,A=S>t_&&(r?+r.apply(this,arguments):Jy(f*f+h*h)),T=Ky(Gy(h-f)/2,+n.apply(this,arguments)),C=T,P=T;if(A>t_){var E=i_(A/f*Qy(S)),N=i_(A/h*Qy(S));(k-=2*E)>t_?(w+=E*=g?1:-1,x-=E):(k=0,w=x=(d+p)/2),(M-=2*N)>t_?(y+=N*=g?1:-1,_-=N):(M=0,y=_=(d+p)/2)}var j=h*Xy(y),z=h*Qy(y),L=f*Xy(x),D=f*Qy(x);if(T>t_){var O,$=h*Xy(_),I=h*Qy(_),B=f*Xy(w),R=f*Qy(w);if(m1?0:l<-1?e_:Math.acos(l))/2),Y=Jy(O[0]*O[0]+O[1]*O[1]);C=Ky(T,(f-Y)/(V-1)),P=Ky(T,(h-Y)/(V+1))}}M>t_?P>t_?(v=l_(B,R,j,z,h,P,g),b=l_($,I,L,D,h,P,g),u.moveTo(v.cx+v.x01,v.cy+v.y01),Pt_&&k>t_?C>t_?(v=l_(L,D,$,I,f,-C,g),b=l_(j,z,B,R,f,-C,g),u.lineTo(v.cx+v.x01,v.cy+v.y01),C=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}m&&(g[c]=+t(h,c,s),v[c]=+n(h,c,s),u.point(e?+e(h,c,s):g[c],r?+r(h,c,s):v[c]))}if(d)return u=null,d+""||null}function c(){return g_().defined(i).curve(o).context(a)}return s.x=function(n){return arguments.length?(t="function"==typeof n?n:Yy(+n),e=null,s):t},s.x0=function(e){return arguments.length?(t="function"==typeof e?e:Yy(+e),s):t},s.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:Yy(+t),s):e},s.y=function(t){return arguments.length?(n="function"==typeof t?t:Yy(+t),r=null,s):n},s.y0=function(t){return arguments.length?(n="function"==typeof t?t:Yy(+t),s):n},s.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Yy(+t),s):r},s.lineX0=s.lineY0=function(){return c().x(t).y(n)},s.lineY1=function(){return c().x(t).y(r)},s.lineX1=function(){return c().x(e).y(n)},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:Yy(!!t),s):i},s.curve=function(t){return arguments.length?(o=t,null!=a&&(u=o(a)),s):o},s.context=function(t){return arguments.length?(null==t?a=u=null:u=o(a=t),s):a},s},b_=function(t,e){return et?1:e>=t?0:NaN},y_=function(t){return t},__=function(){var t=y_,e=b_,n=null,r=Yy(0),i=Yy(r_),a=Yy(0);function o(o){var u,s,c,l,f,h=o.length,d=0,p=new Array(h),m=new Array(h),g=+r.apply(this,arguments),v=Math.min(r_,Math.max(-r_,i.apply(this,arguments)-g)),b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),y=b*(v<0?-1:1);for(u=0;u0&&(d+=f);for(null!=e?p.sort(function(t,n){return e(m[t],m[n])}):null!=n&&p.sort(function(t,e){return n(o[t],o[e])}),u=0,c=d?(v-h*y)/d:0;u0?f*c:0)+y,m[s]={data:o[s],index:u,value:f,startAngle:g,endAngle:l,padAngle:b};return m}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:Yy(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Yy(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Yy(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Yy(+t),o):a},o},w_=k_(d_);function x_(t){this._curve=t}function k_(t){function e(e){return new x_(t(e))}return e._curve=t,e}function M_(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(k_(t)):e()._curve},t}x_.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var S_=function(){return M_(g_().curve(w_))},A_=function(){var t=v_().curve(w_),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return M_(n())},delete t.lineX0,t.lineEndAngle=function(){return M_(r())},delete t.lineX1,t.lineInnerRadius=function(){return M_(i())},delete t.lineY0,t.lineOuterRadius=function(){return M_(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(k_(t)):e()._curve},t},T_=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},C_=Array.prototype.slice;function P_(t){return t.source}function E_(t){return t.target}function N_(t){var e=P_,n=E_,r=p_,i=m_,a=null;function o(){var o,u=C_.call(arguments),s=e.apply(this,u),c=n.apply(this,u);if(a||(a=o=Ba()),t(a,+r.apply(this,(u[0]=s,u)),+i.apply(this,u),+r.apply(this,(u[0]=c,u)),+i.apply(this,u)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:Yy(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:Yy(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function j_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function z_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function L_(t,e,n,r,i){var a=T_(e,n),o=T_(e,n=(n+i)/2),u=T_(r,n),s=T_(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],u[0],u[1],s[0],s[1])}function D_(){return N_(j_)}function O_(){return N_(z_)}function $_(){var t=N_(L_);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var I_={draw:function(t,e){var n=Math.sqrt(e/e_);t.moveTo(n,0),t.arc(0,0,n,0,r_)}},B_={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},R_=Math.sqrt(1/3),q_=2*R_,F_={draw:function(t,e){var n=Math.sqrt(e/q_),r=n*R_;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},H_=Math.sin(e_/10)/Math.sin(7*e_/10),U_=Math.sin(r_/10)*H_,V_=-Math.cos(r_/10)*H_,Y_={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=U_*n,i=V_*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=r_*a/5,u=Math.cos(o),s=Math.sin(o);t.lineTo(s*n,-u*n),t.lineTo(u*r-s*i,s*r+u*i)}t.closePath()}},G_={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},W_=Math.sqrt(3),X_={draw:function(t,e){var n=-Math.sqrt(e/(3*W_));t.moveTo(0,2*n),t.lineTo(-W_*n,-n),t.lineTo(W_*n,-n),t.closePath()}},Z_=Math.sqrt(3)/2,K_=1/Math.sqrt(12),Q_=3*(K_/2+1),J_={draw:function(t,e){var n=Math.sqrt(e/Q_),r=n/2,i=n*K_,a=r,o=n*K_+n,u=-a,s=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(u,s),t.lineTo(-.5*r-Z_*i,Z_*r+-.5*i),t.lineTo(-.5*a-Z_*o,Z_*a+-.5*o),t.lineTo(-.5*u-Z_*s,Z_*u+-.5*s),t.lineTo(-.5*r+Z_*i,-.5*i-Z_*r),t.lineTo(-.5*a+Z_*o,-.5*o-Z_*a),t.lineTo(-.5*u+Z_*s,-.5*s-Z_*u),t.closePath()}},tw=[I_,B_,F_,G_,Y_,X_,J_],ew=function(){var t=Yy(I_),e=Yy(64),n=null;function r(){var r;if(n||(n=r=Ba()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:Yy(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:Yy(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},nw=function(){};function rw(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function iw(t){this._context=t}iw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:rw(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:rw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var aw=function(t){return new iw(t)};function ow(t){this._context=t}ow.prototype={areaStart:nw,areaEnd:nw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:rw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var uw=function(t){return new ow(t)};function sw(t){this._context=t}sw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:rw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var cw=function(t){return new sw(t)};function lw(t,e){this._basis=new iw(t),this._beta=e}lw.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,u=e[n]-a,s=-1;++s<=n;)r=s/n,this._basis.point(this._beta*t[s]+(1-this._beta)*(i+r*o),this._beta*e[s]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var fw=function t(e){function n(t){return 1===e?new iw(t):new lw(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function hw(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function dw(t,e){this._context=t,this._k=(1-e)/6}dw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:hw(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:hw(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var pw=function t(e){function n(t){return new dw(t,e)}return n.tension=function(e){return t(+e)},n}(0);function mw(t,e){this._context=t,this._k=(1-e)/6}mw.prototype={areaStart:nw,areaEnd:nw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:hw(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var gw=function t(e){function n(t){return new mw(t,e)}return n.tension=function(e){return t(+e)},n}(0);function vw(t,e){this._context=t,this._k=(1-e)/6}vw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:hw(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var bw=function t(e){function n(t){return new vw(t,e)}return n.tension=function(e){return t(+e)},n}(0);function yw(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>t_){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,s=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/s,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/s}if(t._l23_a>t_){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*c+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*c+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function _w(t,e){this._context=t,this._alpha=e}_w.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:yw(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var ww=function t(e){function n(t){return e?new _w(t,e):new dw(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function xw(t,e){this._context=t,this._alpha=e}xw.prototype={areaStart:nw,areaEnd:nw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:yw(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var kw=function t(e){function n(t){return e?new xw(t,e):new mw(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Mw(t,e){this._context=t,this._alpha=e}Mw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:yw(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Sw=function t(e){function n(t){return e?new Mw(t,e):new vw(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Aw(t){this._context=t}Aw.prototype={areaStart:nw,areaEnd:nw,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var Tw=function(t){return new Aw(t)};function Cw(t){return t<0?-1:1}function Pw(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(Cw(a)+Cw(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function Ew(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Nw(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,u=(a-r)/3;t._context.bezierCurveTo(r+u,i+u*e,a-u,o-u*n,a,o)}function jw(t){this._context=t}function zw(t){this._context=new Lw(t)}function Lw(t){this._context=t}function Dw(t){return new jw(t)}function Ow(t){return new zw(t)}function $w(t){this._context=t}function Iw(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var qw=function(t){return new Rw(t,.5)};function Fw(t){return new Rw(t,0)}function Hw(t){return new Rw(t,1)}var Uw=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],u=o.length;a=0;)n[e]=e;return n};function Yw(t,e){return t[e]}var Gw=function(){var t=Yy([]),e=Vw,n=Uw,r=Yw;function i(i){var a,o,u=t.apply(this,arguments),s=i.length,c=u.length,l=new Array(c);for(a=0;a0){for(var n,r,i,a=0,o=t[0].length;a0)for(var n,r,i,a,o,u,s=0,c=t[e[0]].length;s=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a},Zw=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;oa&&(a=e,r=n);return r}var tx=function(t){var e=t.map(ex);return Vw(t).sort(function(t,n){return e[t]-e[n]})};function ex(t){for(var e,n=0,r=-1,i=t.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-s,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-c,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(t[0]=[s+l*h,c+l*d]),f<1&&(t[1]=[s+f*h,c+f*d]),!0)}}}}}function bx(t,e,n,r,i){var a=t[1];if(a)return!0;var o,u,s=t[0],c=t.left,l=t.right,f=c[0],h=c[1],d=l[0],p=l[1],m=(f+d)/2,g=(h+p)/2;if(p===h){if(m=r)return;if(f>d){if(s){if(s[1]>=i)return}else s=[m,n];a=[m,i]}else{if(s){if(s[1]1)if(f>d){if(s){if(s[1]>=i)return}else s=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(s){if(s[1]=r)return}else s=[e,o*e+u];a=[r,o*r+u]}else{if(s){if(s[0]=-Ix)){var d=s*s+c*c,p=l*l+f*f,m=(f*d-c*p)/h,g=(s*p-l*d)/h,v=kx.pop()||new function(){cx(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=t,v.site=i,v.x=m+o,v.y=(v.cy=g+u)+Math.sqrt(m*m+g*g),t.circle=v;for(var b=null,y=Dx._;y;)if(v.y$x)u=u.L;else{if(!((i=a-jx(u,o))>$x)){r>-$x?(e=u.P,n=u):i>-$x?(e=u,n=u.N):e=n=u;break}if(!u.R){e=u;break}u=u.R}!function(t){Lx[t.index]={site:t,halfedges:[]}}(t);var s=Tx(t);if(zx.insert(e,s),e||n){if(e===n)return Sx(e),n=Tx(e.site),zx.insert(s,n),s.edge=n.edge=px(e.site,s.site),Mx(e),void Mx(n);if(n){Sx(e),Sx(n);var c=e.site,l=c[0],f=c[1],h=t[0]-l,d=t[1]-f,p=n.site,m=p[0]-l,g=p[1]-f,v=2*(h*g-d*m),b=h*h+d*d,y=m*m+g*g,_=[(g*b-d*y)/v+l,(h*y-m*b)/v+f];gx(n.edge,c,p,_),s.edge=px(c,t,null,_),n.edge=px(t,p,null,_),Mx(e),Mx(n)}else s.edge=px(e.site,s.site)}}function Nx(t,e){var n=t.site,r=n[0],i=n[1],a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var u=(n=o.site)[0],s=n[1],c=s-e;if(!c)return u;var l=u-r,f=1/a-1/c,h=l/c;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*c)-s+c/2+i-a/2)))/f+r:(r+u)/2}function jx(t,e){var n=t.N;if(n)return Nx(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var zx,Lx,Dx,Ox,$x=1e-6,Ix=1e-12;function Bx(t,e){return e[1]-t[1]||e[0]-t[0]}function Rx(t,e){var n,r,i,a=t.sort(Bx).pop();for(Ox=[],Lx=new Array(t.length),zx=new dx,Dx=new dx;;)if(i=xx,a&&(!i||a[1]$x||Math.abs(i[0][1]-i[1][1])>$x)||delete Ox[a]}(o,u,s,c),function(t,e,n,r){var i,a,o,u,s,c,l,f,h,d,p,m,g=Lx.length,v=!0;for(i=0;i$x||Math.abs(m-h)>$x)&&(s.splice(u,0,Ox.push(mx(o,d,Math.abs(p-t)<$x&&r-m>$x?[t,Math.abs(f-t)<$x?h:r]:Math.abs(m-r)<$x&&n-p>$x?[Math.abs(h-r)<$x?f:n,r]:Math.abs(p-n)<$x&&m-e>$x?[n,Math.abs(f-n)<$x?h:e]:Math.abs(m-e)<$x&&p-t>$x?[Math.abs(h-e)<$x?f:t,e]:null))-1),++c);c&&(v=!1)}if(v){var b,y,_,w=1/0;for(i=0,v=null;i=u)return null;var s=t-i.site[0],c=e-i.site[1],l=s*s+c*c;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var s=t-u[0],c=e-u[1],f=s*s+c*c;fr?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}var tk=function(){var t,e,n=Wx,r=Xx,i=Jx,a=Kx,o=Qx,u=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],c=250,l=ar,f=[],h=ht("start","zoom","end"),d=500,p=150,m=0;function g(t){t.property("__zoom",Zx).on("wheel.zoom",k).on("mousedown.zoom",M).on("dblclick.zoom",S).filter(o).on("touchstart.zoom",A).on("touchmove.zoom",T).on("touchend.zoom touchcancel.zoom",C).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function v(t,e){return(e=Math.max(u[0],Math.min(u[1],e)))===t.k?t:new Hx(e,t.x,t.y)}function b(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new Hx(t.k,r,i)}function y(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function _(t,e,n){t.on("start.zoom",function(){w(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){w(this,arguments).end()}).tween("zoom",function(){var t=arguments,i=w(this,t),a=r.apply(this,t),o=n||y(a),u=Math.max(a[1][0]-a[0][0],a[1][1]-a[0][1]),s=this.__zoom,c="function"==typeof e?e.apply(this,t):e,f=l(s.invert(o).concat(u/s.k),c.invert(o).concat(u/c.k));return function(t){if(1===t)t=c;else{var e=f(t),n=u/e[2];t=new Hx(n,o[0]-e[0]*n,o[1]-e[1]*n)}i.zoom(null,t)}})}function w(t,e){for(var n,r=0,i=f.length;rm}t.zoom("mouse",i(b(t.that.__zoom,t.mouse[0]=se(t.that),t.mouse[1]),t.extent,s))},!0).on("mouseup.zoom",function(){r.on("mousemove.zoom mouseup.zoom",null),me(Ut.view,t.moved),Gx(),t.end()},!0),a=se(this),o=Ut.clientX,u=Ut.clientY;pe(Ut.view),Yx(),t.mouse=[a,this.__zoom.invert(a)],Qr(this),t.start()}}function S(){if(n.apply(this,arguments)){var t=this.__zoom,e=se(this),a=t.invert(e),o=t.k*(Ut.shiftKey?.5:2),u=i(b(v(t,o),e,a),r.apply(this,arguments),s);Gx(),c>0?ee(this).transition().duration(c).call(_,u,e):ee(this).call(g.transform,u)}}function A(){if(n.apply(this,arguments)){var e,r,i,a,o=w(this,arguments),u=Ut.changedTouches,s=u.length;for(Yx(),r=0;r + > + + ( + + + ) + + @@ -170,7 +181,18 @@ Processing occurs in these steps: + > + + ( + + + ) + + @@ -265,7 +287,18 @@ provides access to elements of each docset. + > + + ( + + + ) + +