MainScene.js 154 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/Script/MainScene.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
  12. cc._RF.push(module, '726051WgaxHep/G1I05lW4n', 'MainScene');
  13. // Script/MainScene.ts
  14. "use strict";
  15. var __extends = (this && this.__extends) || (function () {
  16. var extendStatics = function (d, b) {
  17. extendStatics = Object.setPrototypeOf ||
  18. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  19. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  20. return extendStatics(d, b);
  21. };
  22. return function (d, b) {
  23. extendStatics(d, b);
  24. function __() { this.constructor = d; }
  25. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  26. };
  27. })();
  28. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  29. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  30. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  31. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  32. return c > 3 && r && Object.defineProperty(target, key, r), r;
  33. };
  34. Object.defineProperty(exports, "__esModule", { value: true });
  35. var Global_1 = require("./Global");
  36. var MessManager_1 = require("./MessManager");
  37. var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
  38. var MainScene = /** @class */ (function (_super) {
  39. __extends(MainScene, _super);
  40. function MainScene() {
  41. var _this = _super !== null && _super.apply(this, arguments) || this;
  42. _this.boli = null;
  43. _this.dici = null;
  44. _this.lvdai = null;
  45. _this.shandian = null;
  46. _this.tanhuang = null;
  47. _this.Opplvdai = null;
  48. _this.GD = null;
  49. _this.failure = null;
  50. _this.fuhuo = null;
  51. _this.Player = null;
  52. _this.FHolderNode = null;
  53. _this.Bg = null;
  54. _this.LifeDing = null;
  55. _this.LEFT = null;
  56. _this.RIGHT = null;
  57. _this.output = null;
  58. // LIFE-CYCLE CALLBACKS:
  59. /**
  60. * 上一个落脚点生成时间
  61. */
  62. _this.STime = 0;
  63. /**
  64. * 当前落脚点生成时间
  65. */
  66. _this.ETime = 0;
  67. /** Left*/
  68. _this.LkeyDown = false;
  69. /** Right*/
  70. _this.RkeyDown = false;
  71. /**the loght FootHolder F */
  72. _this.lightF = false;
  73. _this.moveFalg = "";
  74. _this.USERINFO = {
  75. userId: "",
  76. score: 0,
  77. };
  78. _this.fuhuoCount = 1;
  79. _this.once = false;
  80. return _this;
  81. }
  82. MainScene.prototype.onKeyDown = function (event) {
  83. if (event.keyCode == cc.macro.KEY.w) {
  84. console.error(1231);
  85. }
  86. };
  87. MainScene.prototype.onLoad = function () {
  88. cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
  89. MessManager_1.default.getInstance().initData();
  90. var time = cc.sys.localStorage.getItem("hfsj");
  91. if (time == null || time == undefined || time == "") {
  92. cc.sys.localStorage.setItem("hfsj", "99");
  93. }
  94. this.LifeDing.zIndex = 10;
  95. this.FHolderNode.zIndex = 9;
  96. Global_1.default.instance.setMN(this.node);
  97. this.STime = Date.now();
  98. var FHolder = cc.instantiate(this.GD);
  99. this.FHolderNode.addChild(FHolder, 10, "GD");
  100. FHolder.getComponent("GD").init(this, 1);
  101. FHolder.getComponent("GD").First = true;
  102. FHolder.y = -100;
  103. var FHolder2 = cc.instantiate(this.lvdai);
  104. this.FHolderNode.addChild(FHolder2, 10, "lvdai");
  105. FHolder2.getComponent("lvdai").init(this);
  106. FHolder2.y = -300;
  107. // let FHolder2 = cc.instantiate(this.dici);
  108. // this.FHolderNode.addChild(FHolder2, 10, "dici");
  109. // FHolder2.getComponent("dici").init(this);
  110. // FHolder2.y = -300;
  111. // let FHolder2 = cc.instantiate(this.tanhuang);
  112. // this.FHolderNode.addChild(FHolder2,10,"tanhuang");
  113. // FHolder2.getComponent("tanhuang").init(this);
  114. // FHolder2.y = -300;
  115. var FHolder3 = cc.instantiate(this.GD);
  116. this.FHolderNode.addChild(FHolder3, 10, "GD");
  117. FHolder3.getComponent("GD").init(this, 1);
  118. FHolder3.y = -450;
  119. // this.Player.active = false;
  120. this.Player.x = 0;
  121. // this.Player.y = FHolder.y+60;
  122. this.Player.zIndex = 11;
  123. for (var i = 0; i < this.LifeDing.children.length; i++) {
  124. if (this.LifeDing.children[i].name == "lifeBG") {
  125. if (!this.LifeDing.children[i].active) {
  126. this.LifeDing.children[i].active = true;
  127. }
  128. Global_1.default.instance.reLife.push(this.LifeDing.children[i]);
  129. }
  130. }
  131. cc.director.getCollisionManager().enabled = true;
  132. // cc.director.getCollisionManager().enabledDebugDraw = true;
  133. cc.director.getCollisionManager().enabledDrawBoundingBox = false;
  134. };
  135. MainScene.prototype.playtansound = function () {
  136. if (Global_1.default.instance.OverFlag == false) {
  137. cc.loader.loadRes("tan", cc.AudioClip, function (err, clip) {
  138. var audioID = cc.audioEngine.play(clip, false, 0.5);
  139. });
  140. }
  141. };
  142. MainScene.prototype.playdeadsound = function () {
  143. cc.loader.loadRes("dead", cc.AudioClip, function (err, clip) {
  144. var audioID = cc.audioEngine.play(clip, false, 0.5);
  145. });
  146. };
  147. MainScene.prototype.start = function () {
  148. };
  149. MainScene.prototype.update = function (dt) {
  150. // console.log(Global.instance.CollisionFlag);
  151. this.MoveBg();
  152. Global_1.default.instance.moveSpeed = 1;
  153. var FHolder;
  154. if ((this.ETime - this.STime) > (1200 - (180 * (Global_1.default.instance.FHFallSpeed - 2)))) { //控制落脚点之间的间距,间距144px
  155. this.STime = Date.now();
  156. if (!Global_1.default.instance.OverFlag) {
  157. FHolder = this.FootHoldGenerator(null);
  158. // this.Score();
  159. }
  160. }
  161. this.FHolder();
  162. this.reduceLife();
  163. if (Global_1.default.instance.CollisionFlag) { //左右传送带减速
  164. switch (Global_1.default.instance.KIND_FootHold) {
  165. case 3: {
  166. this.Player.x += 2;
  167. break;
  168. }
  169. case 4: {
  170. this.Player.x -= 2;
  171. break;
  172. }
  173. case 7: {
  174. if (Global_1.default.instance.LorR == 1) {
  175. this.Player.x--;
  176. }
  177. else {
  178. this.Player.x++;
  179. }
  180. break;
  181. }
  182. default: {
  183. break;
  184. }
  185. }
  186. }
  187. if (this.Player.x < -180) {
  188. this.Player.x = -180;
  189. }
  190. if (this.Player.x > 180) {
  191. this.Player.x = 180;
  192. }
  193. if (this.Player.y < (-560)) {
  194. this.Player.getComponent(cc.BoxCollider).enabled = false;
  195. this.pretreatmentGameover();
  196. }
  197. if (Global_1.default.instance.reLife.length == 0) {
  198. this.Player.getComponent(cc.BoxCollider).enabled = false;
  199. this.pretreatmentGameover();
  200. }
  201. this.ETime = Date.now();
  202. // let AllChildren = new Array();
  203. // let GDChildren = new Array();
  204. // AllChildren = this.node.getChildByName("BgNode").getChildByName("FHolder").children;
  205. // for (let i = 0; i < AllChildren.length; i++) {
  206. // if (AllChildren[i].name == "GD") {
  207. // GDChildren.push(AllChildren[i]);
  208. // }
  209. // }
  210. // cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this.onKeyDown,this);
  211. //cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP,this.onKeyUp,this);
  212. this.Listener();
  213. };
  214. MainScene.prototype.Listener = function () {
  215. var _this = this;
  216. var btnClickArr = new Array(2);
  217. if (!this.LkeyDown) {
  218. this.RIGHT.node.on(cc.Node.EventType.TOUCH_START, this.BtnTurnRight, this);
  219. this.RIGHT.node.on(cc.Node.EventType.TOUCH_MOVE, this.BtnTurnRight, this);
  220. this.RIGHT.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onKeyUp, this);
  221. btnClickArr.push(this.RIGHT);
  222. this.RIGHT.node.on(cc.Node.EventType.TOUCH_END, function () {
  223. _this.onKeyUp;
  224. }, this);
  225. }
  226. else {
  227. this.RIGHT.node.off(cc.Node.EventType.TOUCH_START, this.BtnTurnRight, this);
  228. this.RIGHT.node.off(cc.Node.EventType.TOUCH_MOVE, this.BtnTurnRight, this);
  229. this.RIGHT.node.off(cc.Node.EventType.TOUCH_CANCEL, this.onKeyUp, this);
  230. this.RIGHT.node.off(cc.Node.EventType.TOUCH_END, function () {
  231. _this.onKeyUp;
  232. }, this);
  233. }
  234. if (!this.RkeyDown) {
  235. this.LEFT.node.on(cc.Node.EventType.TOUCH_START, this.BtnTurnLeft, this);
  236. this.LEFT.node.on(cc.Node.EventType.TOUCH_MOVE, this.BtnTurnLeft, this);
  237. this.LEFT.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onKeyUp, this);
  238. // btnClickArr.push(this.LEFT);
  239. this.LEFT.node.on(cc.Node.EventType.TOUCH_END, function () {
  240. _this.onKeyUp;
  241. }, this);
  242. }
  243. else {
  244. this.LEFT.node.off(cc.Node.EventType.TOUCH_START, this.BtnTurnLeft, this);
  245. this.LEFT.node.off(cc.Node.EventType.TOUCH_MOVE, this.BtnTurnLeft, this);
  246. this.LEFT.node.off(cc.Node.EventType.TOUCH_CANCEL, this.onKeyUp, this);
  247. this.LEFT.node.off(cc.Node.EventType.TOUCH_END, function () {
  248. _this.onKeyUp;
  249. }, this);
  250. }
  251. };
  252. MainScene.prototype.StopAni = function (self) {
  253. if (!Global_1.default.instance.AniFalg) {
  254. var FHolder = self.node.getChildByName("BgNode").getChildByName("FHolder").children;
  255. var Fname = void 0;
  256. for (var i = 0; FHolder.length; i++) {
  257. if (i == FHolder.length - 1) {
  258. Global_1.default.instance.AniFalg = true;
  259. return;
  260. }
  261. Fname = FHolder[i].name;
  262. FHolder[i].getComponent(Fname).enabled = false;
  263. }
  264. }
  265. };
  266. /**
  267. * player 移出落脚点
  268. */
  269. MainScene.prototype.FHolder = function () {
  270. var self = this;
  271. var FHArray = this.FHolderNode.children;
  272. var Ani; //the Animation of Player when player fall down
  273. var Anistate; //the state of Ani;
  274. for (var i = FHArray.length - 1; i >= 0; i--) {
  275. if (FHArray[i].isHold) {
  276. if (self.Player.x > (FHArray[i].x + 75)) {
  277. Global_1.default.instance.CollisionFlag = false;
  278. FHArray[i].isHold = false;
  279. }
  280. else if (self.Player.x < (FHArray[i].x - 75)) {
  281. Global_1.default.instance.CollisionFlag = false;
  282. FHArray[i].isHold = false;
  283. }
  284. else {
  285. Global_1.default.instance.CollisionFlag = true;
  286. FHArray[i].isHold = true;
  287. }
  288. }
  289. }
  290. };
  291. /**
  292. * 移动背景,初始移动速度200px/s
  293. */
  294. MainScene.prototype.MoveBg = function () {
  295. var Bg0 = this.Bg.getChildByName("Bg_0");
  296. var Bg1 = this.Bg.getChildByName("Bg_1");
  297. if (Global_1.default.instance.OverFlag) {
  298. }
  299. else {
  300. Bg0.y += Global_1.default.instance.FHFallSpeed + 1;
  301. Bg1.y += Global_1.default.instance.FHFallSpeed + 1;
  302. if (Bg0.y > 946) {
  303. Bg0.y = -946;
  304. }
  305. if (Bg1.y > 946) {
  306. Bg1.y = -946;
  307. }
  308. }
  309. };
  310. /**
  311. * 生成落脚点
  312. */
  313. MainScene.prototype.FootHoldGenerator = function (rtpe) {
  314. var self = this;
  315. var Magnification = 0;
  316. var f = parseInt(self.LifeDing.getChildByName("Floor").getComponent(cc.Label).string);
  317. if (f < 20) {
  318. Magnification = 2;
  319. }
  320. else if (f < 40) {
  321. Magnification = 4;
  322. }
  323. else if (f < 60) {
  324. Magnification = 6;
  325. }
  326. else if (f < 80) {
  327. Magnification = 8;
  328. }
  329. else {
  330. Magnification = 8;
  331. }
  332. var KindHolder = Math.ceil(Math.random() * Magnification);
  333. // KindHolder = 7;
  334. var FHolder;
  335. // KindHolder = Math.ceil(Math.random()*7);
  336. if (KindHolder == 3 || KindHolder == 4) {
  337. var va = Math.random() * 10;
  338. if (va >= 1 && va < 4) {
  339. KindHolder = 7;
  340. }
  341. else if (va >= 4 && va < 10) {
  342. KindHolder = 5;
  343. }
  344. //KindHolder = 5;
  345. console.log("KindHolder gb: " + KindHolder);
  346. }
  347. if (rtpe != null) {
  348. KindHolder = rtpe;
  349. console.log("KindHolder gb2: " + KindHolder);
  350. }
  351. this.ETime = Date.now();
  352. switch (KindHolder) {
  353. case 1: {
  354. FHolder = cc.instantiate(self.GD);
  355. self.FHolderNode.addChild(FHolder, 5, "GD");
  356. FHolder.getComponent("GD").init(self, 1);
  357. FHolder.isHold = false;
  358. // console.log("产生第一种落脚点");
  359. break;
  360. }
  361. case 2: {
  362. FHolder = cc.instantiate(self.GD);
  363. self.FHolderNode.addChild(FHolder, 5, "GD");
  364. FHolder.getComponent("GD").init(self, 7);
  365. FHolder.isHold = false;
  366. break;
  367. }
  368. case 3: {
  369. FHolder = cc.instantiate(self.lvdai);
  370. self.FHolderNode.addChild(FHolder, 5, "lvdai");
  371. FHolder.getComponent("lvdai").init(self);
  372. FHolder.isHold = false;
  373. // console.log("产生第二种落脚点");
  374. console.log(" 创建滚动 ");
  375. break;
  376. }
  377. case 4: {
  378. FHolder = cc.instantiate(self.lvdai);
  379. self.FHolderNode.addChild(FHolder, 5, "lvdai");
  380. FHolder.getComponent("lvdai").init(self);
  381. FHolder.isHold = false;
  382. // console.log("产生第五种落脚点");
  383. console.log(" 创建滚动1 ");
  384. break;
  385. }
  386. case 5: {
  387. FHolder = cc.instantiate(self.boli);
  388. self.FHolderNode.addChild(FHolder, 5, "boli");
  389. FHolder.getComponent("boli").init(self);
  390. FHolder.isHold = false;
  391. // console.log("产生第三种落脚点");
  392. break;
  393. }
  394. case 6: {
  395. FHolder = cc.instantiate(self.dici);
  396. self.FHolderNode.addChild(FHolder, 5, "dici");
  397. FHolder.getComponent("dici").init(self);
  398. FHolder.isHold = false;
  399. // console.log("产生第四种落脚点");
  400. break;
  401. }
  402. case 7: {
  403. // FHolder = cc.instantiate(self.GD);
  404. // self.FHolderNode.addChild(FHolder, 5, "GD");
  405. // FHolder.getComponent("GD").init(self, 7);
  406. // FHolder.isHold = false;
  407. // break;
  408. }
  409. case 8: {
  410. if (self.lightF) {
  411. self.lightF = false;
  412. self.FootHoldGenerator(null);
  413. break;
  414. }
  415. FHolder = cc.instantiate(self.shandian);
  416. self.FHolderNode.addChild(FHolder, 5, "shandian");
  417. FHolder.getComponent("shandian").init(self);
  418. FHolder.isHold = false;
  419. self.lightF = true;
  420. break;
  421. }
  422. // default:{
  423. // FHolder = cc.instantiate(self.GD);
  424. // self.FHolderNode.addChild(FHolder,5,"GD");
  425. // FHolder.getComponent("GD").init(self);
  426. // FHolder.getComponent("GD").enabled = true;
  427. // FHolder.getComponent("MoveGD").init(self);
  428. // FHolder.getComponent("MoveGD").enabled = false;
  429. // FHolder.isHold = false;
  430. // // console.log("默认产生第一种落脚点");
  431. // }
  432. // break;
  433. }
  434. return FHolder;
  435. };
  436. /**
  437. * 按钮触发,向左,长按事件
  438. */
  439. MainScene.prototype.BtnTurnLeft = function (event) {
  440. var self = this;
  441. if (self.RkeyDown) {
  442. return;
  443. }
  444. else {
  445. self.LkeyDown = true;
  446. self.RkeyDown = false;
  447. this.BtnLorR(event);
  448. }
  449. };
  450. /**
  451. * 按钮触发,向右,长按事件,长按响应未解决
  452. */
  453. MainScene.prototype.BtnTurnRight = function (event) {
  454. var self = this;
  455. if (self.LkeyDown) {
  456. return;
  457. }
  458. else {
  459. self.LkeyDown = false;
  460. self.RkeyDown = true;
  461. this.BtnLorR(event);
  462. }
  463. };
  464. /**
  465. * btn触发事件
  466. * @param event 按钮触发事件
  467. */
  468. MainScene.prototype.BtnLorR = function (event) {
  469. var self = this;
  470. Global_1.default.instance.moveSpeed = 1;
  471. var schedule = cc.director.getScheduler();
  472. var stand = self.Player.getChildByName("stand");
  473. var runRight = self.Player.getChildByName("runRight");
  474. var run = self.Player.getChildByName("run");
  475. var Ani; //the animation of player
  476. var Anistate; //the Ani's state
  477. var Anistring; //the name of Ani
  478. var moveByTime = 1;
  479. var scheduleState = false; //the schedule's state
  480. var schedulePause = true;
  481. var target = null; //the target which is binged to schedule
  482. var moveByDes = Global_1.default.instance.moveSpeed * 120 + 40;
  483. if (self.LkeyDown) {
  484. target = self.LEFT;
  485. moveByTime = 1;
  486. moveByDes = -moveByDes;
  487. scheduleState = schedule.isScheduled(func, target);
  488. // self.output.getComponent(cc.Label).string = Anistring;
  489. schedulePause = schedule.isTargetPaused(target);
  490. Ani = run.getComponent(cc.Animation);
  491. Anistring = "run";
  492. stand.active = false;
  493. runRight.active = false;
  494. run.active = true;
  495. // self.output.getComponent(cc.Label).string = Anistring;
  496. if (!Global_1.default.instance.CollisionFlag) {
  497. moveByTime = 1;
  498. }
  499. else {
  500. switch (Global_1.default.instance.KIND_FootHold) {
  501. case 2: {
  502. moveByTime = 4.1;
  503. self.output.getComponent(cc.Label).string = Global_1.default.instance.KIND_FootHold + "2";
  504. break;
  505. }
  506. case 5: {
  507. moveByTime = 3.9;
  508. // self.output.getComponent(cc.Label).string = Global.instance.KIND_FootHold+"5";
  509. break;
  510. }
  511. }
  512. ;
  513. }
  514. }
  515. if (self.RkeyDown) {
  516. target = self.RIGHT;
  517. moveByTime = 1;
  518. moveByDes = moveByDes;
  519. scheduleState = schedule.isScheduled(func, target);
  520. // self.output.getComponent(cc.Label).string = Anistring;
  521. schedulePause = schedule.isTargetPaused(target);
  522. Ani = runRight.getComponent(cc.Animation);
  523. Anistring = "runR";
  524. stand.active = false;
  525. runRight.active = true;
  526. run.active = false;
  527. // self.output.getComponent(cc.Label).string = Anistring;
  528. if (!Global_1.default.instance.CollisionFlag) {
  529. moveByTime = 1;
  530. }
  531. else {
  532. switch (Global_1.default.instance.KIND_FootHold) {
  533. case 2: {
  534. moveByTime = 4.1;
  535. // self.output.getComponent(cc.Label).string = Global.instance.KIND_FootHold+"2";
  536. break;
  537. }
  538. case 5: {
  539. moveByTime = 3.9;
  540. // self.output.getComponent(cc.Label).string = Global.instance.KIND_FootHold+"5";
  541. break;
  542. }
  543. }
  544. ;
  545. }
  546. }
  547. var funcFlag = false;
  548. switch (event.type) {
  549. case "touchstart": {
  550. if (!(self.moveFalg.length == 0)) {
  551. break;
  552. }
  553. self.moveFalg = "touchstart";
  554. if (!scheduleState) {
  555. // self.output.getComponent(cc.Label).string = movefalg;
  556. schedule.schedule(func, target, 0);
  557. }
  558. ;
  559. if (schedulePause) {
  560. schedule.resumeTarget(target);
  561. }
  562. ;
  563. break;
  564. }
  565. case "touchmove": {
  566. if (!(self.moveFalg.length == 0)) {
  567. break;
  568. }
  569. self.moveFalg = "touchmove";
  570. // self.output.getComponent(cc.Label).string = movefalg;
  571. if (!scheduleState) {
  572. schedule.schedule(func, target, 0);
  573. }
  574. ;
  575. if (schedulePause) {
  576. schedule.resumeTarget(target);
  577. }
  578. ;
  579. break;
  580. }
  581. case "touchcancel": {
  582. break;
  583. }
  584. case "touchend": {
  585. // self.output.getComponent(cc.Label).string = "touchend";
  586. schedule.pauseTarget(target);
  587. self.Player.stopAllActions();
  588. Ani.stop(Anistring);
  589. moveByTime = 1;
  590. moveByDes = Global_1.default.instance.moveSpeed * 120 + 40;
  591. switch (Anistring) {
  592. case "run": {
  593. run.active = false;
  594. runRight.active = false;
  595. stand.active = true;
  596. self.LkeyDown = false;
  597. self.RkeyDown = false;
  598. moveByDes = Global_1.default.instance.moveSpeed / 2;
  599. break;
  600. }
  601. case "runR": {
  602. run.active = false;
  603. runRight.active = false;
  604. stand.active = true;
  605. self.LkeyDown = false;
  606. self.RkeyDown = false;
  607. moveByDes = Global_1.default.instance.moveSpeed / 2;
  608. break;
  609. }
  610. }
  611. funcFlag = false;
  612. self.moveFalg = "";
  613. break;
  614. }
  615. }
  616. function func() {
  617. if (funcFlag) {
  618. return;
  619. }
  620. if (Global_1.default.instance.CollisionFlag) {
  621. moveByTime = 1;
  622. }
  623. var spawn = cc.spawn(cc.callFunc(function () {
  624. self.Player.runAction(cc.moveBy(moveByTime, moveByDes, 0));
  625. }), cc.callFunc(function () {
  626. Anistate = Ani.play(Anistring);
  627. Anistate.speed = 1;
  628. Anistate.repeatCount = 100;
  629. Anistate = Ani.playAdditive(Anistring);
  630. }));
  631. self.Player.runAction(spawn);
  632. funcFlag = true;
  633. }
  634. };
  635. /**
  636. * 返回键监听
  637. * @param event 按下返回键退出游戏
  638. */
  639. MainScene.prototype.AniPlayer = function (Ani, Anistate, moveByTime, moveByDes, Key, AniName, self) {
  640. Ani = Key.getComponent(cc.Animation);
  641. var spawn = cc.spawn(cc.callFunc(function () {
  642. self.Player.runAction(cc.moveBy(moveByTime, moveByDes, 0));
  643. }), cc.callFunc(function () {
  644. Anistate = Ani.play(AniName);
  645. Anistate.speed = 2;
  646. Anistate.repeatCount = 100;
  647. }));
  648. self.Player.runAction(spawn);
  649. if (!Ani.state) {
  650. var spawn2 = cc.spawn(cc.callFunc(function () {
  651. self.Player.runAction(cc.moveBy(moveByTime, moveByDes, 0));
  652. }), cc.callFunc(function () {
  653. Anistate = Ani.play(AniName);
  654. Anistate.speed = 2;
  655. Anistate.repeatCount = 100;
  656. }));
  657. self.Player.runAction(spawn2);
  658. }
  659. };
  660. /**
  661. * 抬起动画停止
  662. * @param event 抬起左右键触发
  663. */
  664. MainScene.prototype.onKeyUp = function (event) {
  665. var self = this;
  666. self.LkeyDown = false;
  667. this.RkeyDown = false;
  668. self.Player.stopAllActions();
  669. var stand = this.Player.getChildByName("stand");
  670. var runRight = this.Player.getChildByName("runRight");
  671. var run = this.Player.getChildByName("run");
  672. stand.active = true;
  673. run.active = false;
  674. runRight.active = false;
  675. };
  676. MainScene.prototype.pretreatmentGameover = function () {
  677. var _this = this;
  678. if (!Global_1.default.instance.OverFlag && this.once == false) {
  679. this.once = true;
  680. MessManager_1.default.getInstance().getUserSore(function (res) {
  681. console.error('收到正常消息一次');
  682. // console.error(res);
  683. if (_this.fuhuoCount-- > 0) {
  684. _this.showFail(res.data.thirty_score, res.data.one_hundred_score);
  685. }
  686. else {
  687. _this.gameOver(res.data.thirty_score, res.data.one_hundred_score);
  688. _this.once = false;
  689. }
  690. }, function () {
  691. console.error('收到失败消息一次');
  692. _this.gameOver();
  693. _this.once = false;
  694. });
  695. }
  696. };
  697. MainScene.prototype.showFailPnael = function () {
  698. var failure = cc.instantiate(this.failure);
  699. var ReStartBtnreGame = failure.getChildByName("reset").getComponent(cc.Button);
  700. var reGameEventHandler = new cc.Component.EventHandler();
  701. reGameEventHandler.target = this.node;
  702. reGameEventHandler.component = "MainScene";
  703. reGameEventHandler.handler = "restart";
  704. reGameEventHandler.customEventData = null;
  705. ReStartBtnreGame.clickEvents.push(reGameEventHandler);
  706. };
  707. MainScene.prototype.showFail = function (score1, score2) {
  708. if (score1 === void 0) { score1 = 0; }
  709. if (score2 === void 0) { score2 = 0; }
  710. var self = this;
  711. var failure;
  712. var Score;
  713. failure = cc.instantiate(self.failure);
  714. var ReStartBtnreGame = failure.getChildByName("reset").getComponent(cc.Button);
  715. var fuhuo = failure.getChildByName("fuhuo").getComponent(cc.Button);
  716. failure.getChildByName("fuhuo").active = true;
  717. this.init2Btn(fuhuo, ReStartBtnreGame);
  718. if (!Global_1.default.instance.OverFlag) {
  719. Global_1.default.instance.OverFlag = true;
  720. this.Player.active = false;
  721. failure.y = -20;
  722. self.node.addChild(failure);
  723. Score = failure.getChildByName("cj").getChildByName("Score");
  724. Score.getComponent(cc.Label).string = self.LifeDing.getChildByName("Floor").getComponent(cc.Label).string;
  725. if (parseInt(Score.getComponent(cc.Label).string) >= 100) {
  726. failure.getChildByName("fuhuo").active = false;
  727. }
  728. else {
  729. failure.getChildByName("fuhuo").active = true;
  730. }
  731. var TipSNode = failure.getChildByName("sb");
  732. this.initFailStr(Score, TipSNode, failure, score1, score2);
  733. }
  734. else {
  735. return;
  736. }
  737. };
  738. /**
  739. *
  740. */
  741. MainScene.prototype.gameOver = function (score1, score2) {
  742. if (score1 === void 0) { score1 = 0; }
  743. if (score2 === void 0) { score2 = 0; }
  744. var self = this;
  745. self.Player.stopAllActions();
  746. Global_1.default.instance.CollisionFlag = false;
  747. // self.Player.getComponent(cc.BoxCollider).enabled = false;
  748. self.Player.getComponent("Playcontroler").enabled = false;
  749. try {
  750. self.Player.getComponent(cc.Animation).stop();
  751. }
  752. catch (error) {
  753. self.node.getChildByName("output").getComponent(cc.Label).string = error;
  754. }
  755. self.Player.getChildByName("stand").active = true;
  756. self.Player.getChildByName("runRight").active = false;
  757. self.Player.getChildByName("run").active = false;
  758. self.Player.y -= Global_1.default.instance.InitSpeed;
  759. var AllFH = self.node.getChildByName("BgNode").getChildByName("FHolder").children;
  760. for (var i = 0; i < AllFH.length; i++) {
  761. var FHNA = AllFH[i].name;
  762. AllFH[i].getComponent(FHNA).enabled = false;
  763. AllFH[i].isHold = false;
  764. if (FHNA == "GD") {
  765. AllFH[i].getChildByName("gd").getComponent("CliGD").enabled = false;
  766. }
  767. }
  768. self.StopAni(self);
  769. for (var i = 0; i < this.LifeDing.children.length; i++) {
  770. if (this.LifeDing.children[i].name == "lifeBG") {
  771. this.LifeDing.children[i].active = false;
  772. }
  773. }
  774. self.LEFT.node.active = false;
  775. self.RIGHT.node.active = false;
  776. self.playdeadsound();
  777. var failure;
  778. var Score;
  779. failure = cc.instantiate(self.failure);
  780. var ReStartBtnreGame = failure.getChildByName("reset").getComponent(cc.Button);
  781. var fuhuo = failure.getChildByName("fuhuo").getComponent(cc.Button);
  782. failure.getChildByName("fuhuo").active = false;
  783. this.init2Btn(fuhuo, ReStartBtnreGame);
  784. if (!Global_1.default.instance.OverFlag) {
  785. Global_1.default.instance.OverFlag = true;
  786. this.Player.active = false;
  787. failure.y = -20;
  788. self.node.addChild(failure);
  789. Score = failure.getChildByName("cj").getChildByName("Score");
  790. Score.getComponent(cc.Label).string = self.LifeDing.getChildByName("Floor").getComponent(cc.Label).string;
  791. var TipSNode = failure.getChildByName("sb");
  792. this.initFailStr(Score, TipSNode, failure, score1, score2);
  793. }
  794. else {
  795. return;
  796. }
  797. console.log("游戏结束!!!");
  798. };
  799. MainScene.prototype.init2Btn = function (fuhuo, reset) {
  800. var FuhupEventHandler = new cc.Component.EventHandler();
  801. FuhupEventHandler.target = this.node;
  802. FuhupEventHandler.component = "MainScene";
  803. FuhupEventHandler.handler = "fuhuoOnce";
  804. FuhupEventHandler.customEventData = null;
  805. fuhuo.clickEvents.push(FuhupEventHandler);
  806. var reGameEventHandler = new cc.Component.EventHandler();
  807. reGameEventHandler.target = this.node;
  808. reGameEventHandler.component = "MainScene";
  809. reGameEventHandler.handler = "restart";
  810. reGameEventHandler.customEventData = null;
  811. reset.clickEvents.push(reGameEventHandler);
  812. };
  813. MainScene.prototype.initFailStr = function (CurrentScore, tipsNode, failure, score1, score2) {
  814. if (parseInt(CurrentScore.getComponent(cc.Label).string) >= 100) {
  815. tipsNode.getComponent(cc.Label).string = "成功";
  816. }
  817. else {
  818. tipsNode.getComponent(cc.Label).string = "失败";
  819. }
  820. failure.getChildByName("tips").active = false;
  821. failure.getChildByName("tips").getComponent(cc.Label).string = "\u4ECA\u65E5\u53EF\u83B7\u5F97\u5956\u52B1\n60\u5C42\u8FC7\u5173\u5956\u52B1: " + score1 + "/90 \u79EF\u5206\n100\u5C42\u901A\u5173\u5956\u52B1: " + score2 + "/100\u79EF\u5206";
  822. failure.getChildByName("tips").active = true;
  823. };
  824. MainScene.prototype.fuhuoOnce = function (a, b, c) {
  825. var _this = this;
  826. var once = function () {
  827. Global_1.default.instance.OverFlag = false;
  828. var AllFH = _this.node.getChildByName("BgNode").getChildByName("FHolder").children;
  829. for (var i = 0; i < AllFH.length; i++) {
  830. AllFH[i].destroy();
  831. }
  832. for (var i = 0; i < _this.LifeDing.children.length; i++) {
  833. if (_this.LifeDing.children[i].name == "lifeBG") {
  834. if (!_this.LifeDing.children[i].active) {
  835. _this.LifeDing.children[i].active = true;
  836. }
  837. Global_1.default.instance.reLife.push(_this.LifeDing.children[i]);
  838. }
  839. }
  840. _this.Player.getComponent(cc.BoxCollider).enabled = false;
  841. _this.Player.y = 300;
  842. _this.scheduleOnce(function () {
  843. Global_1.default.instance.CollisionFlag = false;
  844. _this.Player.active = true;
  845. _this.Player.getComponent(cc.BoxCollider).enabled = true;
  846. }, 0.1);
  847. a.target.parent.destroy();
  848. _this.FootHoldGenerator(1).y = -380;
  849. _this.FootHoldGenerator(1).y = -220;
  850. _this.FootHoldGenerator(1).y = -100;
  851. _this.once = false;
  852. };
  853. if (CC_DEBUG) {
  854. once();
  855. return;
  856. }
  857. MessManager_1.default.getInstance().changeScore(-10, function () {
  858. once();
  859. }, function () {
  860. once();
  861. });
  862. };
  863. /**
  864. * 复活按钮的回调函数:打开排行榜
  865. */
  866. MainScene.prototype.FBtnCB_Rank = function (self) {
  867. this.destroy();
  868. cc.director.loadScene("EndScene");
  869. };
  870. /**
  871. * 复活按钮的回调函数:立即复活
  872. */
  873. MainScene.prototype.FBtnCB_rePlay = function () {
  874. cc.sys.localStorage.setItem("hfsj", "99");
  875. var self = this;
  876. Global_1.default.instance.OverFlag = false;
  877. Global_1.default.instance.AniFalg = false;
  878. Global_1.default.instance.LorR = 0;
  879. Global_1.default.instance.InitSpeed = Global_1.default.instance.ConstInitSpeed;
  880. Global_1.default.instance.moveSpeed = 1;
  881. // Global.instance.FHFallSpeed = 2;
  882. Global_1.default.instance.CollisionFlag = false;
  883. Global_1.default.instance.CollisionWithDing = false;
  884. Global_1.default.instance.TheHolder = null;
  885. Global_1.default.instance.KIND_FootHold = 0;
  886. // this.RIGHT.node.off(cc.Node.EventType.TOUCH_START,this.BtnTurnRight,this);
  887. // this.RIGHT.node.off(cc.Node.EventType.TOUCH_MOVE,this.BtnTurnRight,this);
  888. // this.RIGHT.node.off(cc.Node.EventType.TOUCH_CANCEL,this.onKeyUp,this);
  889. this.LEFT.node.active = true;
  890. this.RIGHT.node.active = true;
  891. this.LkeyDown = false;
  892. this.RkeyDown = false;
  893. this.moveFalg = "";
  894. this.Player.y = 300;
  895. this.Player.x = 0;
  896. this.Player.getComponent("Playcontroler").enabled = true;
  897. this.Player.getComponent(cc.BoxCollider).enabled = true;
  898. var AllFH = this.node.getChildByName("BgNode").getChildByName("FHolder").children;
  899. this.node.getChildByName("SB").destroy();
  900. // this.node.getChildByName("fuhuo1").destroy();
  901. for (var i = 0; i < this.LifeDing.children.length; i++) {
  902. //for(let i=0;i<2;i++){
  903. if (this.LifeDing.children[i].name == "lifeBG") {
  904. if (!this.LifeDing.children[i].active) {
  905. this.LifeDing.children[i].active = true;
  906. }
  907. Global_1.default.instance.reLife.push(this.LifeDing.children[i]);
  908. }
  909. }
  910. this.Player.getComponent(cc.BoxCollider).enabled = false;
  911. for (var i = 0; i < AllFH.length; i++) {
  912. AllFH[i].destroy();
  913. }
  914. var F = this.FootHoldGenerator(1);
  915. F.y = -380;
  916. this.scheduleOnce(function () {
  917. self.Player.getComponent(cc.BoxCollider).enabled = true;
  918. }, 0.5);
  919. };
  920. /**
  921. * restart
  922. */
  923. MainScene.prototype.restart = function () {
  924. this.destroy();
  925. cc.director.loadScene("MainScene");
  926. cc.director.resume();
  927. Global_1.default.instance.OverFlag = false;
  928. Global_1.default.instance.AniFalg = false;
  929. Global_1.default.instance.LorR = 0;
  930. Global_1.default.instance.InitSpeed = Global_1.default.instance.ConstInitSpeed;
  931. Global_1.default.instance.moveSpeed = 1;
  932. Global_1.default.instance.FHFallSpeed = 2;
  933. Global_1.default.instance.CollisionFlag = false;
  934. Global_1.default.instance.CollisionWithDing = false;
  935. Global_1.default.instance.TheHolder = null;
  936. Global_1.default.instance.KIND_FootHold = 0;
  937. // this.RIGHT.node.off(cc.Node.EventType.TOUCH_START,this.BtnTurnRight,this);
  938. // this.RIGHT.node.off(cc.Node.EventType.TOUCH_MOVE,this.BtnTurnRight,this);
  939. // this.RIGHT.node.off(cc.Node.EventType.TOUCH_CANCEL,this.onKeyUp,this);
  940. this.LEFT.node.active = true;
  941. this.RIGHT.node.active = true;
  942. this.LkeyDown = false;
  943. this.RkeyDown = false;
  944. // this.moveFalg = "";
  945. this.Player.y = 300;
  946. // this.Score();
  947. };
  948. /**
  949. * 受到伤害,命数减一
  950. */
  951. MainScene.prototype.reduceLife = function () {
  952. var self = this;
  953. var Ls = new Array();
  954. var reLCount = 0;
  955. var FHolder = self.node.getChildByName("BgNode").getChildByName("FHolder").children;
  956. for (var i = 0; i < FHolder.length; i++) {
  957. if (FHolder[i].isHold) {
  958. if (!Global_1.default.instance.CollisionFlag) {
  959. FHolder[i].isHold = false;
  960. var box = FHolder[i].getComponent(cc.BoxCollider);
  961. box.enabled = false;
  962. }
  963. }
  964. }
  965. //
  966. for (var i = self.LifeDing.children.length - 1; i >= 0; i--) {
  967. if (self.LifeDing.children[i].name == "lifeBG") {
  968. if (Global_1.default.instance.Injured || Global_1.default.instance.CollisionWithDing) {
  969. if (self.LifeDing.children[i].active) {
  970. self.LifeDing.children[i].active = false;
  971. Global_1.default.instance.Injured = false;
  972. Global_1.default.instance.CollisionFlag = false;
  973. Global_1.default.instance.CollisionWithDing = false;
  974. }
  975. }
  976. Ls.push(self.LifeDing.children[i]);
  977. }
  978. }
  979. Global_1.default.instance.reLife = [];
  980. for (var i = 0; i < Ls.length; i++) {
  981. if (Ls[i].active) {
  982. Global_1.default.instance.reLife.push(Ls[i]); //player剩余的命数
  983. }
  984. }
  985. //
  986. var time = cc.sys.localStorage.getItem("hfsj");
  987. //console.log( time + "当前血 : " + Global.instance.reLife.length);
  988. if (Global_1.default.instance.reLife.length < 3) {
  989. if (time == 99) {
  990. var time_1 = Math.floor(Date.now() / 1000);
  991. cc.sys.localStorage.setItem("hfsj", time_1);
  992. }
  993. else {
  994. var time_2 = Math.floor(Date.now() / 1000);
  995. var timlod = parseInt(cc.sys.localStorage.getItem("hfsj"));
  996. var sub = time_2 - timlod;
  997. if (sub >= 20) {
  998. var sizes = Global_1.default.instance.reLife.length + 2;
  999. Global_1.default.instance.reLife = [];
  1000. for (var i = 0; i < sizes; i++) {
  1001. if (this.LifeDing.children[i].name == "lifeBG") {
  1002. if (!this.LifeDing.children[i].active) {
  1003. this.LifeDing.children[i].active = true;
  1004. }
  1005. Global_1.default.instance.reLife.push(this.LifeDing.children[i]);
  1006. // console.log("push --------------" + i);
  1007. }
  1008. }
  1009. cc.sys.localStorage.setItem("hfsj", time_2);
  1010. // console.log(sizes + "恢复血+1---------------------------------------" + Global.instance.reLife.length);
  1011. }
  1012. }
  1013. }
  1014. else {
  1015. cc.sys.localStorage.setItem("hfsj", "99");
  1016. }
  1017. };
  1018. /**
  1019. * 每下落一层,分数加一。
  1020. */
  1021. MainScene.prototype.Score = function () {
  1022. var self = this.node;
  1023. var scLabel = this.LifeDing.getChildByName("Floor").getComponent(cc.Label);
  1024. var sc = parseInt(scLabel.string);
  1025. if (!Global_1.default.instance.OverFlag) {
  1026. sc = sc + 1;
  1027. }
  1028. this.playtansound();
  1029. console.log("打印一下");
  1030. scLabel.string = sc.toString();
  1031. if (sc == 60) {
  1032. MessManager_1.default.getInstance().questServer(30, null, null);
  1033. }
  1034. if (sc == 100) {
  1035. MessManager_1.default.getInstance().questServer(100, null, null);
  1036. this.pretreatmentGameover();
  1037. ///
  1038. }
  1039. var lv = Math.ceil(sc / 25);
  1040. if (lv > Global_1.default.instance.LevelAddFlag) {
  1041. Global_1.default.instance.LevelAddFlag = lv;
  1042. Global_1.default.instance.InitSpeed += 0.5; //每下落50层,player下落速度加0.25
  1043. Global_1.default.instance.FHFallSpeed += 1; //没下落50层,落脚点下落速度加快0.5.
  1044. if (sc == 50) {
  1045. Global_1.default.instance.InitSpeed += 0.5; //每下落50层,player下落速度加0.25
  1046. Global_1.default.instance.FHFallSpeed += 1; //没下落50层,落脚点下落速度加快0.5.
  1047. }
  1048. if (sc == 70) {
  1049. Global_1.default.instance.InitSpeed += 0.5; //每下落50层,player下落速度加0.25
  1050. Global_1.default.instance.FHFallSpeed += 1; //没下落50层,落脚点下落速度加快0.5.
  1051. Global_1.default.instance.InitSpeed += 0.5; //每下落50层,player下落速度加0.25
  1052. Global_1.default.instance.FHFallSpeed += 1; //没下落50层,落脚点下落速度加快0.5.
  1053. }
  1054. }
  1055. };
  1056. /**
  1057. * 本地分数存储
  1058. */
  1059. MainScene.prototype.StoregeScore = function () {
  1060. var self = this;
  1061. var localS = Global_1.default.instance.getLocalScore(); //the temp of local score;
  1062. var CurrentScore = parseInt(this.LifeDing.getChildByName("Floor").getComponent(cc.Label).string);
  1063. Global_1.default.instance.getLocalScore().CurrentScore = CurrentScore;
  1064. if (CurrentScore > localS.ThirdScore) {
  1065. if (CurrentScore > localS.SecondScore) {
  1066. if (CurrentScore > localS.BestScore) {
  1067. localS.BestScore = CurrentScore;
  1068. return;
  1069. }
  1070. localS.SecondScore = CurrentScore;
  1071. }
  1072. localS.ThirdScore = CurrentScore;
  1073. }
  1074. };
  1075. /**
  1076. * upload the best score
  1077. */
  1078. MainScene.prototype.UpLoadScore = function () {
  1079. var self = this;
  1080. var tmp = Global_1.default.instance.GetUSer();
  1081. /* Http.sendRequest("/updateScore",tmp,function(msg){
  1082. let x = msg;
  1083. if(msg.code!=0){
  1084. Global.instance.NetStatus = false;
  1085. }
  1086. let ux = {
  1087. userId:'',
  1088. }
  1089. console.log(x);
  1090. ux.userId = Global.instance.GetUSer().userId;
  1091. Http.sendRequest("/rank",ux,function(mmsg){
  1092. console.log("------------------3");
  1093. let MM = JSON.parse(mmsg.msg);
  1094. console.log(MM);
  1095. if(Global.instance.GetR()==null||Global.instance.GetR().rank==undefined||Global.instance.GetR().rank<MM.my.rank){
  1096. Global.instance.SetR(MM.my.rank);
  1097. Global.instance.setRemoteScore(MM.other);
  1098. }
  1099. });
  1100. });*/
  1101. };
  1102. __decorate([
  1103. property(cc.Prefab)
  1104. ], MainScene.prototype, "boli", void 0);
  1105. __decorate([
  1106. property(cc.Prefab)
  1107. ], MainScene.prototype, "dici", void 0);
  1108. __decorate([
  1109. property(cc.Prefab)
  1110. ], MainScene.prototype, "lvdai", void 0);
  1111. __decorate([
  1112. property(cc.Prefab)
  1113. ], MainScene.prototype, "shandian", void 0);
  1114. __decorate([
  1115. property(cc.Prefab)
  1116. ], MainScene.prototype, "tanhuang", void 0);
  1117. __decorate([
  1118. property(cc.Prefab)
  1119. ], MainScene.prototype, "Opplvdai", void 0);
  1120. __decorate([
  1121. property(cc.Prefab)
  1122. ], MainScene.prototype, "GD", void 0);
  1123. __decorate([
  1124. property(cc.Prefab)
  1125. ], MainScene.prototype, "failure", void 0);
  1126. __decorate([
  1127. property(cc.Prefab)
  1128. ], MainScene.prototype, "fuhuo", void 0);
  1129. __decorate([
  1130. property(cc.Node)
  1131. ], MainScene.prototype, "Player", void 0);
  1132. __decorate([
  1133. property(cc.Node)
  1134. ], MainScene.prototype, "FHolderNode", void 0);
  1135. __decorate([
  1136. property(cc.Node)
  1137. ], MainScene.prototype, "Bg", void 0);
  1138. __decorate([
  1139. property(cc.Node)
  1140. ], MainScene.prototype, "LifeDing", void 0);
  1141. __decorate([
  1142. property(cc.Button)
  1143. ], MainScene.prototype, "LEFT", void 0);
  1144. __decorate([
  1145. property(cc.Button)
  1146. ], MainScene.prototype, "RIGHT", void 0);
  1147. __decorate([
  1148. property(cc.Label)
  1149. ], MainScene.prototype, "output", void 0);
  1150. MainScene = __decorate([
  1151. ccclass
  1152. ], MainScene);
  1153. return MainScene;
  1154. }(cc.Component));
  1155. exports.default = MainScene;
  1156. cc._RF.pop();
  1157. }
  1158. if (nodeEnv) {
  1159. __define(__module.exports, __require, __module);
  1160. }
  1161. else {
  1162. __quick_compile_project__.registerModuleFunc(__filename, function () {
  1163. __define(__module.exports, __require, __module);
  1164. });
  1165. }
  1166. })();
  1167. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxNYWluU2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQTZCO0FBRTdCLDZDQUF3QztBQUNsQyxJQUFBLEtBQXdCLEVBQUUsQ0FBQyxVQUFVLEVBQW5DLE9BQU8sYUFBQSxFQUFFLFFBQVEsY0FBa0IsQ0FBQztBQUc1QztJQUF1Qyw2QkFBWTtJQUFuRDtRQUFBLHFFQTRzQ0M7UUF6c0NHLFVBQUksR0FBYyxJQUFJLENBQUM7UUFFdkIsVUFBSSxHQUFjLElBQUksQ0FBQztRQUV2QixXQUFLLEdBQWMsSUFBSSxDQUFDO1FBRXhCLGNBQVEsR0FBYyxJQUFJLENBQUM7UUFFM0IsY0FBUSxHQUFjLElBQUksQ0FBQztRQUUzQixjQUFRLEdBQWMsSUFBSSxDQUFDO1FBRTNCLFFBQUUsR0FBYyxJQUFJLENBQUM7UUFFckIsYUFBTyxHQUFjLElBQUksQ0FBQztRQUUxQixXQUFLLEdBQWMsSUFBSSxDQUFDO1FBR3hCLFlBQU0sR0FBWSxJQUFJLENBQUM7UUFFdkIsaUJBQVcsR0FBWSxJQUFJLENBQUM7UUFFNUIsUUFBRSxHQUFZLElBQUksQ0FBQztRQUVuQixjQUFRLEdBQVksSUFBSSxDQUFDO1FBR3pCLFVBQUksR0FBYyxJQUFJLENBQUM7UUFFdkIsV0FBSyxHQUFjLElBQUksQ0FBQztRQUd4QixZQUFNLEdBQWEsSUFBSSxDQUFDO1FBR3hCLHdCQUF3QjtRQUN4Qjs7V0FFRztRQUNLLFdBQUssR0FBRyxDQUFDLENBQUM7UUFDbEI7O1dBRUc7UUFDSyxXQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLFVBQVU7UUFDRixjQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFdBQVc7UUFDSCxjQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLDRCQUE0QjtRQUNwQixZQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXZCLGNBQVEsR0FBRyxFQUFFLENBQUM7UUFFZCxjQUFRLEdBQUc7WUFDUCxNQUFNLEVBQUUsRUFBRTtZQUNWLEtBQUssRUFBRSxDQUFDO1NBQ1gsQ0FBQTtRQUVELGdCQUFVLEdBQUcsQ0FBQyxDQUFBO1FBNG5CZCxVQUFJLEdBQUcsS0FBSyxDQUFDOztJQWloQmpCLENBQUM7SUEzb0NHLDZCQUFTLEdBQVQsVUFBVSxLQUFLO1FBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBRXZCO0lBQ0wsQ0FBQztJQUlELDBCQUFNLEdBQU47UUFFSSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUczRSxxQkFBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBSXBDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO1lBQ2pELEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDN0M7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLGdCQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBR2xCLDRDQUE0QztRQUM1QyxtREFBbUQ7UUFDbkQsNENBQTRDO1FBQzVDLHFCQUFxQjtRQUVyQixnREFBZ0Q7UUFDaEQscURBQXFEO1FBQ3JELGdEQUFnRDtRQUNoRCxxQkFBcUI7UUFDckIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNsQiw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQzNDO2dCQUNELGdCQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtTQUNKO1FBQ0QsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakQsNkRBQTZEO1FBQzdELEVBQUUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7SUFDckUsQ0FBQztJQUVELGdDQUFZLEdBQVo7UUFDSSxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQUU7WUFDbkMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxHQUFHLEVBQUUsSUFBSTtnQkFDdEQsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBSUwsQ0FBQztJQUVELGlDQUFhLEdBQWI7UUFDSSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEdBQUcsRUFBRSxJQUFJO1lBQ3ZELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFFUCxDQUFDO0lBR0QseUJBQUssR0FBTDtJQUNBLENBQUM7SUFDRCwwQkFBTSxHQUFOLFVBQU8sRUFBRTtRQUNMLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksT0FBTyxDQUFDO1FBRVosSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLG9CQUFvQjtZQUNyRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO2dCQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxnQkFBZ0I7YUFDbkI7U0FDSjtRQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFDLFNBQVM7WUFDekMsUUFBUSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNuQixNQUFNO2lCQUNUO2dCQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNuQixNQUFNO2lCQUNUO2dCQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ0osSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFO3dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO3FCQUNuQjt5QkFDSTt3QkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO3FCQUNuQjtvQkFDRCxNQUFNO2lCQUNUO2dCQUNELE9BQU8sQ0FBQyxDQUFDO29CQUNMLE1BQU07aUJBQ1Q7YUFDSjtTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUN4QjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBRXhCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBRXpELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBRS9CO1FBQ0QsSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN6RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLGlDQUFpQztRQUNqQyxnQ0FBZ0M7UUFDaEMsdUZBQXVGO1FBQ3ZGLGlEQUFpRDtRQUNqRCx5Q0FBeUM7UUFDekMsMkNBQTJDO1FBQzNDLFFBQVE7UUFDUixJQUFJO1FBQ0osNEVBQTRFO1FBQzVFLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFHcEIsQ0FBQztJQUVELDRCQUFRLEdBQVI7UUFBQSxpQkFvQ0M7UUFuQ0csSUFBSSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtnQkFDNUMsS0FBSSxDQUFDLE9BQU8sQ0FBQztZQUNqQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDWjthQUNJO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtnQkFDN0MsS0FBSSxDQUFDLE9BQU8sQ0FBQztZQUNqQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDWjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RFLCtCQUErQjtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO2dCQUMzQyxLQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNaO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO2dCQUM1QyxLQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUNELDJCQUFPLEdBQVAsVUFBUSxJQUFJO1FBQ1IsSUFBSSxDQUFDLGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUMxQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3BGLElBQUksS0FBSyxTQUFBLENBQUM7WUFDVixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDekIsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDL0IsT0FBTztpQkFDVjtnQkFDRCxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQ2xEO1NBQ0o7SUFDTCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCwyQkFBTyxHQUFQO1FBQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDeEMsSUFBSSxHQUFHLENBQUMsQ0FBQSwrQ0FBK0M7UUFDdkQsSUFBSSxRQUFRLENBQUMsQ0FBQSxtQkFBbUI7UUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7b0JBQ3JDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2lCQUM3QjtxQkFDSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtvQkFDMUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDdEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7aUJBQzdCO3FCQUNJO29CQUNELGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBQ3JDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2lCQUM1QjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCwwQkFBTSxHQUFOO1FBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7U0FDN0I7YUFDSTtZQUNELEdBQUcsQ0FBQyxDQUFDLElBQUksZ0JBQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUN6QyxHQUFHLENBQUMsQ0FBQyxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRTtnQkFDYixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQ2hCO1lBQ0QsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRTtnQkFDYixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQ2hCO1NBQ0o7SUFFTCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxxQ0FBaUIsR0FBakIsVUFBa0IsSUFBSTtRQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNSLGFBQWEsR0FBRyxDQUFDLENBQUE7U0FDcEI7YUFDSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDYixhQUFhLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO2FBQ0ksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsYUFBYSxHQUFHLENBQUMsQ0FBQztTQUNyQjthQUNJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNiLGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDckI7YUFDSTtZQUNELGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDckI7UUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztRQUMxRCxrQkFBa0I7UUFDbEIsSUFBSSxPQUFPLENBQUM7UUFDWiwyQ0FBMkM7UUFHM0MsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUU1QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDbkIsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUNsQjtpQkFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDM0IsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUNsQjtZQUNELGlCQUFpQjtZQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDO1NBQy9DO1FBR0QsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ2QsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFeEIsUUFBUSxVQUFVLEVBQUU7WUFDaEIsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDSixPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDekMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLDJCQUEyQjtnQkFDM0IsTUFBTTthQUNUO1lBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDSixPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDekMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLE1BQU07YUFDVDtZQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ0osT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLDJCQUEyQjtnQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdEIsTUFBTTthQUNUO1lBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDSixPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsMkJBQTJCO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QixNQUFNO2FBQ1Q7WUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNKLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUN2QiwyQkFBMkI7Z0JBQzNCLE1BQU07YUFDVDtZQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ0osT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLDJCQUEyQjtnQkFDM0IsTUFBTTthQUNUO1lBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDSixxQ0FBcUM7Z0JBQ3JDLCtDQUErQztnQkFDL0MsNENBQTRDO2dCQUM1QywwQkFBMEI7Z0JBQzFCLFNBQVM7YUFDWjtZQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ0osSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdCLE1BQU07aUJBQ1Q7Z0JBQ0QsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixNQUFNO2FBQ1Q7WUFDRCxZQUFZO1lBQ1oseUNBQXlDO1lBQ3pDLGlEQUFpRDtZQUNqRCw2Q0FBNkM7WUFDN0MsaURBQWlEO1lBQ2pELGlEQUFpRDtZQUNqRCxzREFBc0Q7WUFDdEQsOEJBQThCO1lBQzlCLG9DQUFvQztZQUNwQyxJQUFJO1lBQ0osU0FBUztTQUNaO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNEOztPQUVHO0lBQ0gsK0JBQVcsR0FBWCxVQUFZLEtBQUs7UUFDYixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNWO2FBQ0k7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0NBQVksR0FBWixVQUFhLEtBQUs7UUFDZCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNWO2FBQ0k7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtZQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILDJCQUFPLEdBQVAsVUFBUSxLQUFLO1FBQ1QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLEdBQUcsQ0FBQyxDQUFBLHlCQUF5QjtRQUNqQyxJQUFJLFFBQVEsQ0FBQyxDQUFBLGlCQUFpQjtRQUM5QixJQUFJLFNBQVMsQ0FBQyxDQUFBLGlCQUFpQjtRQUMvQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxhQUFhLEdBQVksS0FBSyxDQUFDLENBQUEsc0JBQXNCO1FBQ3pELElBQUksYUFBYSxHQUFZLElBQUksQ0FBQztRQUNsQyxJQUFJLE1BQU0sR0FBYyxJQUFJLENBQUMsQ0FBQSx3Q0FBd0M7UUFDckUsSUFBSSxTQUFTLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDckQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbkIsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNmLFNBQVMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUN2QixhQUFhLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQseURBQXlEO1lBQ3pELGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLHlEQUF5RDtZQUN6RCxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUNoQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO2lCQUNJO2dCQUNELFFBQVEsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO29CQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNKLFVBQVUsR0FBRyxHQUFHLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQzt3QkFDaEYsTUFBTTtxQkFDVDtvQkFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNKLFVBQVUsR0FBRyxHQUFHLENBQUM7d0JBQ2pCLGlGQUFpRjt3QkFDakYsTUFBTTtxQkFDVDtpQkFDSjtnQkFBQSxDQUFDO2FBQ0w7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BCLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDZixTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLGFBQWEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNuRCx5REFBeUQ7WUFDekQsYUFBYSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsR0FBRyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDbkIsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckIsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDdkIsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkIseURBQXlEO1lBQ3pELElBQUksQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2hDLFVBQVUsR0FBRyxDQUFDLENBQUM7YUFDbEI7aUJBQ0k7Z0JBQ0QsUUFBUSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7b0JBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ0osVUFBVSxHQUFHLEdBQUcsQ0FBQzt3QkFDakIsaUZBQWlGO3dCQUNqRixNQUFNO3FCQUNUO29CQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ0osVUFBVSxHQUFHLEdBQUcsQ0FBQzt3QkFDakIsaUZBQWlGO3dCQUNqRixNQUFNO3FCQUNUO2lCQUNKO2dCQUFBLENBQUM7YUFDTDtTQUNKO1FBRUQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNoQixLQUFLLFlBQVksQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUM5QixNQUFNO2lCQUNUO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO2dCQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNoQix3REFBd0Q7b0JBQ3hELFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDdEM7Z0JBQUEsQ0FBQztnQkFDRixJQUFJLGFBQWEsRUFBRTtvQkFDZixRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNqQztnQkFBQSxDQUFDO2dCQUNGLE1BQU07YUFDVDtZQUNELEtBQUssV0FBVyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUU7b0JBQzlCLE1BQU07aUJBQ1Q7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7Z0JBQzVCLHdEQUF3RDtnQkFDeEQsSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDaEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0QztnQkFBQSxDQUFDO2dCQUNGLElBQUksYUFBYSxFQUFFO29CQUNmLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ2pDO2dCQUFBLENBQUM7Z0JBQ0YsTUFBTTthQUNUO1lBQ0QsS0FBSyxhQUFhLENBQUMsQ0FBQztnQkFDaEIsTUFBTTthQUNUO1lBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDYiwwREFBMEQ7Z0JBQzFELFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BCLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsU0FBUyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNqRCxRQUFRLFNBQVMsRUFBRTtvQkFDZixLQUFLLEtBQUssQ0FBQyxDQUFDO3dCQUNSLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO3dCQUNuQixRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzt3QkFDeEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDdEIsU0FBUyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQzFDLE1BQU07cUJBQ1Q7b0JBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQzt3QkFDVCxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzt3QkFDbkIsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQ3hCLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO3dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7d0JBQ3RCLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO3dCQUMxQyxNQUFNO3FCQUNUO2lCQUNKO2dCQUNELFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixNQUFNO2FBQ1Q7U0FDSjtRQUNELFNBQVMsSUFBSTtZQUNULElBQUksUUFBUSxFQUFFO2dCQUNWLE9BQU87YUFDVjtZQUNELElBQUksZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUMvQixVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNaLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQixRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7Z0JBQzNCLFFBQVEsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLENBQUM7SUFDTCxDQUFDO0lBR0Q7OztPQUdHO0lBRUgsNkJBQVMsR0FBVCxVQUFVLEdBQUcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUs7UUFDL0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ1osUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDbkIsUUFBUSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNaLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QixRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUNEOzs7T0FHRztJQUNILDJCQUFPLEdBQVAsVUFBUSxLQUFLO1FBQ1QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUlELHdDQUFvQixHQUFwQjtRQUFBLGlCQXVCQztRQXBCRyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ2pELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLHFCQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUNqQyxVQUFDLEdBQUc7Z0JBQ0EsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUIsc0JBQXNCO2dCQUN0QixJQUFJLEtBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ3ZCLEtBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO2lCQUNuRTtxQkFBTTtvQkFDSCxLQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtvQkFDaEUsS0FBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7aUJBQ3JCO1lBQ0wsQ0FBQyxFQUNEO2dCQUNJLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzFCLEtBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtnQkFDZixLQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDLENBQ0osQ0FBQTtTQUNKO0lBQ0wsQ0FBQztJQUlELGlDQUFhLEdBQWI7UUFDSSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRSxJQUFJLGtCQUFrQixHQUFHLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6RCxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzNDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDdkMsa0JBQWtCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUMxQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFHMUQsQ0FBQztJQUdELDRCQUFRLEdBQVIsVUFBUyxNQUFVLEVBQUUsTUFBVTtRQUF0Qix1QkFBQSxFQUFBLFVBQVU7UUFBRSx1QkFBQSxFQUFBLFVBQVU7UUFDM0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksT0FBTyxDQUFDO1FBRVosSUFBSSxLQUFLLENBQUM7UUFDVixPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkMsSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0UsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBSXBFLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtRQUc3QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO1FBRXRDLElBQUksQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDM0IsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7WUFFMUIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUVoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU1QixLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBSTFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFFLEdBQUcsRUFBRTtnQkFDcEQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO2FBQ2pEO2lCQUFJO2dCQUNELE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTthQUNoRDtZQUlELElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7U0FDN0Q7YUFDSTtZQUNELE9BQU87U0FDVjtJQUNMLENBQUM7SUFJRDs7T0FFRztJQUNILDRCQUFRLEdBQVIsVUFBUyxNQUFVLEVBQUUsTUFBVTtRQUF0Qix1QkFBQSxFQUFBLFVBQVU7UUFBRSx1QkFBQSxFQUFBLFVBQVU7UUFFM0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0IsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUN0Qyw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUMxRCxJQUFJO1lBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2pEO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDNUU7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDM0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNsRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUM1QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7Z0JBQ2QsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUN2RTtTQUNKO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUluQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzthQUM1QztTQUNKO1FBS0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLE9BQU8sQ0FBQztRQUVaLElBQUksS0FBSyxDQUFDO1FBQ1YsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUdwRSxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFHOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUV0QyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQzNCLGdCQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO1lBRTFCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFFaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFNUIsS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUcxRyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQzdEO2FBQ0k7WUFDRCxPQUFPO1NBQ1Y7UUFHRCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCw0QkFBUSxHQUFSLFVBQVMsS0FBZ0IsRUFBRSxLQUFnQjtRQUN2QyxJQUFJLGlCQUFpQixHQUFHLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RCxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7UUFDeEMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUN6QyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTFDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pELGtCQUFrQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFDM0Msa0JBQWtCLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN2QyxrQkFBa0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUdELCtCQUFXLEdBQVgsVUFBWSxZQUFZLEVBQUUsUUFBaUIsRUFBRSxPQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNO1FBQ3pFLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRTtZQUM3RCxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFBO1NBQ2hEO2FBQU07WUFDSCxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFBO1NBQ2hEO1FBRUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRTlDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsbUZBQzVELE1BQU0sNkRBQ0wsTUFBTSxxQkFBUSxDQUFBO1FBQ2xCLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBR0QsNkJBQVMsR0FBVCxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUFqQixpQkF1REM7UUFyREcsSUFBSSxJQUFJLEdBQUc7WUFDUCxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBRWpDLElBQUksS0FBSyxHQUFHLEtBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDbEYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN0QjtZQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BELElBQUksS0FBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTt3QkFDbkMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztxQkFDM0M7b0JBQ0QsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxRDthQUNKO1lBR0QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFFekQsS0FBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBR3BCLEtBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ2QsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDdEMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFBO2dCQUV6QixLQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUM1RCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFFUCxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUxQixLQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ25DLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDbkMsS0FBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUVuQyxLQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDLENBQUE7UUFFRCxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksRUFBRSxDQUFBO1lBQ04sT0FBTTtTQUNUO1FBRUQscUJBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQ3JDO1lBQ0ksSUFBSSxFQUFFLENBQUE7UUFDVixDQUFDLEVBQ0Q7WUFDSSxJQUFJLEVBQUUsQ0FBQTtRQUNWLENBQUMsQ0FDSixDQUFBO0lBRUwsQ0FBQztJQUdEOztPQUVHO0lBQ0gsK0JBQVcsR0FBWCxVQUFZLElBQUs7UUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxpQ0FBYSxHQUFiO1FBQ0ksRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLGdCQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDekIsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQTtRQUMxRCxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLG1DQUFtQztRQUNuQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEMsNkVBQTZFO1FBQzdFLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN4RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pDLGdEQUFnRDtRQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BELHVCQUF1QjtZQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQzNDO2dCQUNELGdCQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtTQUNKO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDNUQsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUNEOztPQUVHO0lBQ0gsMkJBQU8sR0FBUDtRQUVJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckIsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLGdCQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDekIsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQTtRQUMxRCxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLGdCQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLDZFQUE2RTtRQUM3RSw0RUFBNEU7UUFDNUUseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLGdCQUFnQjtJQUNwQixDQUFDO0lBRUQ7O01BRUU7SUFDRiw4QkFBVSxHQUFWO1FBRUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDckIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDcEYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO29CQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDMUIsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2xELEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2lCQUN2QjthQUNKO1NBQ0o7UUFFRCxFQUFFO1FBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFO2dCQUM1QyxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtvQkFDOUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7d0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQ3pDLGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ2hDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQ3RDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztxQkFDN0M7aUJBQ0o7Z0JBQ0QsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0o7UUFFRCxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDZCxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsYUFBYTthQUNuRDtTQUNKO1FBQ0QsRUFBRTtRQUVGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxnRUFBZ0U7UUFDaEUsSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUVuQyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxNQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBSSxDQUFDLENBQUM7YUFDN0M7aUJBQU07Z0JBQ0gsSUFBSSxNQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxHQUFHLEdBQUcsTUFBSSxHQUFHLE1BQU0sQ0FBQztnQkFFeEIsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFO29CQUNYLElBQUksS0FBSyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUM5QyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO29CQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUU7NEJBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0NBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7NkJBQzNDOzRCQUNELGdCQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDdkQsMENBQTBDO3lCQUM3QztxQkFDSjtvQkFDRCxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQUksQ0FBQyxDQUFDO29CQUMxQyx3R0FBd0c7aUJBQzNHO2FBQ0o7U0FHSjthQUFNO1lBQ0gsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QztJQUVMLENBQUM7SUFFRDs7T0FFRztJQUNILHlCQUFLLEdBQUw7UUFDSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQzNCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixPQUFPLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUvQixJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDVixxQkFBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQ3BDLElBQUksRUFDSixJQUFJLENBQ1AsQ0FBQTtTQUNKO1FBQ0QsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO1lBQ1gscUJBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUNyQyxJQUFJLEVBQ0osSUFBSSxDQUNQLENBQUE7WUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QixHQUFHO1NBQ047UUFFRCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLEVBQUUsR0FBRyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDbkMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUNsQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLENBQUEsd0JBQXdCO1lBQ3pELGdCQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQSxzQkFBc0I7WUFFdkQsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNWLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsQ0FBQSx3QkFBd0I7Z0JBQ3pELGdCQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQSxzQkFBc0I7YUFDMUQ7WUFFRCxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ1YsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFBLHdCQUF3QjtnQkFDekQsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFBLHNCQUFzQjtnQkFFdkQsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFBLHdCQUF3QjtnQkFDekQsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFBLHNCQUFzQjthQUMxRDtTQUNKO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0NBQVksR0FBWjtRQUNJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLE1BQU0sR0FBRyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBLDBCQUEwQjtRQUN2RSxJQUFJLFlBQVksR0FBRyxRQUFRLENBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekUsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUM1RCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ2xDLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Z0JBQ25DLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUU7b0JBQ2pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO29CQUNoQyxPQUFPO2lCQUNWO2dCQUNELE1BQU0sQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO2FBQ3JDO1lBQ0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7U0FDcEM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCwrQkFBVyxHQUFYO1FBQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksR0FBRyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2NBbUJNO0lBQ1YsQ0FBQztJQXZzQ0Q7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzsyQ0FDRztJQUV2QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOzJDQUNHO0lBRXZCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7NENBQ0k7SUFFeEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzsrQ0FDTztJQUUzQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOytDQUNPO0lBRTNCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7K0NBQ087SUFFM0I7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzt5Q0FDQztJQUVyQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOzhDQUNNO0lBRTFCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7NENBQ0k7SUFHeEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzs2Q0FDSztJQUV2QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO2tEQUNVO0lBRTVCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7eUNBQ0M7SUFFbkI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzsrQ0FDTztJQUd6QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOzJDQUNHO0lBRXZCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7NENBQ0k7SUFHeEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzs2Q0FDSztJQXBDUCxTQUFTO1FBRDdCLE9BQU87T0FDYSxTQUFTLENBNHNDN0I7SUFBRCxnQkFBQztDQTVzQ0QsQUE0c0NDLENBNXNDc0MsRUFBRSxDQUFDLFNBQVMsR0E0c0NsRDtrQkE1c0NvQixTQUFTIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEdsb2JhbCBmcm9tIFwiLi9HbG9iYWxcIlxyXG5pbXBvcnQgSHR0cCBmcm9tIFwiLi9IdHRwXCI7XHJcbmltcG9ydCBNZXNzTWFuYWdlciBmcm9tIFwiLi9NZXNzTWFuYWdlclwiO1xyXG5jb25zdCB7IGNjY2xhc3MsIHByb3BlcnR5IH0gPSBjYy5fZGVjb3JhdG9yO1xyXG5cclxuQGNjY2xhc3NcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpblNjZW5lIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuUHJlZmFiKVxyXG4gICAgYm9saTogY2MuUHJlZmFiID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBkaWNpOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIGx2ZGFpOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIHNoYW5kaWFuOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIHRhbmh1YW5nOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIE9wcGx2ZGFpOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIEdEOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIGZhaWx1cmU6IGNjLlByZWZhYiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuUHJlZmFiKVxyXG4gICAgZnVodW86IGNjLlByZWZhYiA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBQbGF5ZXI6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBGSG9sZGVyTm9kZTogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJnOiBjYy5Ob2RlID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgTGlmZURpbmc6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5CdXR0b24pXHJcbiAgICBMRUZUOiBjYy5CdXR0b24gPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLkJ1dHRvbilcclxuICAgIFJJR0hUOiBjYy5CdXR0b24gPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5MYWJlbClcclxuICAgIG91dHB1dDogY2MuTGFiZWwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvLyBMSUZFLUNZQ0xFIENBTExCQUNLUzpcclxuICAgIC8qKlxyXG4gICAgICog5LiK5LiA5Liq6JC96ISa54K555Sf5oiQ5pe26Ze0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgU1RpbWUgPSAwO1xyXG4gICAgLyoqXHJcbiAgICAgKiDlvZPliY3okL3ohJrngrnnlJ/miJDml7bpl7RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBFVGltZSA9IDA7XHJcblxyXG4gICAgLyoqIExlZnQqL1xyXG4gICAgcHJpdmF0ZSBMa2V5RG93biA9IGZhbHNlO1xyXG4gICAgLyoqIFJpZ2h0Ki9cclxuICAgIHByaXZhdGUgUmtleURvd24gPSBmYWxzZTtcclxuICAgIC8qKnRoZSBsb2dodCBGb290SG9sZGVyIEYgKi9cclxuICAgIHByaXZhdGUgbGlnaHRGID0gZmFsc2U7XHJcblxyXG4gICAgbW92ZUZhbGcgPSBcIlwiO1xyXG5cclxuICAgIFVTRVJJTkZPID0ge1xyXG4gICAgICAgIHVzZXJJZDogXCJcIixcclxuICAgICAgICBzY29yZTogMCxcclxuICAgIH1cclxuXHJcbiAgICBmdWh1b0NvdW50ID0gMVxyXG5cclxuICAgIG9uS2V5RG93bihldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IGNjLm1hY3JvLktFWS53KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoMTIzMSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIG9uTG9hZCgpIHtcclxuXHJcbiAgICAgICAgY2Muc3lzdGVtRXZlbnQub24oY2MuU3lzdGVtRXZlbnQuRXZlbnRUeXBlLktFWV9ET1dOLCB0aGlzLm9uS2V5RG93biwgdGhpcyk7XHJcblxyXG5cclxuICAgICAgICBNZXNzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmluaXREYXRhKClcclxuXHJcblxyXG5cclxuICAgICAgICB2YXIgdGltZSA9IGNjLnN5cy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhmc2pcIik7XHJcblxyXG4gICAgICAgIGlmICh0aW1lID09IG51bGwgfHwgdGltZSA9PSB1bmRlZmluZWQgfHwgdGltZSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhmc2pcIiwgXCI5OVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTGlmZURpbmcuekluZGV4ID0gMTA7XHJcbiAgICAgICAgdGhpcy5GSG9sZGVyTm9kZS56SW5kZXggPSA5O1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5zZXRNTih0aGlzLm5vZGUpO1xyXG4gICAgICAgIHRoaXMuU1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGxldCBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUodGhpcy5HRCk7XHJcbiAgICAgICAgdGhpcy5GSG9sZGVyTm9kZS5hZGRDaGlsZChGSG9sZGVyLCAxMCwgXCJHRFwiKTtcclxuICAgICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcIkdEXCIpLmluaXQodGhpcywgMSk7XHJcbiAgICAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJHRFwiKS5GaXJzdCA9IHRydWVcclxuICAgICAgICBGSG9sZGVyLnkgPSAtMTAwO1xyXG4gICAgICAgIGxldCBGSG9sZGVyMiA9IGNjLmluc3RhbnRpYXRlKHRoaXMubHZkYWkpO1xyXG4gICAgICAgIHRoaXMuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlcjIsIDEwLCBcImx2ZGFpXCIpO1xyXG4gICAgICAgIEZIb2xkZXIyLmdldENvbXBvbmVudChcImx2ZGFpXCIpLmluaXQodGhpcyk7XHJcbiAgICAgICAgRkhvbGRlcjIueSA9IC0zMDA7XHJcblxyXG5cclxuICAgICAgICAvLyBsZXQgRkhvbGRlcjIgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLmRpY2kpO1xyXG4gICAgICAgIC8vIHRoaXMuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlcjIsIDEwLCBcImRpY2lcIik7XHJcbiAgICAgICAgLy8gRkhvbGRlcjIuZ2V0Q29tcG9uZW50KFwiZGljaVwiKS5pbml0KHRoaXMpO1xyXG4gICAgICAgIC8vIEZIb2xkZXIyLnkgPSAtMzAwO1xyXG5cclxuICAgICAgICAvLyBsZXQgRkhvbGRlcjIgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLnRhbmh1YW5nKTtcclxuICAgICAgICAvLyB0aGlzLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIyLDEwLFwidGFuaHVhbmdcIik7XHJcbiAgICAgICAgLy8gRkhvbGRlcjIuZ2V0Q29tcG9uZW50KFwidGFuaHVhbmdcIikuaW5pdCh0aGlzKTtcclxuICAgICAgICAvLyBGSG9sZGVyMi55ID0gLTMwMDtcclxuICAgICAgICBsZXQgRkhvbGRlcjMgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLkdEKTtcclxuICAgICAgICB0aGlzLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIzLCAxMCwgXCJHRFwiKTtcclxuICAgICAgICBGSG9sZGVyMy5nZXRDb21wb25lbnQoXCJHRFwiKS5pbml0KHRoaXMsIDEpO1xyXG4gICAgICAgIEZIb2xkZXIzLnkgPSAtNDUwO1xyXG4gICAgICAgIC8vIHRoaXMuUGxheWVyLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuUGxheWVyLnggPSAwO1xyXG4gICAgICAgIC8vIHRoaXMuUGxheWVyLnkgPSBGSG9sZGVyLnkrNjA7XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIuekluZGV4ID0gMTE7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkxpZmVEaW5nLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLm5hbWUgPT0gXCJsaWZlQkdcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5yZUxpZmUucHVzaCh0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYy5kaXJlY3Rvci5nZXRDb2xsaXNpb25NYW5hZ2VyKCkuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gY2MuZGlyZWN0b3IuZ2V0Q29sbGlzaW9uTWFuYWdlcigpLmVuYWJsZWREZWJ1Z0RyYXcgPSB0cnVlO1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmdldENvbGxpc2lvbk1hbmFnZXIoKS5lbmFibGVkRHJhd0JvdW5kaW5nQm94ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcGxheXRhbnNvdW5kKCkge1xyXG4gICAgICAgIGlmIChHbG9iYWwuaW5zdGFuY2UuT3ZlckZsYWcgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY2MubG9hZGVyLmxvYWRSZXMoXCJ0YW5cIiwgY2MuQXVkaW9DbGlwLCBmdW5jdGlvbiAoZXJyLCBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXVkaW9JRCA9IGNjLmF1ZGlvRW5naW5lLnBsYXkoY2xpcCwgZmFsc2UsIDAuNSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwbGF5ZGVhZHNvdW5kKCkge1xyXG4gICAgICAgIGNjLmxvYWRlci5sb2FkUmVzKFwiZGVhZFwiLCBjYy5BdWRpb0NsaXAsIGZ1bmN0aW9uIChlcnIsIGNsaXApIHtcclxuICAgICAgICAgICAgdmFyIGF1ZGlvSUQgPSBjYy5hdWRpb0VuZ2luZS5wbGF5KGNsaXAsIGZhbHNlLCAwLjUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICB9XHJcbiAgICB1cGRhdGUoZHQpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyk7XHJcbiAgICAgICAgdGhpcy5Nb3ZlQmcoKTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkID0gMTtcclxuICAgICAgICBsZXQgRkhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLkVUaW1lIC0gdGhpcy5TVGltZSkgPiAoMTIwMCAtICgxODAgKiAoR2xvYmFsLmluc3RhbmNlLkZIRmFsbFNwZWVkIC0gMikpKSkgey8v5o6n5Yi26JC96ISa54K55LmL6Ze055qE6Ze06LedLOmXtOi3nTE0NHB4XHJcbiAgICAgICAgICAgIHRoaXMuU1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICBpZiAoIUdsb2JhbC5pbnN0YW5jZS5PdmVyRmxhZykge1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlciA9IHRoaXMuRm9vdEhvbGRHZW5lcmF0b3IobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLlNjb3JlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5GSG9sZGVyKCk7XHJcbiAgICAgICAgdGhpcy5yZWR1Y2VMaWZlKCk7XHJcbiAgICAgICAgaWYgKEdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25GbGFnKSB7Ly/lt6blj7PkvKDpgIHluKblh4/pgJ9cclxuICAgICAgICAgICAgc3dpdGNoIChHbG9iYWwuaW5zdGFuY2UuS0lORF9Gb290SG9sZCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5QbGF5ZXIueCArPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5QbGF5ZXIueCAtPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEdsb2JhbC5pbnN0YW5jZS5Mb3JSID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5QbGF5ZXIueC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5QbGF5ZXIueCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5QbGF5ZXIueCA8IC0xODApIHtcclxuICAgICAgICAgICAgdGhpcy5QbGF5ZXIueCA9IC0xODA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLlBsYXllci54ID4gMTgwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLnggPSAxODA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLlBsYXllci55IDwgKC01NjApKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoY2MuQm94Q29sbGlkZXIpLmVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJldHJlYXRtZW50R2FtZW92ZXIoKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChHbG9iYWwuaW5zdGFuY2UucmVMaWZlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChjYy5Cb3hDb2xsaWRlcikuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnByZXRyZWF0bWVudEdhbWVvdmVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuRVRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIC8vIGxldCBBbGxDaGlsZHJlbiA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgIC8vIGxldCBHRENoaWxkcmVuID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgLy8gQWxsQ2hpbGRyZW4gPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZ05vZGVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJGSG9sZGVyXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgQWxsQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvLyAgICAgaWYgKEFsbENoaWxkcmVuW2ldLm5hbWUgPT0gXCJHRFwiKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBHRENoaWxkcmVuLnB1c2goQWxsQ2hpbGRyZW5baV0pO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGNjLnN5c3RlbUV2ZW50Lm9uKGNjLlN5c3RlbUV2ZW50LkV2ZW50VHlwZS5LRVlfRE9XTix0aGlzLm9uS2V5RG93bix0aGlzKTtcclxuICAgICAgICAvL2NjLnN5c3RlbUV2ZW50Lm9uKGNjLlN5c3RlbUV2ZW50LkV2ZW50VHlwZS5LRVlfVVAsdGhpcy5vbktleVVwLHRoaXMpO1xyXG4gICAgICAgIHRoaXMuTGlzdGVuZXIoKTtcclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIExpc3RlbmVyKCkge1xyXG4gICAgICAgIGxldCBidG5DbGlja0FyciA9IG5ldyBBcnJheSgyKTtcclxuICAgICAgICBpZiAoIXRoaXMuTGtleURvd24pIHtcclxuICAgICAgICAgICAgdGhpcy5SSUdIVC5ub2RlLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX1NUQVJULCB0aGlzLkJ0blR1cm5SaWdodCwgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuUklHSFQubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9NT1ZFLCB0aGlzLkJ0blR1cm5SaWdodCwgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuUklHSFQubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9DQU5DRUwsIHRoaXMub25LZXlVcCwgdGhpcyk7XHJcbiAgICAgICAgICAgIGJ0bkNsaWNrQXJyLnB1c2godGhpcy5SSUdIVCk7XHJcbiAgICAgICAgICAgIHRoaXMuUklHSFQubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25LZXlVcDtcclxuICAgICAgICAgICAgfSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLlJJR0hULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX1NUQVJULCB0aGlzLkJ0blR1cm5SaWdodCwgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuUklHSFQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfTU9WRSwgdGhpcy5CdG5UdXJuUmlnaHQsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLlJJR0hULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0NBTkNFTCwgdGhpcy5vbktleVVwLCB0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5SSUdIVC5ub2RlLm9mZihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25LZXlVcDtcclxuICAgICAgICAgICAgfSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5Sa2V5RG93bikge1xyXG4gICAgICAgICAgICB0aGlzLkxFRlQubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCwgdGhpcy5CdG5UdXJuTGVmdCwgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuTEVGVC5ub2RlLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX01PVkUsIHRoaXMuQnRuVHVybkxlZnQsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLkxFRlQubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9DQU5DRUwsIHRoaXMub25LZXlVcCwgdGhpcyk7XHJcbiAgICAgICAgICAgIC8vIGJ0bkNsaWNrQXJyLnB1c2godGhpcy5MRUZUKTtcclxuICAgICAgICAgICAgdGhpcy5MRUZULm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5VXA7XHJcbiAgICAgICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5MRUZULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX1NUQVJULCB0aGlzLkJ0blR1cm5MZWZ0LCB0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5MRUZULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX01PVkUsIHRoaXMuQnRuVHVybkxlZnQsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLkxFRlQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfQ0FOQ0VMLCB0aGlzLm9uS2V5VXAsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLkxFRlQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5VXA7XHJcbiAgICAgICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFN0b3BBbmkoc2VsZikge1xyXG4gICAgICAgIGlmICghR2xvYmFsLmluc3RhbmNlLkFuaUZhbGcpIHtcclxuICAgICAgICAgICAgbGV0IEZIb2xkZXIgPSBzZWxmLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZ05vZGVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJGSG9sZGVyXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBsZXQgRm5hbWU7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBGSG9sZGVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBGSG9sZGVyLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQW5pRmFsZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgRm5hbWUgPSBGSG9sZGVyW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyW2ldLmdldENvbXBvbmVudChGbmFtZSkuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBwbGF5ZXIg56e75Ye66JC96ISa54K5XHJcbiAgICAgKi9cclxuICAgIEZIb2xkZXIoKSB7XHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgbGV0IEZIQXJyYXkgPSB0aGlzLkZIb2xkZXJOb2RlLmNoaWxkcmVuO1xyXG4gICAgICAgIGxldCBBbmk7Ly90aGUgQW5pbWF0aW9uIG9mIFBsYXllciB3aGVuIHBsYXllciBmYWxsIGRvd25cclxuICAgICAgICBsZXQgQW5pc3RhdGU7Ly90aGUgc3RhdGUgb2YgQW5pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBGSEFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChGSEFycmF5W2ldLmlzSG9sZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuUGxheWVyLnggPiAoRkhBcnJheVtpXS54ICsgNzUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbkZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBGSEFycmF5W2ldLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5QbGF5ZXIueCA8IChGSEFycmF5W2ldLnggLSA3NSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIEZIQXJyYXlbaV0uaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgRkhBcnJheVtpXS5pc0hvbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog56e75Yqo6IOM5pmvLOWIneWni+enu+WKqOmAn+W6pjIwMHB4L3NcclxuICAgICAqL1xyXG4gICAgTW92ZUJnKCkge1xyXG4gICAgICAgIGxldCBCZzAgPSB0aGlzLkJnLmdldENoaWxkQnlOYW1lKFwiQmdfMFwiKTtcclxuICAgICAgICBsZXQgQmcxID0gdGhpcy5CZy5nZXRDaGlsZEJ5TmFtZShcIkJnXzFcIik7XHJcbiAgICAgICAgaWYgKEdsb2JhbC5pbnN0YW5jZS5PdmVyRmxhZykge1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgQmcwLnkgKz0gR2xvYmFsLmluc3RhbmNlLkZIRmFsbFNwZWVkICsgMTtcclxuICAgICAgICAgICAgQmcxLnkgKz0gR2xvYmFsLmluc3RhbmNlLkZIRmFsbFNwZWVkICsgMTtcclxuICAgICAgICAgICAgaWYgKEJnMC55ID4gOTQ2KSB7XHJcbiAgICAgICAgICAgICAgICBCZzAueSA9IC05NDY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKEJnMS55ID4gOTQ2KSB7XHJcbiAgICAgICAgICAgICAgICBCZzEueSA9IC05NDY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDnlJ/miJDokL3ohJrngrlcclxuICAgICAqL1xyXG4gICAgRm9vdEhvbGRHZW5lcmF0b3IocnRwZSkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBsZXQgTWFnbmlmaWNhdGlvbiA9IDA7XHJcbiAgICAgICAgbGV0IGYgPSBwYXJzZUludChzZWxmLkxpZmVEaW5nLmdldENoaWxkQnlOYW1lKFwiRmxvb3JcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcpO1xyXG4gICAgICAgIGlmIChmIDwgMjApIHtcclxuICAgICAgICAgICAgTWFnbmlmaWNhdGlvbiA9IDJcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZiA8IDQwKSB7XHJcbiAgICAgICAgICAgIE1hZ25pZmljYXRpb24gPSA0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChmIDwgNjApIHtcclxuICAgICAgICAgICAgTWFnbmlmaWNhdGlvbiA9IDY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGYgPCA4MCkge1xyXG4gICAgICAgICAgICBNYWduaWZpY2F0aW9uID0gODtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIE1hZ25pZmljYXRpb24gPSA4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgS2luZEhvbGRlciA9IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogTWFnbmlmaWNhdGlvbik7XHJcbiAgICAgICAgLy8gS2luZEhvbGRlciA9IDc7XHJcbiAgICAgICAgbGV0IEZIb2xkZXI7XHJcbiAgICAgICAgLy8gS2luZEhvbGRlciA9IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpKjcpO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKEtpbmRIb2xkZXIgPT0gMyB8fCBLaW5kSG9sZGVyID09IDQpIHtcclxuICAgICAgICAgICAgbGV0IHZhID0gTWF0aC5yYW5kb20oKSAqIDEwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhID49IDEgJiYgdmEgPCA0KSB7XHJcbiAgICAgICAgICAgICAgICBLaW5kSG9sZGVyID0gNztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YSA+PSA0ICYmIHZhIDwgMTApIHtcclxuICAgICAgICAgICAgICAgIEtpbmRIb2xkZXIgPSA1O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vS2luZEhvbGRlciA9IDU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiS2luZEhvbGRlciBnYjogXCIgKyBLaW5kSG9sZGVyKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAocnRwZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIEtpbmRIb2xkZXIgPSBydHBlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIktpbmRIb2xkZXIgZ2IyOiBcIiArIEtpbmRIb2xkZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5FVGltZSA9IERhdGUubm93KCk7XHJcbiBcclxuICAgICAgICBzd2l0Y2ggKEtpbmRIb2xkZXIpIHtcclxuICAgICAgICAgICAgY2FzZSAxOiB7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5HRCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsIDUsIFwiR0RcIik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcIkdEXCIpLmluaXQoc2VsZiwgMSk7IFxyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5pc0hvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Lqn55Sf56ys5LiA56eN6JC96ISa54K5XCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAyOiB7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5HRCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsIDUsIFwiR0RcIik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcIkdEXCIpLmluaXQoc2VsZiwgNyk7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAzOiB7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5sdmRhaSk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsIDUsIFwibHZkYWlcIik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcImx2ZGFpXCIpLmluaXQoc2VsZik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLkuqfnlJ/nrKzkuoznp43okL3ohJrngrlcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiDliJvlu7rmu5rliqggXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSA0OiB7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5sdmRhaSk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsIDUsIFwibHZkYWlcIik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcImx2ZGFpXCIpLmluaXQoc2VsZik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLkuqfnlJ/nrKzkupTnp43okL3ohJrngrlcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiDliJvlu7rmu5rliqgxIFwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgNToge1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlciA9IGNjLmluc3RhbnRpYXRlKHNlbGYuYm9saSk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsIDUsIFwiYm9saVwiKTtcclxuICAgICAgICAgICAgICAgIEZIb2xkZXIuZ2V0Q29tcG9uZW50KFwiYm9saVwiKS5pbml0KHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5pc0hvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Lqn55Sf56ys5LiJ56eN6JC96ISa54K5XCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSA2OiB7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5kaWNpKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlciwgNSwgXCJkaWNpXCIpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJkaWNpXCIpLmluaXQoc2VsZik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLkuqfnlJ/nrKzlm5vnp43okL3ohJrngrlcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIDc6IHtcclxuICAgICAgICAgICAgICAgIC8vIEZIb2xkZXIgPSBjYy5pbnN0YW50aWF0ZShzZWxmLkdEKTtcclxuICAgICAgICAgICAgICAgIC8vIHNlbGYuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlciwgNSwgXCJHRFwiKTtcclxuICAgICAgICAgICAgICAgIC8vIEZIb2xkZXIuZ2V0Q29tcG9uZW50KFwiR0RcIikuaW5pdChzZWxmLCA3KTtcclxuICAgICAgICAgICAgICAgIC8vIEZIb2xkZXIuaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIDg6IHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmxpZ2h0Rikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGlnaHRGID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5Gb290SG9sZEdlbmVyYXRvcihudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEZIb2xkZXIgPSBjYy5pbnN0YW50aWF0ZShzZWxmLnNoYW5kaWFuKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlciwgNSwgXCJzaGFuZGlhblwiKTtcclxuICAgICAgICAgICAgICAgIEZIb2xkZXIuZ2V0Q29tcG9uZW50KFwic2hhbmRpYW5cIikuaW5pdChzZWxmKTtcclxuICAgICAgICAgICAgICAgIEZIb2xkZXIuaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmxpZ2h0RiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkZWZhdWx0OntcclxuICAgICAgICAgICAgLy8gICAgIEZIb2xkZXIgPSBjYy5pbnN0YW50aWF0ZShzZWxmLkdEKTtcclxuICAgICAgICAgICAgLy8gICAgIHNlbGYuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlciw1LFwiR0RcIik7XHJcbiAgICAgICAgICAgIC8vICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcIkdEXCIpLmluaXQoc2VsZik7XHJcbiAgICAgICAgICAgIC8vICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcIkdEXCIpLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAvLyAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJNb3ZlR0RcIikuaW5pdChzZWxmKTtcclxuICAgICAgICAgICAgLy8gICAgIEZIb2xkZXIuZ2V0Q29tcG9uZW50KFwiTW92ZUdEXCIpLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gICAgIEZIb2xkZXIuaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vICAgICAvLyBjb25zb2xlLmxvZyhcIum7mOiupOS6p+eUn+esrOS4gOenjeiQveiEmueCuVwiKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAvLyBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEZIb2xkZXI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOaMiemSruinpuWPke+8jOWQkeW3pu+8jOmVv+aMieS6i+S7tlxyXG4gICAgICovXHJcbiAgICBCdG5UdXJuTGVmdChldmVudCkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5Sa2V5RG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxmLkxrZXlEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2VsZi5Sa2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bkxvclIoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOaMiemSruinpuWPke+8jOWQkeWPsyzplb/mjInkuovku7Ys6ZW/5oyJ5ZON5bqU5pyq6Kej5YazXHJcbiAgICAgKi9cclxuICAgIEJ0blR1cm5SaWdodChldmVudCkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5Ma2V5RG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxmLkxrZXlEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgc2VsZi5Sa2V5RG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuQnRuTG9yUihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogYnRu6Kem5Y+R5LqL5Lu2XHJcbiAgICAgKiBAcGFyYW0gZXZlbnQg5oyJ6ZKu6Kem5Y+R5LqL5Lu2XHJcbiAgICAgKi9cclxuICAgIEJ0bkxvclIoZXZlbnQpIHtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLm1vdmVTcGVlZCA9IDE7XHJcbiAgICAgICAgbGV0IHNjaGVkdWxlID0gY2MuZGlyZWN0b3IuZ2V0U2NoZWR1bGVyKCk7XHJcbiAgICAgICAgbGV0IHN0YW5kID0gc2VsZi5QbGF5ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFuZFwiKTtcclxuICAgICAgICBsZXQgcnVuUmlnaHQgPSBzZWxmLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInJ1blJpZ2h0XCIpO1xyXG4gICAgICAgIGxldCBydW4gPSBzZWxmLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInJ1blwiKTtcclxuICAgICAgICBsZXQgQW5pOy8vdGhlIGFuaW1hdGlvbiBvZiBwbGF5ZXJcclxuICAgICAgICBsZXQgQW5pc3RhdGU7Ly90aGUgQW5pJ3Mgc3RhdGVcclxuICAgICAgICBsZXQgQW5pc3RyaW5nOy8vdGhlIG5hbWUgb2YgQW5pXHJcbiAgICAgICAgbGV0IG1vdmVCeVRpbWUgPSAxO1xyXG4gICAgICAgIGxldCBzY2hlZHVsZVN0YXRlOiBib29sZWFuID0gZmFsc2U7Ly90aGUgc2NoZWR1bGUncyBzdGF0ZVxyXG4gICAgICAgIGxldCBzY2hlZHVsZVBhdXNlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBsZXQgdGFyZ2V0OiBjYy5CdXR0b24gPSBudWxsOy8vdGhlIHRhcmdldCB3aGljaCBpcyBiaW5nZWQgdG8gc2NoZWR1bGVcclxuICAgICAgICBsZXQgbW92ZUJ5RGVzID0gR2xvYmFsLmluc3RhbmNlLm1vdmVTcGVlZCAqIDEyMCArIDQwO1xyXG4gICAgICAgIGlmIChzZWxmLkxrZXlEb3duKSB7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuTEVGVDtcclxuICAgICAgICAgICAgbW92ZUJ5VGltZSA9IDE7XHJcbiAgICAgICAgICAgIG1vdmVCeURlcyA9IC1tb3ZlQnlEZXM7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlU3RhdGUgPSBzY2hlZHVsZS5pc1NjaGVkdWxlZChmdW5jLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAvLyBzZWxmLm91dHB1dC5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IEFuaXN0cmluZztcclxuICAgICAgICAgICAgc2NoZWR1bGVQYXVzZSA9IHNjaGVkdWxlLmlzVGFyZ2V0UGF1c2VkKHRhcmdldCk7XHJcbiAgICAgICAgICAgIEFuaSA9IHJ1bi5nZXRDb21wb25lbnQoY2MuQW5pbWF0aW9uKTtcclxuICAgICAgICAgICAgQW5pc3RyaW5nID0gXCJydW5cIjtcclxuICAgICAgICAgICAgc3RhbmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJ1blJpZ2h0LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBydW4uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gc2VsZi5vdXRwdXQuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBBbmlzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmICghR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbkZsYWcpIHtcclxuICAgICAgICAgICAgICAgIG1vdmVCeVRpbWUgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChHbG9iYWwuaW5zdGFuY2UuS0lORF9Gb290SG9sZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQnlUaW1lID0gNC4xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IEdsb2JhbC5pbnN0YW5jZS5LSU5EX0Zvb3RIb2xkICsgXCIyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUJ5VGltZSA9IDMuOTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5vdXRwdXQuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBHbG9iYWwuaW5zdGFuY2UuS0lORF9Gb290SG9sZCtcIjVcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZi5Sa2V5RG93bikge1xyXG4gICAgICAgICAgICB0YXJnZXQgPSBzZWxmLlJJR0hUO1xyXG4gICAgICAgICAgICBtb3ZlQnlUaW1lID0gMTtcclxuICAgICAgICAgICAgbW92ZUJ5RGVzID0gbW92ZUJ5RGVzO1xyXG4gICAgICAgICAgICBzY2hlZHVsZVN0YXRlID0gc2NoZWR1bGUuaXNTY2hlZHVsZWQoZnVuYywgdGFyZ2V0KTtcclxuICAgICAgICAgICAgLy8gc2VsZi5vdXRwdXQuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBBbmlzdHJpbmc7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlUGF1c2UgPSBzY2hlZHVsZS5pc1RhcmdldFBhdXNlZCh0YXJnZXQpO1xyXG4gICAgICAgICAgICBBbmkgPSBydW5SaWdodC5nZXRDb21wb25lbnQoY2MuQW5pbWF0aW9uKTtcclxuICAgICAgICAgICAgQW5pc3RyaW5nID0gXCJydW5SXCI7XHJcbiAgICAgICAgICAgIHN0YW5kLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBydW5SaWdodC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBydW4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIHNlbGYub3V0cHV0LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gQW5pc3RyaW5nO1xyXG4gICAgICAgICAgICBpZiAoIUdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25GbGFnKSB7XHJcbiAgICAgICAgICAgICAgICBtb3ZlQnlUaW1lID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoR2xvYmFsLmluc3RhbmNlLktJTkRfRm9vdEhvbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUJ5VGltZSA9IDQuMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5vdXRwdXQuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBHbG9iYWwuaW5zdGFuY2UuS0lORF9Gb290SG9sZCtcIjJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQnlUaW1lID0gMy45O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxmLm91dHB1dC5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IEdsb2JhbC5pbnN0YW5jZS5LSU5EX0Zvb3RIb2xkK1wiNVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZnVuY0ZsYWcgPSBmYWxzZTtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcInRvdWNoc3RhcnRcIjoge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoc2VsZi5tb3ZlRmFsZy5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGYubW92ZUZhbGcgPSBcInRvdWNoc3RhcnRcIjtcclxuICAgICAgICAgICAgICAgIGlmICghc2NoZWR1bGVTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGYub3V0cHV0LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gbW92ZWZhbGc7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGUuc2NoZWR1bGUoZnVuYywgdGFyZ2V0LCAwKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NoZWR1bGVQYXVzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlLnJlc3VtZVRhcmdldCh0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0b3VjaG1vdmVcIjoge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoc2VsZi5tb3ZlRmFsZy5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGYubW92ZUZhbGcgPSBcInRvdWNobW92ZVwiO1xyXG4gICAgICAgICAgICAgICAgLy8gc2VsZi5vdXRwdXQuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBtb3ZlZmFsZztcclxuICAgICAgICAgICAgICAgIGlmICghc2NoZWR1bGVTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlLnNjaGVkdWxlKGZ1bmMsIHRhcmdldCwgMCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVkdWxlUGF1c2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZS5yZXN1bWVUYXJnZXQodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwidG91Y2hjYW5jZWxcIjoge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcInRvdWNoZW5kXCI6IHtcclxuICAgICAgICAgICAgICAgIC8vIHNlbGYub3V0cHV0LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXCJ0b3VjaGVuZFwiO1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGUucGF1c2VUYXJnZXQodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIHNlbGYuUGxheWVyLnN0b3BBbGxBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgICBBbmkuc3RvcChBbmlzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgbW92ZUJ5VGltZSA9IDE7XHJcbiAgICAgICAgICAgICAgICBtb3ZlQnlEZXMgPSBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkICogMTIwICsgNDA7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKEFuaXN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJydW5cIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBydW4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1blJpZ2h0LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFuZC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkxrZXlEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUmtleURvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUJ5RGVzID0gR2xvYmFsLmluc3RhbmNlLm1vdmVTcGVlZCAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicnVuUlwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuUmlnaHQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuTGtleURvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5Sa2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQnlEZXMgPSBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZnVuY0ZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHNlbGYubW92ZUZhbGcgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gZnVuYygpIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmNGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKEdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25GbGFnKSB7XHJcbiAgICAgICAgICAgICAgICBtb3ZlQnlUaW1lID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgc3Bhd24gPSBjYy5zcGF3bihjYy5jYWxsRnVuYyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLlBsYXllci5ydW5BY3Rpb24oY2MubW92ZUJ5KG1vdmVCeVRpbWUsIG1vdmVCeURlcywgMCkpO1xyXG4gICAgICAgICAgICB9KSwgY2MuY2FsbEZ1bmMoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgQW5pc3RhdGUgPSBBbmkucGxheShBbmlzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgQW5pc3RhdGUuc3BlZWQgPSAxO1xyXG4gICAgICAgICAgICAgICAgQW5pc3RhdGUucmVwZWF0Q291bnQgPSAxMDA7XHJcbiAgICAgICAgICAgICAgICBBbmlzdGF0ZSA9IEFuaS5wbGF5QWRkaXRpdmUoQW5pc3RyaW5nKTtcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIHNlbGYuUGxheWVyLnJ1bkFjdGlvbihzcGF3bik7XHJcbiAgICAgICAgICAgIGZ1bmNGbGFnID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6L+U5Zue6ZSu55uR5ZCsXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQg5oyJ5LiL6L+U5Zue6ZSu6YCA5Ye65ri45oiPXHJcbiAgICAgKi9cclxuXHJcbiAgICBBbmlQbGF5ZXIoQW5pLCBBbmlzdGF0ZSwgbW92ZUJ5VGltZSwgbW92ZUJ5RGVzLCBLZXksIEFuaU5hbWUsIHNlbGY/KSB7XHJcbiAgICAgICAgQW5pID0gS2V5LmdldENvbXBvbmVudChjYy5BbmltYXRpb24pO1xyXG5cclxuICAgICAgICBsZXQgc3Bhd24gPSBjYy5zcGF3bihjYy5jYWxsRnVuYyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYuUGxheWVyLnJ1bkFjdGlvbihjYy5tb3ZlQnkobW92ZUJ5VGltZSwgbW92ZUJ5RGVzLCAwKSk7XHJcbiAgICAgICAgfSksIGNjLmNhbGxGdW5jKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgQW5pc3RhdGUgPSBBbmkucGxheShBbmlOYW1lKTtcclxuICAgICAgICAgICAgQW5pc3RhdGUuc3BlZWQgPSAyO1xyXG4gICAgICAgICAgICBBbmlzdGF0ZS5yZXBlYXRDb3VudCA9IDEwMDtcclxuICAgICAgICB9KSlcclxuICAgICAgICBzZWxmLlBsYXllci5ydW5BY3Rpb24oc3Bhd24pO1xyXG4gICAgICAgIGlmICghQW5pLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBzcGF3bjIgPSBjYy5zcGF3bihjYy5jYWxsRnVuYyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLlBsYXllci5ydW5BY3Rpb24oY2MubW92ZUJ5KG1vdmVCeVRpbWUsIG1vdmVCeURlcywgMCkpO1xyXG4gICAgICAgICAgICB9KSwgY2MuY2FsbEZ1bmMoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgQW5pc3RhdGUgPSBBbmkucGxheShBbmlOYW1lKTtcclxuICAgICAgICAgICAgICAgIEFuaXN0YXRlLnNwZWVkID0gMjtcclxuICAgICAgICAgICAgICAgIEFuaXN0YXRlLnJlcGVhdENvdW50ID0gMTAwO1xyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgc2VsZi5QbGF5ZXIucnVuQWN0aW9uKHNwYXduMik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDmiqzotbfliqjnlLvlgZzmraJcclxuICAgICAqIEBwYXJhbSBldmVudCDmiqzotbflt6blj7PplK7op6blj5FcclxuICAgICAqL1xyXG4gICAgb25LZXlVcChldmVudCkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLkxrZXlEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5Sa2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgIHNlbGYuUGxheWVyLnN0b3BBbGxBY3Rpb25zKCk7XHJcbiAgICAgICAgbGV0IHN0YW5kID0gdGhpcy5QbGF5ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFuZFwiKTtcclxuICAgICAgICBsZXQgcnVuUmlnaHQgPSB0aGlzLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInJ1blJpZ2h0XCIpO1xyXG4gICAgICAgIGxldCBydW4gPSB0aGlzLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInJ1blwiKTtcclxuICAgICAgICBzdGFuZC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHJ1bi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBydW5SaWdodC5hY3RpdmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgb25jZSA9IGZhbHNlO1xyXG4gICAgcHJldHJlYXRtZW50R2FtZW92ZXIoKSB7XHJcblxyXG5cclxuICAgICAgICBpZiAoIUdsb2JhbC5pbnN0YW5jZS5PdmVyRmxhZyAmJiB0aGlzLm9uY2UgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5vbmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgTWVzc01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRVc2VyU29yZShcclxuICAgICAgICAgICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfmlLbliLDmraPluLjmtojmga/kuIDmrKEnKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZnVodW9Db3VudC0tID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGYWlsKHJlcy5kYXRhLnRoaXJ0eV9zY29yZSwgcmVzLmRhdGEub25lX2h1bmRyZWRfc2NvcmUpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lT3ZlcihyZXMuZGF0YS50aGlydHlfc2NvcmUsIHJlcy5kYXRhLm9uZV9odW5kcmVkX3Njb3JlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uY2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+aUtuWIsOWksei0pea2iOaBr+S4gOasoScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZU92ZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25jZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgc2hvd0ZhaWxQbmFlbCgpIHtcclxuICAgICAgICBsZXQgZmFpbHVyZSA9IGNjLmluc3RhbnRpYXRlKHRoaXMuZmFpbHVyZSk7XHJcbiAgICAgICAgbGV0IFJlU3RhcnRCdG5yZUdhbWUgPSBmYWlsdXJlLmdldENoaWxkQnlOYW1lKFwicmVzZXRcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbik7XHJcbiAgICAgICAgbGV0IHJlR2FtZUV2ZW50SGFuZGxlciA9IG5ldyBjYy5Db21wb25lbnQuRXZlbnRIYW5kbGVyKCk7XHJcblxyXG4gICAgICAgIHJlR2FtZUV2ZW50SGFuZGxlci50YXJnZXQgPSB0aGlzLm5vZGU7XHJcbiAgICAgICAgcmVHYW1lRXZlbnRIYW5kbGVyLmNvbXBvbmVudCA9IFwiTWFpblNjZW5lXCI7XHJcbiAgICAgICAgcmVHYW1lRXZlbnRIYW5kbGVyLmhhbmRsZXIgPSBcInJlc3RhcnRcIjtcclxuICAgICAgICByZUdhbWVFdmVudEhhbmRsZXIuY3VzdG9tRXZlbnREYXRhID0gbnVsbDtcclxuICAgICAgICBSZVN0YXJ0QnRucmVHYW1lLmNsaWNrRXZlbnRzLnB1c2gocmVHYW1lRXZlbnRIYW5kbGVyKTtcclxuXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzaG93RmFpbChzY29yZTEgPSAwLCBzY29yZTIgPSAwKSB7XHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGxldCBmYWlsdXJlO1xyXG5cclxuICAgICAgICBsZXQgU2NvcmU7XHJcbiAgICAgICAgZmFpbHVyZSA9IGNjLmluc3RhbnRpYXRlKHNlbGYuZmFpbHVyZSk7XHJcblxyXG4gICAgICAgIGxldCBSZVN0YXJ0QnRucmVHYW1lID0gZmFpbHVyZS5nZXRDaGlsZEJ5TmFtZShcInJlc2V0XCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pO1xyXG4gICAgICAgIGxldCBmdWh1byA9IGZhaWx1cmUuZ2V0Q2hpbGRCeU5hbWUoXCJmdWh1b1wiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKTtcclxuXHJcblxyXG5cclxuICAgICAgICBmYWlsdXJlLmdldENoaWxkQnlOYW1lKFwiZnVodW9cIikuYWN0aXZlID0gdHJ1ZVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0MkJ0bihmdWh1bywgUmVTdGFydEJ0bnJlR2FtZSlcclxuXHJcbiAgICAgICAgaWYgKCFHbG9iYWwuaW5zdGFuY2UuT3ZlckZsYWcpIHtcclxuICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5QbGF5ZXIuYWN0aXZlID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgIGZhaWx1cmUueSA9IC0yMDtcclxuXHJcbiAgICAgICAgICAgIHNlbGYubm9kZS5hZGRDaGlsZChmYWlsdXJlKTtcclxuXHJcbiAgICAgICAgICAgIFNjb3JlID0gZmFpbHVyZS5nZXRDaGlsZEJ5TmFtZShcImNqXCIpLmdldENoaWxkQnlOYW1lKFwiU2NvcmVcIik7XHJcbiAgICAgICAgICAgIFNjb3JlLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gc2VsZi5MaWZlRGluZy5nZXRDaGlsZEJ5TmFtZShcIkZsb29yXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nO1xyXG5cclxuXHJcblxyXG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoU2NvcmUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcpPj0xMDApIHtcclxuICAgICAgICAgICAgICAgIGZhaWx1cmUuZ2V0Q2hpbGRCeU5hbWUoXCJmdWh1b1wiKS5hY3RpdmUgPSBmYWxzZVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGZhaWx1cmUuZ2V0Q2hpbGRCeU5hbWUoXCJmdWh1b1wiKS5hY3RpdmUgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgbGV0IFRpcFNOb2RlID0gZmFpbHVyZS5nZXRDaGlsZEJ5TmFtZShcInNiXCIpXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEZhaWxTdHIoU2NvcmUsIFRpcFNOb2RlLCBmYWlsdXJlLCBzY29yZTEsIHNjb3JlMilcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqICBcclxuICAgICAqL1xyXG4gICAgZ2FtZU92ZXIoc2NvcmUxID0gMCwgc2NvcmUyID0gMCkge1xyXG5cclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5QbGF5ZXIuc3RvcEFsbEFjdGlvbnMoKTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHNlbGYuUGxheWVyLmdldENvbXBvbmVudChjYy5Cb3hDb2xsaWRlcikuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNlbGYuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXljb250cm9sZXJcIikuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHNlbGYuUGxheWVyLmdldENvbXBvbmVudChjYy5BbmltYXRpb24pLnN0b3AoKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBzZWxmLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJvdXRwdXRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5QbGF5ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFuZFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHNlbGYuUGxheWVyLmdldENoaWxkQnlOYW1lKFwicnVuUmlnaHRcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgc2VsZi5QbGF5ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJydW5cIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgc2VsZi5QbGF5ZXIueSAtPSBHbG9iYWwuaW5zdGFuY2UuSW5pdFNwZWVkO1xyXG4gICAgICAgIGxldCBBbGxGSCA9IHNlbGYubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJnTm9kZVwiKS5nZXRDaGlsZEJ5TmFtZShcIkZIb2xkZXJcIikuY2hpbGRyZW47XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBBbGxGSC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgRkhOQSA9IEFsbEZIW2ldLm5hbWU7XHJcbiAgICAgICAgICAgIEFsbEZIW2ldLmdldENvbXBvbmVudChGSE5BKS5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFsbEZIW2ldLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoRkhOQSA9PSBcIkdEXCIpIHtcclxuICAgICAgICAgICAgICAgIEFsbEZIW2ldLmdldENoaWxkQnlOYW1lKFwiZ2RcIikuZ2V0Q29tcG9uZW50KFwiQ2xpR0RcIikuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuU3RvcEFuaShzZWxmKTtcclxuXHJcblxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuTGlmZURpbmcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0ubmFtZSA9PSBcImxpZmVCR1wiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICBzZWxmLkxFRlQubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBzZWxmLlJJR0hULm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgc2VsZi5wbGF5ZGVhZHNvdW5kKCk7XHJcblxyXG4gICAgICAgIGxldCBmYWlsdXJlO1xyXG5cclxuICAgICAgICBsZXQgU2NvcmU7XHJcbiAgICAgICAgZmFpbHVyZSA9IGNjLmluc3RhbnRpYXRlKHNlbGYuZmFpbHVyZSk7XHJcblxyXG4gICAgICAgIGxldCBSZVN0YXJ0QnRucmVHYW1lID0gZmFpbHVyZS5nZXRDaGlsZEJ5TmFtZShcInJlc2V0XCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pO1xyXG4gICAgICAgIGxldCBmdWh1byA9IGZhaWx1cmUuZ2V0Q2hpbGRCeU5hbWUoXCJmdWh1b1wiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKTtcclxuXHJcblxyXG4gICAgICAgIGZhaWx1cmUuZ2V0Q2hpbGRCeU5hbWUoXCJmdWh1b1wiKS5hY3RpdmUgPSBmYWxzZVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5pbml0MkJ0bihmdWh1bywgUmVTdGFydEJ0bnJlR2FtZSlcclxuXHJcbiAgICAgICAgaWYgKCFHbG9iYWwuaW5zdGFuY2UuT3ZlckZsYWcpIHtcclxuICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5QbGF5ZXIuYWN0aXZlID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgIGZhaWx1cmUueSA9IC0yMDtcclxuXHJcbiAgICAgICAgICAgIHNlbGYubm9kZS5hZGRDaGlsZChmYWlsdXJlKTtcclxuXHJcbiAgICAgICAgICAgIFNjb3JlID0gZmFpbHVyZS5nZXRDaGlsZEJ5TmFtZShcImNqXCIpLmdldENoaWxkQnlOYW1lKFwiU2NvcmVcIik7XHJcbiAgICAgICAgICAgIFNjb3JlLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gc2VsZi5MaWZlRGluZy5nZXRDaGlsZEJ5TmFtZShcIkZsb29yXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGxldCBUaXBTTm9kZSA9IGZhaWx1cmUuZ2V0Q2hpbGRCeU5hbWUoXCJzYlwiKVxyXG4gICAgICAgICAgICB0aGlzLmluaXRGYWlsU3RyKFNjb3JlLCBUaXBTTm9kZSwgZmFpbHVyZSwgc2NvcmUxLCBzY29yZTIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXCLmuLjmiI/nu5PmnZ/vvIHvvIHvvIFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdDJCdG4oZnVodW86IGNjLkJ1dHRvbiwgcmVzZXQ6IGNjLkJ1dHRvbikge1xyXG4gICAgICAgIGxldCBGdWh1cEV2ZW50SGFuZGxlciA9IG5ldyBjYy5Db21wb25lbnQuRXZlbnRIYW5kbGVyKCk7XHJcbiAgICAgICAgRnVodXBFdmVudEhhbmRsZXIudGFyZ2V0ID0gdGhpcy5ub2RlO1xyXG4gICAgICAgIEZ1aHVwRXZlbnRIYW5kbGVyLmNvbXBvbmVudCA9IFwiTWFpblNjZW5lXCI7XHJcbiAgICAgICAgRnVodXBFdmVudEhhbmRsZXIuaGFuZGxlciA9IFwiZnVodW9PbmNlXCI7XHJcbiAgICAgICAgRnVodXBFdmVudEhhbmRsZXIuY3VzdG9tRXZlbnREYXRhID0gbnVsbDtcclxuICAgICAgICBmdWh1by5jbGlja0V2ZW50cy5wdXNoKEZ1aHVwRXZlbnRIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgbGV0IHJlR2FtZUV2ZW50SGFuZGxlciA9IG5ldyBjYy5Db21wb25lbnQuRXZlbnRIYW5kbGVyKCk7XHJcbiAgICAgICAgcmVHYW1lRXZlbnRIYW5kbGVyLnRhcmdldCA9IHRoaXMubm9kZTtcclxuICAgICAgICByZUdhbWVFdmVudEhhbmRsZXIuY29tcG9uZW50ID0gXCJNYWluU2NlbmVcIjtcclxuICAgICAgICByZUdhbWVFdmVudEhhbmRsZXIuaGFuZGxlciA9IFwicmVzdGFydFwiO1xyXG4gICAgICAgIHJlR2FtZUV2ZW50SGFuZGxlci5jdXN0b21FdmVudERhdGEgPSBudWxsO1xyXG4gICAgICAgIHJlc2V0LmNsaWNrRXZlbnRzLnB1c2gocmVHYW1lRXZlbnRIYW5kbGVyKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaW5pdEZhaWxTdHIoQ3VycmVudFNjb3JlLCB0aXBzTm9kZTogY2MuTm9kZSwgZmFpbHVyZTogY2MuTm9kZSwgc2NvcmUxLCBzY29yZTIpIHtcclxuICAgICAgICBpZiAocGFyc2VJbnQoQ3VycmVudFNjb3JlLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nKSA+PSAxMDApIHtcclxuICAgICAgICAgICAgdGlwc05vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcIuaIkOWKn1wiXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGlwc05vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcIuWksei0pVwiXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmYWlsdXJlLmdldENoaWxkQnlOYW1lKFwidGlwc1wiKS5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZmFpbHVyZS5nZXRDaGlsZEJ5TmFtZShcInRpcHNcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBg5LuK5pel5Y+v6I635b6X5aWW5YqxXHJcbjYw5bGC6L+H5YWz5aWW5YqxOiAke3Njb3JlMX0vOTAg56ev5YiGXHJcbjEwMOWxgumAmuWFs+WlluWKsTogJHtzY29yZTJ9LzEwMOenr+WIhmBcclxuICAgICAgICBmYWlsdXJlLmdldENoaWxkQnlOYW1lKFwidGlwc1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdWh1b09uY2UoYSwgYiwgYykge1xyXG5cclxuICAgICAgICBsZXQgb25jZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBsZXQgQWxsRkggPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZ05vZGVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJGSG9sZGVyXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEFsbEZILmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBBbGxGSFtpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5MaWZlRGluZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0ubmFtZSA9PSBcImxpZmVCR1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5yZUxpZmUucHVzaCh0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChjYy5Cb3hDb2xsaWRlcikuZW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5QbGF5ZXIueSA9IDMwMDtcclxuXHJcblxyXG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlT25jZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QbGF5ZXIuYWN0aXZlID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChjYy5Cb3hDb2xsaWRlcikuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sIDAuMSlcclxuXHJcbiAgICAgICAgICAgIGEudGFyZ2V0LnBhcmVudC5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLkZvb3RIb2xkR2VuZXJhdG9yKDEpLnkgPSAtMzgwO1xyXG4gICAgICAgICAgICB0aGlzLkZvb3RIb2xkR2VuZXJhdG9yKDEpLnkgPSAtMjIwO1xyXG4gICAgICAgICAgICB0aGlzLkZvb3RIb2xkR2VuZXJhdG9yKDEpLnkgPSAtMTAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vbmNlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQ0NfREVCVUcpIHtcclxuICAgICAgICAgICAgb25jZSgpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTWVzc01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VTY29yZSgtMTAsXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uY2UoKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvbmNlKClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApXHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWkjea0u+aMiemSrueahOWbnuiwg+WHveaVsO+8muaJk+W8gOaOkuihjOamnFxyXG4gICAgICovXHJcbiAgICBGQnRuQ0JfUmFuayhzZWxmPykge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkVuZFNjZW5lXCIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDlpI3mtLvmjInpkq7nmoTlm57osIPlh73mlbDvvJrnq4vljbPlpI3mtLtcclxuICAgICAqL1xyXG4gICAgRkJ0bkNCX3JlUGxheSgpIHtcclxuICAgICAgICBjYy5zeXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZnNqXCIsIFwiOTlcIik7XHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5PdmVyRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5BbmlGYWxnID0gZmFsc2U7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkxvclIgPSAwO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Jbml0U3BlZWQgPSBHbG9iYWwuaW5zdGFuY2UuQ29uc3RJbml0U3BlZWRcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkID0gMTtcclxuICAgICAgICAvLyBHbG9iYWwuaW5zdGFuY2UuRkhGYWxsU3BlZWQgPSAyO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25GbGFnID0gZmFsc2U7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbldpdGhEaW5nID0gZmFsc2U7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLlRoZUhvbGRlciA9IG51bGw7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLktJTkRfRm9vdEhvbGQgPSAwO1xyXG4gICAgICAgIC8vIHRoaXMuUklHSFQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsdGhpcy5CdG5UdXJuUmlnaHQsdGhpcyk7XHJcbiAgICAgICAgLy8gdGhpcy5SSUdIVC5ub2RlLm9mZihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9NT1ZFLHRoaXMuQnRuVHVyblJpZ2h0LHRoaXMpO1xyXG4gICAgICAgIC8vIHRoaXMuUklHSFQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfQ0FOQ0VMLHRoaXMub25LZXlVcCx0aGlzKTtcclxuICAgICAgICB0aGlzLkxFRlQubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuUklHSFQubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuTGtleURvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlJrZXlEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb3ZlRmFsZyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIueSA9IDMwMDtcclxuICAgICAgICB0aGlzLlBsYXllci54ID0gMDtcclxuICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5Y29udHJvbGVyXCIpLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChjYy5Cb3hDb2xsaWRlcikuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IEFsbEZIID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmdOb2RlXCIpLmdldENoaWxkQnlOYW1lKFwiRkhvbGRlclwiKS5jaGlsZHJlbjtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJTQlwiKS5kZXN0cm95KCk7XHJcbiAgICAgICAgLy8gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiZnVodW8xXCIpLmRlc3Ryb3koKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuTGlmZURpbmcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy9mb3IobGV0IGk9MDtpPDI7aSsrKXtcclxuICAgICAgICAgICAgaWYgKHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0ubmFtZSA9PSBcImxpZmVCR1wiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0uYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5MaWZlRGluZy5jaGlsZHJlbltpXS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLnJlTGlmZS5wdXNoKHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChjYy5Cb3hDb2xsaWRlcikuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQWxsRkgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgQWxsRkhbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgRiA9IHRoaXMuRm9vdEhvbGRHZW5lcmF0b3IoMSk7XHJcbiAgICAgICAgRi55ID0gLTM4MDtcclxuICAgICAgICB0aGlzLnNjaGVkdWxlT25jZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNlbGYuUGxheWVyLmdldENvbXBvbmVudChjYy5Cb3hDb2xsaWRlcikuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfSwgMC41KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogcmVzdGFydFxyXG4gICAgICovXHJcbiAgICByZXN0YXJ0KCkge1xyXG5cclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJNYWluU2NlbmVcIik7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IucmVzdW1lKCk7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkFuaUZhbGcgPSBmYWxzZTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuTG9yUiA9IDA7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkluaXRTcGVlZCA9IEdsb2JhbC5pbnN0YW5jZS5Db25zdEluaXRTcGVlZFxyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5tb3ZlU3BlZWQgPSAxO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5GSEZhbGxTcGVlZCA9IDI7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbkZsYWcgPSBmYWxzZTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uV2l0aERpbmcgPSBmYWxzZTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuVGhlSG9sZGVyID0gbnVsbDtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuS0lORF9Gb290SG9sZCA9IDA7XHJcbiAgICAgICAgLy8gdGhpcy5SSUdIVC5ub2RlLm9mZihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCx0aGlzLkJ0blR1cm5SaWdodCx0aGlzKTtcclxuICAgICAgICAvLyB0aGlzLlJJR0hULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX01PVkUsdGhpcy5CdG5UdXJuUmlnaHQsdGhpcyk7XHJcbiAgICAgICAgLy8gdGhpcy5SSUdIVC5ub2RlLm9mZihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9DQU5DRUwsdGhpcy5vbktleVVwLHRoaXMpO1xyXG4gICAgICAgIHRoaXMuTEVGVC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5SSUdIVC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5Ma2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuUmtleURvd24gPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLm1vdmVGYWxnID0gXCJcIjtcclxuICAgICAgICB0aGlzLlBsYXllci55ID0gMzAwO1xyXG4gICAgICAgIC8vIHRoaXMuU2NvcmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiDlj5fliLDkvKTlrrPvvIzlkb3mlbDlh4/kuIBcclxuICAgICovXHJcbiAgICByZWR1Y2VMaWZlKCkge1xyXG5cclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbGV0IExzID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgbGV0IHJlTENvdW50ID0gMDtcclxuICAgICAgICBsZXQgRkhvbGRlciA9IHNlbGYubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJnTm9kZVwiKS5nZXRDaGlsZEJ5TmFtZShcIkZIb2xkZXJcIikuY2hpbGRyZW47XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBGSG9sZGVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChGSG9sZGVyW2ldLmlzSG9sZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIEZIb2xkZXJbaV0uaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJveCA9IEZIb2xkZXJbaV0uZ2V0Q29tcG9uZW50KGNjLkJveENvbGxpZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBib3guZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gc2VsZi5MaWZlRGluZy5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5MaWZlRGluZy5jaGlsZHJlbltpXS5uYW1lID09IFwibGlmZUJHXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChHbG9iYWwuaW5zdGFuY2UuSW5qdXJlZCB8fCBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uV2l0aERpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5MaWZlRGluZy5jaGlsZHJlbltpXS5hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5MaWZlRGluZy5jaGlsZHJlbltpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkluanVyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbkZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbldpdGhEaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgTHMucHVzaChzZWxmLkxpZmVEaW5nLmNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLnJlTGlmZSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKExzW2ldLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLnJlTGlmZS5wdXNoKExzW2ldKTsvL3BsYXllcuWJqeS9meeahOWRveaVsFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vXHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gY2Muc3lzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGZzalwiKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCB0aW1lICsgXCLlvZPliY3ooYAgOiBcIiArIEdsb2JhbC5pbnN0YW5jZS5yZUxpZmUubGVuZ3RoKTtcclxuICAgICAgICBpZiAoR2xvYmFsLmluc3RhbmNlLnJlTGlmZS5sZW5ndGggPCAzKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGltZSA9PSA5OSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhmc2pcIiwgdGltZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGltZSA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWxvZCA9IHBhcnNlSW50KGNjLnN5cy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhmc2pcIikpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN1YiA9IHRpbWUgLSB0aW1sb2Q7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHN1YiA+PSAyMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaXplcyA9IEdsb2JhbC5pbnN0YW5jZS5yZUxpZmUubGVuZ3RoICsgMjtcclxuICAgICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UucmVMaWZlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplczsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLm5hbWUgPT0gXCJsaWZlQkdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5yZUxpZmUucHVzaCh0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwicHVzaCAtLS0tLS0tLS0tLS0tLVwiICsgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2Muc3lzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGZzalwiLCB0aW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzaXplcyArIFwi5oGi5aSN6KGAKzEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIiArICBHbG9iYWwuaW5zdGFuY2UucmVMaWZlLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhmc2pcIiwgXCI5OVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5q+P5LiL6JC95LiA5bGC77yM5YiG5pWw5Yqg5LiA44CCXHJcbiAgICAgKi9cclxuICAgIFNjb3JlKCkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcy5ub2RlO1xyXG4gICAgICAgIGxldCBzY0xhYmVsID0gdGhpcy5MaWZlRGluZy5nZXRDaGlsZEJ5TmFtZShcIkZsb29yXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgbGV0IHNjID0gcGFyc2VJbnQoc2NMYWJlbC5zdHJpbmcpO1xyXG4gICAgICAgIGlmICghR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnKSB7XHJcbiAgICAgICAgICAgIHNjID0gc2MgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBsYXl0YW5zb3VuZCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi5omT5Y2w5LiA5LiLXCIpO1xyXG4gICAgICAgIHNjTGFiZWwuc3RyaW5nID0gc2MudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgaWYgKHNjID09IDYwKSB7XHJcbiAgICAgICAgICAgIE1lc3NNYW5hZ2VyLmdldEluc3RhbmNlKCkucXVlc3RTZXJ2ZXIoMzAsXHJcbiAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzYyA9PSAxMDApIHtcclxuICAgICAgICAgICAgTWVzc01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5xdWVzdFNlcnZlcigxMDAsXHJcbiAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHRoaXMucHJldHJlYXRtZW50R2FtZW92ZXIoKTtcclxuICAgICAgICAgICAgLy8vXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbHYgPSBNYXRoLmNlaWwoc2MgLyAyNSk7XHJcbiAgICAgICAgaWYgKGx2ID4gR2xvYmFsLmluc3RhbmNlLkxldmVsQWRkRmxhZykge1xyXG4gICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuTGV2ZWxBZGRGbGFnID0gbHY7XHJcbiAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Jbml0U3BlZWQgKz0gMC41Oy8v5q+P5LiL6JC9NTDlsYLvvIxwbGF5ZXLkuIvokL3pgJ/luqbliqAwLjI1XHJcbiAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5GSEZhbGxTcGVlZCArPSAxOy8v5rKh5LiL6JC9NTDlsYLvvIzokL3ohJrngrnkuIvokL3pgJ/luqbliqDlv6swLjUuXHJcblxyXG4gICAgICAgICAgICBpZiAoc2MgPT0gNTApIHtcclxuICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Jbml0U3BlZWQgKz0gMC41Oy8v5q+P5LiL6JC9NTDlsYLvvIxwbGF5ZXLkuIvokL3pgJ/luqbliqAwLjI1XHJcbiAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuRkhGYWxsU3BlZWQgKz0gMTsvL+ayoeS4i+iQvTUw5bGC77yM6JC96ISa54K55LiL6JC96YCf5bqm5Yqg5b+rMC41LlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2MgPT0gNzApIHtcclxuICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Jbml0U3BlZWQgKz0gMC41Oy8v5q+P5LiL6JC9NTDlsYLvvIxwbGF5ZXLkuIvokL3pgJ/luqbliqAwLjI1XHJcbiAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuRkhGYWxsU3BlZWQgKz0gMTsvL+ayoeS4i+iQvTUw5bGC77yM6JC96ISa54K55LiL6JC96YCf5bqm5Yqg5b+rMC41LlxyXG5cclxuICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Jbml0U3BlZWQgKz0gMC41Oy8v5q+P5LiL6JC9NTDlsYLvvIxwbGF5ZXLkuIvokL3pgJ/luqbliqAwLjI1XHJcbiAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuRkhGYWxsU3BlZWQgKz0gMTsvL+ayoeS4i+iQvTUw5bGC77yM6JC96ISa54K55LiL6JC96YCf5bqm5Yqg5b+rMC41LlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5pys5Zyw5YiG5pWw5a2Y5YKoXHJcbiAgICAgKi9cclxuICAgIFN0b3JlZ2VTY29yZSgpIHtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbGV0IGxvY2FsUyA9IEdsb2JhbC5pbnN0YW5jZS5nZXRMb2NhbFNjb3JlKCk7Ly90aGUgdGVtcCBvZiBsb2NhbCBzY29yZTtcclxuICAgICAgICBsZXQgQ3VycmVudFNjb3JlID0gcGFyc2VJbnQoXHJcbiAgICAgICAgICAgIHRoaXMuTGlmZURpbmcuZ2V0Q2hpbGRCeU5hbWUoXCJGbG9vclwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyk7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLmdldExvY2FsU2NvcmUoKS5DdXJyZW50U2NvcmUgPSBDdXJyZW50U2NvcmU7XHJcbiAgICAgICAgaWYgKEN1cnJlbnRTY29yZSA+IGxvY2FsUy5UaGlyZFNjb3JlKSB7XHJcbiAgICAgICAgICAgIGlmIChDdXJyZW50U2NvcmUgPiBsb2NhbFMuU2Vjb25kU2NvcmUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChDdXJyZW50U2NvcmUgPiBsb2NhbFMuQmVzdFNjb3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTLkJlc3RTY29yZSA9IEN1cnJlbnRTY29yZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2NhbFMuU2Vjb25kU2NvcmUgPSBDdXJyZW50U2NvcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9jYWxTLlRoaXJkU2NvcmUgPSBDdXJyZW50U2NvcmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXBsb2FkIHRoZSBiZXN0IHNjb3JlXHJcbiAgICAgKi9cclxuICAgIFVwTG9hZFNjb3JlKCkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBsZXQgdG1wID0gR2xvYmFsLmluc3RhbmNlLkdldFVTZXIoKTtcclxuICAgICAgICAvKiBIdHRwLnNlbmRSZXF1ZXN0KFwiL3VwZGF0ZVNjb3JlXCIsdG1wLGZ1bmN0aW9uKG1zZyl7XHJcbiAgICAgICAgICAgICBsZXQgeCA9IG1zZztcclxuICAgICAgICAgICAgIGlmKG1zZy5jb2RlIT0wKXtcclxuICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuTmV0U3RhdHVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICBsZXQgdXggPSB7XHJcbiAgICAgICAgICAgICAgICAgdXNlcklkOicnLFxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgY29uc29sZS5sb2coeCk7XHJcbiAgICAgICAgICAgICB1eC51c2VySWQgPSBHbG9iYWwuaW5zdGFuY2UuR2V0VVNlcigpLnVzZXJJZDtcclxuICAgICAgICAgICAgIEh0dHAuc2VuZFJlcXVlc3QoXCIvcmFua1wiLHV4LGZ1bmN0aW9uKG1tc2cpe1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIi0tLS0tLS0tLS0tLS0tLS0tLTNcIik7XHJcbiAgICAgICAgICAgICAgICAgbGV0IE1NID0gSlNPTi5wYXJzZShtbXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coTU0pO1xyXG4gICAgICAgICAgICAgICAgIGlmKEdsb2JhbC5pbnN0YW5jZS5HZXRSKCk9PW51bGx8fEdsb2JhbC5pbnN0YW5jZS5HZXRSKCkucmFuaz09dW5kZWZpbmVkfHxHbG9iYWwuaW5zdGFuY2UuR2V0UigpLnJhbms8TU0ubXkucmFuayl7XHJcbiAgICAgICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5TZXRSKE1NLm15LnJhbmspO1xyXG4gICAgICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2Uuc2V0UmVtb3RlU2NvcmUoTU0ub3RoZXIpO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICB9KTsqL1xyXG4gICAgfVxyXG5cclxufSJdfQ==