Commit 8ce5970251b8bdc283500ff45695e1a85afb1b86
1 parent
bdb20631
Exists in
web
and in
1 other branch
add 2.0demo
Showing
34 changed files
with
1818 additions
and
1986 deletions
Show diff stats
puchi_laya/.DS_Store
No preview for this file type
puchi_laya/.laya/web.json
puchi_laya/README.md
... | ... | @@ -9,8 +9,11 @@ https://puchi-android-res.oss-cn-beijing.aliyuncs.com/puchigames_laya/laya_andro |
9 | 9 | 1.0.0 包含现在SDK的所有功能,基础版本 |
10 | 10 | |
11 | 11 | ######### |
12 | +https://testpage-gamesdk.d3games.com/pcSdkLayaDemo/index.html | |
12 | 13 | web 重构后web版本的开发版本 |
13 | 14 | |
14 | - web_1.0.0 web版本的第一版本demo | |
15 | + web_1.0.0 web版本的第一版本demo | |
16 | + | |
17 | + 2.0 web版本的2.0版本demo | |
15 | 18 | |
16 | 19 | |
17 | 20 | \ No newline at end of file | ... | ... |
puchi_laya/bin/TestScene.json
1 | -{"type":"Scene","props":{"width":750,"runtime":"TestScene.ts","height":1624},"compId":1,"child":[{"type":"Sprite","props":{"y":0,"x":0,"texture":"local/bg.png","name":"bg"},"compId":24},{"type":"View","props":{"width":750,"presetID":1,"height":1334,"centerY":0,"centerX":0,"y":0,"x":0,"isPresetRoot":true},"compId":70,"child":[{"type":"Box","props":{"presetID":2,"y":37,"x":0,"width":150,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"presetID":3,"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":76}]},{"type":"Button","props":{"presetID":4,"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":77}]},{"type":"Button","props":{"presetID":5,"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":78}]},{"type":"Button","props":{"presetID":6,"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":79}]}]},{"type":"Box","props":{"presetID":7,"y":176,"x":48,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"presetID":8,"skin":"common/img_coin_bg.png"},"compId":11},{"type":"Sprite","props":{"presetID":9,"y":-6,"x":-24,"texture":"common/icon_coin.png"},"compId":12},{"type":"Label","props":{"presetID":10,"y":12,"x":85.04541015625,"text":"0","fontSize":34,"color":"#171515"},"compId":13},{"type":"Button","props":{"presetID":11,"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png"},"compId":14},{"type":"Script","props":{"presetID":23,"tiplab":"@node:30","coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":72},{"type":"Label","props":{"presetID":24,"y":79,"x":85.04541015625,"text":"0","fontSize":34,"color":"#9c7b7b"},"compId":73}]},{"type":"Box","props":{"presetID":19,"y":261,"x":242},"compId":25,"child":[{"type":"Button","props":{"presetID":13,"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":75}]},{"type":"Button","props":{"presetID":14,"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":80}]},{"type":"Button","props":{"presetID":15,"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":81}]},{"type":"Button","props":{"presetID":16,"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":82}]},{"type":"Button","props":{"presetID":17,"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":83}]},{"type":"Button","props":{"presetID":22,"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5},"compId":71,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":84}]},{"type":"Button","props":{"presetID":25,"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":74,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":85}]}]},{"type":"View","props":{"presetID":18,"y":773,"x":75,"width":600,"var":"NativeAD","height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}]}],"loadList":["local/bg.png","prefab/View.prefab"],"loadList3D":[]} | |
2 | 1 | \ No newline at end of file |
2 | +{"type":"Scene","props":{"width":750,"runtime":"TestScene.ts","height":1624},"compId":1,"child":[{"type":"Sprite","props":{"y":0,"x":0,"texture":"local/bg.png","name":"bg"},"compId":24},{"type":"View","props":{"presetID":1,"y":0,"x":0,"width":750,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":86,"child":[{"type":"Box","props":{"presetID":2,"y":37,"x":0,"width":150,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"presetID":3,"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"presetID":4,"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"presetID":5,"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"presetID":6,"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"presetID":7,"y":176,"x":48,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"presetID":8,"skin":"common/img_coin_bg.png"},"compId":11},{"type":"Label","props":{"presetID":24,"y":79,"x":85.04541015625,"text":"0","fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"presetID":9,"y":-6,"x":-24,"texture":"common/icon_coin.png"},"compId":12},{"type":"Label","props":{"presetID":10,"y":29,"x":88,"text":"0","fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},"compId":13},{"type":"Button","props":{"presetID":11,"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png"},"compId":14},{"type":"Script","props":{"presetID":23,"tiplab":"@node:30","coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"presetID":19,"y":250,"x":218},"compId":25,"child":[{"type":"Button","props":{"presetID":13,"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"presetID":14,"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"presetID":15,"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"presetID":16,"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"y":297,"x":-21,"presetID":17,"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"y":286,"x":282,"presetID":22,"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"presetID":25,"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]},{"type":"Button","props":{"presetID":37,"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},"compId":87,"child":[{"type":"Script","props":{"presetID":38,"runtime":"uitl/ScaleButtonScript.ts"},"compId":88}]},{"type":"Button","props":{"presetID":39,"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},"compId":89,"child":[{"type":"Script","props":{"presetID":40,"runtime":"uitl/ScaleButtonScript.ts"},"compId":90}]},{"type":"Button","props":{"presetID":41,"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},"compId":91,"child":[{"type":"Script","props":{"presetID":42,"runtime":"uitl/ScaleButtonScript.ts"},"compId":92}]},{"type":"Button","props":{"presetID":43,"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},"compId":93,"child":[{"type":"Script","props":{"presetID":44,"runtime":"uitl/ScaleButtonScript.ts"},"compId":94}]},{"type":"Button","props":{"presetID":45,"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},"compId":95,"child":[{"type":"Script","props":{"presetID":46,"runtime":"uitl/ScaleButtonScript.ts"},"compId":96}]},{"type":"Button","props":{"presetID":47,"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},"compId":97,"child":[{"type":"Script","props":{"presetID":48,"runtime":"uitl/ScaleButtonScript.ts"},"compId":98}]},{"type":"Button","props":{"presetID":49,"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},"compId":99,"child":[{"type":"Script","props":{"presetID":50,"runtime":"uitl/ScaleButtonScript.ts"},"compId":100},{"type":"Label","props":{"presetID":51,"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},"compId":101}]}]},{"type":"View","props":{"presetID":18,"y":773,"x":75,"width":600,"var":"NativeAD","height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}]}],"loadList":["local/bg.png","prefab/View.prefab"],"loadList3D":[]} | |
3 | 3 | \ No newline at end of file | ... | ... |
puchi_laya/bin/js/bundle.js
... | ... | @@ -46,14 +46,14 @@ var GameConfig = /** @class */ (function () { |
46 | 46 | exports.default = GameConfig; |
47 | 47 | GameConfig.init(); |
48 | 48 | |
49 | -},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":12,"./uitl/ScaleButtonScript":26}],2:[function(require,module,exports){ | |
49 | +},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":8,"./uitl/ScaleButtonScript":20}],2:[function(require,module,exports){ | |
50 | 50 | "use strict"; |
51 | 51 | Object.defineProperty(exports, "__esModule", { value: true }); |
52 | 52 | var GameConfig_1 = require("./GameConfig"); |
53 | 53 | var AdManager_1 = require("./sdk/AdManager"); |
54 | -var AppSdk_1 = require("./sdk/AppSdk"); | |
55 | -var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); | |
56 | 54 | var ShakeModel_1 = require("./sdk/model/ShakeModel"); |
55 | +var PcSdk_1 = require("./sdk/PcSdk"); | |
56 | +var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); | |
57 | 57 | var Main = /** @class */ (function () { |
58 | 58 | function Main() { |
59 | 59 | //根据IDE设置初始化引擎 |
... | ... | @@ -96,20 +96,21 @@ var Main = /** @class */ (function () { |
96 | 96 | switch (_a.label) { |
97 | 97 | case 0: |
98 | 98 | /**隐藏启动屏 */ |
99 | - AppSdk_1.AppSdk.I.hideSplash(); | |
99 | + PcSdk_1.default.I.hideSplash(); | |
100 | 100 | /**初始化adk 获取app配置信息 */ |
101 | - AppSdk_1.AppSdk.I.init(); | |
101 | + PcSdk_1.default.I.init(); | |
102 | 102 | /**预加载视频 */ |
103 | 103 | AdManager_1.default.I.init(); |
104 | - /**获取红包配置 初始化数据 */ | |
105 | - return [4 /*yield*/, RedpacketModel_1.default.I.init()]; | |
104 | + /**获取红包配置 摇一摇 等静态数据 */ | |
105 | + return [4 /*yield*/, PcSdk_1.default.I.initGameConfig()]; | |
106 | 106 | case 1: |
107 | - /**获取红包配置 初始化数据 */ | |
107 | + /**获取红包配置 摇一摇 等静态数据 */ | |
108 | 108 | _a.sent(); |
109 | - /**初始化摇一摇的数据 */ | |
110 | - return [4 /*yield*/, ShakeModel_1.default.I.init()]; | |
109 | + return [4 /*yield*/, RedpacketModel_1.default.I.init()]; | |
111 | 110 | case 2: |
112 | - /**初始化摇一摇的数据 */ | |
111 | + _a.sent(); | |
112 | + return [4 /*yield*/, ShakeModel_1.default.I.init()]; | |
113 | + case 3: | |
113 | 114 | _a.sent(); |
114 | 115 | return [2 /*return*/]; |
115 | 116 | } |
... | ... | @@ -121,12 +122,12 @@ var Main = /** @class */ (function () { |
121 | 122 | //激活启动类 |
122 | 123 | new Main(); |
123 | 124 | |
124 | -},{"./GameConfig":1,"./sdk/AdManager":7,"./sdk/AppSdk":9,"./sdk/model/RedpacketModel":16,"./sdk/model/ShakeModel":17}],3:[function(require,module,exports){ | |
125 | +},{"./GameConfig":1,"./sdk/AdManager":7,"./sdk/PcSdk":9,"./sdk/model/RedpacketModel":13,"./sdk/model/ShakeModel":14}],3:[function(require,module,exports){ | |
125 | 126 | "use strict"; |
126 | 127 | Object.defineProperty(exports, "__esModule", { value: true }); |
127 | -var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); | |
128 | 128 | var EventCenter_1 = require("./event/EventCenter"); |
129 | 129 | var EventEnum_1 = require("./event/EventEnum"); |
130 | +var PcSdk_1 = require("./sdk/PcSdk"); | |
130 | 131 | /** |
131 | 132 | * 主界面 金币金额 |
132 | 133 | */ |
... | ... | @@ -154,14 +155,13 @@ var RedDrawal = /** @class */ (function (_super) { |
154 | 155 | var coin, str, nextDrawal, leftCoin; |
155 | 156 | return __generator(this, function (_a) { |
156 | 157 | switch (_a.label) { |
157 | - case 0: return [4 /*yield*/, RedpacketModel_1.default.I.getTotalCoin()]; | |
158 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.myCoin()]; | |
158 | 159 | case 1: |
159 | 160 | coin = _a.sent(); |
160 | - // let coin = 1000 | |
161 | 161 | this.totalCoin = coin; |
162 | 162 | this.coinlab.text = '' + coin; |
163 | 163 | str = '可提现'; |
164 | - return [4 /*yield*/, RedpacketModel_1.default.I.minWithDrawal()]; | |
164 | + return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()]; | |
165 | 165 | case 2: |
166 | 166 | nextDrawal = _a.sent(); |
167 | 167 | if (this.totalCoin > 0) { |
... | ... | @@ -180,26 +180,33 @@ var RedDrawal = /** @class */ (function (_super) { |
180 | 180 | }(Laya.Script)); |
181 | 181 | exports.default = RedDrawal; |
182 | 182 | |
183 | -},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/model/RedpacketModel":16}],4:[function(require,module,exports){ | |
183 | +},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/PcSdk":9}],4:[function(require,module,exports){ | |
184 | 184 | "use strict"; |
185 | 185 | Object.defineProperty(exports, "__esModule", { value: true }); |
186 | 186 | var layaMaxUI_1 = require("./ui/layaMaxUI"); |
187 | 187 | var AdManager_1 = require("./sdk/AdManager"); |
188 | -var AppSdk_1 = require("./sdk/AppSdk"); | |
189 | 188 | var ShakeModel_1 = require("./sdk/model/ShakeModel"); |
190 | 189 | var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); |
190 | +var PcSdk_1 = require("./sdk/PcSdk"); | |
191 | +var NativeAd_1 = require("./sdk/NativeAd"); | |
191 | 192 | var TestScene = /** @class */ (function (_super) { |
192 | 193 | __extends(TestScene, _super); |
193 | 194 | function TestScene() { |
194 | 195 | var _this = _super.call(this) || this; |
196 | + _this.isLongVibrate = false; | |
195 | 197 | //关闭多点触控,否则就无敌了 |
196 | 198 | Laya.MouseManager.multiTouchEnabled = false; |
197 | 199 | console.log('---------------TestScene-------'); |
198 | - _this.NativeAD.visible = false; | |
199 | 200 | return _this; |
201 | + // this.NativeAD.visible = false; | |
200 | 202 | } |
201 | 203 | TestScene.prototype.onEnable = function () { |
204 | + var _this = this; | |
202 | 205 | this.btnServer.on(Laya.Event.CLICK, this, this.openServer); |
206 | + this.btnVibrate.on(Laya.Event.CLICK, this, function () { | |
207 | + PcSdk_1.default.I.vibrate(_this.isLongVibrate ? 0 : 1); | |
208 | + _this.isLongVibrate = !_this.isLongVibrate; | |
209 | + }); | |
203 | 210 | this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal); |
204 | 211 | this.btnInvite.on(Laya.Event.CLICK, this, this.invitation); |
205 | 212 | this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake); |
... | ... | @@ -210,35 +217,51 @@ var TestScene = /** @class */ (function (_super) { |
210 | 217 | this.btnShowInterAd.on(Laya.Event.CLICK, this, this.showInterAd); |
211 | 218 | this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd); |
212 | 219 | this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket); |
220 | + this.btnPreVideo.on(Laya.Event.CLICK, this, this.preloadRewardAd); | |
221 | + this.btnPreFull.on(Laya.Event.CLICK, this, this.preloadFull); | |
222 | + this.btnPreInsert.on(Laya.Event.CLICK, this, this.preloadInterAd); | |
223 | + this.btnPreNative.on(Laya.Event.CLICK, this, this.preloadNativeAd); | |
224 | + this.btnCloseBanner.on(Laya.Event.CLICK, this, this.closeAdBanner); | |
225 | + this.btnCloseNative.on(Laya.Event.CLICK, this, this.closeAdverDialog); | |
226 | + this.btnMinWithDrawal.on(Laya.Event.CLICK, this, this.minWithDrawal); | |
213 | 227 | }; |
214 | 228 | /**预加载广告 */ |
215 | 229 | TestScene.prototype.preloadAD = function () { |
216 | 230 | return __awaiter(this, void 0, void 0, function () { |
217 | 231 | return __generator(this, function (_a) { |
218 | - console.log('---------------preloadAD-------'); | |
219 | - // await AdManager.I.init(); | |
220 | - MyBridge.testReturn(function () { | |
221 | - var array = []; | |
222 | - for (var _i = 0; _i < arguments.length; _i++) { | |
223 | - array[_i] = arguments[_i]; | |
224 | - } | |
225 | - console.log("-------web--------onClick----->>cocos JS-------MyBridge.testReturn------" + JSON.stringify(array)); | |
226 | - }); | |
227 | - return [2 /*return*/]; | |
232 | + switch (_a.label) { | |
233 | + case 0: | |
234 | + console.log('---------------preloadAD-------'); | |
235 | + return [4 /*yield*/, AdManager_1.default.I.preloadBanner()]; | |
236 | + case 1: | |
237 | + _a.sent(); | |
238 | + return [2 /*return*/]; | |
239 | + } | |
228 | 240 | }); |
229 | 241 | }); |
230 | 242 | }; |
243 | + TestScene.prototype.preloadRewardAd = function () { | |
244 | + AdManager_1.default.I.preloadRewardAd(); | |
245 | + }; | |
246 | + TestScene.prototype.preloadFull = function () { | |
247 | + AdManager_1.default.I.preloadFullAd(); | |
248 | + }; | |
249 | + TestScene.prototype.preloadInterAd = function () { | |
250 | + AdManager_1.default.I.preloadInterAd(); | |
251 | + }; | |
252 | + TestScene.prototype.preloadNativeAd = function () { | |
253 | + this.NativeAD.getComponent(NativeAd_1.default).initNativeAd(1); | |
254 | + }; | |
255 | + TestScene.prototype.closeAdverDialog = function () { | |
256 | + AdManager_1.default.I.closeAdverDialog(); | |
257 | + }; | |
258 | + TestScene.prototype.closeAdBanner = function () { | |
259 | + AdManager_1.default.I.closeAdBanner(); | |
260 | + }; | |
231 | 261 | /**显示全屏广告 */ |
232 | 262 | TestScene.prototype.showFullAd = function () { |
233 | 263 | console.log('---------------showFullAd-------'); |
234 | - // AdManager.I.showFullAd(); | |
235 | - var ret = MyBridge.mapToString({ | |
236 | - data: { | |
237 | - "count": 2, "title": [{ "name": "nnn", "value": "nnnvalue", "default_show": 1 }, | |
238 | - { "name": "mmm", "value": "mmmvalue\"aasdasd" }] | |
239 | - } | |
240 | - }); | |
241 | - console.log("-------web--------onClick----->>cocos JS-------MyBridge.mapToString------" + JSON.stringify(ret)); | |
264 | + AdManager_1.default.I.showFullAd(); | |
242 | 265 | }; |
243 | 266 | /**显示banner */ |
244 | 267 | TestScene.prototype.showBanner = function () { |
... | ... | @@ -247,8 +270,7 @@ var TestScene = /** @class */ (function (_super) { |
247 | 270 | }; |
248 | 271 | /**信息流广告 */ |
249 | 272 | TestScene.prototype.showNativeAd = function () { |
250 | - console.log('---------------showNativeAd-------'); | |
251 | - this.NativeAD.visible = true; | |
273 | + this.NativeAD.getComponent(NativeAd_1.default).initNativeAd(); | |
252 | 274 | }; |
253 | 275 | /**插屏广告 */ |
254 | 276 | TestScene.prototype.showInterAd = function () { |
... | ... | @@ -273,22 +295,38 @@ var TestScene = /** @class */ (function (_super) { |
273 | 295 | /**意见反馈 */ |
274 | 296 | TestScene.prototype.openServer = function () { |
275 | 297 | console.log('---------------openServer-------'); |
276 | - AppSdk_1.AppSdk.I.feedback(); | |
298 | + PcSdk_1.default.I.feedback(); | |
277 | 299 | }; |
278 | 300 | TestScene.prototype.openRedpacket = function () { |
279 | - RedpacketModel_1.default.I.checkRedpacket(); | |
280 | - console.log('红包获取结果:curRedpacket' + RedpacketModel_1.default.I.curRedpacket); | |
281 | - // console.log('红包获取结果:' + JSON.stringify(data)) | |
282 | - // ViewManager.I.openPopwin(RedpacketPopwin, 0); | |
301 | + return __awaiter(this, void 0, void 0, function () { | |
302 | + return __generator(this, function (_a) { | |
303 | + RedpacketModel_1.default.I.checkRedpacket(); | |
304 | + return [2 /*return*/]; | |
305 | + }); | |
306 | + }); | |
307 | + }; | |
308 | + TestScene.prototype.minWithDrawal = function () { | |
309 | + return __awaiter(this, void 0, void 0, function () { | |
310 | + var money; | |
311 | + return __generator(this, function (_a) { | |
312 | + switch (_a.label) { | |
313 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()]; | |
314 | + case 1: | |
315 | + money = _a.sent(); | |
316 | + this.minWithDrawalLab.text = '最低提现:' + money; | |
317 | + return [2 /*return*/]; | |
318 | + } | |
319 | + }); | |
320 | + }); | |
283 | 321 | }; |
284 | 322 | /**打开个人中心 */ |
285 | 323 | TestScene.prototype.openPersonal = function () { |
286 | 324 | console.log('---------------openServer-------'); |
287 | - AppSdk_1.AppSdk.I.personal(0); | |
325 | + PcSdk_1.default.I.personal(0); | |
288 | 326 | }; |
289 | 327 | /**邀请好友 */ |
290 | 328 | TestScene.prototype.invitation = function () { |
291 | - AppSdk_1.AppSdk.I.invitation(); | |
329 | + PcSdk_1.default.I.invitation(); | |
292 | 330 | }; |
293 | 331 | /** |
294 | 332 | * 1 金币 |
... | ... | @@ -298,10 +336,7 @@ var TestScene = /** @class */ (function (_super) { |
298 | 336 | */ |
299 | 337 | TestScene.prototype.touchShake = function () { |
300 | 338 | console.log('---------------touchShake-------'); |
301 | - // this.skin.btnShakeAni.play(0); | |
302 | - AppSdk_1.AppSdk.I.vibrate(); | |
303 | - // ViewManager.I.showModal(HintModal, ' 今⽇次数已⽤完,请明⽇再来'); | |
304 | - // this.skin.handAni.stop(); | |
339 | + PcSdk_1.default.I.vibrate(); | |
305 | 340 | /** |
306 | 341 | * 1.回去星星 道具 |
307 | 342 | * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币 |
... | ... | @@ -385,7 +420,7 @@ var TestScene = /** @class */ (function (_super) { |
385 | 420 | }(layaMaxUI_1.ui.TestSceneUI)); |
386 | 421 | exports.default = TestScene; |
387 | 422 | |
388 | -},{"./sdk/AdManager":7,"./sdk/AppSdk":9,"./sdk/model/RedpacketModel":16,"./sdk/model/ShakeModel":17,"./ui/layaMaxUI":21}],5:[function(require,module,exports){ | |
423 | +},{"./sdk/AdManager":7,"./sdk/NativeAd":8,"./sdk/PcSdk":9,"./sdk/model/RedpacketModel":13,"./sdk/model/ShakeModel":14,"./ui/layaMaxUI":15}],5:[function(require,module,exports){ | |
389 | 424 | "use strict"; |
390 | 425 | Object.defineProperty(exports, "__esModule", { value: true }); |
391 | 426 | /* |
... | ... | @@ -441,9 +476,27 @@ var AdManager = /** @class */ (function () { |
441 | 476 | AdManager.prototype.init = function () { |
442 | 477 | this.preloadRewardAd(); |
443 | 478 | }; |
479 | + AdManager.prototype.preloadBanner = function () { | |
480 | + TTAdSdk_1.default.I.loadBannerExpressAd(1); | |
481 | + }; | |
444 | 482 | AdManager.prototype.preloadRewardAd = function () { |
445 | 483 | TTAdSdk_1.default.I.showRewardVideoAd(1); |
446 | 484 | }; |
485 | + AdManager.prototype.preloadFullAd = function () { | |
486 | + TTAdSdk_1.default.I.loadFullScreenVideoAd(1); | |
487 | + }; | |
488 | + AdManager.prototype.preloadInterAd = function () { | |
489 | + // TTAdSdk.I.showInteractionExpressAd(1); | |
490 | + }; | |
491 | + AdManager.prototype.preloadNativeAd = function () { | |
492 | + TTAdSdk_1.default.I.loadFullScreenVideoAd(1); | |
493 | + }; | |
494 | + AdManager.prototype.closeAdverDialog = function () { | |
495 | + TTAdSdk_1.default.I.closeAdverDialog(); | |
496 | + }; | |
497 | + AdManager.prototype.closeAdBanner = function () { | |
498 | + TTAdSdk_1.default.I.closeAdBanner(); | |
499 | + }; | |
447 | 500 | AdManager.prototype.showRewardAd = function () { |
448 | 501 | return __awaiter(this, void 0, void 0, function () { |
449 | 502 | var ret, e_1; |
... | ... | @@ -466,12 +519,6 @@ var AdManager = /** @class */ (function () { |
466 | 519 | }); |
467 | 520 | }); |
468 | 521 | }; |
469 | - AdManager.prototype.preloadFullAd = function () { | |
470 | - TTAdSdk_1.default.I.loadFullScreenVideoAd(1); | |
471 | - }; | |
472 | - AdManager.prototype.preloadInterAd = function () { | |
473 | - TTAdSdk_1.default.I.loadFullScreenVideoAd(1); | |
474 | - }; | |
475 | 522 | AdManager.prototype.showFullAd = function () { |
476 | 523 | return __awaiter(this, void 0, void 0, function () { |
477 | 524 | var ret, e_2; |
... | ... | @@ -520,14 +567,9 @@ var AdManager = /** @class */ (function () { |
520 | 567 | AdManager.prototype.showBanner = function () { |
521 | 568 | TTAdSdk_1.default.I.loadBannerExpressAd(); |
522 | 569 | }; |
523 | - AdManager.prototype.hideBanner = function () { | |
524 | - TTAdSdk_1.default.I.hideAd(); | |
525 | - }; | |
526 | - AdManager.prototype.showNativeAd = function (x, y, w, h) { | |
527 | - TTAdSdk_1.default.I.loadNativeExpressAd(x, y, w, h); | |
528 | - }; | |
529 | - AdManager.prototype.hideNativeAd = function () { | |
530 | - TTAdSdk_1.default.I.hideAd(); | |
570 | + AdManager.prototype.showNativeAd = function (x, y, w, h, preload) { | |
571 | + if (preload === void 0) { preload = 0; } | |
572 | + TTAdSdk_1.default.I.loadNativeExpressAd(x, y, w, h, preload); | |
531 | 573 | }; |
532 | 574 | Object.defineProperty(AdManager, "I", { |
533 | 575 | get: function () { |
... | ... | @@ -540,440 +582,356 @@ var AdManager = /** @class */ (function () { |
540 | 582 | }()); |
541 | 583 | exports.default = AdManager; |
542 | 584 | |
543 | -},{"../uitl/ObjectInstance":24,"./TTAdSdk":13}],8:[function(require,module,exports){ | |
585 | +},{"../uitl/ObjectInstance":18,"./TTAdSdk":10}],8:[function(require,module,exports){ | |
544 | 586 | "use strict"; |
545 | 587 | Object.defineProperty(exports, "__esModule", { value: true }); |
546 | -var BaseAppSdk_1 = require("./BaseAppSdk"); | |
547 | -var AndroidAppSdk = /** @class */ (function (_super) { | |
548 | - __extends(AndroidAppSdk, _super); | |
549 | - function AndroidAppSdk() { | |
588 | +var AdManager_1 = require("./AdManager"); | |
589 | +var NativeAd = /** @class */ (function (_super) { | |
590 | + __extends(NativeAd, _super); | |
591 | + function NativeAd() { | |
550 | 592 | return _super !== null && _super.apply(this, arguments) || this; |
551 | 593 | } |
552 | - Object.defineProperty(AndroidAppSdk.prototype, "system", { | |
553 | - get: function () { | |
554 | - return 1; | |
555 | - }, | |
556 | - enumerable: true, | |
557 | - configurable: true | |
558 | - }); | |
559 | - AndroidAppSdk.prototype.callApp = function (cmd) { | |
560 | - var params = []; | |
561 | - for (var _i = 1; _i < arguments.length; _i++) { | |
562 | - params[_i - 1] = arguments[_i]; | |
563 | - } | |
564 | - var _a; | |
565 | - this.bridge && (_a = this.bridge).call.apply(_a, [cmd].concat(params)); | |
566 | - // this.bridge && alert(JSON.stringify(this.bridge)); | |
594 | + NativeAd.prototype.initNativeAd = function (preload) { | |
595 | + if (preload === void 0) { preload = 0; } | |
596 | + var globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true); | |
597 | + AdManager_1.default.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height, preload); | |
567 | 598 | }; |
568 | - AndroidAppSdk.prototype.callAppWithBack = function (callBack, cmd) { | |
569 | - var params = []; | |
570 | - for (var _i = 2; _i < arguments.length; _i++) { | |
571 | - params[_i - 2] = arguments[_i]; | |
572 | - } | |
573 | - var _a; | |
574 | - this.bridge && (_a = this.bridge).callWithBack.apply(_a, [callBack, cmd].concat(params)); | |
599 | + NativeAd.prototype.onEnable = function () { | |
600 | + this.initNativeAd(); | |
601 | + }; | |
602 | + NativeAd.prototype.onDisable = function () { | |
603 | + AdManager_1.default.I.closeAdverDialog(); | |
575 | 604 | }; |
576 | - Object.defineProperty(AndroidAppSdk.prototype, "bridge", { | |
605 | + Object.defineProperty(NativeAd.prototype, "item", { | |
577 | 606 | get: function () { |
578 | - return this._bridge || (this._bridge = this.createClass('com.puchi.sdkdemo.JSBridge')); | |
607 | + return this.owner; | |
579 | 608 | }, |
580 | 609 | enumerable: true, |
581 | 610 | configurable: true |
582 | 611 | }); |
583 | - return AndroidAppSdk; | |
584 | -}(BaseAppSdk_1.default)); | |
585 | -exports.default = AndroidAppSdk; | |
612 | + return NativeAd; | |
613 | +}(Laya.Script)); | |
614 | +exports.default = NativeAd; | |
586 | 615 | |
587 | -},{"./BaseAppSdk":10}],9:[function(require,module,exports){ | |
616 | +},{"./AdManager":7}],9:[function(require,module,exports){ | |
588 | 617 | "use strict"; |
589 | 618 | Object.defineProperty(exports, "__esModule", { value: true }); |
590 | -var IosAppSdk_1 = require("./IosAppSdk"); | |
591 | -var AndroidAppSdk_1 = require("./AndroidAppSdk"); | |
592 | -var BaseAppSdk_1 = require("./BaseAppSdk"); | |
593 | -var AppSdk = /** @class */ (function () { | |
594 | - function AppSdk() { | |
619 | +var ObjectInstance_1 = require("../uitl/ObjectInstance"); | |
620 | +var EventCenter_1 = require("../event/EventCenter"); | |
621 | +var EventEnum_1 = require("../event/EventEnum"); | |
622 | +var PcSdk = /** @class */ (function () { | |
623 | + function PcSdk() { | |
595 | 624 | } |
596 | - Object.defineProperty(AppSdk, "I", { | |
625 | + PcSdk.prototype.init = function () { | |
626 | + this.getSystemInfo(); | |
627 | + }; | |
628 | + Object.defineProperty(PcSdk.prototype, "myBridge", { | |
597 | 629 | get: function () { |
598 | - if (!this._instance) { | |
599 | - var conchConfig = window['conchConfig']; | |
600 | - var os = conchConfig && conchConfig.getOS(); | |
601 | - switch (os) { | |
602 | - case "Conch-ios": | |
603 | - this._instance = new IosAppSdk_1.default; | |
604 | - break; | |
605 | - case "Conch-android": | |
606 | - this._instance = new AndroidAppSdk_1.default; | |
607 | - break; | |
608 | - default: | |
609 | - this._instance = new BaseAppSdk_1.default; | |
610 | - break; | |
611 | - } | |
612 | - window['AppSdk'] = this._instance; | |
630 | + if (MyBridge) { | |
631 | + return MyBridge; | |
613 | 632 | } |
614 | - return this._instance; | |
615 | 633 | }, |
616 | 634 | enumerable: true, |
617 | 635 | configurable: true |
618 | 636 | }); |
619 | - return AppSdk; | |
620 | -}()); | |
621 | -exports.AppSdk = AppSdk; | |
622 | - | |
623 | -},{"./AndroidAppSdk":8,"./BaseAppSdk":10,"./IosAppSdk":11}],10:[function(require,module,exports){ | |
624 | -"use strict"; | |
625 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
626 | -var AddGoldData_1 = require("./sdkData/AddGoldData"); | |
627 | -var MyCoinData_1 = require("./sdkData/MyCoinData"); | |
628 | -var GoldConfigData_1 = require("./sdkData/GoldConfigData"); | |
629 | -var BaseAppSdk = /** @class */ (function () { | |
630 | - function BaseAppSdk() { | |
631 | - this.netOnArr = []; | |
632 | - this.netOffArr = []; | |
633 | - } | |
634 | - BaseAppSdk.prototype.init = function () { | |
635 | - var conch = window['conch']; | |
636 | - if (conch) { | |
637 | - conch.setNetworkEvtFunction(this.networkEvtFunc.bind(this)); | |
638 | - } | |
639 | - this.callApp('setAppCallback', 1, 'AppSdk.onShow()'); | |
640 | - this.callApp('setAppCallback', 2, 'AppSdk.onHide()'); | |
641 | - this.getSystemInfo(); | |
637 | + /**获取基本版本信息以及手机的配置 */ | |
638 | + PcSdk.prototype.getSystemInfo = function (key) { | |
639 | + if (key === void 0) { key = 0; } | |
640 | + var _a; | |
641 | + var ret = this.myBridge.getSystemInfo(key); | |
642 | + var _b = JSON.parse(ret), w = _b.w, h = _b.h, versionName = _b.versionName, channel = _b.channel, pangolin = _b.pangolin, adnet = _b.adnet, level = _b.level; | |
643 | + _a = [w, h, versionName, channel, pangolin, adnet, level], this._width = _a[0], this._height = _a[1], this._version = _a[2], this._channel = _a[3], this.pangolinId = _a[4], this.adnetId = _a[5], this._level = _a[6]; | |
642 | 644 | }; |
643 | - BaseAppSdk.prototype.getSystemInfo = function () { | |
644 | - var _this = this; | |
645 | - this.callAppWithBack(function (ret) { | |
646 | - console.log('---------------getSystemInfo-------' + JSON.stringify(ret)); | |
647 | - var _a = JSON.parse(ret), w = _a.w, h = _a.h, versionName = _a.versionName, channel = _a.channel, pangolin = _a.pangolin, adnet = _a.adnet, level = _a.level; | |
648 | - _this._width = w; | |
649 | - _this._height = h; | |
650 | - _this._version = versionName; | |
651 | - _this._channel = channel; | |
652 | - _this.pangolinId = pangolin; | |
653 | - _this.adnetId = adnet; | |
654 | - _this._level = level; | |
655 | - }, 'getSystemInfo', 0); | |
656 | - }; | |
657 | - BaseAppSdk.prototype.onShow = function () { | |
658 | - // EventCenter.emit(EventEnum.APP_SHOW); | |
659 | - }; | |
660 | - BaseAppSdk.prototype.onHide = function () { | |
661 | - // EventCenter.emit(EventEnum.APP_HIDE); | |
662 | - }; | |
663 | - BaseAppSdk.prototype.vibrate = function () { | |
664 | - this.callApp('openSystemFun', 0); | |
665 | - }; | |
666 | - BaseAppSdk.prototype.hideSplash = function () { | |
667 | - this.callApp('hideSplash'); | |
645 | + PcSdk.prototype.initGameConfig = function () { | |
646 | + this._gameConfig = this.getGameConfig(); | |
647 | + }; | |
648 | + /** | |
649 | + * 震动 | |
650 | + * @param key 0 短震动 1 长震动 | |
651 | + */ | |
652 | + PcSdk.prototype.vibrate = function (key) { | |
653 | + if (key === void 0) { key = 0; } | |
654 | + this.myBridge.openSystemFun(key); | |
655 | + }; | |
656 | + /**隐藏启动屏 */ | |
657 | + PcSdk.prototype.hideSplash = function () { | |
658 | + this.myBridge.hideSplash(); | |
668 | 659 | }; |
669 | 660 | /**弹出提现 */ |
670 | - BaseAppSdk.prototype.withDrawal = function () { | |
671 | - this.callApp('withDrawal'); | |
661 | + PcSdk.prototype.withDrawal = function () { | |
662 | + this.myBridge.withDrawal(); | |
672 | 663 | }; |
673 | 664 | /**意见反馈 */ |
674 | - BaseAppSdk.prototype.feedback = function () { | |
675 | - this.callApp('feedback'); | |
665 | + PcSdk.prototype.feedback = function () { | |
666 | + this.myBridge.feedback(); | |
676 | 667 | }; |
677 | 668 | /** |
678 | 669 | * key 默认0 ,签到 1 |
679 | 670 | */ |
680 | - BaseAppSdk.prototype.personal = function (key) { | |
671 | + PcSdk.prototype.personal = function (key) { | |
681 | 672 | if (key === void 0) { key = 0; } |
682 | - this.callApp('personal', key); | |
673 | + this.myBridge.personal(key); | |
683 | 674 | }; |
684 | 675 | /**邀请好友*/ |
685 | - BaseAppSdk.prototype.invitation = function () { | |
686 | - this.callApp('invitation'); | |
687 | - }; | |
688 | - BaseAppSdk.prototype.currentShut = function (value) { | |
689 | - this.callApp('currentShut', value); | |
676 | + PcSdk.prototype.invitation = function () { | |
677 | + this.myBridge.invitation(); | |
690 | 678 | }; |
691 | 679 | /** |
692 | 680 | * 获取金币配表 |
693 | 681 | * @param key 1红包 2 摇一摇红包 |
694 | 682 | */ |
695 | - BaseAppSdk.prototype.getGameConfig = function (key) { | |
696 | - if (key === void 0) { key = 1; } | |
697 | - return __awaiter(this, void 0, void 0, function () { | |
698 | - var result; | |
699 | - return __generator(this, function (_a) { | |
700 | - switch (_a.label) { | |
701 | - case 0: return [4 /*yield*/, this.onCallBack('getGameConfig', key)]; | |
702 | - case 1: | |
703 | - result = _a.sent(); | |
704 | - GoldConfigData_1.GoldConfigData.I.initData(result); | |
705 | - return [2 /*return*/, result]; | |
706 | - } | |
707 | - }); | |
708 | - }); | |
683 | + PcSdk.prototype.getGameConfig = function () { | |
684 | + var result = this.myBridge.getGameConfig(); | |
685 | + // console.log('---------------getGameConfig-------' + JSON.stringify(result)) | |
686 | + return JSON.parse(result); | |
709 | 687 | }; |
710 | 688 | /** |
711 | 689 | * 要求发放金币 |
712 | 690 | * @param key 1红包 |
713 | 691 | */ |
714 | - BaseAppSdk.prototype.addGold = function (key) { | |
715 | - if (key === void 0) { key = 1; } | |
692 | + PcSdk.prototype.addGold = function (key) { | |
716 | 693 | return __awaiter(this, void 0, void 0, function () { |
717 | - var result; | |
694 | + var _this = this; | |
718 | 695 | return __generator(this, function (_a) { |
719 | - switch (_a.label) { | |
720 | - case 0: return [4 /*yield*/, this.onCallBack('addGold', key)]; | |
721 | - case 1: | |
722 | - result = _a.sent(); | |
723 | - AddGoldData_1.default.initData(result); | |
724 | - return [2 /*return*/, result]; | |
725 | - } | |
696 | + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
697 | + return __generator(this, function (_a) { | |
698 | + switch (_a.label) { | |
699 | + case 0: return [4 /*yield*/, this.myBridge.addGold(key, function (res) { | |
700 | + res = JSON.parse(res); | |
701 | + var code = res.code, data = res.data, msg = res.msg; | |
702 | + if ('0' === code || !code) { | |
703 | + resolve(data); | |
704 | + } | |
705 | + else { | |
706 | + reject(msg); | |
707 | + } | |
708 | + })]; | |
709 | + case 1: | |
710 | + _a.sent(); | |
711 | + return [2 /*return*/]; | |
712 | + } | |
713 | + }); | |
714 | + }); })]; | |
726 | 715 | }); |
727 | 716 | }); |
728 | 717 | }; |
729 | - BaseAppSdk.prototype.myCoin = function () { | |
718 | + /**获取总金币 */ | |
719 | + PcSdk.prototype.myCoin = function () { | |
730 | 720 | return __awaiter(this, void 0, void 0, function () { |
731 | - var result; | |
721 | + var _this = this; | |
732 | 722 | return __generator(this, function (_a) { |
733 | - switch (_a.label) { | |
734 | - case 0: return [4 /*yield*/, this.onCallBack('myCoin')]; | |
735 | - case 1: | |
736 | - result = _a.sent(); | |
737 | - MyCoinData_1.default.initData(result); | |
738 | - return [2 /*return*/, result]; | |
739 | - } | |
723 | + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
724 | + return __generator(this, function (_a) { | |
725 | + switch (_a.label) { | |
726 | + case 0: return [4 /*yield*/, this.myBridge.myCoin(function (res) { | |
727 | + res = JSON.parse(res); | |
728 | + var code = res.code, data = res.data, msg = res.msg; | |
729 | + if ('0' === code || !code) { | |
730 | + resolve(data['coin']); | |
731 | + } | |
732 | + else { | |
733 | + reject(msg); | |
734 | + } | |
735 | + })]; | |
736 | + case 1: | |
737 | + _a.sent(); | |
738 | + return [2 /*return*/]; | |
739 | + } | |
740 | + }); | |
741 | + }); })]; | |
740 | 742 | }); |
741 | 743 | }); |
742 | 744 | }; |
743 | 745 | /**获取当前提现的档位 */ |
744 | - BaseAppSdk.prototype.minWithDrawal = function () { | |
746 | + PcSdk.prototype.minWithDrawal = function () { | |
745 | 747 | return __awaiter(this, void 0, void 0, function () { |
746 | - var result; | |
748 | + var _this = this; | |
747 | 749 | return __generator(this, function (_a) { |
748 | - switch (_a.label) { | |
749 | - case 0: return [4 /*yield*/, this.onCallBack('minWithDrawal')]; | |
750 | - case 1: | |
751 | - result = _a.sent(); | |
752 | - if (!Boolean(parseInt(result.code + ''))) { | |
753 | - return [2 /*return*/, parseInt(result.data['money']) * 100]; | |
754 | - } | |
755 | - return [2 /*return*/, 0]; | |
756 | - } | |
750 | + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
751 | + return __generator(this, function (_a) { | |
752 | + switch (_a.label) { | |
753 | + case 0: return [4 /*yield*/, this.myBridge.minWithDrawal(function (res) { | |
754 | + res = JSON.parse(res); | |
755 | + var code = res.code, data = res.data, msg = res.msg; | |
756 | + if ('0' === code || !code) { | |
757 | + resolve(data['money']); | |
758 | + } | |
759 | + else { | |
760 | + reject(msg); | |
761 | + } | |
762 | + })]; | |
763 | + case 1: | |
764 | + _a.sent(); | |
765 | + return [2 /*return*/]; | |
766 | + } | |
767 | + }); | |
768 | + }); })]; | |
757 | 769 | }); |
758 | 770 | }); |
759 | 771 | }; |
760 | - BaseAppSdk.prototype.onCallBack = function (cmd) { | |
772 | + /**上报埋点 */ | |
773 | + PcSdk.prototype.appDotLog = function (key, value) { | |
774 | + this.myBridge.appDotLog(key, value); | |
775 | + }; | |
776 | + /**热云打点 */ | |
777 | + PcSdk.prototype.appDotTracKing = function (key) { | |
778 | + this.myBridge.appDotTracKing(key); | |
779 | + }; | |
780 | + PcSdk.prototype.setCallback = function (funName, pramas) { | |
761 | 781 | var _this = this; |
762 | - var params = []; | |
763 | - for (var _i = 1; _i < arguments.length; _i++) { | |
764 | - params[_i - 1] = arguments[_i]; | |
765 | - } | |
766 | - return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
767 | - return __generator(this, function (_a) { | |
768 | - switch (_a.label) { | |
769 | - case 0: return [4 /*yield*/, this.callAppWithBack.apply(this, [function (res) { | |
770 | - res = JSON.parse(res); | |
771 | - // res = { code: 1000 } | |
772 | - if (!res.code) { | |
773 | - resolve({ code: res.code, data: res.data }); | |
774 | - } | |
775 | - else { | |
776 | - resolve({ code: res.code }); | |
777 | - } | |
778 | - }, cmd].concat(params))]; | |
779 | - case 1: | |
780 | - _a.sent(); | |
781 | - return [2 /*return*/]; | |
782 | + console.log('---------------setCallback---- this.myBridge---' + JSON.stringify(this.myBridge)); | |
783 | + return new Promise(function (resolve, reject) { | |
784 | + _this.myBridge[funName](pramas, function (res) { | |
785 | + var _a = JSON.parse(res), code = _a.code, data = _a.data; | |
786 | + if ('0' === code) { | |
787 | + resolve(data); | |
788 | + } | |
789 | + else { | |
790 | + reject(0); | |
782 | 791 | } |
783 | 792 | }); |
784 | - }); }); | |
793 | + }); | |
785 | 794 | }; |
786 | - BaseAppSdk.prototype.callApp = function (cmd) { | |
787 | - var params = []; | |
788 | - for (var _i = 1; _i < arguments.length; _i++) { | |
789 | - params[_i - 1] = arguments[_i]; | |
790 | - } | |
795 | + PcSdk.prototype.closeAdverDialog = function () { | |
796 | + this.myBridge.closeAdverDialog(); | |
791 | 797 | }; |
792 | - BaseAppSdk.prototype.callAppWithBack = function (callBack, cmd) { | |
793 | - var params = []; | |
794 | - for (var _i = 2; _i < arguments.length; _i++) { | |
795 | - params[_i - 2] = arguments[_i]; | |
796 | - } | |
798 | + PcSdk.prototype.closeAdBanner = function () { | |
799 | + this.myBridge.closeAdBanner(); | |
797 | 800 | }; |
798 | - BaseAppSdk.prototype.networkEvtFunc = function (type) { | |
799 | - var funcArr; | |
800 | - if (type == 0) { | |
801 | - funcArr = this.netOffArr; | |
802 | - } | |
803 | - else if (type == 5) { | |
804 | - funcArr = this.netOnArr; | |
805 | - } | |
806 | - if (funcArr) { | |
807 | - for (var i = 0; i < funcArr.length; i++) { | |
808 | - funcArr[i](); | |
809 | - } | |
810 | - } | |
801 | + /**激励视频 */ | |
802 | + PcSdk.prototype.showRewardVideoAd = function (value, JBCallback) { | |
803 | + this.myBridge.showRewardVideoAd(value, JBCallback); | |
804 | + }; | |
805 | + /** 全屏广告*/ | |
806 | + PcSdk.prototype.loadFullScreenVideoAd = function (data, JBCallback) { | |
807 | + this.myBridge.showRewardVideoAd(data, JBCallback); | |
808 | + }; | |
809 | + /**信息流广告 */ | |
810 | + PcSdk.prototype.loadNativeExpressAd = function (data, JBCallback) { | |
811 | + this.myBridge.loadNativeExpressAd(data, JBCallback); | |
811 | 812 | }; |
812 | - BaseAppSdk.prototype.onNetOn = function (func) { | |
813 | - this.netOnArr.push(func); | |
813 | + /**banner */ | |
814 | + PcSdk.prototype.loadBannerExpressAd = function (data, JBCallback) { | |
815 | + this.myBridge.loadBannerExpressAd(data, JBCallback); | |
814 | 816 | }; |
815 | - BaseAppSdk.prototype.onNetOff = function (func) { | |
816 | - this.netOffArr.push(func); | |
817 | + /**插屏广告 */ | |
818 | + PcSdk.prototype.showInteractionExpressAd = function (data, JBCallback) { | |
819 | + this.myBridge.showInteractionExpressAd(data, JBCallback); | |
817 | 820 | }; |
818 | - Object.defineProperty(BaseAppSdk.prototype, "level", { | |
821 | + Object.defineProperty(PcSdk.prototype, "level", { | |
819 | 822 | get: function () { |
820 | 823 | return this._level; |
821 | 824 | }, |
822 | 825 | enumerable: true, |
823 | 826 | configurable: true |
824 | 827 | }); |
825 | - Object.defineProperty(BaseAppSdk.prototype, "width", { | |
828 | + Object.defineProperty(PcSdk.prototype, "width", { | |
826 | 829 | get: function () { |
827 | 830 | return this._width; |
828 | 831 | }, |
829 | 832 | enumerable: true, |
830 | 833 | configurable: true |
831 | 834 | }); |
832 | - Object.defineProperty(BaseAppSdk.prototype, "height", { | |
835 | + Object.defineProperty(PcSdk.prototype, "height", { | |
833 | 836 | get: function () { |
834 | 837 | return this._height; |
835 | 838 | }, |
836 | 839 | enumerable: true, |
837 | 840 | configurable: true |
838 | 841 | }); |
839 | - Object.defineProperty(BaseAppSdk.prototype, "version", { | |
842 | + Object.defineProperty(PcSdk.prototype, "version", { | |
840 | 843 | get: function () { |
841 | 844 | return this._version; |
842 | 845 | }, |
843 | 846 | enumerable: true, |
844 | 847 | configurable: true |
845 | 848 | }); |
846 | - Object.defineProperty(BaseAppSdk.prototype, "channel", { | |
849 | + Object.defineProperty(PcSdk.prototype, "channel", { | |
847 | 850 | get: function () { |
848 | 851 | return this._channel; |
849 | 852 | }, |
850 | 853 | enumerable: true, |
851 | 854 | configurable: true |
852 | 855 | }); |
853 | - Object.defineProperty(BaseAppSdk.prototype, "bridge", { | |
856 | + Object.defineProperty(PcSdk.prototype, "bridge", { | |
854 | 857 | get: function () { |
855 | 858 | return null; |
856 | 859 | }, |
857 | 860 | enumerable: true, |
858 | 861 | configurable: true |
859 | 862 | }); |
860 | - BaseAppSdk.prototype.createClass = function (name) { | |
861 | - return window['PlatformClass'].createClass(name); | |
862 | - }; | |
863 | - return BaseAppSdk; | |
864 | -}()); | |
865 | -exports.default = BaseAppSdk; | |
866 | - | |
867 | -},{"./sdkData/AddGoldData":18,"./sdkData/GoldConfigData":19,"./sdkData/MyCoinData":20}],11:[function(require,module,exports){ | |
868 | -"use strict"; | |
869 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
870 | -var BaseAppSdk_1 = require("./BaseAppSdk"); | |
871 | -var IosAppSdk = /** @class */ (function (_super) { | |
872 | - __extends(IosAppSdk, _super); | |
873 | - function IosAppSdk() { | |
874 | - return _super !== null && _super.apply(this, arguments) || this; | |
875 | - } | |
876 | - Object.defineProperty(IosAppSdk.prototype, "system", { | |
863 | + Object.defineProperty(PcSdk.prototype, "gameConfig", { | |
877 | 864 | get: function () { |
878 | - return 0; | |
865 | + return this._gameConfig; | |
879 | 866 | }, |
880 | 867 | enumerable: true, |
881 | 868 | configurable: true |
882 | 869 | }); |
883 | - IosAppSdk.prototype.callApp = function (cmd) { | |
884 | - var params = []; | |
885 | - for (var _i = 1; _i < arguments.length; _i++) { | |
886 | - params[_i - 1] = arguments[_i]; | |
887 | - } | |
888 | - var _a; | |
889 | - if (params.length) { | |
890 | - cmd += ':'; | |
891 | - } | |
892 | - this.bridge && (_a = this.bridge).call.apply(_a, [cmd].concat(params)); | |
893 | - // this.bridge && alert(JSON.stringify(this.bridge)); | |
894 | - }; | |
895 | - IosAppSdk.prototype.callAppWithBack = function (callBack, cmd) { | |
896 | - var params = []; | |
897 | - for (var _i = 2; _i < arguments.length; _i++) { | |
898 | - params[_i - 2] = arguments[_i]; | |
899 | - } | |
900 | - var _a; | |
901 | - if (params.length) { | |
902 | - cmd += ':'; | |
903 | - } | |
904 | - this.bridge && (_a = this.bridge).callWithBack.apply(_a, [callBack, cmd].concat(params)); | |
905 | - }; | |
906 | - Object.defineProperty(IosAppSdk.prototype, "bridge", { | |
870 | + Object.defineProperty(PcSdk, "I", { | |
907 | 871 | get: function () { |
908 | - return this._bridge || (this._bridge = this.createClass('JSBridge')); | |
872 | + return ObjectInstance_1.default.get(PcSdk); | |
909 | 873 | }, |
910 | 874 | enumerable: true, |
911 | 875 | configurable: true |
912 | 876 | }); |
913 | - return IosAppSdk; | |
914 | -}(BaseAppSdk_1.default)); | |
915 | -exports.default = IosAppSdk; | |
916 | - | |
917 | -},{"./BaseAppSdk":10}],12:[function(require,module,exports){ | |
918 | -"use strict"; | |
919 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
920 | -var AdManager_1 = require("./AdManager"); | |
921 | -var NativeAd = /** @class */ (function (_super) { | |
922 | - __extends(NativeAd, _super); | |
923 | - function NativeAd() { | |
924 | - return _super !== null && _super.apply(this, arguments) || this; | |
925 | - } | |
926 | - NativeAd.prototype.onEnable = function () { | |
927 | - var globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true); | |
928 | - AdManager_1.default.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height); | |
877 | + return PcSdk; | |
878 | +}()); | |
879 | +exports.default = PcSdk; | |
880 | +// //这里是浏览器环境下, 接收web传过来的消息 | |
881 | +window.onMyBridgeReady = function () { | |
882 | + console.log("onMyBridgeReady load finish, cost:" + (new Date().getTime()) + "ms"); | |
883 | + MyBridge.App.onResume = function () { | |
884 | + var ret = []; | |
885 | + for (var _i = 0; _i < arguments.length; _i++) { | |
886 | + ret[_i] = arguments[_i]; | |
887 | + } | |
888 | + console.log(' laya onResume', ret); | |
889 | + EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.APP_SHOW); | |
929 | 890 | }; |
930 | - NativeAd.prototype.onDisable = function () { | |
931 | - AdManager_1.default.I.hideNativeAd(); | |
891 | + MyBridge.App.onPause = function () { | |
892 | + var ret = []; | |
893 | + for (var _i = 0; _i < arguments.length; _i++) { | |
894 | + ret[_i] = arguments[_i]; | |
895 | + } | |
896 | + console.log(' laya onPause', ret); | |
897 | + EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.APP_HIDE); | |
932 | 898 | }; |
933 | - Object.defineProperty(NativeAd.prototype, "item", { | |
934 | - get: function () { | |
935 | - return this.owner; | |
936 | - }, | |
937 | - enumerable: true, | |
938 | - configurable: true | |
939 | - }); | |
940 | - return NativeAd; | |
941 | -}(Laya.Script)); | |
942 | -exports.default = NativeAd; | |
899 | +}; | |
943 | 900 | |
944 | -},{"./AdManager":7}],13:[function(require,module,exports){ | |
901 | +},{"../event/EventCenter":5,"../event/EventEnum":6,"../uitl/ObjectInstance":18}],10:[function(require,module,exports){ | |
945 | 902 | "use strict"; |
946 | 903 | Object.defineProperty(exports, "__esModule", { value: true }); |
947 | -var AppSdk_1 = require("./AppSdk"); | |
948 | 904 | var ObjectInstance_1 = require("../uitl/ObjectInstance"); |
905 | +var PcSdk_1 = require("./PcSdk"); | |
949 | 906 | var TTAdSdk = /** @class */ (function () { |
950 | 907 | function TTAdSdk() { |
951 | 908 | } |
909 | + /** | |
910 | + * | |
911 | + * @param preload 0 直接加载;1 预加载 | |
912 | + */ | |
952 | 913 | TTAdSdk.prototype.showRewardVideoAd = function (preload) { |
953 | 914 | if (preload === void 0) { preload = 0; } |
954 | 915 | return __awaiter(this, void 0, void 0, function () { |
955 | 916 | var data; |
956 | 917 | return __generator(this, function (_a) { |
957 | 918 | data = { |
958 | - w: AppSdk_1.AppSdk.I.width, | |
959 | - h: AppSdk_1.AppSdk.I.height, | |
919 | + type: 1, | |
960 | 920 | preloading: preload, |
961 | 921 | }; |
962 | 922 | return [2 /*return*/, new Promise(function (resolve, reject) { |
963 | 923 | var isComplete = false; |
964 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
924 | + PcSdk_1.default.I.showRewardVideoAd(data, function (ret) { | |
965 | 925 | var _a = JSON.parse(ret), code = _a.code, message = _a.message; |
966 | 926 | switch (code) { |
967 | 927 | case -1: |
968 | 928 | reject('error'); |
969 | 929 | /**'暂无视频广告!每日0点重置'*/ ; |
970 | 930 | break; |
971 | - case 200: | |
931 | + case 102: | |
972 | 932 | isComplete = true; |
973 | 933 | break; |
974 | - case 100: | |
975 | - break; | |
976 | - case 0: | |
934 | + case 101: | |
977 | 935 | if (isComplete) { |
978 | 936 | resolve(); |
979 | 937 | } |
... | ... | @@ -982,7 +940,7 @@ var TTAdSdk = /** @class */ (function () { |
982 | 940 | } |
983 | 941 | break; |
984 | 942 | } |
985 | - }, 'showRewardVideoAd', 1, JSON.stringify(data)); | |
943 | + }); | |
986 | 944 | })]; |
987 | 945 | }); |
988 | 946 | }); |
... | ... | @@ -993,50 +951,66 @@ var TTAdSdk = /** @class */ (function () { |
993 | 951 | var data; |
994 | 952 | return __generator(this, function (_a) { |
995 | 953 | data = { |
954 | + w: PcSdk_1.default.I.width, | |
955 | + h: PcSdk_1.default.I.width * 90 / 600, | |
996 | 956 | preloading: preload, |
957 | + type: 1 | |
997 | 958 | }; |
998 | 959 | return [2 /*return*/, new Promise(function (resolve, reject) { |
999 | - var isComplete = false; | |
1000 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
1001 | - }, 'loadFullScreenVideoAd', 1, JSON.stringify(data)); | |
960 | + PcSdk_1.default.I.loadFullScreenVideoAd(JSON.stringify(data), function (res) { | |
961 | + resolve(res); | |
962 | + }); | |
1002 | 963 | })]; |
1003 | 964 | }); |
1004 | 965 | }); |
1005 | 966 | }; |
1006 | - TTAdSdk.prototype.loadNativeExpressAd = function (x, y, width, height) { | |
967 | + TTAdSdk.prototype.loadNativeExpressAd = function (x, y, width, height, type, preload) { | |
968 | + if (type === void 0) { type = 1; } | |
969 | + if (preload === void 0) { preload = 0; } | |
1007 | 970 | return __awaiter(this, void 0, void 0, function () { |
1008 | 971 | var scaleX, scaleY, data; |
1009 | 972 | return __generator(this, function (_a) { |
1010 | - scaleX = AppSdk_1.AppSdk.I.width / Laya.stage.width; | |
1011 | - scaleY = AppSdk_1.AppSdk.I.height / Laya.stage.height; | |
973 | + scaleX = PcSdk_1.default.I.width / Laya.stage.width; | |
974 | + scaleY = PcSdk_1.default.I.height / Laya.stage.height; | |
1012 | 975 | data = { |
976 | + type: type, | |
977 | + preloading: preload, | |
1013 | 978 | w: width * scaleX, |
1014 | 979 | h: height * scaleY, |
1015 | 980 | left: x * scaleX, |
1016 | 981 | top: y * scaleY |
1017 | 982 | }; |
1018 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
1019 | - }, 'loadNativeExpressAd', JSON.stringify(data)); | |
983 | + PcSdk_1.default.I.loadNativeExpressAd(JSON.stringify(data), function (res) { | |
984 | + return Promise.resolve(res); | |
985 | + }); | |
1020 | 986 | return [2 /*return*/]; |
1021 | 987 | }); |
1022 | 988 | }); |
1023 | 989 | }; |
1024 | - TTAdSdk.prototype.loadBannerExpressAd = function () { | |
990 | + TTAdSdk.prototype.loadBannerExpressAd = function (preload) { | |
991 | + if (preload === void 0) { preload = 0; } | |
1025 | 992 | return __awaiter(this, void 0, void 0, function () { |
1026 | 993 | var data; |
1027 | 994 | return __generator(this, function (_a) { |
1028 | 995 | data = { |
1029 | - w: AppSdk_1.AppSdk.I.width, | |
1030 | - h: AppSdk_1.AppSdk.I.width * 90 / 600, | |
996 | + w: PcSdk_1.default.I.width, | |
997 | + h: PcSdk_1.default.I.width * 90 / 600, | |
998 | + preloading: preload, | |
999 | + type: 1 | |
1031 | 1000 | }; |
1032 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
1033 | - }, 'loadBannerExpressAd', 2, JSON.stringify(data)); | |
1034 | - return [2 /*return*/]; | |
1001 | + return [2 /*return*/, new Promise(function (resolve, reject) { | |
1002 | + PcSdk_1.default.I.loadBannerExpressAd(JSON.stringify(data), function (res) { | |
1003 | + resolve(res); | |
1004 | + }); | |
1005 | + })]; | |
1035 | 1006 | }); |
1036 | 1007 | }); |
1037 | 1008 | }; |
1038 | - TTAdSdk.prototype.hideAd = function () { | |
1039 | - AppSdk_1.AppSdk.I.callApp('close_adver_dialog'); | |
1009 | + TTAdSdk.prototype.closeAdverDialog = function () { | |
1010 | + PcSdk_1.default.I.closeAdverDialog(); | |
1011 | + }; | |
1012 | + TTAdSdk.prototype.closeAdBanner = function () { | |
1013 | + PcSdk_1.default.I.closeAdBanner(); | |
1040 | 1014 | }; |
1041 | 1015 | TTAdSdk.prototype.showInteractionExpressAd = function (preload) { |
1042 | 1016 | if (preload === void 0) { preload = 0; } |
... | ... | @@ -1044,14 +1018,15 @@ var TTAdSdk = /** @class */ (function () { |
1044 | 1018 | var data; |
1045 | 1019 | return __generator(this, function (_a) { |
1046 | 1020 | data = { |
1047 | - w: AppSdk_1.AppSdk.I.width * 0.8, | |
1048 | - h: AppSdk_1.AppSdk.I.height, | |
1021 | + w: PcSdk_1.default.I.width * 0.8, | |
1022 | + h: PcSdk_1.default.I.height, | |
1049 | 1023 | preloading: preload, |
1050 | 1024 | }; |
1051 | 1025 | return [2 /*return*/, new Promise(function (resolve, reject) { |
1052 | 1026 | var isComplete = false; |
1053 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
1054 | - }, 'showInteractionExpressAd', JSON.stringify(data)); | |
1027 | + PcSdk_1.default.I.showInteractionExpressAd(JSON.stringify(data), function (res) { | |
1028 | + resolve(res); | |
1029 | + }); | |
1055 | 1030 | })]; |
1056 | 1031 | }); |
1057 | 1032 | }); |
... | ... | @@ -1067,11 +1042,11 @@ var TTAdSdk = /** @class */ (function () { |
1067 | 1042 | }()); |
1068 | 1043 | exports.default = TTAdSdk; |
1069 | 1044 | |
1070 | -},{"../uitl/ObjectInstance":24,"./AppSdk":9}],14:[function(require,module,exports){ | |
1045 | +},{"../uitl/ObjectInstance":18,"./PcSdk":9}],11:[function(require,module,exports){ | |
1071 | 1046 | "use strict"; |
1072 | 1047 | Object.defineProperty(exports, "__esModule", { value: true }); |
1073 | -var AppSdk_1 = require("./AppSdk"); | |
1074 | 1048 | var ObjectInstance_1 = require("../uitl/ObjectInstance"); |
1049 | +var PcSdk_1 = require("./PcSdk"); | |
1075 | 1050 | /** |
1076 | 1051 | * 上报热云埋点⽇志 |
1077 | 1052 | * 具体的打点需要跟运营联系 |
... | ... | @@ -1080,7 +1055,7 @@ var TrackingSdk = /** @class */ (function () { |
1080 | 1055 | function TrackingSdk() { |
1081 | 1056 | } |
1082 | 1057 | TrackingSdk.prototype.dot = function (key) { |
1083 | - AppSdk_1.AppSdk.I.callApp('tracking_event', key); | |
1058 | + PcSdk_1.default.I.appDotTracKing(key); | |
1084 | 1059 | }; |
1085 | 1060 | Object.defineProperty(TrackingSdk, "I", { |
1086 | 1061 | get: function () { |
... | ... | @@ -1098,7 +1073,7 @@ var TrackingKey; |
1098 | 1073 | TrackingKey["RedPack5"] = "event_6"; |
1099 | 1074 | })(TrackingKey = exports.TrackingKey || (exports.TrackingKey = {})); |
1100 | 1075 | |
1101 | -},{"../uitl/ObjectInstance":24,"./AppSdk":9}],15:[function(require,module,exports){ | |
1076 | +},{"../uitl/ObjectInstance":18,"./PcSdk":9}],12:[function(require,module,exports){ | |
1102 | 1077 | "use strict"; |
1103 | 1078 | Object.defineProperty(exports, "__esModule", { value: true }); |
1104 | 1079 | var ArrayUtils_1 = require("../../uitl/ArrayUtils"); |
... | ... | @@ -1184,21 +1159,18 @@ var BaseModel = /** @class */ (function () { |
1184 | 1159 | }()); |
1185 | 1160 | exports.default = BaseModel; |
1186 | 1161 | |
1187 | -},{"../../uitl/ArrayUtils":22}],16:[function(require,module,exports){ | |
1162 | +},{"../../uitl/ArrayUtils":16}],13:[function(require,module,exports){ | |
1188 | 1163 | "use strict"; |
1189 | 1164 | Object.defineProperty(exports, "__esModule", { value: true }); |
1190 | 1165 | var BaseModel_1 = require("./BaseModel"); |
1191 | 1166 | var AdManager_1 = require("../../sdk/AdManager"); |
1192 | 1167 | var TrackingSdk_1 = require("../../sdk/TrackingSdk"); |
1193 | -var GoldConfigData_1 = require("../../sdk/sdkData/GoldConfigData"); | |
1194 | -var AddGoldData_1 = require("../../sdk/sdkData/AddGoldData"); | |
1195 | -var MyCoinData_1 = require("../../sdk/sdkData/MyCoinData"); | |
1196 | -var AppSdk_1 = require("../../sdk/AppSdk"); | |
1197 | 1168 | var DateUtils_1 = require("../../uitl/DateUtils"); |
1198 | 1169 | var Util_1 = require("../../uitl/Util"); |
1199 | 1170 | var ObjectInstance_1 = require("../../uitl/ObjectInstance"); |
1200 | 1171 | var EventCenter_1 = require("../../event/EventCenter"); |
1201 | 1172 | var EventEnum_1 = require("../../event/EventEnum"); |
1173 | +var PcSdk_1 = require("../PcSdk"); | |
1202 | 1174 | var RedpacketModel = /** @class */ (function (_super) { |
1203 | 1175 | __extends(RedpacketModel, _super); |
1204 | 1176 | function RedpacketModel() { |
... | ... | @@ -1217,7 +1189,7 @@ var RedpacketModel = /** @class */ (function (_super) { |
1217 | 1189 | var _this = this; |
1218 | 1190 | return __generator(this, function (_a) { |
1219 | 1191 | switch (_a.label) { |
1220 | - case 0: return [4 /*yield*/, GoldConfigData_1.GoldConfigData.I.getGoldConfig()]; | |
1192 | + case 0: return [4 /*yield*/, this.getRedConfig()]; | |
1221 | 1193 | case 1: |
1222 | 1194 | arr = _a.sent(); |
1223 | 1195 | console.log('---------------RedpacketModel-------' + JSON.stringify(arr)); |
... | ... | @@ -1255,6 +1227,47 @@ var RedpacketModel = /** @class */ (function (_super) { |
1255 | 1227 | data.list = []; |
1256 | 1228 | return data; |
1257 | 1229 | }; |
1230 | + RedpacketModel.prototype.getRedConfig = function () { | |
1231 | + return __awaiter(this, void 0, void 0, function () { | |
1232 | + var result, configJson; | |
1233 | + return __generator(this, function (_a) { | |
1234 | + switch (_a.label) { | |
1235 | + case 0: | |
1236 | + result = PcSdk_1.default.I.gameConfig; | |
1237 | + console.log('--------------- 获取配置静态表-----' + JSON.stringify(result)); | |
1238 | + if (!result) return [3 /*break*/, 2]; | |
1239 | + return [4 /*yield*/, this.loadGoldCfg(result['coin_config'][0])]; | |
1240 | + case 1: | |
1241 | + configJson = _a.sent(); | |
1242 | + console.log('-------------- 获取红包静态表-----' + JSON.stringify(result)); | |
1243 | + return [2 /*return*/, configJson]; | |
1244 | + case 2: | |
1245 | + PcSdk_1.default.I.initGameConfig(); | |
1246 | + _a.label = 3; | |
1247 | + case 3: return [2 /*return*/]; | |
1248 | + } | |
1249 | + }); | |
1250 | + }); | |
1251 | + }; | |
1252 | + RedpacketModel.prototype.loadGoldCfg = function (res) { | |
1253 | + return __awaiter(this, void 0, void 0, function () { | |
1254 | + var configJson; | |
1255 | + return __generator(this, function (_a) { | |
1256 | + switch (_a.label) { | |
1257 | + case 0: return [4 /*yield*/, this.load(res)]; | |
1258 | + case 1: | |
1259 | + configJson = _a.sent(); | |
1260 | + return [2 /*return*/, configJson]; | |
1261 | + } | |
1262 | + }); | |
1263 | + }); | |
1264 | + }; | |
1265 | + RedpacketModel.prototype.load = function (res, onProgress) { | |
1266 | + var _this = this; | |
1267 | + return new Promise(function (suc, fail) { | |
1268 | + Laya.loader.load(res, Laya.Handler.create(_this, suc), onProgress); | |
1269 | + }); | |
1270 | + }; | |
1258 | 1271 | RedpacketModel.prototype.checkRedpacket = function () { |
1259 | 1272 | return __awaiter(this, void 0, void 0, function () { |
1260 | 1273 | var cnt, data, ran2, cash; |
... | ... | @@ -1284,6 +1297,7 @@ var RedpacketModel = /** @class */ (function (_super) { |
1284 | 1297 | case 1: |
1285 | 1298 | //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */ |
1286 | 1299 | _a.sent(); |
1300 | + console.log('--------------- 触发了红包-----'); | |
1287 | 1301 | this.getRepacket(); |
1288 | 1302 | /**更新基本显示 */ |
1289 | 1303 | EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.UPDATE_COIN); |
... | ... | @@ -1331,7 +1345,7 @@ var RedpacketModel = /** @class */ (function (_super) { |
1331 | 1345 | var totalCoin; |
1332 | 1346 | return __generator(this, function (_a) { |
1333 | 1347 | switch (_a.label) { |
1334 | - case 0: return [4 /*yield*/, MyCoinData_1.default.getCoin()]; | |
1348 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.myCoin()]; | |
1335 | 1349 | case 1: |
1336 | 1350 | totalCoin = _a.sent(); |
1337 | 1351 | return [2 /*return*/, totalCoin]; |
... | ... | @@ -1346,10 +1360,10 @@ var RedpacketModel = /** @class */ (function (_super) { |
1346 | 1360 | var coinData; |
1347 | 1361 | return __generator(this, function (_a) { |
1348 | 1362 | switch (_a.label) { |
1349 | - case 0: return [4 /*yield*/, AddGoldData_1.default.addCoin(key)]; | |
1363 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.addGold(key)]; | |
1350 | 1364 | case 1: |
1351 | 1365 | coinData = _a.sent(); |
1352 | - return [2 /*return*/, coinData]; | |
1366 | + return [2 /*return*/, coinData['coin']]; | |
1353 | 1367 | } |
1354 | 1368 | }); |
1355 | 1369 | }); |
... | ... | @@ -1360,7 +1374,7 @@ var RedpacketModel = /** @class */ (function (_super) { |
1360 | 1374 | var minCoin; |
1361 | 1375 | return __generator(this, function (_a) { |
1362 | 1376 | switch (_a.label) { |
1363 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.minWithDrawal()]; | |
1377 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()]; | |
1364 | 1378 | case 1: |
1365 | 1379 | minCoin = _a.sent(); |
1366 | 1380 | return [2 /*return*/, minCoin]; |
... | ... | @@ -1389,14 +1403,14 @@ var RedpacketConfigData = /** @class */ (function () { |
1389 | 1403 | return RedpacketConfigData; |
1390 | 1404 | }()); |
1391 | 1405 | |
1392 | -},{"../../event/EventCenter":5,"../../event/EventEnum":6,"../../sdk/AdManager":7,"../../sdk/AppSdk":9,"../../sdk/TrackingSdk":14,"../../sdk/sdkData/AddGoldData":18,"../../sdk/sdkData/GoldConfigData":19,"../../sdk/sdkData/MyCoinData":20,"../../uitl/DateUtils":23,"../../uitl/ObjectInstance":24,"../../uitl/Util":27,"./BaseModel":15}],17:[function(require,module,exports){ | |
1406 | +},{"../../event/EventCenter":5,"../../event/EventEnum":6,"../../sdk/AdManager":7,"../../sdk/TrackingSdk":11,"../../uitl/DateUtils":17,"../../uitl/ObjectInstance":18,"../../uitl/Util":21,"../PcSdk":9,"./BaseModel":12}],14:[function(require,module,exports){ | |
1393 | 1407 | "use strict"; |
1394 | 1408 | Object.defineProperty(exports, "__esModule", { value: true }); |
1395 | 1409 | var BaseModel_1 = require("./BaseModel"); |
1396 | -var AppSdk_1 = require("../../sdk/AppSdk"); | |
1397 | 1410 | var DateUtils_1 = require("../../uitl/DateUtils"); |
1398 | 1411 | var Util_1 = require("../../uitl/Util"); |
1399 | 1412 | var ObjectInstance_1 = require("../../uitl/ObjectInstance"); |
1413 | +var PcSdk_1 = require("../PcSdk"); | |
1400 | 1414 | /** |
1401 | 1415 | * |
1402 | 1416 | */ |
... | ... | @@ -1415,123 +1429,18 @@ var ShakeModel = /** @class */ (function (_super) { |
1415 | 1429 | _this.cur_shake_day_limit = 0; |
1416 | 1430 | return _this; |
1417 | 1431 | } |
1418 | - /** | |
1419 | - * red_day_limit 红包每日极限产出 | |
1420 | - * shake_day_limit 摇一摇每日极限产出 | |
1421 | - * interstitial_cnt 插屏计数(每出现x次通用获得物品界面后,出现插屏) | |
1422 | - * interstitial_delay 插屏出现延时(毫秒) | |
1423 | - */ | |
1424 | - /** | |
1425 | - * // let result = { | |
1426 | - // data: { | |
1427 | - // gameConfig: { | |
1428 | - // "config": { | |
1429 | - // "red_day_limit": 10, | |
1430 | - // "shake_day_limit": 50, | |
1431 | - // "interstitial_cnt": 2, | |
1432 | - // "interstitial_delay": 500 | |
1433 | - // }, | |
1434 | - // "shake": [ | |
1435 | - // { | |
1436 | - // "id": 1, | |
1437 | - // "type": 1, | |
1438 | - // "weight": 1000, | |
1439 | - // "num": 0 | |
1440 | - // }, | |
1441 | - // { | |
1442 | - // "id": 2, | |
1443 | - // "type": 2, | |
1444 | - // "weight": 400, | |
1445 | - // "num": 0 | |
1446 | - // }, | |
1447 | - // { | |
1448 | - // "id": 3, | |
1449 | - // "type": 3, | |
1450 | - // "weight": 300, | |
1451 | - // "num": 1 | |
1452 | - // }, | |
1453 | - // { | |
1454 | - // "id": 4, | |
1455 | - // "type": 3, | |
1456 | - // "weight": 100, | |
1457 | - // "num": 2 | |
1458 | - // }, | |
1459 | - // { | |
1460 | - // "id": 5, | |
1461 | - // "type": 4, | |
1462 | - // "weight": 300, | |
1463 | - // "num": 1 | |
1464 | - // }, | |
1465 | - // { | |
1466 | - // "id": 6, | |
1467 | - // "type": 4, | |
1468 | - // "weight": 100, | |
1469 | - // "num": 2 | |
1470 | - // }, | |
1471 | - // { | |
1472 | - // "id": 7, | |
1473 | - // "type": 5, | |
1474 | - // "weight": 300, | |
1475 | - // "num": 1 | |
1476 | - // }, | |
1477 | - // { | |
1478 | - // "id": 8, | |
1479 | - // "type": 5, | |
1480 | - // "weight": 100, | |
1481 | - // "num": 2 | |
1482 | - // }, | |
1483 | - // { | |
1484 | - // "id": 9, | |
1485 | - // "type": 6, | |
1486 | - // "weight": 300, | |
1487 | - // "num": 1 | |
1488 | - // }, | |
1489 | - // { | |
1490 | - // "id": 10, | |
1491 | - // "type": 6, | |
1492 | - // "weight": 100, | |
1493 | - // "num": 2 | |
1494 | - // }, | |
1495 | - // { | |
1496 | - // "id": 11, | |
1497 | - // "type": 7, | |
1498 | - // "weight": 300, | |
1499 | - // "num": 1 | |
1500 | - // }, | |
1501 | - // { | |
1502 | - // "id": 12, | |
1503 | - // "type": 7, | |
1504 | - // "weight": 100, | |
1505 | - // "num": 2 | |
1506 | - // }, | |
1507 | - // { | |
1508 | - // "id": 13, | |
1509 | - // "type": 8, | |
1510 | - // "weight": 500, | |
1511 | - // "num": 0 | |
1512 | - // } | |
1513 | - // ], | |
1514 | - // 'coin_config': [] | |
1515 | - // } | |
1516 | - // } | |
1517 | - // } | |
1518 | - */ | |
1519 | 1432 | ShakeModel.prototype.init = function () { |
1520 | 1433 | return __awaiter(this, void 0, void 0, function () { |
1521 | - var result, data, gameData; | |
1434 | + var result, gameData; | |
1522 | 1435 | return __generator(this, function (_a) { |
1523 | - switch (_a.label) { | |
1524 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.getGameConfig()]; | |
1525 | - case 1: | |
1526 | - result = _a.sent(); | |
1527 | - console.log('---------------ShakeModel-------' + JSON.stringify(result.data)); | |
1528 | - data = result.data; | |
1529 | - if (data['gameConfig']) { | |
1530 | - gameData = data['gameConfig']; | |
1531 | - this.update(this.initData(gameData)); | |
1532 | - } | |
1533 | - return [2 /*return*/]; | |
1436 | + result = PcSdk_1.default.I.gameConfig; | |
1437 | + ; | |
1438 | + console.log('---------------ShakeModel-- 获取摇一摇静态表-----' + JSON.stringify(result)); | |
1439 | + if (result['config']) { | |
1440 | + gameData = result['config']; | |
1441 | + this.update(this.initData(gameData)); | |
1534 | 1442 | } |
1443 | + return [2 /*return*/]; | |
1535 | 1444 | }); |
1536 | 1445 | }); |
1537 | 1446 | }; |
... | ... | @@ -1626,148 +1535,7 @@ var ShakeData = /** @class */ (function () { |
1626 | 1535 | return ShakeData; |
1627 | 1536 | }()); |
1628 | 1537 | |
1629 | -},{"../../sdk/AppSdk":9,"../../uitl/DateUtils":23,"../../uitl/ObjectInstance":24,"../../uitl/Util":27,"./BaseModel":15}],18:[function(require,module,exports){ | |
1630 | -"use strict"; | |
1631 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
1632 | -var AppSdk_1 = require("../AppSdk"); | |
1633 | -var AddGoldData = /** @class */ (function () { | |
1634 | - function AddGoldData() { | |
1635 | - } | |
1636 | - AddGoldData.initData = function (data) { | |
1637 | - if (!parseInt(data.code)) { | |
1638 | - AddGoldData.coin = data.data.coin; | |
1639 | - AddGoldData.mycoin = data.data.mycoin; | |
1640 | - } | |
1641 | - }; | |
1642 | - AddGoldData.addCoin = function (key) { | |
1643 | - if (key === void 0) { key = 1; } | |
1644 | - return __awaiter(this, void 0, void 0, function () { | |
1645 | - var result; | |
1646 | - return __generator(this, function (_a) { | |
1647 | - switch (_a.label) { | |
1648 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.addGold(key)]; | |
1649 | - case 1: | |
1650 | - result = _a.sent(); | |
1651 | - return [2 /*return*/, [parseInt(this.coin), parseInt(this.mycoin)]]; | |
1652 | - } | |
1653 | - }); | |
1654 | - }); | |
1655 | - }; | |
1656 | - AddGoldData.coin = '0'; | |
1657 | - AddGoldData.mycoin = '0'; | |
1658 | - return AddGoldData; | |
1659 | -}()); | |
1660 | -exports.default = AddGoldData; | |
1661 | - | |
1662 | -},{"../AppSdk":9}],19:[function(require,module,exports){ | |
1663 | -"use strict"; | |
1664 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
1665 | -var AppSdk_1 = require("../AppSdk"); | |
1666 | -var Util_1 = require("../../uitl/Util"); | |
1667 | -var GoldConfigData = /** @class */ (function () { | |
1668 | - function GoldConfigData() { | |
1669 | - this.coin_config = ''; | |
1670 | - this.code = -3; | |
1671 | - } | |
1672 | - Object.defineProperty(GoldConfigData, "I", { | |
1673 | - get: function () { | |
1674 | - if (!this.instance) | |
1675 | - this.instance = new GoldConfigData(); | |
1676 | - return this.instance; | |
1677 | - }, | |
1678 | - enumerable: true, | |
1679 | - configurable: true | |
1680 | - }); | |
1681 | - GoldConfigData.prototype.initData = function (data) { | |
1682 | - this.code = data.code; | |
1683 | - if (!data.code) { | |
1684 | - data = data.data; | |
1685 | - for (var key in data) { | |
1686 | - if (data.hasOwnProperty(key)) { | |
1687 | - var ele = data[key]; | |
1688 | - this[key] = ele; | |
1689 | - } | |
1690 | - } | |
1691 | - } | |
1692 | - }; | |
1693 | - GoldConfigData.prototype.getGoldConfig = function () { | |
1694 | - return __awaiter(this, void 0, void 0, function () { | |
1695 | - var _this = this; | |
1696 | - return __generator(this, function (_a) { | |
1697 | - return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
1698 | - var result, data, gameData, configJson; | |
1699 | - return __generator(this, function (_a) { | |
1700 | - switch (_a.label) { | |
1701 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.getGameConfig()]; | |
1702 | - case 1: | |
1703 | - result = _a.sent(); | |
1704 | - data = result.data; | |
1705 | - if (!data['gameConfig']) return [3 /*break*/, 3]; | |
1706 | - gameData = data['gameConfig']; | |
1707 | - return [4 /*yield*/, this.loadGoldCfg(gameData['coin_config'][0])]; | |
1708 | - case 2: | |
1709 | - configJson = _a.sent(); | |
1710 | - resolve(configJson); | |
1711 | - _a.label = 3; | |
1712 | - case 3: return [2 /*return*/]; | |
1713 | - } | |
1714 | - }); | |
1715 | - }); })]; | |
1716 | - }); | |
1717 | - }); | |
1718 | - }; | |
1719 | - GoldConfigData.prototype.loadGoldCfg = function (res) { | |
1720 | - return __awaiter(this, void 0, void 0, function () { | |
1721 | - var configJson; | |
1722 | - return __generator(this, function (_a) { | |
1723 | - switch (_a.label) { | |
1724 | - case 0: return [4 /*yield*/, Util_1.default.I.load(res)]; | |
1725 | - case 1: | |
1726 | - configJson = _a.sent(); | |
1727 | - return [2 /*return*/, configJson]; | |
1728 | - } | |
1729 | - }); | |
1730 | - }); | |
1731 | - }; | |
1732 | - GoldConfigData.instance = null; | |
1733 | - return GoldConfigData; | |
1734 | -}()); | |
1735 | -exports.GoldConfigData = GoldConfigData; | |
1736 | - | |
1737 | -},{"../../uitl/Util":27,"../AppSdk":9}],20:[function(require,module,exports){ | |
1738 | -"use strict"; | |
1739 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
1740 | -var AppSdk_1 = require("../AppSdk"); | |
1741 | -var MyCoinData = /** @class */ (function () { | |
1742 | - function MyCoinData() { | |
1743 | - } | |
1744 | - MyCoinData.initData = function (data) { | |
1745 | - if (!parseInt(data.code)) { | |
1746 | - this.coin = data.data.coin; | |
1747 | - } | |
1748 | - else { | |
1749 | - this.coin = '0'; | |
1750 | - } | |
1751 | - }; | |
1752 | - MyCoinData.getCoin = function () { | |
1753 | - return __awaiter(this, void 0, void 0, function () { | |
1754 | - var result; | |
1755 | - return __generator(this, function (_a) { | |
1756 | - switch (_a.label) { | |
1757 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.myCoin()]; | |
1758 | - case 1: | |
1759 | - result = _a.sent(); | |
1760 | - return [2 /*return*/, parseInt(this.coin)]; | |
1761 | - } | |
1762 | - }); | |
1763 | - }); | |
1764 | - }; | |
1765 | - MyCoinData.coin = ''; | |
1766 | - return MyCoinData; | |
1767 | -}()); | |
1768 | -exports.default = MyCoinData; | |
1769 | - | |
1770 | -},{"../AppSdk":9}],21:[function(require,module,exports){ | |
1538 | +},{"../../uitl/DateUtils":17,"../../uitl/ObjectInstance":18,"../../uitl/Util":21,"../PcSdk":9,"./BaseModel":12}],15:[function(require,module,exports){ | |
1771 | 1539 | "use strict"; |
1772 | 1540 | Object.defineProperty(exports, "__esModule", { value: true }); |
1773 | 1541 | var Scene = Laya.Scene; |
... | ... | @@ -1789,7 +1557,7 @@ var ui; |
1789 | 1557 | REG("ui.TestSceneUI", TestSceneUI); |
1790 | 1558 | })(ui = exports.ui || (exports.ui = {})); |
1791 | 1559 | |
1792 | -},{}],22:[function(require,module,exports){ | |
1560 | +},{}],16:[function(require,module,exports){ | |
1793 | 1561 | "use strict"; |
1794 | 1562 | Object.defineProperty(exports, "__esModule", { value: true }); |
1795 | 1563 | var ArrayUtils = /** @class */ (function () { |
... | ... | @@ -1870,7 +1638,7 @@ var ArrayUtils = /** @class */ (function () { |
1870 | 1638 | }()); |
1871 | 1639 | exports.default = ArrayUtils; |
1872 | 1640 | |
1873 | -},{}],23:[function(require,module,exports){ | |
1641 | +},{}],17:[function(require,module,exports){ | |
1874 | 1642 | "use strict"; |
1875 | 1643 | Object.defineProperty(exports, "__esModule", { value: true }); |
1876 | 1644 | /** |
... | ... | @@ -2165,7 +1933,7 @@ var DateUtils = /** @class */ (function () { |
2165 | 1933 | }()); |
2166 | 1934 | exports.default = DateUtils; |
2167 | 1935 | |
2168 | -},{}],24:[function(require,module,exports){ | |
1936 | +},{}],18:[function(require,module,exports){ | |
2169 | 1937 | "use strict"; |
2170 | 1938 | Object.defineProperty(exports, "__esModule", { value: true }); |
2171 | 1939 | var ObjectPool_1 = require("./ObjectPool"); |
... | ... | @@ -2191,7 +1959,7 @@ var ObjectInstance = /** @class */ (function () { |
2191 | 1959 | }()); |
2192 | 1960 | exports.default = ObjectInstance; |
2193 | 1961 | |
2194 | -},{"./ObjectPool":25}],25:[function(require,module,exports){ | |
1962 | +},{"./ObjectPool":19}],19:[function(require,module,exports){ | |
2195 | 1963 | "use strict"; |
2196 | 1964 | Object.defineProperty(exports, "__esModule", { value: true }); |
2197 | 1965 | var ObjectPool = /** @class */ (function () { |
... | ... | @@ -2216,7 +1984,7 @@ var ObjectPool = /** @class */ (function () { |
2216 | 1984 | }()); |
2217 | 1985 | exports.default = ObjectPool; |
2218 | 1986 | |
2219 | -},{}],26:[function(require,module,exports){ | |
1987 | +},{}],20:[function(require,module,exports){ | |
2220 | 1988 | "use strict"; |
2221 | 1989 | Object.defineProperty(exports, "__esModule", { value: true }); |
2222 | 1990 | var ScaleButtonScript = /** @class */ (function () { |
... | ... | @@ -2262,7 +2030,7 @@ var ScaleButtonScript = /** @class */ (function () { |
2262 | 2030 | }()); |
2263 | 2031 | exports.default = ScaleButtonScript; |
2264 | 2032 | |
2265 | -},{}],27:[function(require,module,exports){ | |
2033 | +},{}],21:[function(require,module,exports){ | |
2266 | 2034 | "use strict"; |
2267 | 2035 | Object.defineProperty(exports, "__esModule", { value: true }); |
2268 | 2036 | var Util = /** @class */ (function () { |
... | ... | @@ -2301,4 +2069,4 @@ var DataKey; |
2301 | 2069 | })(DataKey = exports.DataKey || (exports.DataKey = {})); |
2302 | 2070 | |
2303 | 2071 | },{}]},{},[2]) |
2304 | -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL0FuZHJvaWRBcHBTZGsudHMiLCJzcmMvc2RrL0FwcFNkay50cyIsInNyYy9zZGsvQmFzZUFwcFNkay50cyIsInNyYy9zZGsvSW9zQXBwU2RrLnRzIiwic3JjL3Nkay9OYXRpdmVBZC50cyIsInNyYy9zZGsvVFRBZFNkay50cyIsInNyYy9zZGsvVHJhY2tpbmdTZGsudHMiLCJzcmMvc2RrL21vZGVsL0Jhc2VNb2RlbC50cyIsInNyYy9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1NoYWtlTW9kZWwudHMiLCJzcmMvc2RrL3Nka0RhdGEvQWRkR29sZERhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvTXlDb2luRGF0YS50cyIsInNyYy91aS9sYXlhTWF4VUkudHMiLCJzcmMvdWl0bC9BcnJheVV0aWxzLnRzIiwic3JjL3VpdGwvRGF0ZVV0aWxzLnRzIiwic3JjL3VpdGwvT2JqZWN0SW5zdGFuY2UudHMiLCJzcmMvdWl0bC9PYmplY3RQb29sLnRzIiwic3JjL3VpdGwvU2NhbGVCdXR0b25TY3JpcHQudHMiLCJzcmMvdWl0bC9VdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztB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WUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJ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RDtJQUFBO0lBaUJBLENBQUM7SUFoQlUsbUJBQUksR0FBWCxVQUFZLEdBQUcsRUFBRSxVQUF5QjtRQUExQyxpQkFJQztRQUhHLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsSUFBSTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELHNCQUFPLEdBQVAsVUFBUSxHQUFXLEVBQUUsS0FBVTtRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUNELHNCQUFPLEdBQVAsVUFBUSxHQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsc0JBQWtCLFNBQUM7YUFBbkI7WUFDSSxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQzs7O09BQUE7SUFDTCxXQUFDO0FBQUQsQ0FqQkEsQUFpQkMsSUFBQTs7QUFFRCxJQUFZLE9BT1g7QUFQRCxXQUFZLE9BQU87SUFDZixrREFBdUMsQ0FBQTtJQUN2QyxzREFBMkMsQ0FBQTtJQUMzQywwQ0FBK0IsQ0FBQTtJQUMvQiw4QkFBbUIsQ0FBQTtJQUNuQixnQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBUFcsT0FBTyxHQUFQLGVBQU8sS0FBUCxlQUFPLFFBT2xCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5pbXBvcnQgVGVzdFNjZW5lIGZyb20gXCIuL1Rlc3RTY2VuZVwiXG5pbXBvcnQgU2NhbGVCdXR0b25TY3JpcHQgZnJvbSBcIi4vdWl0bC9TY2FsZUJ1dHRvblNjcmlwdFwiXG5pbXBvcnQgUmVkRHJhd2FsIGZyb20gXCIuL1JlZERyYXdhbFwiXG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTc1MDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEzMzQ7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cIlRlc3RTY2VuZS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiVGVzdFNjZW5lLnRzXCIsVGVzdFNjZW5lKTtcbiAgICAgICAgcmVnKFwidWl0bC9TY2FsZUJ1dHRvblNjcmlwdC50c1wiLFNjYWxlQnV0dG9uU2NyaXB0KTtcbiAgICAgICAgcmVnKFwiUmVkRHJhd2FsLnRzXCIsUmVkRHJhd2FsKTtcbiAgICAgICAgcmVnKFwic2RrL05hdGl2ZUFkLnRzXCIsTmF0aXZlQWQpO1xyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcclxuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xyXG5pbXBvcnQgU2hha2VNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvU2hha2VNb2RlbFwiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25WID0gR2FtZUNvbmZpZy5hbGlnblY7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduSCA9IEdhbWVDb25maWcuYWxpZ25IO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdH1cclxuXHJcblx0b25Db25maWdMb2FkZWQoKTogdm9pZCB7XHJcblxyXG5cdFx0dGhpcy5pbml0RGF0YSgpO1xyXG5cdFx0Ly/liqDovb1JREXmjIflrprnmoTlnLrmma9cclxuXHRcdEdhbWVDb25maWcuc3RhcnRTY2VuZSAmJiBMYXlhLlNjZW5lLm9wZW4oR2FtZUNvbmZpZy5zdGFydFNjZW5lKTtcclxuXHR9XHJcblxyXG5cdC8qKuWIneWni+WMllNESyAqL1xyXG5cdGFzeW5jIGluaXREYXRhKCkge1xyXG5cdFx0Lyoq6ZqQ6JeP5ZCv5Yqo5bGPICovXHJcblx0XHRBcHBTZGsuSS5oaWRlU3BsYXNoKClcclxuXHRcdC8qKuWIneWni+WMlmFkayDojrflj5ZhcHDphY3nva7kv6Hmga8gKi9cclxuXHRcdEFwcFNkay5JLmluaXQoKTtcclxuXHRcdC8qKumihOWKoOi9veinhumikSAqL1xyXG5cdFx0QWRNYW5hZ2VyLkkuaW5pdCgpO1xyXG5cdFx0Lyoq6I635Y+W57qi5YyF6YWN572uICDliJ3lp4vljJbmlbDmja4gKi9cclxuXHRcdGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuaW5pdCgpO1xyXG5cdFx0Lyoq5Yid5aeL5YyW5pGH5LiA5pGH55qE5pWw5o2uICovXHJcblx0XHRhd2FpdCBTaGFrZU1vZGVsLkkuaW5pdCgpXHJcblx0fVxyXG59XHJcbi8v5r+A5rS75ZCv5Yqo57G7XHJcbm5ldyBNYWluKCk7XHJcbiIsImltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL2V2ZW50L0V2ZW50RW51bVwiO1xuLyoqXG4gKiDkuLvnlYzpnaIgIOmHkeW4gemHkeminVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWREcmF3YWwgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgLyoqIEBwcm9wIHtuYW1lOmNvaW5sYWIsIHRpcHM6XCLph5HluIFcIiwgdHlwZTpOb2RlfSovXG4gICAgY29pbmxhYjogTGF5YS5MYWJlbDtcbiAgICAvKiogQHByb3Age25hbWU6dGlwbGFiLCB0aXBzOlwi5o+Q56S6XCIsIHR5cGU6Tm9kZX0qL1xuICAgIHRpcGxhYjogTGF5YS5MYWJlbDtcblxuICAgIHByaXZhdGUgdG90YWxDb2luOiBudW1iZXIgPSAxMTA7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxuICAgIG9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhcigpO1xuICAgICAgICAvLyB0aGlzLnRpcGxhYi52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW5hYmxlKCkge1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLkFQUF9TSE9XLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLlVQREFURV9DT0lOLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVTdGFyKCkge1xuICAgICAgICBsZXQgY29pbiA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuZ2V0VG90YWxDb2luKCk7XG4gICAgICAgIC8vIGxldCBjb2luID0gMTAwMFxuICAgICAgICB0aGlzLnRvdGFsQ29pbiA9IGNvaW47XG4gICAgICAgIHRoaXMuY29pbmxhYi50ZXh0ID0gJycgKyBjb2luO1xuICAgICAgICBsZXQgc3RyID0gJ+WPr+aPkOeOsCc7XG4gICAgICAgIC8qKuabtOaWsOS4i+S4i+S4gOasoeaPkOeOsOeahOmineW6piAqL1xuICAgICAgICBsZXQgbmV4dERyYXdhbCA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICBpZiAodGhpcy50b3RhbENvaW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgbGVmdENvaW4gPSBuZXh0RHJhd2FsIC0gdGhpcy50b3RhbENvaW47XG4gICAgICAgICAgICBpZiAobGVmdENvaW4gPiAwKVxuICAgICAgICAgICAgICAgIHN0ciA9IGDov5jlt64keyhsZWZ0Q29pbiAvIDEwMDAwKS50b0ZpeGVkKDMpfemHkemineWPr+aPkOeOsGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aXBsYWIudGV4dCA9IHN0cjtcbiAgICAgICAgdGhpcy50aXBsYWIudmlzaWJsZSA9IEJvb2xlYW4obmV4dERyYXdhbCk7XG4gICAgfVxufSIsImltcG9ydCB7IHVpIH0gZnJvbSBcIi4vdWkvbGF5YU1heFVJXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuL3Nkay9BZE1hbmFnZXJcIjtcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcbmltcG9ydCBTaGFrZU1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9TaGFrZU1vZGVsXCI7XG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RTY2VuZSBleHRlbmRzIHVpLlRlc3RTY2VuZVVJIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy/lhbPpl63lpJrngrnop6bmjqfvvIzlkKbliJnlsLHml6DmlYzkuoZcbiAgICAgICAgTGF5YS5Nb3VzZU1hbmFnZXIubXVsdGlUb3VjaEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVRlc3RTY2VuZS0tLS0tLS0nKVxuICAgICAgICB0aGlzLk5hdGl2ZUFELnZpc2libGUgPSBmYWxzZTtcblxuICAgIH1cblxuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ0blNlcnZlci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5TZXJ2ZXIpO1xuICAgICAgICB0aGlzLmJ0bkRyYXdhbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5QZXJzb25hbCk7XG4gICAgICAgIHRoaXMuYnRuSW52aXRlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuaW52aXRhdGlvbik7XG4gICAgICAgIHRoaXMuYnRuX3NoYWtlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMudG91Y2hTaGFrZSk7XG4gICAgICAgIHRoaXMuYnRuUHJlbG9hZEFELm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZEFEKTtcbiAgICAgICAgdGhpcy5idG5TaG93QmFubmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Jhbm5lcik7XG4gICAgICAgIHRoaXMuYnRuU2hvd0Z1bGxBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dGdWxsQWQpO1xuICAgICAgICB0aGlzLmJ0blNob3dOYXRpdmVBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dOYXRpdmVBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd0ludGVyQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93SW50ZXJBZCk7XG4gICAgICAgIHRoaXMuYnRuUmV3YXJkQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93UmV3YXJkQWQpO1xuICAgICAgICB0aGlzLmJ0blJlZHBhY2tldC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5SZWRwYWNrZXQpO1xuXG4gICAgfVxuXG4gICAgLyoq6aKE5Yqg6L295bm/5ZGKICovXG4gICAgYXN5bmMgcHJlbG9hZEFEKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tcHJlbG9hZEFELS0tLS0tLScpXG4gICAgICAgIC8vIGF3YWl0IEFkTWFuYWdlci5JLmluaXQoKTtcbiAgICAgICAgTXlCcmlkZ2UudGVzdFJldHVybihmdW5jdGlvbiAoLi4uYXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLXdlYi0tLS0tLS0tb25DbGljay0tLS0tPj5jb2NvcyBKUy0tLS0tLS1NeUJyaWRnZS50ZXN0UmV0dXJuLS0tLS0tXCIgKyBKU09OLnN0cmluZ2lmeShhcnJheSkpO1xuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKuaYvuekuuWFqOWxj+W5v+WRiiAqL1xuICAgIHNob3dGdWxsQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93RnVsbEFkLS0tLS0tLScpXG4gICAgICAgIC8vIEFkTWFuYWdlci5JLnNob3dGdWxsQWQoKTtcbiAgICAgICAgdmFyIHJldCA9IE15QnJpZGdlLm1hcFRvU3RyaW5nKHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsIFwidGl0bGVcIjogW3sgXCJuYW1lXCI6IFwibm5uXCIsIFwidmFsdWVcIjogXCJubm52YWx1ZVwiLCBcImRlZmF1bHRfc2hvd1wiOiAxIH1cbiAgICAgICAgICAgICAgICAgICAgLCB7IFwibmFtZVwiOiBcIm1tbVwiLCBcInZhbHVlXCI6IFwibW1tdmFsdWVcXFwiYWFzZGFzZFwiIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLXdlYi0tLS0tLS0tb25DbGljay0tLS0tPj5jb2NvcyBKUy0tLS0tLS1NeUJyaWRnZS5tYXBUb1N0cmluZy0tLS0tLVwiICsgSlNPTi5zdHJpbmdpZnkocmV0KSk7XG4gICAgfVxuICAgIC8qKuaYvuekumJhbm5lciAqL1xuICAgIHNob3dCYW5uZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93QmFubmVyLS0tLS0tLScpXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dCYW5uZXIoKTtcbiAgICB9XG5cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBzaG93TmF0aXZlQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93TmF0aXZlQWQtLS0tLS0tJylcbiAgICAgICAgdGhpcy5OYXRpdmVBRC52aXNpYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKirmj5LlsY/lub/lkYogKi9cbiAgICBzaG93SW50ZXJBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dJbnRlckFkLS0tLS0tLScpXG4gICAgICAgIFxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgIH1cbiAgICAvKirmv4DlirHop4bpopHlub/lkYogKi9cbiAgICBhc3luYyBzaG93UmV3YXJkQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93UmV3YXJkQWQtLS0tLS0tJylcbiAgICAgICAgXG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZCgpO1xuICAgICAgICAvKirmiJDlip/lkI7miafooYzlr7nlupTnmoTlpZblirEgKi9cbiAgICB9XG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXG4gICAgb3BlblNlcnZlcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLW9wZW5TZXJ2ZXItLS0tLS0tJylcbiAgICAgICAgQXBwU2RrLkkuZmVlZGJhY2soKTtcbiAgICB9XG5cblxuICAgIG9wZW5SZWRwYWNrZXQoKSB7XG4gICAgICAgIFJlZHBhY2tldE1vZGVsLkkuY2hlY2tSZWRwYWNrZXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8mmN1clJlZHBhY2tldCcgKyBSZWRwYWNrZXRNb2RlbC5JLmN1clJlZHBhY2tldClcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8micgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZHBhY2tldFBvcHdpbiwgMCk7XG4gICAgfVxuXG4gICAgLyoq5omT5byA5Liq5Lq65Lit5b+DICovXG4gICAgb3BlblBlcnNvbmFsKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBBcHBTZGsuSS5wZXJzb25hbCgwKTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LICovXG4gICAgaW52aXRhdGlvbigpIHtcbiAgICAgICAgQXBwU2RrLkkuaW52aXRhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDFcdOmHkeW4gVxuICAgIDJcdOa/gOWKseinhumikeWQjumHkeW4gVxuICAgIDNcdDQgNSA2IDcg5ri45oiP5Lit5a+55bqU55qE6YGT5YW3XG4gICAgOFx056m6XG4gICAgICovXG4gICAgdG91Y2hTaGFrZSgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXRvdWNoU2hha2UtLS0tLS0tJylcbiAgICAgICAgLy8gdGhpcy5za2luLmJ0blNoYWtlQW5pLnBsYXkoMCk7XG4gICAgICAgIEFwcFNkay5JLnZpYnJhdGUoKTtcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5zaG93TW9kYWwoSGludE1vZGFsLCAnIOS7iuK9h+asoeaVsOW3suK9pOWujO+8jOivt+aYjuK9h+WGjeadpScpO1xuICAgICAgICAvLyB0aGlzLnNraW4uaGFuZEFuaS5zdG9wKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAxLuWbnuWOu+aYn+aYnyDpgZPlhbcgXG4gICAgICAgICAqIDIu57qi5YyFICAg55u05o6l6I635b6X4r6m5biB77yb5oiW6ICF55u05o6l5by55r+A5Yqx6KeG6aKR5ZCO77yM6I635b6X4r6m5biBXG4gICAgICAgICAqIDMu5peg6YGT5YW3XG4gICAgICAgICAqIOebtOaOpeWxleK9sOaPkuWxj1xuICAgICAgICAgKiAgKi9cbiAgICAgICAgbGV0IGRhdGEgPSBTaGFrZU1vZGVsLkkuZ2V0U2hha2VUeXBlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCfmkYfkuIDmkYfojrflj5bnu5PmnpzvvJonICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAvKiogJ+iwouiwouWPguS4ju+8jOS4i+asoeWlvei/kO+8gScqLztcbiAgICAgICAgICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29pbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hBRENvaW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb3BzKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UHJvcHMoZGF0YSkge1xuICAgICAgICBsZXQgYm9vc3RlcjtcbiAgICAgICAgbGV0IHJld2FyZE51bSA9IGRhdGEubnVtO1xuICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIOWkhOeQhua4uOaIj+S4reeahOmBk+WFt+aYvuekulxuICAgICAgICAgKi9cbiAgICAgICAgLy8gc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIC8vICAgICBjYXNlIDQ6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJlbW92ZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNjpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuQ2hhbmdlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA1OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SZWZyZXNoO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA3OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SYW5kUmVtb3ZlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSAzOlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5TdGFyO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLkkub3BlblBvcHdpbihSZWNlaXZlUHJvcHNQb3B3aW4sIGJvb3N0ZXIsIHJld2FyZE51bSk7XG5cbiAgICB9XG4gICAgLyoqXG4gICAgICog55yL5bm/5ZGK6I635b6X57qi5YyFXG4gICAgICovXG4gICAgYXN5bmMgd2F0Y2hBRENvaW4oKSB7XG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZCgpO1xuICAgICAgICB0aGlzLmdldENvaW4oKTtcbiAgICB9XG4gICAgLyoq55u05o6l6I635b6X57qi5YyFICovXG4gICAgZ2V0Q29pbigpIHtcbiAgICAgICAgLy9cYuWIt+aWsOaAu+mHkeW4gVxuICAgICAgICAvLyBBcHBNYW5hZ2VyLkkucmVkcGFja2V0LmdldFJlcGFja2V0KClcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZFBhY2tldFJld2FyZCwgMik7XG4gICAgfVxufSIsImltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL0V2ZW50RW51bVwiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBjbGFzcyBFdmVudENlbnRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBMYXlhLkV2ZW50RGlzcGF0Y2hlcjtcbiAgICBwcml2YXRlIHN0YXRpYyBnZXQgSSgpOiBMYXlhLkV2ZW50RGlzcGF0Y2hlciB7XG4gICAgICAgIHdpbmRvd1snZXYnXSA9IHRoaXMuX2luc3RhbmNlO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IExheWEuRXZlbnREaXNwYXRjaGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGVtaXQoZXZlbnQ6IEV2ZW50RW51bSwgLi4uYXJncykge1xuICAgICAgICB0aGlzLkkuZXZlbnQoZXZlbnQudG9TdHJpbmcoKSwgYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGQodHlwZTogRXZlbnRFbnVtLCBjYWxsZXI6IGFueSwgbGlzdGVuZXI6IEZ1bmN0aW9uLCBhcmdzPzogQXJyYXk8YW55Pikge1xuICAgICAgICB0aGlzLkkub24odHlwZS50b1N0cmluZygpLCBjYWxsZXIsIGxpc3RlbmVyLCBhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZSh0eXBlOiBFdmVudEVudW0sIGNhbGxlcjogYW55LCBsaXN0ZW5lcjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5JLm9mZih0eXBlLnRvU3RyaW5nKCksIGNhbGxlciwgbGlzdGVuZXIpO1xuICAgIH1cbn0iLCJleHBvcnQgZW51bSBFdmVudEVudW0ge1xuXG5cdENIRUNLX1JFRFBBQ0tFVCA9IDxhbnk+J2NoZWNrX3JlZHBhY2tldCcsXG5cdEFQUF9TSE9XID0gPGFueT4nYXBwLnNob3cnLFxuXHRBUFBfSElERSA9IDxhbnk+J2FwcC5oaWRlJyxcblxuXG5cdFVQREFURV9DT0lOID0gPGFueT4ndXBkYXRlLmNvaW4nLFxuXG59IiwiaW1wb3J0IFRUQWRTZGsgZnJvbSBcIi4vVFRBZFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkTWFuYWdlciB7XHJcbiAgICBwcml2YXRlIGxhc3RWaWRlb1RpbWU6IG51bWJlcjtcclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcmVsb2FkUmV3YXJkQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFZpZGVvVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJlbG9hZEZ1bGxBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByZWxvYWRJbnRlckFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0Z1bGxBZCgpIHtcclxuICAgICAgICAvLyBjb25zb2xlLndhcm4oJ2Z1bGwnKTtcclxuICAgICAgICAvLyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkRnVsbEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlckFkKCkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUud2FybignZnVsbCcpO1xyXG4gICAgICAgIC8vIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRJbnRlckFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgY2hlY2tWaWRlb0luQ2QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZpZGVvVGltZSAmJiAoTGF5YS50aW1lci5jdXJyVGltZXIgLSB0aGlzLmxhc3RWaWRlb1RpbWUgPD0gMzAwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQmFubmVyKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5oaWRlQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TmF0aXZlQWQoeCwgeSwgdywgaCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKCB4LCB5LCB3LCBoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTmF0aXZlQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmhpZGVBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIHN0YXRpYyBnZXQgSSgpOiBBZE1hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoQWRNYW5hZ2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiaW1wb3J0IEJhc2VBcHBTZGsgZnJvbSBcIi4vQmFzZUFwcFNka1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5kcm9pZEFwcFNkayBleHRlbmRzIEJhc2VBcHBTZGsge1xyXG4gICAgZ2V0IHN5c3RlbSgpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsQXBwKGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgICAgICB0aGlzLmJyaWRnZSAmJiB0aGlzLmJyaWRnZS5jYWxsKGNtZCwgLi4ucGFyYW1zKTtcclxuICAgICAgICAvLyB0aGlzLmJyaWRnZSAmJiBhbGVydChKU09OLnN0cmluZ2lmeSh0aGlzLmJyaWRnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHBXaXRoQmFjayhjYWxsQmFjazogRnVuY3Rpb24sIGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgICAgICB0aGlzLmJyaWRnZSAmJiB0aGlzLmJyaWRnZS5jYWxsV2l0aEJhY2soY2FsbEJhY2ssIGNtZCwgLi4ucGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnJpZGdlIHx8ICh0aGlzLl9icmlkZ2UgPSB0aGlzLmNyZWF0ZUNsYXNzKCdjb20ucHVjaGkuc2RrZGVtby5KU0JyaWRnZScpKTtcclxuICAgIH1cclxufSIsImltcG9ydCBJb3NBcHBTZGsgZnJvbSBcIi4vSW9zQXBwU2RrXCI7XG5pbXBvcnQgQW5kcm9pZEFwcFNkayBmcm9tIFwiLi9BbmRyb2lkQXBwU2RrXCI7XG5pbXBvcnQgQmFzZUFwcFNkayBmcm9tIFwiLi9CYXNlQXBwU2RrXCI7XG5cbmV4cG9ydCBjbGFzcyBBcHBTZGsge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogQmFzZUFwcFNkaztcbiAgICBzdGF0aWMgZ2V0IEkoKTogQmFzZUFwcFNkayB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGxldCBjb25jaENvbmZpZyA9IHdpbmRvd1snY29uY2hDb25maWcnXTtcbiAgICAgICAgICAgIGxldCBvcyA9IGNvbmNoQ29uZmlnICYmIGNvbmNoQ29uZmlnLmdldE9TKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKG9zKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkNvbmNoLWlvc1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBJb3NBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDb25jaC1hbmRyb2lkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEFuZHJvaWRBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEJhc2VBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93WydBcHBTZGsnXSA9IHRoaXMuX2luc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9XG59IiwiaW1wb3J0IEFkZEdvbGREYXRhIGZyb20gXCIuL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcclxuaW1wb3J0IE15Q29pbkRhdGEgZnJvbSBcIi4vc2RrRGF0YS9NeUNvaW5EYXRhXCI7XHJcbmltcG9ydCB7IEdvbGRDb25maWdEYXRhIH0gZnJvbSBcIi4vc2RrRGF0YS9Hb2xkQ29uZmlnRGF0YVwiO1xyXG5cclxuLyoqIOi/lOWbnuWPguaVsOexu+WeiyAqL1xyXG5pbnRlcmZhY2UgSUFwcFJlc3VsdDxUPiB7XHJcbiAgICAvKiog6ZSZ6K+v56CBICovXHJcbiAgICBjb2RlPzogbnVtYmVyO1xyXG4gICAgLyoqIOi/lOWbnuaVsOaNriAqL1xyXG4gICAgZGF0YT86IFQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlQXBwU2RrIHtcclxuICAgIHByb3RlY3RlZCBfYnJpZGdlOiBhbnk7XHJcbiAgICBwcml2YXRlIG5ldE9uQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgbmV0T2ZmQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgX2NoYW5uZWw6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcclxuICAgIHByaXZhdGUgX2xldmVsOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHBhbmdvbGluSWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBhZG5ldElkOiBzdHJpbmc7XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBsZXQgY29uY2ggPSB3aW5kb3dbJ2NvbmNoJ107XHJcbiAgICAgICAgaWYgKGNvbmNoKSB7XHJcbiAgICAgICAgICAgIGNvbmNoLnNldE5ldHdvcmtFdnRGdW5jdGlvbih0aGlzLm5ldHdvcmtFdnRGdW5jLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ3NldEFwcENhbGxiYWNrJywgMSwgJ0FwcFNkay5vblNob3coKScpO1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnc2V0QXBwQ2FsbGJhY2snLCAyLCAnQXBwU2RrLm9uSGlkZSgpJyk7XHJcbiAgICAgICAgdGhpcy5nZXRTeXN0ZW1JbmZvKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3lzdGVtSW5mbygpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tZ2V0U3lzdGVtSW5mby0tLS0tLS0nICsgSlNPTi5zdHJpbmdpZnkocmV0KSlcclxuICAgICAgICAgICAgbGV0IHsgdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWwgfSA9IEpTT04ucGFyc2UocmV0KTtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3O1xyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoO1xyXG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbk5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwgPSBjaGFubmVsO1xyXG4gICAgICAgICAgICB0aGlzLnBhbmdvbGluSWQgPSBwYW5nb2xpbjtcclxuICAgICAgICAgICAgdGhpcy5hZG5ldElkID0gYWRuZXQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XHJcbiAgICAgICAgfSwgJ2dldFN5c3RlbUluZm8nLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2hvdygpIHtcclxuICAgICAgICAvLyBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5BUFBfU0hPVyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkhpZGUoKSB7XHJcbiAgICAgICAgLy8gRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uQVBQX0hJREUpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2aWJyYXRlKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnb3BlblN5c3RlbUZ1bicsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVTcGxhc2goKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsQXBwKCdoaWRlU3BsYXNoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoq5by55Ye65o+Q546wICovXHJcbiAgICB3aXRoRHJhd2FsKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnd2l0aERyYXdhbCcpO1xyXG4gICAgfVxyXG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXHJcbiAgICBmZWVkYmFjaygpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ2ZlZWRiYWNrJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBrZXkg6buY6K6kMCDvvIznrb7liLAgMVxyXG4gICAgICovXHJcbiAgICBwZXJzb25hbChrZXkgPSAwKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsQXBwKCdwZXJzb25hbCcsIGtleSk7XHJcbiAgICB9XHJcbiAgICAvKirpgoDor7flpb3lj4sqL1xyXG4gICAgaW52aXRhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ2ludml0YXRpb24nKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY3VycmVudFNodXQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnY3VycmVudFNodXQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlumHkeW4gemFjeihqFxyXG4gICAgICogQHBhcmFtIGtleSAx57qi5YyFICAgMiDmkYfkuIDmkYfnuqLljIVcclxuICAgICAqL1xyXG5cclxuICAgIGFzeW5jICBnZXRHYW1lQ29uZmlnKGtleTogbnVtYmVyID0gMSkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQ2FsbEJhY2soJ2dldEdhbWVDb25maWcnLCBrZXkpXHJcbiAgICAgICAgR29sZENvbmZpZ0RhdGEuSS5pbml0RGF0YShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDopoHmsYLlj5HmlL7ph5HluIFcclxuICAgICAqIEBwYXJhbSBrZXkgMee6ouWMhVxyXG4gICAgICovXHJcblxyXG4gICAgYXN5bmMgYWRkR29sZChrZXk6IG51bWJlciA9IDEpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbkNhbGxCYWNrKCdhZGRHb2xkJywga2V5KTtcclxuICAgICAgICBBZGRHb2xkRGF0YS5pbml0RGF0YShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBhc3luYyBteUNvaW4oKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25DYWxsQmFjaygnbXlDb2luJylcclxuICAgICAgICBNeUNvaW5EYXRhLmluaXREYXRhKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICB9XHJcbiAgICAvKirojrflj5blvZPliY3mj5DnjrDnmoTmoaPkvY0gKi9cclxuICAgIGFzeW5jIG1pbldpdGhEcmF3YWwoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25DYWxsQmFjaygnbWluV2l0aERyYXdhbCcpO1xyXG4gICAgICAgIGlmICghQm9vbGVhbihwYXJzZUludChyZXN1bHQuY29kZSArICcnKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlc3VsdC5kYXRhWydtb25leSddKSAqIDEwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgb25DYWxsQmFjayhjbWQ6IHN0cmluZywgLi4ucGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElBcHBSZXN1bHQ8YW55W10+Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FsbEFwcFdpdGhCYWNrKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICAgICAgICAgIC8vIHJlcyA9IHsgY29kZTogMTAwMCB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlcy5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IHJlcy5jb2RlLCBkYXRhOiByZXMuZGF0YSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IHJlcy5jb2RlIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGNtZCwgLi4ucGFyYW1zKTtcclxuICAgICAgICB9KVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHAoY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHBXaXRoQmFjayhjYWxsQmFjazogRnVuY3Rpb24sIGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG5ldHdvcmtFdnRGdW5jKHR5cGU6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBmdW5jQXJyO1xyXG4gICAgICAgIGlmICh0eXBlID09IDApIHtcclxuICAgICAgICAgICAgZnVuY0FyciA9IHRoaXMubmV0T2ZmQXJyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSA1KSB7XHJcbiAgICAgICAgICAgIGZ1bmNBcnIgPSB0aGlzLm5ldE9uQXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZnVuY0Fycikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmNBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZ1bmNBcnJbaV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk5ldE9uKGZ1bmM6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5uZXRPbkFyci5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgb25OZXRPZmYoZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm5ldE9mZkFyci5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsZXZlbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBnZXQgd2lkdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBoZWlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmVyc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2hhbm5lbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2xhc3MobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvd1snUGxhdGZvcm1DbGFzcyddLmNyZWF0ZUNsYXNzKG5hbWUpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJhc2VBcHBTZGsgZnJvbSBcIi4vQmFzZUFwcFNka1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW9zQXBwU2RrIGV4dGVuZHMgQmFzZUFwcFNkayB7XHJcbiAgICBnZXQgc3lzdGVtKCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHAoY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNtZCArPSAnOic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJpZGdlICYmIHRoaXMuYnJpZGdlLmNhbGwoY21kLCAuLi5wYXJhbXMpO1xyXG4gICAgICAgIC8vIHRoaXMuYnJpZGdlICYmIGFsZXJ0KEpTT04uc3RyaW5naWZ5KHRoaXMuYnJpZGdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbEFwcFdpdGhCYWNrKGNhbGxCYWNrOiBGdW5jdGlvbiwgY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNtZCArPSAnOic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJpZGdlICYmIHRoaXMuYnJpZGdlLmNhbGxXaXRoQmFjayhjYWxsQmFjaywgY21kLCAuLi5wYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgYnJpZGdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9icmlkZ2UgfHwgKHRoaXMuX2JyaWRnZSA9IHRoaXMuY3JlYXRlQ2xhc3MoJ0pTQnJpZGdlJykpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9BZE1hbmFnZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQWQgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgb25FbmFibGUoKTogdm9pZCB7XG4gICAgICAgIGxldCBnbG9iYWxQb2ludCA9IHRoaXMuaXRlbS5sb2NhbFRvR2xvYmFsKExheWEuUG9pbnQuRU1QVFksIHRydWUpO1xuICAgICAgICBBZE1hbmFnZXIuSS5zaG93TmF0aXZlQWQoZ2xvYmFsUG9pbnQueCwgZ2xvYmFsUG9pbnQueSwgdGhpcy5pdGVtLndpZHRoLCB0aGlzLml0ZW0uaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBvbkRpc2FibGUoKTogdm9pZCB7XG4gICAgICAgIEFkTWFuYWdlci5JLmhpZGVOYXRpdmVBZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGl0ZW0oKTogTGF5YS5WaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXIgYXMgYW55O1xuICAgIH1cbn0iLCJpbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi9BcHBTZGtcIjtcclxuaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUVEFkU2RrIHtcclxuICAgIGFzeW5jIHNob3dSZXdhcmRWaWRlb0FkKCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoLFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgbWVzc2FnZSB9ID0gSlNPTi5wYXJzZShyZXQpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC8qKifmmoLml6Dop4bpopHlub/lkYrvvIHmr4/ml6Uw54K56YeN572uJyovO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIwMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ3VuQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgJ3Nob3dSZXdhcmRWaWRlb0FkJywgMSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkRnVsbFNjcmVlblZpZGVvQWQoIHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgQXBwU2RrLkkuY2FsbEFwcFdpdGhCYWNrKHJldCA9PiB7XHJcbiAgICAgICAgICAgIH0sICdsb2FkRnVsbFNjcmVlblZpZGVvQWQnLCAxLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWROYXRpdmVFeHByZXNzQWQoIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICBsZXQgc2NhbGVYID0gQXBwU2RrLkkud2lkdGggLyBMYXlhLnN0YWdlLndpZHRoO1xyXG4gICAgICAgIGxldCBzY2FsZVkgPSBBcHBTZGsuSS5oZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogd2lkdGggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgIGg6IGhlaWdodCAqIHNjYWxlWSxcclxuICAgICAgICAgICAgbGVmdDogeCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgdG9wOiB5ICogc2NhbGVZXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgIH0sICdsb2FkTmF0aXZlRXhwcmVzc0FkJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEJhbm5lckV4cHJlc3NBZCgpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogQXBwU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IEFwcFNkay5JLndpZHRoICogOTAgLyA2MDAsICBcclxuICAgICAgICB9XHJcbiAgICAgICAgQXBwU2RrLkkuY2FsbEFwcFdpdGhCYWNrKHJldCA9PiB7XHJcbiAgICAgICAgfSwgJ2xvYWRCYW5uZXJFeHByZXNzQWQnLCAyLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWQoKSB7XHJcbiAgICAgICAgQXBwU2RrLkkuY2FsbEFwcCgnY2xvc2VfYWR2ZXJfZGlhbG9nJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoICogMC44LFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICB9LCAnc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgXHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRUQWRTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVFRBZFNkaykgYXMgVFRBZFNkaztcclxuICAgIH1cclxufSIsImltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL0FwcFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuLyoqXHJcbiAqIOS4iuaKpeeDreS6keWfi+eCueK9h+W/l1xyXG4gKiDlhbfkvZPnmoTmiZPngrnpnIDopoHot5/ov5DokKXogZTns7tcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRyYWNraW5nU2RrIHtcclxuICAgIGRvdChrZXk6IHN0cmluZykge1xyXG4gICAgICAgIEFwcFNkay5JLmNhbGxBcHAoJ3RyYWNraW5nX2V2ZW50Jywga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVHJhY2tpbmdTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVHJhY2tpbmdTZGspIGFzIFRyYWNraW5nU2RrO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcmFja2luZ0tleSB7XHJcbiAgICBSZWRQYWNrMSA9ICdldmVudF81JyxcclxuICAgIFJlZFBhY2s1ID0gJ2V2ZW50XzYnXHJcbn1cclxuIiwiaW1wb3J0IEFycmF5VXRpbHMgZnJvbSBcIi4uLy4uL3VpdGwvQXJyYXlVdGlsc1wiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNb2RlbCB7XG4gICAgcHJvdGVjdGVkIF9kYXRhOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHVwZGF0ZUFycjogQXJyYXk8RnVuY3Rpb24+ID0gW107XG4gICAgcHJpdmF0ZSBrZXlVcGRhdGVBcnI6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZShkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RhdGEsXG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmtleVVwZGF0ZUFycikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICAgICBhcnIgJiYgYXJyLmZvckVhY2goZnVuYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdEZvcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2RhdGFba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYiA9IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmVXBkYXRlKGNiLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoY2IsIGtleSwgdHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlKGZ1bmM6IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcsIHJ1bjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgcnVuICYmIHZhbHVlICE9IG51bGwgJiYgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICFhcnIgJiYgKHRoaXMua2V5VXBkYXRlQXJyW2tleV0gPSBhcnIgPSBbXSk7XG4gICAgICAgICAgICBhcnIucHVzaChmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1biAmJiBmdW5jKHRoaXMuX2RhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBcnIucHVzaChmdW5jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvZmZVcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZykge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy5rZXlVcGRhdGVBcnJba2V5XSwgZnVuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy51cGRhdGVBcnIsIGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyR2FtZSgpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi4vLi4vc2RrL0FkTWFuYWdlclwiO1xuaW1wb3J0IFRlYVNkaywgeyBEb3RLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RlYVNka1wiO1xuaW1wb3J0IFRyYWNraW5nU2RrLCB7IFRyYWNraW5nS2V5IH0gZnJvbSBcIi4uLy4uL3Nkay9UcmFja2luZ1Nka1wiO1xuaW1wb3J0IHsgR29sZENvbmZpZ0RhdGEgfSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGFcIjtcbmltcG9ydCBBZGRHb2xkRGF0YSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcbmltcG9ydCBNeUNvaW5EYXRhIGZyb20gXCIuLi8uLi9zZGsvc2RrRGF0YS9NeUNvaW5EYXRhXCI7XG5pbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi4vLi4vc2RrL0FwcFNka1wiO1xuaW1wb3J0IERhdGVVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9EYXRlVXRpbHNcIjtcbmltcG9ydCBVdGlsLCB7IERhdGFLZXkgfSBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRFbnVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHBhY2tldE1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBwcml2YXRlIE1BWCA9IDIwO1xuICAgIC8qKuW9k+WkqemihuWPlue6ouWMheeahOacgOWkp+asoeaVsCAqL1xuICAgIHByaXZhdGUgREFZX01BWF9DTlQgPSA1MDtcbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwdWJsaWMgY3VyUmVkcGFja2V0OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25mTGVuOiBudW1iZXIgPSAwO1xuXG4gICAgLyoq5Yid5aeL5YyW57qi5YyF6YWN572uICovXG4gICAgYXN5bmMgaW5pdCgpIHtcblxuICAgICAgICBsZXQgYXJyID0gYXdhaXQgR29sZENvbmZpZ0RhdGEuSS5nZXRHb2xkQ29uZmlnKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1SZWRwYWNrZXRNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KGFycikpXG4gICAgICAgIFxuICAgICAgICBsZXQgY2FzaCA9IDA7XG4gICAgICAgIHRoaXMuY29uZiA9IHt9O1xuICAgICAgICBhcnIuZm9yRWFjaChjb25mRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZbY29uZkRhdGEuaWRdID0gY29uZkRhdGE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoKSk7XG4gICAgICAgIHRoaXMuY29uZkxlbiA9IHRoaXMuY29uZi5sZW5ndGg7XG5cbiAgICB9XG5cbiAgICBpbml0RGF0YSgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUmVkcGFja2V0RGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5sYXN0VGltZSkgfHwgJzAnO1xuICAgICAgICBkYXRhLmxhc3RUaW1lID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuXG4gICAgICAgIGxldCBsYXN0ID0gRGF0ZVV0aWxzLnRpbWVEYXkoZGF0YS5sYXN0VGltZSk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcbiAgICAgICAgaWYgKGxhc3QgIT0gdG9kYXkpIHtcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5sYXN0VGltZSwgbGFzdFRpbWUpXG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0b2RheUNudCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkudG9kYXlDbnQpIHx8ICcwJztcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSBwYXJzZUludCh0b2RheUNudCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGRhdGFDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LmRhdGFDTlQpIHx8ICcwJztcbiAgICAgICAgZGF0YS5jbnQgPSBwYXJzZUludChkYXRhQ250KTtcbiAgICAgICAgZGF0YS5saXN0ID0gW107XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrUmVkcGFja2V0KCkge1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEudG9kYXlDbnQgPj0gdGhpcy5EQVlfTUFYX0NOVCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQWRNYW5hZ2VyLkkuY2hlY2tWaWRlb0luQ2QoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvKirnuqLljIXojrflj5blkI7msqHmnInnnIvlub/lkYrpooblj5bvvIzlho3mrKHojrflvpfnuqLljIXnmoTmnLrkvJrvvIzkuI3kvJrojrflj5bnuqLljIXvvIwg6Ieq5bex5Lmf5Y+v5Lul5aSE55CG5oiQIOWvueW6lOeahOe6ouWMheaPkOmGkuaIluS4jemcgOimgei/memHjOeahOWIpOaWrSAqL1xuICAgICAgICBpZiAodGhpcy5jdXJSZWRwYWNrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB0aGlzLmRhdGEuY250KSB0aGlzLmRhdGEuY250ID0gMDtcbiAgICAgICAgbGV0IGNudCA9IHRoaXMuZGF0YS5jbnQ7XG4gICAgICAgIGlmIChjbnQgPj0gdGhpcy5jb25mTGVuKSBjbnQgPSB0aGlzLmNvbmZMZW4gLSAxO1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZltjbnQgKyAxXTtcbiAgICAgICAgbGV0IHJhbjIgPSBNYXRoLnJhbmRvbSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIHJhbjIgPCBkYXRhLnBlcikge1xuICAgICAgICAgICAgbGV0IGNhc2ggPSAwLjAwMDAwMTtcbiAgICAgICAgICAgIHRoaXMuY3VyUmVkcGFja2V0ID0gY2FzaDtcbiAgICAgICAgICAgIC8vKirlvLnlh7rnuqLljIXnmoTnlYzpnaIsICDmmoLml7blpITnkIbmiJAg55u05o6l55yL5bm/5ZGK6I635Y+W6YeR5biBICovXG4gICAgICAgICAgIGF3YWl0ICBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKVxuICAgICAgICAgICB0aGlzLmdldFJlcGFja2V0KClcbiAgICAgICAgICAgLyoq5pu05paw5Z+65pys5pi+56S6ICovXG4gICAgICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLlVQREFURV9DT0lOKTtcblxuICAgICAgICAgICAgLyoqKiAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldFJlcGFja2V0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VyUmVkcGFja2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuZGF0YS5jbnQgKz0gMTtcbiAgICAgICAgdGhpcy5kYXRhLmxpc3QucHVzaCh0aGlzLmN1clJlZHBhY2tldCk7XG4gICAgICAgIHRoaXMuZGF0YS5sYXN0VGltZSA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpO1xuICAgICAgICB0aGlzLmRhdGEudG9kYXlDbnQgKz0gMTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gMSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2sxKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gNSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2s1KTtcbiAgICAgICAgdGhpcy5jdXJSZWRwYWNrZXQgPSAwO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmRhdGFDTlQsIHRoaXMuZGF0YS5jbnQpO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCB0aGlzLmRhdGEudG9kYXlDbnQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqICovXG4gICAgYXN5bmMgZ2V0Q3VyUmVkcGFja2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJSZWRwYWNrZXQ7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogUmVkcGFja2V0RGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICAvKirojrflj5bmgLvlhbHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBnZXRUb3RhbENvaW4oKSB7XG4gICAgICAgIGxldCB0b3RhbENvaW4gPSBhd2FpdCBNeUNvaW5EYXRhLmdldENvaW4oKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsQ29pbjtcbiAgICB9XG4gICAgLyoq6I635Y+W5pys5qyh5aWW5Yqx55qE6YeR5biB5pWwICovXG4gICAgYXN5bmMgYWRkQ29pbihrZXk6IG51bWJlciA9IDEpIHtcbiAgICAgICAgbGV0IGNvaW5EYXRhID0gYXdhaXQgQWRkR29sZERhdGEuYWRkQ29pbihrZXkpO1xuICAgICAgICByZXR1cm4gY29pbkRhdGE7XG4gICAgfVxuXG4gICAgLyoq6I635Y+W5pyA5L2O5o+Q5qGjICovXG4gICAgYXN5bmMgIG1pbldpdGhEcmF3YWwoKSB7XG4gICAgICAgIGxldCBtaW5Db2luID0gYXdhaXQgQXBwU2RrLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICByZXR1cm4gbWluQ29pbjtcbiAgICB9XG4gICAgc3RhdGljIGdldCBJKCk6IFJlZHBhY2tldE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChSZWRwYWNrZXRNb2RlbCkgYXMgUmVkcGFja2V0TW9kZWw7XG4gICAgfVxufVxuXG5jbGFzcyBSZWRwYWNrZXREYXRhIHtcbiAgICBjbnQ6IG51bWJlcjtcbiAgICBsaXN0OiBBcnJheTxudW1iZXI+O1xuICAgIGxhc3RUaW1lOiBudW1iZXI7XG4gICAgdG9kYXlDbnQ6IG51bWJlcjtcbn1cblxuY2xhc3MgUmVkcGFja2V0Q29uZmlnRGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBwZXI6IG51bWJlcjtcbiAgICBjYXNoOiBudW1iZXI7XG59IiwiaW1wb3J0IEJhc2VNb2RlbCBmcm9tIFwiLi9CYXNlTW9kZWxcIjtcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuLi8uLi9zZGsvQXBwU2RrXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuXG4vKipcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrZU1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcblxuICAgIHByaXZhdGUgY29uZjogYW55O1xuICAgIHByaXZhdGUgZWxlUHJvYmFiaWxpdHlBcnI6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSB0b3RhbFdlaWdodDogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHByb0FyckxlbjogbnVtYmVyID0gMDtcbiAgICAvKirnuqLljIXlh7rnjrDnmoTmgLvmrKHmlbDmr4/ml6UgKi9cbiAgICBwcml2YXRlIHJlZF9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBjdXJfcmVkX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKirmkYfkuIDmkYflh7rnjrDnmoTmgLvmrKHmlbAgKi9cbiAgICBwcml2YXRlIHNoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcblxuICAgIHByaXZhdGUgY3VyX3NoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKipcbiAgICAgKiByZWRfZGF5X2xpbWl0XHTnuqLljIXmr4/ml6XmnoHpmZDkuqflh7pcdFxuICAgICogIHNoYWtlX2RheV9saW1pdFx05pGH5LiA5pGH5q+P5pel5p6B6ZmQ5Lqn5Ye6XHRcbiAgICAqIGludGVyc3RpdGlhbF9jbnQg5o+S5bGP6K6h5pWw77yI5q+P5Ye6546weOasoemAmueUqOiOt+W+l+eJqeWTgeeVjOmdouWQju+8jOWHuueOsOaPkuWxj++8iVx0XG4gICAgKiBpbnRlcnN0aXRpYWxfZGVsYXlcdOaPkuWxj+WHuueOsOW7tuaXtu+8iOavq+enku+8iVx0XG4gICAgICovXG4gICBcbiAgICAvKipcbiAgICAgKiAgLy8gbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgLy8gICAgIGRhdGE6IHtcbiAgICAgICAgLy8gICAgICAgICBnYW1lQ29uZmlnOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwiY29uZmlnXCI6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwicmVkX2RheV9saW1pdFwiOiAxMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwic2hha2VfZGF5X2xpbWl0XCI6IDUwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJpbnRlcnN0aXRpYWxfY250XCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcImludGVyc3RpdGlhbF9kZWxheVwiOiA1MDBcbiAgICAgICAgLy8gICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJzaGFrZVwiOiBbXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiAxLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogNDAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDBcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiAzLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDMwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAxXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogNCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogMyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAxMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMlxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDUsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDQsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMzAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDFcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiA2LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA0LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogNSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAzMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDUsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiA5LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA2LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDMwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAxXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDYsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAzMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEyLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA3LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTMsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogNTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDBcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICAgICAgXSxcbiAgICAgICAgLy8gICAgICAgICAgICAgJ2NvaW5fY29uZmlnJzogW11cbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgKi9cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgQXBwU2RrLkkuZ2V0R2FtZUNvbmZpZygpO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tU2hha2VNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KHJlc3VsdC5kYXRhKSlcbiAgICAgICAgXG4gICAgICAgIGxldCBkYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIGlmIChkYXRhWydnYW1lQ29uZmlnJ10pIHtcbiAgICAgICAgICAgIGxldCBnYW1lRGF0YSA9IGRhdGFbJ2dhbWVDb25maWcnXTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoZ2FtZURhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREYXRhKGdhbWVEYXRhKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFNoYWtlRGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lKSB8fCAnMCc7XG4gICAgICAgIGxldCBsdCA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGxhc3QgPSBEYXRlVXRpbHMudGltZURheShsdCk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcblxuICAgICAgICBpZiAobGFzdCAhPSB0b2RheSkge1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCAwKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQsIDApO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lLCBsYXN0VGltZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjdXJfcmVkX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQpIHx8ICcwJztcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSBwYXJzZUludChjdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICBsZXQgY3VyX3NoYWtlX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3NoYWtlX2RheV9saW1pdCkgfHwgJzAnO1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gcGFyc2VJbnQoY3VyX3NoYWtlX2RheV9saW1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmNvbmZpZyA9IGdhbWVEYXRhWydjb25maWcnXTtcbiAgICAgICAgZ2FtZURhdGFbJ3NoYWtlJ10uZm9yRWFjaChlbGUgPT4ge1xuICAgICAgICAgICAgZGF0YS5zaGFrZVdlaWdodExpc3QucHVzaChlbGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25mID0gW107XG4gICAgICAgIHRoaXMuY29uZiA9IGRhdGEuc2hha2VXZWlnaHRMaXN0O1xuICAgICAgICB0aGlzLmluaXRQcm9iYWJpbGl0eSgpO1xuICAgICAgICB0aGlzLnNoYWtlX2RheV9saW1pdCA9IGRhdGEuY29uZmlnLnNoYWtlX2RheV9saW1pdDtcbiAgICAgICAgdGhpcy5yZWRfZGF5X2xpbWl0ID0gZGF0YS5jb25maWcucmVkX2RheV9saW1pdDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaW5pdFByb2JhYmlsaXR5KCkge1xuICAgICAgICB0aGlzLnRvdGFsV2VpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5jb25mLmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG90YWxXZWlnaHQgKz0gZWxlLndlaWdodDtcbiAgICAgICAgICAgIGxldCBpdGVtVyA9IGVsZS53ZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKVxuICAgICAgICAgICAgICAgIGl0ZW1XICs9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnJbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIgPSBbLi4udGhpcy5lbGVQcm9iYWJpbGl0eUFyciwgaXRlbVddO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLnByb0FyckxlbiA9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIubGVuZ3RoO1xuXG4gICAgfVxuXG4gICAgZ2V0U2hha2VUeXBlKCkge1xuICAgICAgICArK3RoaXMuY3VyX3NoYWtlX2RheV9saW1pdDtcbiAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPiB0aGlzLnNoYWtlX2RheV9saW1pdCkge1xuICAgICAgICAgICAgLyoqJ+asoeaVsOi+vuWIsOS4iumZkO+8jOivt+aYjuWkqeWGjeadpSovXG5cbiAgICAgICAgICAgIC8qKuWcqOatpOWkhOWPr+S7peW8ueahhuetieWkhOeQhiAqL1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByYW4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnRvdGFsV2VpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucHJvQXJyTGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmVsZVByb2JhYmlsaXR5QXJyW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChlbGUgPj0gcmFuKSB7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IGluZGV4IHx8IDEgPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICsrdGhpcy5jdXJfcmVkX2RheV9saW1pdDtcbiAgICAgICAgICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCwgdGhpcy5jdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cl9yZWRfZGF5X2xpbWl0ID4gdGhpcy5yZWRfZGF5X2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogU2hha2VEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBJKCk6IFNoYWtlTW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFNoYWtlTW9kZWwpIGFzIFNoYWtlTW9kZWw7XG4gICAgfVxufVxuXG5cbmNsYXNzIFNoYWtlRGF0YSB7XG4gICAgY29uZmlnOiBTaGFrZUNvbmZpZztcbiAgICBzaGFrZVdlaWdodExpc3Q6IFNoYWtlV2VpZ2h0RGF0YVtdID0gW107XG59XG5pbnRlcmZhY2UgU2hha2VDb25maWcge1xuICAgIHJlZF9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBzaGFrZV9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBpbnRlcnN0aXRpYWxfY250OiBudW1iZXIsXG4gICAgaW50ZXJzdGl0aWFsX2RlbGF5OiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFNoYWtlV2VpZ2h0RGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgd2VpZ2h0OiBudW1iZXI7XG4gICAgbnVtOiBudW1iZXI7XG59XG5cblxuIiwiaW1wb3J0IHsgQXBwU2RrIH0gZnJvbSBcIi4uL0FwcFNka1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRHb2xkRGF0YSB7XG4gICAgc3RhdGljIGNvaW46IHN0cmluZyA9ICcwJztcbiAgICBzdGF0aWMgbXljb2luOiBzdHJpbmcgPSAnMCc7XG4gICAgc3RhdGljIGluaXREYXRhKGRhdGE6IGFueSkge1xuICAgICAgICBpZiAoIXBhcnNlSW50KGRhdGEuY29kZSkpIHtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLm15Y29pbiA9IGRhdGEuZGF0YS5teWNvaW47XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyAgYWRkQ29pbihrZXk6IG51bWJlciA9IDEpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IEFwcFNkay5JLmFkZEdvbGQoa2V5KTtcbiAgICAgICAgcmV0dXJuIFtwYXJzZUludCh0aGlzLmNvaW4pLHBhcnNlSW50KHRoaXMubXljb2luKV07XG5cbiAgICB9XG59IiwiaW1wb3J0IHsgQXBwU2RrIH0gZnJvbSBcIi4uL0FwcFNka1wiO1xyXG5pbXBvcnQgVXRpbCBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgR29sZENvbmZpZ0RhdGEge1xyXG4gICAgYWQ6IE9iamVjdDtcclxuICAgIGFkbmV0OiBzdHJpbmc7XHJcbiAgICBhcHBfbmFtZTogc3RyaW5nO1xyXG4gICAgY29pbl9jb25maWc6IHN0cmluZyA9ICcnO1xyXG4gICAgZ2FtZVVybDogc3RyaW5nO1xyXG4gICAga3VhaV9hcHBfbmFtZTogc3RyaW5nO1xyXG4gICAgcGFuZ29saW46IHN0cmluZztcclxuICAgIHRUdXJib0FnZW50OiBzdHJpbmc7XHJcbiAgICB0ZWFBZ2VudDogbnVtYmVyO1xyXG4gICAgdHJhY2tpbmc6IHN0cmluZztcclxuICAgIHR0QXBwTG9nOiBzdHJpbmc7XHJcbiAgICB1bWlkOiBzdHJpbmc7XHJcbiAgICBnYW1lQ29uZmlnOiBhbnk7XHJcblxyXG4gICAgY29kZTogbnVtYmVyID0gLTM7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogR29sZENvbmZpZ0RhdGEgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEkoKTogR29sZENvbmZpZ0RhdGEge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSlcclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBHb2xkQ29uZmlnRGF0YSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xyXG4gICAgfVxyXG4gICAgaW5pdERhdGEoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGRhdGEuY29kZTtcclxuICAgICAgICBpZiAoIWRhdGEuY29kZSkge1xyXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlID0gZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IGVsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRHb2xkQ29uZmlnKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IEFwcFNkay5JLmdldEdhbWVDb25maWcoKTtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgaWYgKGRhdGFbJ2dhbWVDb25maWcnXSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdhbWVEYXRhID0gZGF0YVsnZ2FtZUNvbmZpZyddO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCB0aGlzLmxvYWRHb2xkQ2ZnKGdhbWVEYXRhWydjb2luX2NvbmZpZyddWzBdKVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb25maWdKc29uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRHb2xkQ2ZnKHJlczogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCAgVXRpbC5JLmxvYWQocmVzKTtcclxuICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi4vQXBwU2RrXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE15Q29pbkRhdGEge1xuICAgIHN0YXRpYyBjb2luOiBzdHJpbmcgPSAnJztcbiAgICBzdGF0aWMgaW5pdERhdGEoZGF0YTogYW55KSB7XG4gICAgICAgIGlmICghcGFyc2VJbnQoZGF0YS5jb2RlKSl7XG4gICAgICAgICAgICB0aGlzLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmNvaW4gPScwJztcbiAgICAgICAgfVxuICAgICAgIFxuICAgIH1cbiAgICAgc3RhdGljIGFzeW5jIGdldENvaW4oKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBBcHBTZGsuSS5teUNvaW4oKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuY29pbilcbiAgICB9XG59IiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXG5pbXBvcnQgVmlldz1MYXlhLlZpZXc7XHJcbmltcG9ydCBEaWFsb2c9TGF5YS5EaWFsb2c7XHJcbmltcG9ydCBTY2VuZT1MYXlhLlNjZW5lO1xudmFyIFJFRzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XG5leHBvcnQgbW9kdWxlIHVpIHtcclxuICAgIGV4cG9ydCBjbGFzcyBUZXN0U2NlbmVVSSBleHRlbmRzIFNjZW5lIHtcclxuXHRcdHB1YmxpYyBidG5JbnZpdGU6TGF5YS5TcHJpdGU7XG5cdFx0cHVibGljIGJ0blNlcnZlcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuVmlicmF0ZTpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuX3NoYWtlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5EcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZWxvYWRBRDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Jhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Z1bGxBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd05hdGl2ZUFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93SW50ZXJBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmV3YXJkQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blJlZHBhY2tldDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgTmF0aXZlQUQ6VmlldztcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTY2VuZShcIlRlc3RTY2VuZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5UZXN0U2NlbmVVSVwiLFRlc3RTY2VuZVVJKTtcclxufVxyIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJyYXlVdGlscyB7XG4gICAgLyoqXG4gICAgICog56e76Zmk5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUZyb21BcnIoYXJyOiBBcnJheTxhbnk+LCBvYmo6IGFueSkge1xuICAgICAgICBsZXQgaW5kZXggPSBhcnIuaW5kZXhPZihvYmopO1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tRnJvbUFycihhcnI6IEFycmF5PGFueT4pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBhcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOe7hOmaj+acuuaOkuW6j1xuICAgICAqL1xuICAgIHN0YXRpYyBzaHVmZmxlKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICByZXR1cm4gYXJyLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mKGFyciwgY2FsbGJhY2ssIGN0eD8pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGN0eCwgdGhpc1tpXSwgaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBlYWNoKGFyciwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBhcnJbaV0sIGksIGFycikpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcXVldWUoYXJyKSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBwcm9taXNlIG9mIGFycikge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgcHJvbWlzZShyZXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQXJyYXkoYXJyLCBjb3VudCkge1xuICAgICAgICBsZXQgc2h1ZmZsZWQgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIGxldCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBsZXQgbWluID0gbGVuIC0gY291bnQsIHRlbXAsIGluZGV4O1xuICAgICAgICB3aGlsZSAobGVuLS0gPiBtaW4pIHtcbiAgICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcigobGVuICsgMSkgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIHRlbXAgPSBzaHVmZmxlZFtpbmRleF07XG4gICAgICAgICAgICBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtsZW5dO1xuICAgICAgICAgICAgc2h1ZmZsZWRbbGVuXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKG1pbik7XG4gICAgfVxufSIsIi8qKlxuICog5pel5pyf5bel5YW357G7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVVdGlscyB7XG4gICAgc3RhdGljIGdldCBub3coKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5ub3dUaW1lIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBub3dUaW1lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvZGF5KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGhpcy5ub3dUaW1lKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyB0aW1lRGF5KHRpbWVOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGltZU51bSk7XG4gICAgICAgIGxldCB5ZWFyID0gdGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbW9udGggPSB0aW1lLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBsZXQgZGF0ZSA9IHRpbWUuZ2V0RGF0ZSgpO1xuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHt0aGlzLmFkZChtb250aCl9LSR7dGhpcy5hZGQoZGF0ZSl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7np5LmlbDmoLzlvI/ljJblrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gc2Vjb25kIOenkuaVsFxuICAgICAqIEBwYXJhbSB0eXBlIDE6MDA6MDA6MDAgICAyOnl5eXktbW0tZGQgaDptOnMgICAgMzowMDowMCAgIDQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgICogQHJldHVyblxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZChzZWNvbmQ6IG51bWJlciwgdHlwZTogbnVtYmVyID0gMSk6IHN0cmluZyB7XG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQwKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDEoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMihzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQzKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gMDogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDAodDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gNjApO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcih0ICUgNjApO1xuICAgICAgICB2YXIgbWluczogc3RyaW5nO1xuICAgICAgICB2YXIgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbnMgKyBcIjpcIiArIHNlbnM7XG4gICAgfVxuXG4gICAgLy8xOiAwMDowMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMSh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhvdXJzdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMzYwMCk7XG4gICAgICAgIGxldCBob3Vyczogc3RyaW5nO1xuICAgICAgICBsZXQgZGF5ID0gJyc7XG4gICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgaG91cnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91cnN0IDwgMTApXG4gICAgICAgICAgICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzdDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBoID0gaG91cnN0ICUgMjQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA+PSAyNCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcihob3Vyc3QgLyAyNCkgKyAnZCAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgbGV0IHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgbGV0IG1pbnM6IHN0cmluZztcbiAgICAgICAgbGV0IHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXkgKyBob3VycyArIFwiOlwiICsgbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzM6IDAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQzKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzI6eXl5eS1tbS1kZCBoOm06c1xuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB2YXIgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IFx0Ly/ov5Tlm57nmoTmnIjku73ku44wLTEx77ybXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgaG91cnM6IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBzZWNvbmQ6IG51bWJlciA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRheSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIG1pbnV0ZSArIFwiOlwiICsgc2Vjb25kO1xuXG4gICAgfVxuXG4gICAgLy80Onh45aSp5YmN77yMeHjlsI/ml7bliY3vvIx4eOWIhumSn+WJjVxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kNCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgdCA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xuICAgICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0ID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0IC8gMjQpICsgXCLlpKnliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgXCLlsI/ml7bliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWUgLyA2MCkgKyBcIuWIhumSn+WJjVwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ1KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIOavj+S4quaXtumXtOWNleS9jeaJgOWvueW6lOeahOenkuaVsFxuICAgICAgICB2YXIgb25lRGF5OiBudW1iZXIgPSAzNjAwICogMjQ7XG4gICAgICAgIHZhciBvbmVIb3Vyc3Q6IG51bWJlciA9IDM2MDA7XG4gICAgICAgIHZhciBvbmVNaW5zdDogbnVtYmVyID0gNjA7XG5cbiAgICAgICAgdmFyIGRheXMgPSBNYXRoLmZsb29yKHRpbWUgLyBvbmVEYXkpO1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgLyBvbmVIb3Vyc3QpXG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgLyBvbmVNaW5zdCkgIC8vTWF0aC5mbG9vcih0aW1lICUgb25lRGF5ICUgb25lSG91cnN0IC8gb25lTWluc3QpO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgJSBvbmVNaW5zdCkgLy90aW1lO1xuXG4gICAgICAgIHZhciBkYXlzczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIGhvdXJzczogc3RyaW5nID0gXCJcIlxuICAgICAgICB2YXIgbWluc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHZhciBzZWNzczogc3RyaW5nID0gXCJcIlxuICAgICAgICBpZiAodGltZSA+IDApIHtcbiAgICAgICAgICAgIC8v5aSpXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF5c3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIC8v5bCP5pe2XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8v5YiGXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vjc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWluc3MgKyBzZWNzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgc2Vjc3NcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCIwXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgbWluc3M7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IGRheXMgKyBcIuWkqVwiO1xuICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiMFwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIiArIGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXNzICsgaG91cnNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZChudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgT2JqZWN0UG9vbCBmcm9tIFwiLi9PYmplY3RQb29sXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0SW5zdGFuY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIGNsenMgPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBvYmplY3RzID0gW107XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldChjbHM6IGFueSkge1xuICAgICAgICBsZXQgaWR4ID0gdGhpcy5jbHpzLmluZGV4T2YoY2xzKTtcbiAgICAgICAgcmV0dXJuIChpZHggPj0gMCAmJiB0aGlzLm9iamVjdHNbaWR4XSkgfHwgdGhpcy5jcmVhdGUoY2xzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUoY2xzOiBhbnkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE9iamVjdFBvb2wucG9wKGNscyk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICAgIHRoaXMuY2x6cy5wdXNoKGNscyk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0UG9vbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xzQXJyID0gW107XG5cbiAgICBzdGF0aWMgcG9wKGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsc0Fyci5pbmRleE9mKGNscyk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICBpZHggPSB0aGlzLmNsc0Fyci5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNsc0Fyci5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtleSA9ICdwb29sS2V5JyArIGlkeDtcbiAgICAgICAgbGV0IGl0ZW0gPSBMYXlhLlBvb2wuZ2V0SXRlbUJ5Q2xhc3Moa2V5LCBjbHMpO1xuICAgICAgICBpdGVtLnBvb2xLZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGl0ZW0pIHtcbiAgICAgICAgTGF5YS5Qb29sLnJlY292ZXIoaXRlbS5wb29sS2V5LCBpdGVtKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFNjYWxlQnV0dG9uU2NyaXB0IHtcbiBcbiAgICBwdWJsaWMgZGVsYXlUaW1lOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBtaW5TY2FsZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIG1vbmtleUJveDogTGF5YS5JbWFnZTtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICrorr7nva5vd25lcuWHveaVsO+8jOWPr+S7peebtOaOpeiOt+WPluWIsOa3u+WKoOmZhOWKoOiEmuacrOeahOe7hOS7tuWunuS+iyBcbiAgICAgKiovXG4gICAgcHVibGljIHNldCBvd25lcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubW9ua2V5Qm94ID0gdmFsdWU7XG4gICAgICAgIC8v6Ieq5a6a5LmJ55qE6ISa5pys5Lya5pyJ5pe25bqP6Zeu6aKY77yM5omA5Lul5Zyo5q2k5re75Yqg5LiA5Liq5bu25pe2XG4gICAgICAgIHRoaXMubW9ua2V5Qm94LmZyYW1lT25jZSgyLCB0aGlzLCB0aGlzLm9uTG9hZGVkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25Mb2FkZWQoKTogdm9pZCB7XG4gICAgICAgLyog6K6+572u5oyJ6ZKu5Li65Y2V5oCB5oyJ6ZKuXG4gICAgICAgICoqIOWPluWAvO+8mlxuICAgICAgICAqKiAx77ya5Y2V5oCB44CC5Zu+54mH5LiN5YGa5YiH5Ymy77yM5oyJ6ZKu55qE55qu6IKk54q25oCB5Y+q5pyJ5LiA56eN44CCXG4gICAgICAgICoqIDLvvJrkuKTmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB5oyJ5LiL5ZKM57uP6L+H5Y+K6YCJ5Lit54q25oCB55qu6IKk44CCXG4gICAgICAgICoqIDPvvJrkuInmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB57uP6L+H54q25oCB55qu6IKk44CB5oyJ5LiL5ZKM6YCJ5Lit54q25oCB55qu6IKkXG4gICAgICAgICovXG4gICAgICAgIC8v5re75Yqg6byg5qCH5oyJ5LiL5LqL5Lu25L6m5ZCs44CC5oyJ5pe25pe257yp5bCP5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfmiqzotbfkuovku7bkvqblkKzjgILmiqzotbfml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XG4gICAgICAgIC8v5re75Yqg6byg5qCH56a75byA5LqL5Lu25L6m5ZCs44CC56a75byA5pe26L+Y5Y6f5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgcHJpdmF0ZSBzY2FsZVNtYWxsKCk6dm9pZHtcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcbiAgICAgICAgTGF5YS5Ud2Vlbi50byh0aGlzLm1vbmtleUJveCwge3NjYWxlWDowLjgsIHNjYWxlWTogMC44fSwgMik7XG4gICAgfVxuICAgIHByaXZhdGUgc2NhbGVCaWcoKTp2b2lke1xuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjEsIHNjYWxlWToxfSwgMik7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFV0aWwge1xuICAgIHB1YmxpYyBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgIH1cbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBMYXlhLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXRpbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IFV0aWwge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IFV0aWwpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gRGF0YUtleSB7XG4gICAgY3VyX3JlZF9kYXlfbGltaXQgPSAnY3VyX3JlZF9kYXlfbGltaXQnLFxuICAgIGN1cl9zaGFrZV9kYXlfbGltaXQgPSAnY3VyX3NoYWtlX2RheV9saW1pdCcsXG4gICAgc2hha2VMYXN0VGltZSA9ICdzaGFrZUxhc3RUaW1lJyxcbiAgICBkYXRhQ05UID0gJ2RhdGFDTlQnLFxuICAgIHRvZGF5Q250ID0gJ3RvZGF5Q250JyxcbiAgICBsYXN0VGltZSA9ICdsYXN0VGltZScsXG59Il19 | |
2072 | +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL05hdGl2ZUFkLnRzIiwic3JjL3Nkay9QY1Nkay50cyIsInNyYy9zZGsvVFRBZFNkay50cyIsInNyYy9zZGsvVHJhY2tpbmdTZGsudHMiLCJzcmMvc2RrL21vZGVsL0Jhc2VNb2RlbC50cyIsInNyYy9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1NoYWtlTW9kZWwudHMiLCJzcmMvdWkvbGF5YU1heFVJLnRzIiwic3JjL3VpdGwvQXJyYXlVdGlscy50cyIsInNyYy91aXRsL0RhdGVVdGlscy50cyIsInNyYy91aXRsL09iamVjdEluc3RhbmNlLnRzIiwic3JjL3VpdGwvT2JqZWN0UG9vbC50cyIsInNyYy91aXRsL1NjYWxlQnV0dG9uU2NyaXB0LnRzIiwic3JjL3VpdGwvVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNWQSxnR0FBZ0c7QUFDaEcseUNBQW1DO0FBQ25DLDhEQUF3RDtBQUN4RCx5Q0FBbUM7QUFDbkMsMkNBQXFDO0FBQ3JDOztFQUVFO0FBQ0Y7SUFhSTtJQUFjLENBQUM7SUFDUixlQUFJLEdBQVg7UUFDSSxJQUFJLEdBQUcsR0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxHQUFHLENBQUMs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QUFDLGFBQWEsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtB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QUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3pELENBQUM7OztPQUFBO0lBQ0wsV0FBQztBQUFELENBakJBLEFBaUJDLElBQUE7O0FBRUQsSUFBWSxPQU9YO0FBUEQsV0FBWSxPQUFPO0lBQ2Ysa0RBQXVDLENBQUE7SUFDdkMsc0RBQTJDLENBQUE7SUFDM0MsMENBQStCLENBQUE7SUFDL0IsOEJBQW1CLENBQUE7SUFDbkIsZ0NBQXFCLENBQUE7SUFDckIsZ0NBQXFCLENBQUE7QUFDekIsQ0FBQyxFQVBXLE9BQU8sR0FBUCxlQUFPLEtBQVAsZUFBTyxRQU9sQiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cclxuaW1wb3J0IFRlc3RTY2VuZSBmcm9tIFwiLi9UZXN0U2NlbmVcIlxuaW1wb3J0IFNjYWxlQnV0dG9uU2NyaXB0IGZyb20gXCIuL3VpdGwvU2NhbGVCdXR0b25TY3JpcHRcIlxuaW1wb3J0IFJlZERyYXdhbCBmcm9tIFwiLi9SZWREcmF3YWxcIlxuaW1wb3J0IE5hdGl2ZUFkIGZyb20gXCIuL3Nkay9OYXRpdmVBZFwiXHJcbi8qXHJcbiog5ri45oiP5Yid5aeL5YyW6YWN572uO1xyXG4qL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lQ29uZmlne1xyXG4gICAgc3RhdGljIHdpZHRoOm51bWJlcj03NTA7XHJcbiAgICBzdGF0aWMgaGVpZ2h0Om51bWJlcj0xMzM0O1xyXG4gICAgc3RhdGljIHNjYWxlTW9kZTpzdHJpbmc9XCJmaXhlZHdpZHRoXCI7XHJcbiAgICBzdGF0aWMgc2NyZWVuTW9kZTpzdHJpbmc9XCJub25lXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25WOnN0cmluZz1cInRvcFwiO1xyXG4gICAgc3RhdGljIGFsaWduSDpzdHJpbmc9XCJsZWZ0XCI7XHJcbiAgICBzdGF0aWMgc3RhcnRTY2VuZTphbnk9XCJUZXN0U2NlbmUuc2NlbmVcIjtcclxuICAgIHN0YXRpYyBzY2VuZVJvb3Q6c3RyaW5nPVwiXCI7XHJcbiAgICBzdGF0aWMgZGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBzdGF0OmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgcGh5c2ljc0RlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgZXhwb3J0U2NlbmVUb0pzb246Ym9vbGVhbj10cnVlO1xyXG4gICAgY29uc3RydWN0b3IoKXt9XHJcbiAgICBzdGF0aWMgaW5pdCgpe1xyXG4gICAgICAgIHZhciByZWc6IEZ1bmN0aW9uID0gTGF5YS5DbGFzc1V0aWxzLnJlZ0NsYXNzO1xyXG4gICAgICAgIHJlZyhcIlRlc3RTY2VuZS50c1wiLFRlc3RTY2VuZSk7XG4gICAgICAgIHJlZyhcInVpdGwvU2NhbGVCdXR0b25TY3JpcHQudHNcIixTY2FsZUJ1dHRvblNjcmlwdCk7XG4gICAgICAgIHJlZyhcIlJlZERyYXdhbC50c1wiLFJlZERyYXdhbCk7XG4gICAgICAgIHJlZyhcInNkay9OYXRpdmVBZC50c1wiLE5hdGl2ZUFkKTtcclxuICAgIH1cclxufVxyXG5HYW1lQ29uZmlnLmluaXQoKTsiLCJpbXBvcnQgR2FtZUNvbmZpZyBmcm9tIFwiLi9HYW1lQ29uZmlnXCI7XHJcbmltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4vc2RrL0FkTWFuYWdlclwiO1xyXG5pbXBvcnQgU2hha2VNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvU2hha2VNb2RlbFwiO1xyXG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4vc2RrL1BjU2RrXCI7XHJcbmltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcclxuY2xhc3MgTWFpbiB7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHQvL+agueaNrklEReiuvue9ruWIneWni+WMluW8leaTjlx0XHRcclxuXHRcdGlmICh3aW5kb3dbXCJMYXlhM0RcIl0pIExheWEzRC5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0KTtcclxuXHRcdGVsc2UgTGF5YS5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0LCBMYXlhW1wiV2ViR0xcIl0pO1xyXG5cdFx0TGF5YVtcIlBoeXNpY3NcIl0gJiYgTGF5YVtcIlBoeXNpY3NcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhW1wiRGVidWdQYW5lbFwiXSAmJiBMYXlhW1wiRGVidWdQYW5lbFwiXS5lbmFibGUoKTtcclxuXHRcdExheWEuc3RhZ2Uuc2NhbGVNb2RlID0gR2FtZUNvbmZpZy5zY2FsZU1vZGU7XHJcblx0XHRMYXlhLnN0YWdlLnNjcmVlbk1vZGUgPSBHYW1lQ29uZmlnLnNjcmVlbk1vZGU7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduViA9IEdhbWVDb25maWcuYWxpZ25WO1xyXG5cdFx0TGF5YS5zdGFnZS5hbGlnbkggPSBHYW1lQ29uZmlnLmFsaWduSDtcclxuXHRcdC8v5YW85a655b6u5L+h5LiN5pSv5oyB5Yqg6L29c2NlbmXlkI7nvIDlnLrmma9cclxuXHRcdExheWEuVVJMLmV4cG9ydFNjZW5lVG9Kc29uID0gR2FtZUNvbmZpZy5leHBvcnRTY2VuZVRvSnNvbjtcclxuXHJcblx0XHQvL+aJk+W8gOiwg+ivlemdouadv++8iOmAmui/h0lEReiuvue9ruiwg+ivleaooeW8j++8jOaIluiAhXVybOWcsOWdgOWinuWKoGRlYnVnPXRydWXlj4LmlbDvvIzlnYflj6/miZPlvIDosIPor5XpnaLmnb/vvIlcclxuXHRcdGlmIChHYW1lQ29uZmlnLmRlYnVnIHx8IExheWEuVXRpbHMuZ2V0UXVlcnlTdHJpbmcoXCJkZWJ1Z1wiKSA9PSBcInRydWVcIikgTGF5YS5lbmFibGVEZWJ1Z1BhbmVsKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5waHlzaWNzRGVidWcgJiYgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0pIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdLmVuYWJsZSgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcuc3RhdCkgTGF5YS5TdGF0LnNob3coKTtcclxuXHRcdExheWEuYWxlcnRHbG9iYWxFcnJvciA9IHRydWU7XHJcblxyXG5cdFx0Ly/mv4DmtLvotYTmupDniYjmnKzmjqfliLbvvIx2ZXJzaW9uLmpzb27nlLFJREXlj5HluIPlip/og73oh6rliqjnlJ/miJDvvIzlpoLmnpzmsqHmnInkuZ/kuI3lvbHlk43lkI7nu63mtYHnqItcclxuXHRcdExheWEuUmVzb3VyY2VWZXJzaW9uLmVuYWJsZShcInZlcnNpb24uanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25WZXJzaW9uTG9hZGVkKSwgTGF5YS5SZXNvdXJjZVZlcnNpb24uRklMRU5BTUVfVkVSU0lPTik7XHJcblx0fVxyXG5cclxuXHRvblZlcnNpb25Mb2FkZWQoKTogdm9pZCB7XHJcblx0XHQvL+a/gOa0u+Wkp+Wwj+WbvuaYoOWwhO+8jOWKoOi9veWwj+WbvueahOaXtuWAme+8jOWmguaenOWPkeeOsOWwj+WbvuWcqOWkp+WbvuWQiOmbhumHjOmdou+8jOWImeS8mOWFiOWKoOi9veWkp+WbvuWQiOmbhu+8jOiAjOS4jeaYr+Wwj+WbvlxyXG5cdFx0TGF5YS5BdGxhc0luZm9NYW5hZ2VyLmVuYWJsZShcImZpbGVjb25maWcuanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25Db25maWdMb2FkZWQpKTtcclxuXHR9XHJcblxyXG5cdG9uQ29uZmlnTG9hZGVkKCk6IHZvaWQge1xyXG5cclxuXHRcdHRoaXMuaW5pdERhdGEoKTtcclxuXHRcdC8v5Yqg6L29SURF5oyH5a6a55qE5Zy65pmvXHJcblx0XHRHYW1lQ29uZmlnLnN0YXJ0U2NlbmUgJiYgTGF5YS5TY2VuZS5vcGVuKEdhbWVDb25maWcuc3RhcnRTY2VuZSk7XHJcblx0fVxyXG5cclxuXHQvKirliJ3lp4vljJZTREsgKi9cclxuXHRhc3luYyBpbml0RGF0YSgpIHtcclxuXHRcdC8qKumakOiXj+WQr+WKqOWxjyAqL1xyXG5cdFx0UGNTZGsuSS5oaWRlU3BsYXNoKClcclxuXHRcdC8qKuWIneWni+WMlmFkayDojrflj5ZhcHDphY3nva7kv6Hmga8gKi9cclxuXHRcdFBjU2RrLkkuaW5pdCgpO1xyXG5cdFx0Lyoq6aKE5Yqg6L296KeG6aKRICovXHJcblx0XHRBZE1hbmFnZXIuSS5pbml0KCk7XHJcblx0XHQvKirojrflj5bnuqLljIXphY3nva4g5pGH5LiA5pGHIOetiemdmeaAgeaVsOaNriAqL1xyXG5cdFx0YXdhaXQgUGNTZGsuSS5pbml0R2FtZUNvbmZpZygpO1xyXG5cclxuXHJcblx0XHRhd2FpdCBSZWRwYWNrZXRNb2RlbC5JLmluaXQoKVxyXG5cclxuICAgICAgICBhd2FpdCBTaGFrZU1vZGVsLkkuaW5pdCgpO1xyXG5cdH1cclxufVxyXG4vL+a/gOa0u+WQr+WKqOexu1xyXG5uZXcgTWFpbigpO1xyXG4iLCJpbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5pbXBvcnQgeyBFdmVudENlbnRlciB9IGZyb20gXCIuL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi9ldmVudC9FdmVudEVudW1cIjtcbmltcG9ydCBQY1NkayBmcm9tIFwiLi9zZGsvUGNTZGtcIjtcbi8qKlxuICog5Li755WM6Z2iICDph5HluIHph5Hpop1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkRHJhd2FsIGV4dGVuZHMgTGF5YS5TY3JpcHQge1xuICAgIC8qKiBAcHJvcCB7bmFtZTpjb2lubGFiLCB0aXBzOlwi6YeR5biBXCIsIHR5cGU6Tm9kZX0qL1xuICAgIGNvaW5sYWI6IExheWEuTGFiZWw7XG4gICAgLyoqIEBwcm9wIHtuYW1lOnRpcGxhYiwgdGlwczpcIuaPkOekulwiLCB0eXBlOk5vZGV9Ki9cbiAgICB0aXBsYWI6IExheWEuTGFiZWw7XG5cbiAgICBwcml2YXRlIHRvdGFsQ29pbjogbnVtYmVyID0gMTEwO1xuXG4gICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cbiAgICBvblN0YXJ0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXIoKTtcbiAgICAgICAgLy8gdGhpcy50aXBsYWIudmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgICBvbkVuYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIuYWRkKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIuYWRkKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBvbkRpc2FibGUoKSB7XG4gICAgICAgIEV2ZW50Q2VudGVyLnJlbW92ZShFdmVudEVudW0uQVBQX1NIT1csIHRoaXMsIHRoaXMudXBkYXRlU3Rhcik7XG4gICAgICAgIEV2ZW50Q2VudGVyLnJlbW92ZShFdmVudEVudW0uVVBEQVRFX0NPSU4sIHRoaXMsIHRoaXMudXBkYXRlU3Rhcik7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlU3RhcigpIHtcbiAgICAgICAgbGV0IGNvaW4gPSBhd2FpdCBQY1Nkay5JLm15Q29pbigpO1xuICAgICAgICB0aGlzLnRvdGFsQ29pbiA9IGNvaW47XG4gICAgICAgIHRoaXMuY29pbmxhYi50ZXh0ID0gJycgKyBjb2luO1xuICAgICAgICBsZXQgc3RyID0gJ+WPr+aPkOeOsCc7XG4gICAgICAgIC8qKuabtOaWsOS4i+S4i+S4gOasoeaPkOeOsOeahOmineW6piAqL1xuICAgICAgICBsZXQgbmV4dERyYXdhbCA9IGF3YWl0ICBQY1Nkay5JLm1pbldpdGhEcmF3YWwoKTtcbiAgICAgICAgaWYgKHRoaXMudG90YWxDb2luID4gMCkge1xuICAgICAgICAgICAgbGV0IGxlZnRDb2luID0gbmV4dERyYXdhbCAtIHRoaXMudG90YWxDb2luO1xuICAgICAgICAgICAgaWYgKGxlZnRDb2luID4gMClcbiAgICAgICAgICAgICAgICBzdHIgPSBg6L+Y5beuJHsobGVmdENvaW4gLyAxMDAwMCkudG9GaXhlZCgzKX3ph5Hpop3lj6/mj5DnjrBgO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGlwbGFiLnRleHQgPSBzdHI7XG4gICAgICAgIHRoaXMudGlwbGFiLnZpc2libGUgPSBCb29sZWFuKG5leHREcmF3YWwpO1xuICAgIH1cbn0iLCJpbXBvcnQgeyB1aSB9IGZyb20gXCIuL3VpL2xheWFNYXhVSVwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XG5pbXBvcnQgU2hha2VNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvU2hha2VNb2RlbFwiO1xuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xuaW1wb3J0IFBjU2RrIGZyb20gXCIuL3Nkay9QY1Nka1wiO1xuaW1wb3J0IE5hdGl2ZUFkIGZyb20gXCIuL3Nkay9OYXRpdmVBZFwiO1xuaW1wb3J0IFV0aWwgZnJvbSBcIi4vdWl0bC9VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RTY2VuZSBleHRlbmRzIHVpLlRlc3RTY2VuZVVJIHtcbiAgICBwcml2YXRlIGlzTG9uZ1ZpYnJhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy/lhbPpl63lpJrngrnop6bmjqfvvIzlkKbliJnlsLHml6DmlYzkuoZcbiAgICAgICAgTGF5YS5Nb3VzZU1hbmFnZXIubXVsdGlUb3VjaEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVRlc3RTY2VuZS0tLS0tLS0nKVxuICAgICAgICAvLyB0aGlzLk5hdGl2ZUFELnZpc2libGUgPSBmYWxzZTtcblxuICAgIH1cblxuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ0blNlcnZlci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5TZXJ2ZXIpO1xuICAgICAgICB0aGlzLmJ0blZpYnJhdGUub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgKCkgPT4ge1xuICAgICAgICAgICAgUGNTZGsuSS52aWJyYXRlKHRoaXMuaXNMb25nVmlicmF0ZSA/IDAgOiAxKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb25nVmlicmF0ZSA9ICF0aGlzLmlzTG9uZ1ZpYnJhdGU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJ0bkRyYXdhbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5QZXJzb25hbCk7XG4gICAgICAgIHRoaXMuYnRuSW52aXRlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuaW52aXRhdGlvbik7XG4gICAgICAgIHRoaXMuYnRuX3NoYWtlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMudG91Y2hTaGFrZSk7XG4gICAgICAgIHRoaXMuYnRuUHJlbG9hZEFELm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZEFEKTtcbiAgICAgICAgdGhpcy5idG5TaG93QmFubmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Jhbm5lcik7XG4gICAgICAgIHRoaXMuYnRuU2hvd0Z1bGxBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dGdWxsQWQpO1xuICAgICAgICB0aGlzLmJ0blNob3dOYXRpdmVBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dOYXRpdmVBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd0ludGVyQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93SW50ZXJBZCk7XG4gICAgICAgIHRoaXMuYnRuUmV3YXJkQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93UmV3YXJkQWQpO1xuICAgICAgICB0aGlzLmJ0blJlZHBhY2tldC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5SZWRwYWNrZXQpO1xuXG4gICAgICAgIHRoaXMuYnRuUHJlVmlkZW8ub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkUmV3YXJkQWQpO1xuICAgICAgICB0aGlzLmJ0blByZUZ1bGwub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkRnVsbCk7XG4gICAgICAgIHRoaXMuYnRuUHJlSW5zZXJ0Lm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZEludGVyQWQpO1xuICAgICAgICB0aGlzLmJ0blByZU5hdGl2ZS5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnByZWxvYWROYXRpdmVBZCk7XG4gICAgICAgIHRoaXMuYnRuQ2xvc2VCYW5uZXIub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5jbG9zZUFkQmFubmVyKTtcbiAgICAgICAgdGhpcy5idG5DbG9zZU5hdGl2ZS5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLmNsb3NlQWR2ZXJEaWFsb2cpO1xuICAgICAgICB0aGlzLmJ0bk1pbldpdGhEcmF3YWwub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5taW5XaXRoRHJhd2FsKTtcblxuICAgIH1cblxuICAgIC8qKumihOWKoOi9veW5v+WRiiAqL1xuICAgIGFzeW5jIHByZWxvYWRBRCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXByZWxvYWRBRC0tLS0tLS0nKVxuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5wcmVsb2FkQmFubmVyKCk7XG4gICAgfVxuXG4gICAgcHJlbG9hZFJld2FyZEFkKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5wcmVsb2FkUmV3YXJkQWQoKTtcbiAgICB9XG5cbiAgICBwcmVsb2FkRnVsbCgpIHtcbiAgICAgICAgQWRNYW5hZ2VyLkkucHJlbG9hZEZ1bGxBZCgpO1xuICAgIH1cblxuICAgIHByZWxvYWRJbnRlckFkKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5wcmVsb2FkSW50ZXJBZCgpO1xuICAgIH1cblxuICAgIHByZWxvYWROYXRpdmVBZCgpIHtcbiAgICAgICAgdGhpcy5OYXRpdmVBRC5nZXRDb21wb25lbnQoTmF0aXZlQWQpLmluaXROYXRpdmVBZCgxKTtcbiAgICB9XG5cbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5jbG9zZUFkdmVyRGlhbG9nKClcbiAgICB9XG4gICAgY2xvc2VBZEJhbm5lcigpIHtcbiAgICAgICAgQWRNYW5hZ2VyLkkuY2xvc2VBZEJhbm5lcigpXG4gICAgfVxuXG4gICAgLyoq5pi+56S65YWo5bGP5bm/5ZGKICovXG4gICAgc2hvd0Z1bGxBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dGdWxsQWQtLS0tLS0tJylcbiAgICAgICAgQWRNYW5hZ2VyLkkuc2hvd0Z1bGxBZCgpO1xuICAgIH1cbiAgICAvKirmmL7npLpiYW5uZXIgKi9cbiAgICBzaG93QmFubmVyKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2hvd0Jhbm5lci0tLS0tLS0nKVxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93QmFubmVyKCk7XG4gICAgfVxuXG4gICAgLyoq5L+h5oGv5rWB5bm/5ZGKICovXG4gICAgc2hvd05hdGl2ZUFkKCkge1xuICAgICAgICB0aGlzLk5hdGl2ZUFELmdldENvbXBvbmVudChOYXRpdmVBZCkuaW5pdE5hdGl2ZUFkKCk7XG4gICAgfVxuXG4gICAgLyoq5o+S5bGP5bm/5ZGKICovXG4gICAgc2hvd0ludGVyQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93SW50ZXJBZC0tLS0tLS0nKVxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgIH1cbiAgICAvKirmv4DlirHop4bpopHlub/lkYogKi9cbiAgICBhc3luYyBzaG93UmV3YXJkQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93UmV3YXJkQWQtLS0tLS0tJylcbiAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKCk7XG4gICAgICAgIC8qKuaIkOWKn+WQjuaJp+ihjOWvueW6lOeahOWlluWKsSAqL1xuICAgIH1cbiAgICAvKirmhI/op4Hlj43ppoggKi9cbiAgICBvcGVuU2VydmVyKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBQY1Nkay5JLmZlZWRiYWNrKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlblJlZHBhY2tldCgpIHtcbiAgICAgICAgUmVkcGFja2V0TW9kZWwuSS5jaGVja1JlZHBhY2tldCgpXG4gICAgfVxuXG4gICAgYXN5bmMgbWluV2l0aERyYXdhbCgpIHtcbiAgICAgICAgbGV0IG1vbmV5ID0gYXdhaXQgUGNTZGsuSS5taW5XaXRoRHJhd2FsKClcbiAgICAgICAgdGhpcy5taW5XaXRoRHJhd2FsTGFiLnRleHQgPSAn5pyA5L2O5o+Q546wOicgKyBtb25leTtcbiAgICB9XG5cblxuICAgIC8qKuaJk+W8gOS4quS6uuS4reW/gyAqL1xuICAgIG9wZW5QZXJzb25hbCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLW9wZW5TZXJ2ZXItLS0tLS0tJylcbiAgICAgICAgUGNTZGsuSS5wZXJzb25hbCgwKTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LICovXG4gICAgaW52aXRhdGlvbigpIHtcbiAgICAgICAgUGNTZGsuSS5pbnZpdGF0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogMVx06YeR5biBXG4gICAgMlx05r+A5Yqx6KeG6aKR5ZCO6YeR5biBXG4gICAgM1x0NCA1IDYgNyDmuLjmiI/kuK3lr7nlupTnmoTpgZPlhbdcbiAgICA4XHTnqbpcbiAgICAgKi9cbiAgICB0b3VjaFNoYWtlKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tdG91Y2hTaGFrZS0tLS0tLS0nKVxuICAgICAgICBQY1Nkay5JLnZpYnJhdGUoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIDEu5Zue5Y675pif5pifIOmBk+WFtyBcbiAgICAgICAgICogMi7nuqLljIUgICDnm7TmjqXojrflvpfivqbluIHvvJvmiJbogIXnm7TmjqXlvLnmv4DlirHop4bpopHlkI7vvIzojrflvpfivqbluIFcbiAgICAgICAgICogMy7ml6DpgZPlhbdcbiAgICAgICAgICog55u05o6l5bGV4r2w5o+S5bGPXG4gICAgICAgICAqICAqL1xuICAgICAgICBsZXQgZGF0YSA9IFNoYWtlTW9kZWwuSS5nZXRTaGFrZVR5cGUoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ+aRh+S4gOaRh+iOt+WPlue7k+aenO+8micgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgIC8qKiAn6LCi6LCi5Y+C5LiO77yM5LiL5qyh5aW96L+Q77yBJyovO1xuICAgICAgICAgICAgICAgIEFkTWFuYWdlci5JLnNob3dJbnRlckFkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb2luKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaEFEQ29pbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvcHMoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQcm9wcyhkYXRhKSB7XG4gICAgICAgIGxldCBib29zdGVyO1xuICAgICAgICBsZXQgcmV3YXJkTnVtID0gZGF0YS5udW07XG4gICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAvKipcbiAgICAgICAgICog5aSE55CG5ri45oiP5Lit55qE6YGT5YW35pi+56S6XG4gICAgICAgICAqL1xuICAgICAgICAvLyBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgLy8gICAgIGNhc2UgNDpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmVtb3ZlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA2OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5DaGFuZ2U7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDU6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJlZnJlc2g7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDc6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJhbmRSZW1vdmU7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDM6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlN0YXI7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlY2VpdmVQcm9wc1BvcHdpbiwgYm9vc3RlciwgcmV3YXJkTnVtKTtcblxuICAgIH1cbiAgICAvKipcbiAgICAgKiDnnIvlub/lkYrojrflvpfnuqLljIVcbiAgICAgKi9cbiAgICBhc3luYyB3YXRjaEFEQ29pbigpIHtcbiAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKCk7XG4gICAgICAgIHRoaXMuZ2V0Q29pbigpO1xuICAgIH1cbiAgICAvKirnm7TmjqXojrflvpfnuqLljIUgKi9cbiAgICBnZXRDb2luKCkge1xuICAgICAgICAvL1xi5Yi35paw5oC76YeR5biBXG4gICAgICAgIC8vIEFwcE1hbmFnZXIuSS5yZWRwYWNrZXQuZ2V0UmVwYWNrZXQoKVxuICAgICAgICAvLyBWaWV3TWFuYWdlci5JLm9wZW5Qb3B3aW4oUmVkUGFja2V0UmV3YXJkLCAyKTtcbiAgICB9XG59IiwiaW1wb3J0IHsgRXZlbnRFbnVtIH0gZnJvbSBcIi4vRXZlbnRFbnVtXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGNsYXNzIEV2ZW50Q2VudGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IExheWEuRXZlbnREaXNwYXRjaGVyO1xuICAgIHByaXZhdGUgc3RhdGljIGdldCBJKCk6IExheWEuRXZlbnREaXNwYXRjaGVyIHtcbiAgICAgICAgd2luZG93WydldiddID0gdGhpcy5faW5zdGFuY2U7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgTGF5YS5FdmVudERpc3BhdGNoZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZW1pdChldmVudDogRXZlbnRFbnVtLCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuSS5ldmVudChldmVudC50b1N0cmluZygpLCBhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZCh0eXBlOiBFdmVudEVudW0sIGNhbGxlcjogYW55LCBsaXN0ZW5lcjogRnVuY3Rpb24sIGFyZ3M/OiBBcnJheTxhbnk+KSB7XG4gICAgICAgIHRoaXMuSS5vbih0eXBlLnRvU3RyaW5nKCksIGNhbGxlciwgbGlzdGVuZXIsIGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlKHR5cGU6IEV2ZW50RW51bSwgY2FsbGVyOiBhbnksIGxpc3RlbmVyOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLkkub2ZmKHR5cGUudG9TdHJpbmcoKSwgY2FsbGVyLCBsaXN0ZW5lcik7XG4gICAgfVxufSIsImV4cG9ydCBlbnVtIEV2ZW50RW51bSB7XG5cblx0Q0hFQ0tfUkVEUEFDS0VUID0gPGFueT4nY2hlY2tfcmVkcGFja2V0Jyxcblx0QVBQX1NIT1cgPSA8YW55PidhcHAuc2hvdycsXG5cdEFQUF9ISURFID0gPGFueT4nYXBwLmhpZGUnLFxuXG5cblx0VVBEQVRFX0NPSU4gPSA8YW55Pid1cGRhdGUuY29pbicsXG5cbn0iLCJpbXBvcnQgVFRBZFNkayBmcm9tIFwiLi9UVEFkU2RrXCI7XHJcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRNYW5hZ2VyIHtcclxuICAgIHByaXZhdGUgbGFzdFZpZGVvVGltZTogbnVtYmVyO1xyXG5cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVsb2FkUmV3YXJkQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkQmFubmVyKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkQmFubmVyRXhwcmVzc0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWRSZXdhcmRBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkuc2hvd1Jld2FyZFZpZGVvQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZEZ1bGxBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWRJbnRlckFkKCkge1xyXG4gICAgICAgIC8vIFRUQWRTZGsuSS5zaG93SW50ZXJhY3Rpb25FeHByZXNzQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZE5hdGl2ZUFkKCl7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5jbG9zZUFkdmVyRGlhbG9nKClcclxuICAgIH1cclxuICAgIGNsb3NlQWRCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmNsb3NlQWRCYW5uZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFZpZGVvVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBzaG93RnVsbEFkKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSBhd2FpdCBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRGdWxsQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93SW50ZXJBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRJbnRlckFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgY2hlY2tWaWRlb0luQ2QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZpZGVvVGltZSAmJiAoTGF5YS50aW1lci5jdXJyVGltZXIgLSB0aGlzLmxhc3RWaWRlb1RpbWUgPD0gMzAwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBcclxuICAgIHNob3dOYXRpdmVBZCh4LCB5LCB3LCBoLHByZWxvYWQ9MCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKHgsIHksIHcsIGgscHJlbG9hZCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogQWRNYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KEFkTWFuYWdlcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsImltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4vQWRNYW5hZ2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUFkIGV4dGVuZHMgTGF5YS5TY3JpcHQge1xuXG4gICBwdWJsaWMgaW5pdE5hdGl2ZUFkKHByZWxvYWQ9MCl7XG4gICAgICAgIGxldCBnbG9iYWxQb2ludCA9IHRoaXMuaXRlbS5sb2NhbFRvR2xvYmFsKExheWEuUG9pbnQuRU1QVFksIHRydWUpO1xuICAgICAgICBBZE1hbmFnZXIuSS5zaG93TmF0aXZlQWQoZ2xvYmFsUG9pbnQueCwgZ2xvYmFsUG9pbnQueSwgdGhpcy5pdGVtLndpZHRoLCB0aGlzLml0ZW0uaGVpZ2h0LHByZWxvYWQpO1xuICAgIH1cbiAgICBvbkVuYWJsZSgpOiB2b2lkIHtcbiAgICAgICB0aGlzLmluaXROYXRpdmVBZCgpOyAgIFxuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgQWRNYW5hZ2VyLkkuY2xvc2VBZHZlckRpYWxvZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGl0ZW0oKTogTGF5YS5WaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXIgYXMgYW55O1xuICAgIH1cbn0iLCJpbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4uL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi4vZXZlbnQvRXZlbnRFbnVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBjU2RrIHtcbiAgICBwcml2YXRlIF93aWR0aDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2hlaWdodDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NoYW5uZWw6IHN0cmluZztcbiAgICBwcml2YXRlIF92ZXJzaW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbGV2ZWw6IG51bWJlcjtcbiAgICBwcml2YXRlIF9nYW1lQ29uZmlnOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgcGFuZ29saW5JZDogc3RyaW5nO1xuICAgIHB1YmxpYyBhZG5ldElkOiBzdHJpbmc7XG5cbiAgICBpbml0KCkge1xuICAgICAgICB0aGlzLmdldFN5c3RlbUluZm8oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBteUJyaWRnZSgpIHtcbiAgICAgICAgaWYgKE15QnJpZGdlKSB7XG4gICAgICAgICAgICByZXR1cm4gTXlCcmlkZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgLyoq6I635Y+W5Z+65pys54mI5pys5L+h5oGv5Lul5Y+K5omL5py655qE6YWN572uICovXG4gICAgcHJpdmF0ZSBnZXRTeXN0ZW1JbmZvKGtleTogbnVtYmVyID0gMCkge1xuICAgICAgICBsZXQgcmV0ID0gdGhpcy5teUJyaWRnZS5nZXRTeXN0ZW1JbmZvKGtleSk7XG4gICAgICAgIGxldCB7IHcsIGgsIHZlcnNpb25OYW1lLCBjaGFubmVsLCBwYW5nb2xpbiwgYWRuZXQsIGxldmVsIH0gPSBKU09OLnBhcnNlKHJldCk7XG4gICAgICAgIFt0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0LCB0aGlzLl92ZXJzaW9uLFxuICAgICAgICB0aGlzLl9jaGFubmVsLCB0aGlzLnBhbmdvbGluSWQsXG4gICAgICAgIHRoaXMuYWRuZXRJZCwgdGhpcy5fbGV2ZWxdID0gW3csIGgsIHZlcnNpb25OYW1lLCBjaGFubmVsLCBwYW5nb2xpbiwgYWRuZXQsIGxldmVsXTtcbiAgICB9XG5cbiAgICBpbml0R2FtZUNvbmZpZygpIHtcbiAgICAgICAgdGhpcy5fZ2FtZUNvbmZpZyA9IHRoaXMuZ2V0R2FtZUNvbmZpZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmch+WKqFxuICAgICAqIEBwYXJhbSBrZXkgMCDnn63pnIfliqggMSDplb/pnIfliqhcbiAgICAgKi9cbiAgICB2aWJyYXRlKGtleTogbnVtYmVyID0gMCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLm9wZW5TeXN0ZW1GdW4oa2V5KTtcbiAgICB9XG5cbiAgICAvKirpmpDol4/lkK/liqjlsY8gKi9cbiAgICBoaWRlU3BsYXNoKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmhpZGVTcGxhc2goKTtcbiAgICB9XG5cbiAgICAvKirlvLnlh7rmj5DnjrAgKi9cbiAgICB3aXRoRHJhd2FsKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLndpdGhEcmF3YWwoKTtcbiAgICB9XG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXG4gICAgZmVlZGJhY2soKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuZmVlZGJhY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoga2V5IOm7mOiupDAg77yM562+5YiwIDFcbiAgICAgKi9cbiAgICBwZXJzb25hbChrZXkgPSAwKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UucGVyc29uYWwoa2V5KTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LKi9cbiAgICBpbnZpdGF0aW9uKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmludml0YXRpb24oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICog6I635Y+W6YeR5biB6YWN6KGoXG4gICAgICogQHBhcmFtIGtleSAx57qi5YyFICAgMiDmkYfkuIDmkYfnuqLljIVcbiAgICAgKi9cbiAgICBnZXRHYW1lQ29uZmlnKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5teUJyaWRnZS5nZXRHYW1lQ29uZmlnKCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1nZXRHYW1lQ29uZmlnLS0tLS0tLScgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDopoHmsYLlj5HmlL7ph5HluIFcbiAgICAgKiBAcGFyYW0ga2V5IDHnuqLljIVcbiAgICAgKi9cbiAgICBhc3luYyBhZGRHb2xkKGtleSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm15QnJpZGdlLmFkZEdvbGQoa2V5LCByZXMgPT4ge1xuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgZGF0YSwgbXNnIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSB8fCAhY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuICAgIC8qKuiOt+WPluaAu+mHkeW4gSAqL1xuICAgIGFzeW5jIG15Q29pbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5teUJyaWRnZS5teUNvaW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRhdGEsIG1zZyB9ID0gcmVzO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUgfHwgIWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhWydjb2luJ10pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICAvKirojrflj5blvZPliY3mj5DnjrDnmoTmoaPkvY0gKi9cbiAgICBhc3luYyBtaW5XaXRoRHJhd2FsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm15QnJpZGdlLm1pbldpdGhEcmF3YWwocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRhdGEsIG1zZyB9ID0gcmVzO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUgfHwgIWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhWydtb25leSddKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKuS4iuaKpeWfi+eCuSAqL1xuICAgIGFwcERvdExvZyhrZXk6IHN0cmluZywgdmFsdWU/KSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuYXBwRG90TG9nKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICAvKirng63kupHmiZPngrkgKi9cbiAgICBhcHBEb3RUcmFjS2luZyhrZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmFwcERvdFRyYWNLaW5nKGtleSk7XG4gICAgfVxuXG4gICAgc2V0Q2FsbGJhY2soZnVuTmFtZTogc3RyaW5nLCBwcmFtYXM/OiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNldENhbGxiYWNrLS0tLSB0aGlzLm15QnJpZGdlLS0tJyArIEpTT04uc3RyaW5naWZ5KHRoaXMubXlCcmlkZ2UpKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5teUJyaWRnZVtmdW5OYW1lXShwcmFtYXMsIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgZGF0YSB9ID0gSlNPTi5wYXJzZShyZXMpO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmNsb3NlQWR2ZXJEaWFsb2coKTtcbiAgICB9XG4gICAgY2xvc2VBZEJhbm5lcigpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5jbG9zZUFkQmFubmVyKCk7XG4gICAgfVxuICAgIC8qKua/gOWKseinhumikSAqL1xuICAgIHNob3dSZXdhcmRWaWRlb0FkKHZhbHVlOiBJVmlkZW8sIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uuc2hvd1Jld2FyZFZpZGVvQWQodmFsdWUsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKiDlhajlsY/lub/lkYoqL1xuICAgIGxvYWRGdWxsU2NyZWVuVmlkZW9BZChkYXRhOiBhbnksIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uuc2hvd1Jld2FyZFZpZGVvQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLyoq5L+h5oGv5rWB5bm/5ZGKICovXG4gICAgbG9hZE5hdGl2ZUV4cHJlc3NBZChkYXRhOiBhbnksIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UubG9hZE5hdGl2ZUV4cHJlc3NBZChkYXRhLCBKQkNhbGxiYWNrKVxuICAgIH1cbiAgICAvKipiYW5uZXIgKi9cbiAgICBsb2FkQmFubmVyRXhwcmVzc0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5sb2FkQmFubmVyRXhwcmVzc0FkKGRhdGEsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKuaPkuWxj+W5v+WRiiAqL1xuICAgIHNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChkYXRhOiBhbnksIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKGRhdGEsIEpCQ2FsbGJhY2spXG4gICAgfVxuXG4gICAgZ2V0IGxldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gICAgfVxuICAgIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH1cblxuICAgIGdldCBoZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICAgIH1cblxuICAgIGdldCBjaGFubmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGdhbWVDb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nYW1lQ29uZmlnO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IEkoKTogUGNTZGsge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFBjU2RrKTtcbiAgICB9XG59XG4vLyAgICAgLy/ov5nph4zmmK/mtY/op4jlmajnjq/looPkuIvvvIwg5o6l5pS2d2Vi5Lyg6L+H5p2l55qE5raI5oGvXG53aW5kb3cub25NeUJyaWRnZVJlYWR5ID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwib25NeUJyaWRnZVJlYWR5IGxvYWQgZmluaXNoLCBjb3N0OlwiICsgKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSArIFwibXNcIik7XG4gICAgTXlCcmlkZ2UuQXBwLm9uUmVzdW1lID0gKC4uLnJldCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnICAgICBsYXlhIG9uUmVzdW1lJywgcmV0KVxuICAgICAgICBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5BUFBfU0hPVyk7XG4gICAgfVxuICAgIE15QnJpZGdlLkFwcC5vblBhdXNlID0gKC4uLnJldCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnICAgIGxheWEgb25QYXVzZScsIHJldClcbiAgICAgICAgRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uQVBQX0hJREUpO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIElWaWRlbyB7XG4gICAgcHJlbG9hZGluZzogbnVtYmVyLFxuICAgIHR5cGU6IG51bWJlcixcbn0iLCJpbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuaW1wb3J0IFBjU2RrIGZyb20gXCIuL1BjU2RrXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUVEFkU2RrIHtcclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gcHJlbG9hZCAgMCDnm7TmjqXliqDovb3vvJsxIOmihOWKoOi9vVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaG93UmV3YXJkVmlkZW9BZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IDEsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFBjU2RrLkkuc2hvd1Jld2FyZFZpZGVvQWQoZGF0YSwgcmV0ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB7IGNvZGUsIG1lc3NhZ2UgfSA9IEpTT04ucGFyc2UocmV0KTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgLTE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgnZXJyb3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAvKion5pqC5peg6KeG6aKR5bm/5ZGK77yB5q+P5pelMOeCuemHjee9ricqLztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgndW5Db21wbGV0ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEZ1bGxTY3JlZW5WaWRlb0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogUGNTZGsuSS53aWR0aCxcclxuICAgICAgICAgICAgaDogUGNTZGsuSS53aWR0aCAqIDkwIC8gNjAwLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICB0eXBlOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIFBjU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLHJlcz0+e1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkTmF0aXZlRXhwcmVzc0FkKHgsIHksIHdpZHRoLCBoZWlnaHQsIHR5cGUgPSAxLCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IHNjYWxlWCA9IFBjU2RrLkkud2lkdGggLyBMYXlhLnN0YWdlLndpZHRoO1xyXG4gICAgICAgIGxldCBzY2FsZVkgPSBQY1Nkay5JLmhlaWdodCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICB3OiB3aWR0aCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgaDogaGVpZ2h0ICogc2NhbGVZLFxyXG4gICAgICAgICAgICBsZWZ0OiB4ICogc2NhbGVYLFxyXG4gICAgICAgICAgICB0b3A6IHkgKiBzY2FsZVlcclxuICAgICAgICB9XHJcbiAgICAgICAgUGNTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLHJlcz0+e1xyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXMpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQmFubmVyRXhwcmVzc0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogUGNTZGsuSS53aWR0aCxcclxuICAgICAgICAgICAgaDogUGNTZGsuSS53aWR0aCAqIDkwIC8gNjAwLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICB0eXBlOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIFBjU2RrLkkubG9hZEJhbm5lckV4cHJlc3NBZChKU09OLnN0cmluZ2lmeShkYXRhKSxyZXM9PntcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VBZHZlckRpYWxvZygpIHtcclxuICAgICAgICBQY1Nkay5JLmNsb3NlQWR2ZXJEaWFsb2coKTtcclxuICAgIH1cclxuICAgIGNsb3NlQWRCYW5uZXIoKSB7XHJcbiAgICAgICAgUGNTZGsuSS5jbG9zZUFkQmFubmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogUGNTZGsuSS53aWR0aCAqIDAuOCxcclxuICAgICAgICAgICAgaDogUGNTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFBjU2RrLkkuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLHJlcz0+e1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVFRBZFNkayB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChUVEFkU2RrKSBhcyBUVEFkU2RrO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcbmltcG9ydCBQY1NkayBmcm9tIFwiLi9QY1Nka1wiO1xyXG4vKipcclxuICog5LiK5oql54Ot5LqR5Z+L54K54r2H5b+XXHJcbiAqIOWFt+S9k+eahOaJk+eCuemcgOimgei3n+i/kOiQpeiBlOezu1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhY2tpbmdTZGsge1xyXG4gICAgZG90KGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgUGNTZGsuSS5hcHBEb3RUcmFjS2luZyhrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgSSgpOiBUcmFja2luZ1NkayB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChUcmFja2luZ1NkaykgYXMgVHJhY2tpbmdTZGs7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFRyYWNraW5nS2V5IHtcclxuICAgIFJlZFBhY2sxID0gJ2V2ZW50XzUnLFxyXG4gICAgUmVkUGFjazUgPSAnZXZlbnRfNidcclxufVxyXG4iLCJpbXBvcnQgQXJyYXlVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9BcnJheVV0aWxzXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZU1vZGVsIHtcbiAgICBwcm90ZWN0ZWQgX2RhdGE6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgdXBkYXRlQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcbiAgICBwcml2YXRlIGtleVVwZGF0ZUFycjogYW55ID0ge307XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlKGRhdGE6IGFueSkge1xuICAgICAgICB0aGlzLl9kYXRhID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fZGF0YSxcbiAgICAgICAgICAgIC4uLmRhdGFcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUFyci5mb3JFYWNoKGZ1bmMgPT4ge1xuICAgICAgICAgICAgZnVuYyh0aGlzLl9kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMua2V5VXBkYXRlQXJyKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0aGlzLmtleVVwZGF0ZUFycltrZXldO1xuICAgICAgICAgICAgICAgIGFyciAmJiBhcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB3YWl0Rm9yKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNiID0gZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZVcGRhdGUoY2IsIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vblVwZGF0ZShjYiwga2V5LCB0cnVlKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwdWJsaWMgb25VcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZywgcnVuOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLl9kYXRhW2tleV07XG4gICAgICAgICAgICBydW4gJiYgdmFsdWUgIT0gbnVsbCAmJiBmdW5jKHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBhcnIgPSB0aGlzLmtleVVwZGF0ZUFycltrZXldO1xuICAgICAgICAgICAgIWFyciAmJiAodGhpcy5rZXlVcGRhdGVBcnJba2V5XSA9IGFyciA9IFtdKTtcbiAgICAgICAgICAgIGFyci5wdXNoKGZ1bmMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcnVuICYmIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFyci5wdXNoKGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9mZlVwZGF0ZShmdW5jOiBGdW5jdGlvbiwga2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIEFycmF5VXRpbHMucmVtb3ZlRnJvbUFycih0aGlzLmtleVVwZGF0ZUFycltrZXldLCBmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEFycmF5VXRpbHMucmVtb3ZlRnJvbUFycih0aGlzLnVwZGF0ZUFyciwgZnVuYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJHYW1lKCkge1xuICAgICAgICB0aGlzLl9kYXRhID0ge307XG4gICAgfVxufSIsImltcG9ydCBCYXNlTW9kZWwgZnJvbSBcIi4vQmFzZU1vZGVsXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuLi8uLi9zZGsvQWRNYW5hZ2VyXCI7XG5pbXBvcnQgVGVhU2RrLCB7IERvdEtleSB9IGZyb20gXCIuLi8uLi9zZGsvVGVhU2RrXCI7XG5pbXBvcnQgVHJhY2tpbmdTZGssIHsgVHJhY2tpbmdLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RyYWNraW5nU2RrXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuaW1wb3J0IHsgRXZlbnRDZW50ZXIgfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuLi8uLi9ldmVudC9FdmVudEVudW1cIjtcbmltcG9ydCBQY1NkayBmcm9tIFwiLi4vUGNTZGtcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkcGFja2V0TW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICAgIHByaXZhdGUgTUFYID0gMjA7XG4gICAgLyoq5b2T5aSp6aKG5Y+W57qi5YyF55qE5pyA5aSn5qyh5pWwICovXG4gICAgcHJpdmF0ZSBEQVlfTUFYX0NOVCA9IDUwO1xuICAgIHByaXZhdGUgY29uZjogYW55O1xuICAgIHB1YmxpYyBjdXJSZWRwYWNrZXQ6IG51bWJlciA9IDA7XG4gICAgcHVibGljIGNvbmZMZW46IG51bWJlciA9IDA7XG5cbiAgICAvKirliJ3lp4vljJbnuqLljIXphY3nva4gKi9cbiAgICBhc3luYyBpbml0KCkge1xuXG4gICAgICAgIGxldCBhcnIgPSBhd2FpdCB0aGlzLmdldFJlZENvbmZpZygpO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tUmVkcGFja2V0TW9kZWwtLS0tLS0tJyArIEpTT04uc3RyaW5naWZ5KGFycikpXG4gICAgICAgIGxldCBjYXNoID0gMDtcbiAgICAgICAgdGhpcy5jb25mID0ge307XG4gICAgICAgIGFyci5mb3JFYWNoKGNvbmZEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZltjb25mRGF0YS5pZF0gPSBjb25mRGF0YTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5pbml0RGF0YSgpKTtcbiAgICAgICAgdGhpcy5jb25mTGVuID0gdGhpcy5jb25mLmxlbmd0aDtcblxuICAgIH1cblxuXG5cbiAgICBpbml0RGF0YSgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUmVkcGFja2V0RGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5sYXN0VGltZSkgfHwgJzAnO1xuICAgICAgICBkYXRhLmxhc3RUaW1lID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuXG4gICAgICAgIGxldCBsYXN0ID0gRGF0ZVV0aWxzLnRpbWVEYXkoZGF0YS5sYXN0VGltZSk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcbiAgICAgICAgaWYgKGxhc3QgIT0gdG9kYXkpIHtcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5sYXN0VGltZSwgbGFzdFRpbWUpXG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0b2RheUNudCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkudG9kYXlDbnQpIHx8ICcwJztcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSBwYXJzZUludCh0b2RheUNudCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGRhdGFDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LmRhdGFDTlQpIHx8ICcwJztcbiAgICAgICAgZGF0YS5jbnQgPSBwYXJzZUludChkYXRhQ250KTtcbiAgICAgICAgZGF0YS5saXN0ID0gW107XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZ2V0UmVkQ29uZmlnKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gUGNTZGsuSS5nYW1lQ29uZmlnO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tIOiOt+WPlumFjee9rumdmeaAgeihqC0tLS0tJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGxldCBjb25maWdKc29uID0gYXdhaXQgdGhpcy5sb2FkR29sZENmZyhyZXN1bHRbJ2NvaW5fY29uZmlnJ11bMF0pXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0g6I635Y+W57qi5YyF6Z2Z5oCB6KGoLS0tLS0nICsgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSlcbiAgICAgICAgICAgIHJldHVybiBjb25maWdKc29uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgUGNTZGsuSS5pbml0R2FtZUNvbmZpZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGxvYWRHb2xkQ2ZnKHJlczogc3RyaW5nKSB7XG4gICAgICAgIGxldCBjb25maWdKc29uID0gYXdhaXQgdGhpcy5sb2FkKHJlcyk7XG4gICAgICAgIHJldHVybiBjb25maWdKc29uO1xuICAgIH1cblxuICAgIGxvYWQocmVzLCBvblByb2dyZXNzPzogTGF5YS5IYW5kbGVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChzdWMsIGZhaWwpID0+IHtcbiAgICAgICAgICAgIExheWEubG9hZGVyLmxvYWQocmVzLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHN1YyksIG9uUHJvZ3Jlc3MpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrUmVkcGFja2V0KCkge1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEudG9kYXlDbnQgPj0gdGhpcy5EQVlfTUFYX0NOVCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQWRNYW5hZ2VyLkkuY2hlY2tWaWRlb0luQ2QoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvKirnuqLljIXojrflj5blkI7msqHmnInnnIvlub/lkYrpooblj5bvvIzlho3mrKHojrflvpfnuqLljIXnmoTmnLrkvJrvvIzkuI3kvJrojrflj5bnuqLljIXvvIwg6Ieq5bex5Lmf5Y+v5Lul5aSE55CG5oiQIOWvueW6lOeahOe6ouWMheaPkOmGkuaIluS4jemcgOimgei/memHjOeahOWIpOaWrSAqL1xuICAgICAgICBpZiAodGhpcy5jdXJSZWRwYWNrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB0aGlzLmRhdGEuY250KSB0aGlzLmRhdGEuY250ID0gMDtcbiAgICAgICAgbGV0IGNudCA9IHRoaXMuZGF0YS5jbnQ7XG4gICAgICAgIGlmIChjbnQgPj0gdGhpcy5jb25mTGVuKSBjbnQgPSB0aGlzLmNvbmZMZW4gLSAxO1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZltjbnQgKyAxXTtcbiAgICAgICAgbGV0IHJhbjIgPSBNYXRoLnJhbmRvbSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIHJhbjIgPCBkYXRhLnBlcikge1xuICAgICAgICAgICAgbGV0IGNhc2ggPSAwLjAwMDAwMTtcbiAgICAgICAgICAgIHRoaXMuY3VyUmVkcGFja2V0ID0gY2FzaDtcbiAgICAgICAgICAgIC8vKirlvLnlh7rnuqLljIXnmoTnlYzpnaIsICDmmoLml7blpITnkIbmiJAg55u05o6l55yL5bm/5ZGK6I635Y+W6YeR5biBICovXG4gICAgICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLSDop6blj5HkuobnuqLljIUtLS0tLScpXG4gICAgICAgICAgICB0aGlzLmdldFJlcGFja2V0KClcbiAgICAgICAgICAgIC8qKuabtOaWsOWfuuacrOaYvuekuiAqL1xuICAgICAgICAgICAgRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uVVBEQVRFX0NPSU4pO1xuXG4gICAgICAgICAgICAvKioqICovXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0UmVwYWNrZXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jdXJSZWRwYWNrZXQpIHJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhLmNudCArPSAxO1xuICAgICAgICB0aGlzLmRhdGEubGlzdC5wdXNoKHRoaXMuY3VyUmVkcGFja2V0KTtcbiAgICAgICAgdGhpcy5kYXRhLmxhc3RUaW1lID0gKG5ldyBEYXRlKS5nZXRUaW1lKCk7XG4gICAgICAgIHRoaXMuZGF0YS50b2RheUNudCArPSAxO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNudCA9PSAxKVxuICAgICAgICAgICAgVHJhY2tpbmdTZGsuSS5kb3QoVHJhY2tpbmdLZXkuUmVkUGFjazEpO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNudCA9PSA1KVxuICAgICAgICAgICAgVHJhY2tpbmdTZGsuSS5kb3QoVHJhY2tpbmdLZXkuUmVkUGFjazUpO1xuICAgICAgICB0aGlzLmN1clJlZHBhY2tldCA9IDA7XG4gICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuZGF0YUNOVCwgdGhpcy5kYXRhLmNudCk7XG4gICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkudG9kYXlDbnQsIHRoaXMuZGF0YS50b2RheUNudCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICAvKiogKi9cbiAgICBhc3luYyBnZXRDdXJSZWRwYWNrZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1clJlZHBhY2tldDtcbiAgICB9XG5cbiAgICBnZXQgZGF0YSgpOiBSZWRwYWNrZXREYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIC8qKuiOt+WPluaAu+WFseeahOmHkeW4geaVsCAqL1xuICAgIGFzeW5jIGdldFRvdGFsQ29pbigpIHtcbiAgICAgICAgbGV0IHRvdGFsQ29pbiA9IGF3YWl0IFBjU2RrLkkubXlDb2luKCk7XG4gICAgICAgIHJldHVybiB0b3RhbENvaW47XG4gICAgfVxuICAgIC8qKuiOt+WPluacrOasoeWlluWKseeahOmHkeW4geaVsCAqL1xuICAgIGFzeW5jIGFkZENvaW4oa2V5OiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGxldCBjb2luRGF0YSA9IGF3YWl0IFBjU2RrLkkuYWRkR29sZChrZXkpO1xuICAgICAgICByZXR1cm4gY29pbkRhdGFbJ2NvaW4nXTtcbiAgICB9XG5cbiAgICAvKirojrflj5bmnIDkvY7mj5DmoaMgKi9cbiAgICBhc3luYyAgbWluV2l0aERyYXdhbCgpIHtcbiAgICAgICAgbGV0IG1pbkNvaW4gPSBhd2FpdCBQY1Nkay5JLm1pbldpdGhEcmF3YWwoKTtcbiAgICAgICAgcmV0dXJuIG1pbkNvaW47XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgSSgpOiBSZWRwYWNrZXRNb2RlbCB7XG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoUmVkcGFja2V0TW9kZWwpIGFzIFJlZHBhY2tldE1vZGVsO1xuICAgIH1cbn1cblxuY2xhc3MgUmVkcGFja2V0RGF0YSB7XG4gICAgY250OiBudW1iZXI7XG4gICAgbGlzdDogQXJyYXk8bnVtYmVyPjtcbiAgICBsYXN0VGltZTogbnVtYmVyO1xuICAgIHRvZGF5Q250OiBudW1iZXI7XG59XG5cbmNsYXNzIFJlZHBhY2tldENvbmZpZ0RhdGEge1xuICAgIGlkOiBudW1iZXI7XG4gICAgcGVyOiBudW1iZXI7XG4gICAgY2FzaDogbnVtYmVyO1xufSIsImltcG9ydCBCYXNlTW9kZWwgZnJvbSBcIi4vQmFzZU1vZGVsXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuaW1wb3J0IFBjU2RrIGZyb20gXCIuLi9QY1Nka1wiO1xuXG4vKipcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrZU1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcblxuICAgIHByaXZhdGUgY29uZjogYW55O1xuICAgIHByaXZhdGUgZWxlUHJvYmFiaWxpdHlBcnI6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSB0b3RhbFdlaWdodDogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHByb0FyckxlbjogbnVtYmVyID0gMDtcbiAgICAvKirnuqLljIXlh7rnjrDnmoTmgLvmrKHmlbDmr4/ml6UgKi9cbiAgICBwcml2YXRlIHJlZF9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBjdXJfcmVkX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKirmkYfkuIDmkYflh7rnjrDnmoTmgLvmrKHmlbAgKi9cbiAgICBwcml2YXRlIHNoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcblxuICAgIHByaXZhdGUgY3VyX3NoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcblxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBQY1Nkay5JLmdhbWVDb25maWc7O1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tU2hha2VNb2RlbC0tIOiOt+WPluaRh+S4gOaRh+mdmeaAgeihqC0tLS0tJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgIGlmIChyZXN1bHRbJ2NvbmZpZyddKSB7XG4gICAgICAgICAgICBsZXQgZ2FtZURhdGEgPSByZXN1bHRbJ2NvbmZpZyddO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUodGhpcy5pbml0RGF0YShnYW1lRGF0YSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdERhdGEoZ2FtZURhdGEpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgU2hha2VEYXRhO1xuICAgICAgICBsZXQgbGFzdFRpbWUgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LnNoYWtlTGFzdFRpbWUpIHx8ICcwJztcbiAgICAgICAgbGV0IGx0ID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuICAgICAgICBsZXQgbGFzdCA9IERhdGVVdGlscy50aW1lRGF5KGx0KTtcbiAgICAgICAgbGV0IHRvZGF5ID0gRGF0ZVV0aWxzLnRvZGF5O1xuXG4gICAgICAgIGlmIChsYXN0ICE9IHRvZGF5KSB7XG4gICAgICAgICAgICB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5jdXJfcmVkX2RheV9saW1pdCA9IDA7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGVVdGlscy5ub3dUaW1lLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmN1cl9zaGFrZV9kYXlfbGltaXQsIDApO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCwgMCk7XG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnNoYWtlTGFzdFRpbWUsIGxhc3RUaW1lKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGN1cl9yZWRfZGF5X2xpbWl0ID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCkgfHwgJzAnO1xuICAgICAgICAgICAgdGhpcy5jdXJfcmVkX2RheV9saW1pdCA9IHBhcnNlSW50KGN1cl9yZWRfZGF5X2xpbWl0KTtcbiAgICAgICAgICAgIGxldCBjdXJfc2hha2VfZGF5X2xpbWl0ID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0KSB8fCAnMCc7XG4gICAgICAgICAgICB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPSBwYXJzZUludChjdXJfc2hha2VfZGF5X2xpbWl0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEuY29uZmlnID0gZ2FtZURhdGFbJ2NvbmZpZyddO1xuICAgICAgICBnYW1lRGF0YVsnc2hha2UnXS5mb3JFYWNoKGVsZSA9PiB7XG4gICAgICAgICAgICBkYXRhLnNoYWtlV2VpZ2h0TGlzdC5wdXNoKGVsZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbmYgPSBbXTtcbiAgICAgICAgdGhpcy5jb25mID0gZGF0YS5zaGFrZVdlaWdodExpc3Q7XG4gICAgICAgIHRoaXMuaW5pdFByb2JhYmlsaXR5KCk7XG4gICAgICAgIHRoaXMuc2hha2VfZGF5X2xpbWl0ID0gZGF0YS5jb25maWcuc2hha2VfZGF5X2xpbWl0O1xuICAgICAgICB0aGlzLnJlZF9kYXlfbGltaXQgPSBkYXRhLmNvbmZpZy5yZWRfZGF5X2xpbWl0O1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpbml0UHJvYmFiaWxpdHkoKSB7XG4gICAgICAgIHRoaXMudG90YWxXZWlnaHQgPSAwO1xuICAgICAgICB0aGlzLmNvbmYuZm9yRWFjaCgoZWxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b3RhbFdlaWdodCArPSBlbGUud2VpZ2h0O1xuICAgICAgICAgICAgbGV0IGl0ZW1XID0gZWxlLndlaWdodDtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApXG4gICAgICAgICAgICAgICAgaXRlbVcgKz0gdGhpcy5lbGVQcm9iYWJpbGl0eUFycltpbmRleCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5lbGVQcm9iYWJpbGl0eUFyciA9IFsuLi50aGlzLmVsZVByb2JhYmlsaXR5QXJyLCBpdGVtV107XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMucHJvQXJyTGVuID0gdGhpcy5lbGVQcm9iYWJpbGl0eUFyci5sZW5ndGg7XG5cbiAgICB9XG5cbiAgICBnZXRTaGFrZVR5cGUoKSB7XG4gICAgICAgICsrdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0O1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmN1cl9zaGFrZV9kYXlfbGltaXQsIHRoaXMuY3VyX3NoYWtlX2RheV9saW1pdCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VyX3NoYWtlX2RheV9saW1pdCA+IHRoaXMuc2hha2VfZGF5X2xpbWl0KSB7XG4gICAgICAgICAgICAvKion5qyh5pWw6L6+5Yiw5LiK6ZmQ77yM6K+35piO5aSp5YaN5p2lKi9cblxuICAgICAgICAgICAgLyoq5Zyo5q2k5aSE5Y+v5Lul5by55qGG562J5aSE55CGICovXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMudG90YWxXZWlnaHQpO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5wcm9BcnJMZW47IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnJbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGVsZSA+PSByYW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gaW5kZXggfHwgMSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmN1cl9yZWRfZGF5X2xpbWl0O1xuICAgICAgICAgICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmN1cl9yZWRfZGF5X2xpbWl0LCB0aGlzLmN1cl9yZWRfZGF5X2xpbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPiB0aGlzLnJlZF9kYXlfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZbdGhpcy5wcm9BcnJMZW4gLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZbdGhpcy5wcm9BcnJMZW4gLSAxXTtcbiAgICB9XG5cbiAgICBnZXQgZGF0YSgpOiBTaGFrZURhdGEge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IEkoKTogU2hha2VNb2RlbCB7XG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoU2hha2VNb2RlbCkgYXMgU2hha2VNb2RlbDtcbiAgICB9XG59XG5cblxuY2xhc3MgU2hha2VEYXRhIHtcbiAgICBjb25maWc6IFNoYWtlQ29uZmlnO1xuICAgIHNoYWtlV2VpZ2h0TGlzdDogU2hha2VXZWlnaHREYXRhW10gPSBbXTtcbn1cbmludGVyZmFjZSBTaGFrZUNvbmZpZyB7XG4gICAgcmVkX2RheV9saW1pdDogbnVtYmVyLFxuICAgIHNoYWtlX2RheV9saW1pdDogbnVtYmVyLFxuICAgIGludGVyc3RpdGlhbF9jbnQ6IG51bWJlcixcbiAgICBpbnRlcnN0aXRpYWxfZGVsYXk6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgU2hha2VXZWlnaHREYXRhIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHR5cGU6IG51bWJlcjtcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbiAgICBudW06IG51bWJlcjtcbn1cblxuXG4iLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cbmltcG9ydCBWaWV3PUxheWEuVmlldztcclxuaW1wb3J0IERpYWxvZz1MYXlhLkRpYWxvZztcclxuaW1wb3J0IFNjZW5lPUxheWEuU2NlbmU7XG52YXIgUkVHOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcbmV4cG9ydCBtb2R1bGUgdWkge1xyXG4gICAgZXhwb3J0IGNsYXNzIFRlc3RTY2VuZVVJIGV4dGVuZHMgU2NlbmUge1xyXG5cdFx0cHVibGljIGJ0bkludml0ZTpMYXlhLlNwcml0ZTtcblx0XHRwdWJsaWMgYnRuU2VydmVyOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5WaWJyYXRlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5fc2hha2U6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0bkRyYXdhbDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUHJlbG9hZEFEOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93QmFubmVyOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93RnVsbEFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93TmF0aXZlQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blNob3dJbnRlckFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5SZXdhcmRBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmVkcGFja2V0OkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5QcmVOYXRpdmU6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZUZ1bGw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZUluc2VydDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUHJlVmlkZW86TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0bkNsb3NlTmF0aXZlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5DbG9zZUJhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuTWluV2l0aERyYXdhbDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgbWluV2l0aERyYXdhbExhYjpMYXlhLkxhYmVsO1xuXHRcdHB1YmxpYyBOYXRpdmVBRDpWaWV3O1xuICAgICAgICBjb25zdHJ1Y3RvcigpeyBzdXBlcigpfVxyXG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHN1cGVyLmNyZWF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNjZW5lKFwiVGVzdFNjZW5lXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFJFRyhcInVpLlRlc3RTY2VuZVVJXCIsVGVzdFNjZW5lVUkpO1xyXG59XHIiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBBcnJheVV0aWxzIHtcbiAgICAvKipcbiAgICAgKiDnp7vpmaTlhYPntKBcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlRnJvbUFycihhcnI6IEFycmF5PGFueT4sIG9iajogYW55KSB7XG4gICAgICAgIGxldCBpbmRleCA9IGFyci5pbmRleE9mKG9iaik7XG4gICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHN0YXRpYyByYW5kb21Gcm9tQXJyKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICBsZXQgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGFycltpbmRleF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pWw57uE6ZqP5py65o6S5bqPXG4gICAgICovXG4gICAgc3RhdGljIHNodWZmbGUoYXJyOiBBcnJheTxhbnk+KSB7XG4gICAgICAgIHJldHVybiBhcnIuc29ydChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAtIDAuNTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGluZGV4T2YoYXJyLCBjYWxsYmFjaywgY3R4Pykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwoY3R4LCB0aGlzW2ldLCBpKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgc3RhdGljIGVhY2goYXJyLCBjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGNvbnRleHQsIGFycltpXSwgaSwgYXJyKSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBxdWV1ZShhcnIpIHtcbiAgICAgICAgbGV0IHJlcyA9IG51bGw7XG4gICAgICAgIGZvciAobGV0IHByb21pc2Ugb2YgYXJyKSB7XG4gICAgICAgICAgICByZXMgPSBhd2FpdCBwcm9taXNlKHJlcylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSYW5kb21BcnJheShhcnIsIGNvdW50KSB7XG4gICAgICAgIGxldCBzaHVmZmxlZCA9IGFyci5zbGljZSgwKTtcbiAgICAgICAgbGV0IGxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGxldCBtaW4gPSBsZW4gLSBjb3VudCwgdGVtcCwgaW5kZXg7XG4gICAgICAgIHdoaWxlIChsZW4tLSA+IG1pbikge1xuICAgICAgICAgICAgaW5kZXggPSBNYXRoLmZsb29yKChsZW4gKyAxKSAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICAgICAgdGVtcCA9IHNodWZmbGVkW2luZGV4XTtcbiAgICAgICAgICAgIHNodWZmbGVkW2luZGV4XSA9IHNodWZmbGVkW2xlbl07XG4gICAgICAgICAgICBzaHVmZmxlZFtsZW5dID0gdGVtcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2h1ZmZsZWQuc2xpY2UobWluKTtcbiAgICB9XG59IiwiLyoqXG4gKiDml6XmnJ/lt6XlhbfnsbtcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVV0aWxzIHtcbiAgICBzdGF0aWMgZ2V0IG5vdygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLm5vd1RpbWUgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IG5vd1RpbWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgdG9kYXkoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRpbWUgPSBuZXcgRGF0ZSh0aGlzLm5vd1RpbWUpO1xuICAgICAgICBsZXQgeWVhciA9IHRpbWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgbGV0IG1vbnRoID0gdGltZS5nZXRNb250aCgpICsgMTtcbiAgICAgICAgbGV0IGRhdGUgPSB0aW1lLmdldERhdGUoKTtcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7dGhpcy5hZGQobW9udGgpfS0ke3RoaXMuYWRkKGRhdGUpfWA7XG4gICAgfVxuXG4gICAgc3RhdGljIHRpbWVEYXkodGltZU51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRpbWUgPSBuZXcgRGF0ZSh0aW1lTnVtKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruenkuaVsOagvOW8j+WMluWtl+espuS4slxuICAgICAqIEBwYXJhbSBzZWNvbmQg56eS5pWwXG4gICAgICogQHBhcmFtIHR5cGUgMTowMDowMDowMCAgIDI6eXl5eS1tbS1kZCBoOm06cyAgICAzOjAwOjAwICAgNDp4eOWkqeWJje+8jHh45bCP5pe25YmN77yMeHjliIbpkp/liY1cbiAgICAgKiBAcmV0dXJuXG4gICAgICovXG4gICAgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kKHNlY29uZDogbnVtYmVyLCB0eXBlOiBudW1iZXIgPSAxKTogc3RyaW5nIHtcbiAgICAgICAgdmFyIHN0cjogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDAoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQyKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDMoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNChzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQ1KHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICAvLyAwOiAwMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMCh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzE6IDAwOjAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQxKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICBsZXQgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgbGV0IGhvdXJzOiBzdHJpbmc7XG4gICAgICAgIGxldCBkYXkgPSAnJztcbiAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICBob3VycyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICBob3VycyA9IFwiMFwiICsgaG91cnN0O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGggPSBob3Vyc3QgJSAyNDtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnN0ID49IDI0KSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzID0gaCA8IDEwID8gXCIwXCIgKyBoIDogJycgKyBoO1xuICAgICAgICAgICAgICAgICAgICBkYXkgPSBNYXRoLmZsb29yKGhvdXJzdCAvIDI0KSArICdkICc7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGhvdXJzID0gaCA8IDEwID8gXCIwXCIgKyBoIDogJycgKyBoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodCAtIGhvdXJzdCAqIDM2MDApIC8gNjApO1xuICAgICAgICBsZXQgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodCAtIGhvdXJzdCAqIDM2MDApICUgNjApO1xuICAgICAgICBsZXQgbWluczogc3RyaW5nO1xuICAgICAgICBsZXQgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRheSArIGhvdXJzICsgXCI6XCIgKyBtaW5zICsgXCI6XCIgKyBzZW5zO1xuICAgIH1cblxuICAgIC8vMzogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDModDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBob3Vyc3Q6IG51bWJlciA9IE1hdGguZmxvb3IodCAvIDM2MDApO1xuICAgICAgICB2YXIgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgdmFyIHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgdmFyIG1pbnM6IHN0cmluZztcbiAgICAgICAgdmFyIHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5zICsgXCI6XCIgKyBzZW5zO1xuICAgIH1cblxuICAgIC8vMjp5eXl5LW1tLWRkIGg6bTpzXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQyKHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHZhciBkYXRlOiBEYXRlID0gbmV3IERhdGUodGltZSk7XG4gICAgICAgIHZhciB5ZWFyOiBudW1iZXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHZhciBtb250aDogbnVtYmVyID0gZGF0ZS5nZXRNb250aCgpICsgMTsgXHQvL+i/lOWbnueahOaciOS7veS7jjAtMTHvvJtcbiAgICAgICAgdmFyIGRheTogbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIHZhciBob3VyczogbnVtYmVyID0gZGF0ZS5nZXRIb3VycygpO1xuICAgICAgICB2YXIgbWludXRlOiBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgdmFyIHNlY29uZDogbnVtYmVyID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgIHJldHVybiB5ZWFyICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgZGF5ICsgXCIgXCIgKyBob3VycyArIFwiOlwiICsgbWludXRlICsgXCI6XCIgKyBzZWNvbmQ7XG5cbiAgICB9XG5cbiAgICAvLzQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ0KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHZhciB0ID0gTWF0aC5mbG9vcih0aW1lIC8gMzYwMCk7XG4gICAgICAgIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgaWYgKHQgPiAyNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHQgLyAyNCkgKyBcIuWkqeWJjVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgKyBcIuWwj+aXtuWJjVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGltZSAvIDYwKSArIFwi5YiG6ZKf5YmNXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDUodGltZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgLy8g5q+P5Liq5pe26Ze05Y2V5L2N5omA5a+55bqU55qE56eS5pWwXG4gICAgICAgIHZhciBvbmVEYXk6IG51bWJlciA9IDM2MDAgKiAyNDtcbiAgICAgICAgdmFyIG9uZUhvdXJzdDogbnVtYmVyID0gMzYwMDtcbiAgICAgICAgdmFyIG9uZU1pbnN0OiBudW1iZXIgPSA2MDtcblxuICAgICAgICB2YXIgZGF5cyA9IE1hdGguZmxvb3IodGltZSAvIG9uZURheSk7XG4gICAgICAgIHZhciBob3Vyc3Q6IG51bWJlciA9IE1hdGguZmxvb3IodGltZSAlIG9uZURheSAvIG9uZUhvdXJzdClcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0aW1lIC0gaG91cnN0ICogb25lSG91cnN0KSAvIG9uZU1pbnN0KSAgLy9NYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgJSBvbmVIb3Vyc3QgLyBvbmVNaW5zdCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0aW1lIC0gaG91cnN0ICogb25lSG91cnN0KSAlIG9uZU1pbnN0KSAvL3RpbWU7XG5cbiAgICAgICAgdmFyIGRheXNzOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgICB2YXIgaG91cnNzOiBzdHJpbmcgPSBcIlwiXG4gICAgICAgIHZhciBtaW5zczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIHNlY3NzOiBzdHJpbmcgPSBcIlwiXG4gICAgICAgIGlmICh0aW1lID4gMCkge1xuICAgICAgICAgICAgLy/lpKlcbiAgICAgICAgICAgIGlmIChkYXlzID09IDApIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgLy/lsI/ml7ZcbiAgICAgICAgICAgICAgICBpZiAoaG91cnN0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgLy/liIZcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCIwXCIgKyBzZWNvbmR0ICsgXCLnp5JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWNzcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCJcIiArIG1pbnN0ICsgXCLliIbpkp9cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCIwXCIgKyBzZWNvbmR0ICsgXCLnp5JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtaW5zcyArIHNlY3NzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCIwXCIgKyBzZWNvbmR0ICsgXCLnp5JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3Vyc3MgKyBzZWNzc1xuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluc3MgPSBcIjBcIiArIG1pbnN0ICsgXCLliIbpkp9cIjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCJcIiArIG1pbnN0ICsgXCLliIbpkp9cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBob3Vyc3MgKyBtaW5zcztcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRheXNzID0gZGF5cyArIFwi5aSpXCI7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA8IDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCIwXCIgKyBob3Vyc3QgKyBcIuWwj+aXtlwiO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5c3MgKyBob3Vyc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkKG51bSkge1xuICAgICAgICByZXR1cm4gbnVtIDwgMTAgPyAnMCcgKyBudW0gOiBudW07XG4gICAgfVxuXG5cbn1cbiIsImltcG9ydCBPYmplY3RQb29sIGZyb20gXCIuL09iamVjdFBvb2xcIjtcblxuLypcbiogbmFtZTtcbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPYmplY3RJbnN0YW5jZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2x6cyA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGljIG9iamVjdHMgPSBbXTtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0KGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsenMuaW5kZXhPZihjbHMpO1xuICAgICAgICByZXR1cm4gKGlkeCA+PSAwICYmIHRoaXMub2JqZWN0c1tpZHhdKSB8fCB0aGlzLmNyZWF0ZShjbHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZShjbHM6IGFueSkge1xuICAgICAgICB2YXIgb2JqID0gT2JqZWN0UG9vbC5wb3AoY2xzKTtcbiAgICAgICAgdGhpcy5vYmplY3RzLnB1c2gob2JqKTtcbiAgICAgICAgdGhpcy5jbHpzLnB1c2goY2xzKTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBPYmplY3RQb29sIHtcbiAgICBwcml2YXRlIHN0YXRpYyBjbHNBcnIgPSBbXTtcblxuICAgIHN0YXRpYyBwb3AoY2xzOiBhbnkpIHtcbiAgICAgICAgbGV0IGlkeCA9IHRoaXMuY2xzQXJyLmluZGV4T2YoY2xzKTtcbiAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgIGlkeCA9IHRoaXMuY2xzQXJyLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuY2xzQXJyLnB1c2goY2xzKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQga2V5ID0gJ3Bvb2xLZXknICsgaWR4O1xuICAgICAgICBsZXQgaXRlbSA9IExheWEuUG9vbC5nZXRJdGVtQnlDbGFzcyhrZXksIGNscyk7XG4gICAgICAgIGl0ZW0ucG9vbEtleSA9IGtleTtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgc3RhdGljIHB1c2goaXRlbSkge1xuICAgICAgICBMYXlhLlBvb2wucmVjb3ZlcihpdGVtLnBvb2xLZXksIGl0ZW0pO1xuICAgIH1cbn0iLCJleHBvcnQgZGVmYXVsdCAgY2xhc3MgU2NhbGVCdXR0b25TY3JpcHQge1xuIFxuICAgIHB1YmxpYyBkZWxheVRpbWU6IG51bWJlciA9IDA7XG4gICAgcHVibGljIG1pblNjYWxlOiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgbW9ua2V5Qm94OiBMYXlhLkltYWdlO1xuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKuiuvue9rm93bmVy5Ye95pWw77yM5Y+v5Lul55u05o6l6I635Y+W5Yiw5re75Yqg6ZmE5Yqg6ISa5pys55qE57uE5Lu25a6e5L6LIFxuICAgICAqKi9cbiAgICBwdWJsaWMgc2V0IG93bmVyKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb25rZXlCb3ggPSB2YWx1ZTtcbiAgICAgICAgLy/oh6rlrprkuYnnmoTohJrmnKzkvJrmnInml7bluo/pl67popjvvIzmiYDku6XlnKjmraTmt7vliqDkuIDkuKrlu7bml7ZcbiAgICAgICAgdGhpcy5tb25rZXlCb3guZnJhbWVPbmNlKDIsIHRoaXMsIHRoaXMub25Mb2FkZWQpO1xuICAgICAgICBcbiAgICB9XG5cbiAgICBvbkxvYWRlZCgpOiB2b2lkIHtcbiAgICAgICAvKiDorr7nva7mjInpkq7kuLrljZXmgIHmjInpkq5cbiAgICAgICAgKiog5Y+W5YC877yaXG4gICAgICAgICoqIDHvvJrljZXmgIHjgILlm77niYfkuI3lgZrliIflibLvvIzmjInpkq7nmoTnmq7ogqTnirbmgIHlj6rmnInkuIDnp43jgIJcbiAgICAgICAgKiogMu+8muS4pOaAgeOAguWbvueJh+WwhuS7peerluebtOaWueWQkeiiq+etieavlOWIh+WJsuS4ujLpg6jliIbvvIzku47kuIrlkJHkuIvvvIzkvp3mrKHkuLrlvLnotbfnirbmgIHnmq7ogqTjgIHmjInkuIvlkoznu4/ov4flj4rpgInkuK3nirbmgIHnmq7ogqTjgIJcbiAgICAgICAgKiogM++8muS4ieaAgeOAguWbvueJh+WwhuS7peerluebtOaWueWQkeiiq+etieavlOWIh+WJsuS4ujLpg6jliIbvvIzku47kuIrlkJHkuIvvvIzkvp3mrKHkuLrlvLnotbfnirbmgIHnmq7ogqTjgIHnu4/ov4fnirbmgIHnmq7ogqTjgIHmjInkuIvlkozpgInkuK3nirbmgIHnmq7ogqRcbiAgICAgICAgKi9cbiAgICAgICAgLy/mt7vliqDpvKDmoIfmjInkuIvkuovku7bkvqblkKzjgILmjInml7bml7bnvKnlsI/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLnNjYWxlU21hbGwpO1xuICAgICAgICAvL+a3u+WKoOm8oOagh+aKrOi1t+S6i+S7tuS+puWQrOOAguaKrOi1t+aXtui/mOWOn+aMiemSruOAglxuICAgICAgICB0aGlzLm1vbmtleUJveC5vbihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfnprvlvIDkuovku7bkvqblkKzjgILnprvlvIDml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9PVVQsIHRoaXMsIHRoaXMuc2NhbGVCaWcpO1xuICAgIH1cbiAgICBcbiAgICBcbiAgICBwcml2YXRlIHNjYWxlU21hbGwoKTp2b2lke1xuICAgICAgICAvL+e8qeWwj+iHszAuOOeahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjAuOCwgc2NhbGVZOiAwLjh9LCAyKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzY2FsZUJpZygpOnZvaWR7XG4gICAgICAgIC8v5Y+Y5aSn6L+Y5Y6f55qE57yT5Yqo5pWI5p6cXG4gICAgICAgIExheWEuVHdlZW4udG8odGhpcy5tb25rZXlCb3gsIHtzY2FsZVg6MSwgc2NhbGVZOjF9LCAyKTtcbiAgICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCAgY2xhc3MgVXRpbCB7XG4gICAgcHVibGljIGxvYWQocmVzLCBvblByb2dyZXNzPzogTGF5YS5IYW5kbGVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChzdWMsIGZhaWwpID0+IHtcbiAgICAgICAgICAgIExheWEubG9hZGVyLmxvYWQocmVzLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHN1YyksIG9uUHJvZ3Jlc3MpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgfVxuICAgIGdldEl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIExheWEuTG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBVdGlsO1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEkoKTogVXRpbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgVXRpbCk7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBEYXRhS2V5IHtcbiAgICBjdXJfcmVkX2RheV9saW1pdCA9ICdjdXJfcmVkX2RheV9saW1pdCcsXG4gICAgY3VyX3NoYWtlX2RheV9saW1pdCA9ICdjdXJfc2hha2VfZGF5X2xpbWl0JyxcbiAgICBzaGFrZUxhc3RUaW1lID0gJ3NoYWtlTGFzdFRpbWUnLFxuICAgIGRhdGFDTlQgPSAnZGF0YUNOVCcsXG4gICAgdG9kYXlDbnQgPSAndG9kYXlDbnQnLFxuICAgIGxhc3RUaW1lID0gJ2xhc3RUaW1lJyxcbn0iXX0= | ... | ... |
puchi_laya/bin/prefab/View.json
1 | -{"type":"View","props":{"y":0,"x":0,"width":750,"presetID":1,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":10,"child":[{"type":"Box","props":{"y":37,"x":0,"width":150,"presetID":2,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","presetID":3,"pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","presetID":4,"anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","presetID":5,"anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","presetID":6,"anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"y":176,"x":48,"presetID":7,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"skin":"common/img_coin_bg.png","presetID":8},"compId":11},{"type":"Label","props":{"y":79,"x":85.04541015625,"text":"0","presetID":24,"fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"y":-6,"x":-24,"texture":"common/icon_coin.png","presetID":9},"compId":12},{"type":"Label","props":{"y":12,"x":85.04541015625,"text":"0","presetID":10,"fontSize":34,"color":"#171515"},"compId":13},{"type":"Button","props":{"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png","presetID":11},"compId":14},{"type":"Script","props":{"tiplab":"@node:30","presetID":23,"coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"y":261,"x":242,"presetID":19},"compId":25,"child":[{"type":"Button","props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":14,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":16,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]}]},{"type":"View","props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}],"loadList":["common/btnInvite.png","common/btn_serve(1).png","common/btn_vibrate_on.png","common/btn_yao.png","common/img_coin_bg.png","common/icon_coin.png","common/btn_drawal.png","common/btn_gr.png"],"loadList3D":[]} | |
2 | 1 | \ No newline at end of file |
2 | +{"type":"View","props":{"y":0,"x":0,"width":750,"presetID":1,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":10,"child":[{"type":"Box","props":{"y":37,"x":0,"width":150,"presetID":2,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","presetID":3,"pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","presetID":4,"anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","presetID":5,"anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","presetID":6,"anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"y":176,"x":48,"presetID":7,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"skin":"common/img_coin_bg.png","presetID":8},"compId":11},{"type":"Label","props":{"y":79,"x":85.04541015625,"text":"0","presetID":24,"fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"y":-6,"x":-24,"texture":"common/icon_coin.png","presetID":9},"compId":12},{"type":"Label","props":{"y":29,"x":88,"text":"0","presetID":10,"fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},"compId":13},{"type":"Button","props":{"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png","presetID":11},"compId":14},{"type":"Script","props":{"tiplab":"@node:30","presetID":23,"coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"y":250,"x":218,"presetID":19},"compId":25,"child":[{"type":"Button","props":{"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":39,"labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},"compId":48,"child":[{"type":"Script","props":{"presetID":40,"runtime":"uitl/ScaleButtonScript.ts"},"compId":49}]},{"type":"Button","props":{"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":37,"labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},"compId":46,"child":[{"type":"Script","props":{"presetID":38,"runtime":"uitl/ScaleButtonScript.ts"},"compId":47}]},{"type":"Button","props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":47,"labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},"compId":56,"child":[{"type":"Script","props":{"presetID":48,"runtime":"uitl/ScaleButtonScript.ts"},"compId":57}]},{"type":"Button","props":{"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":14,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":45,"labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},"compId":54,"child":[{"type":"Script","props":{"presetID":46,"runtime":"uitl/ScaleButtonScript.ts"},"compId":55}]},{"type":"Button","props":{"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":16,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":49,"labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},"compId":58,"child":[{"type":"Script","props":{"presetID":50,"runtime":"uitl/ScaleButtonScript.ts"},"compId":59},{"type":"Label","props":{"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"presetID":51,"pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},"compId":60}]},{"type":"Button","props":{"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]},{"type":"Button","props":{"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":41,"labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},"compId":50,"child":[{"type":"Script","props":{"presetID":42,"runtime":"uitl/ScaleButtonScript.ts"},"compId":51}]},{"type":"Button","props":{"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":43,"labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},"compId":52,"child":[{"type":"Script","props":{"presetID":44,"runtime":"uitl/ScaleButtonScript.ts"},"compId":53}]}]},{"type":"View","props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}],"loadList":["common/btnInvite.png","common/btn_serve(1).png","common/btn_vibrate_on.png","common/btn_yao.png","common/img_coin_bg.png","common/icon_coin.png","common/btn_drawal.png","common/btn_gr.png"],"loadList3D":[]} | |
3 | 3 | \ No newline at end of file | ... | ... |
puchi_laya/const.d.ts
puchi_laya/laya/.DS_Store
No preview for this file type
puchi_laya/laya/pages/TestScene.scene
1 | 1 | { |
2 | 2 | "type":"Scene", |
3 | - "selectedBox":1, | |
4 | - "selecteID":70, | |
3 | + "selectedBox":4, | |
4 | + "selecteID":7, | |
5 | 5 | "searchKey":"Scene", |
6 | 6 | "referenceLines":null, |
7 | 7 | "props":{"width":750,"sceneColor":"#000000","runtime":"TestScene.ts","height":1624}, |
8 | 8 | "nodeParent":-1, |
9 | - "maxID":86, | |
9 | + "maxID":102, | |
10 | 10 | "label":"Scene", |
11 | 11 | "isOpen":true, |
12 | 12 | "isDirectory":true, |
... | ... | @@ -29,25 +29,26 @@ |
29 | 29 | }, |
30 | 30 | { |
31 | 31 | "type":"View", |
32 | - "selectedBox":10, | |
32 | + "selectedBox":25, | |
33 | + "selecteID":28, | |
33 | 34 | "searchKey":"View", |
34 | - "props":{"width":750,"presetID":1,"preset":"laya/pages/prefab/View.prefab","height":1334,"centerY":0,"centerX":0}, | |
35 | + "props":{"presetID":1,"preset":"laya/pages/prefab/View.prefab"}, | |
35 | 36 | "nodeParent":1, |
36 | - "maxID":28, | |
37 | + "maxID":43, | |
37 | 38 | "label":"View(View)", |
38 | - "isOpen":false, | |
39 | + "isOpen":true, | |
39 | 40 | "isDirectory":true, |
40 | 41 | "isAniNode":true, |
41 | 42 | "hasChild":true, |
42 | - "compId":70, | |
43 | + "compId":86, | |
43 | 44 | "child":[ |
44 | 45 | { |
45 | 46 | "type":"Box", |
46 | 47 | "searchKey":"Box", |
47 | 48 | "props":{"presetID":2,"preset":"laya/pages/prefab/View.prefab"}, |
48 | - "nodeParent":70, | |
49 | + "nodeParent":86, | |
49 | 50 | "label":"Box(View)", |
50 | - "isOpen":false, | |
51 | + "isOpen":true, | |
51 | 52 | "isDirectory":true, |
52 | 53 | "isAniNode":true, |
53 | 54 | "hasChild":true, |
... | ... | @@ -59,6 +60,7 @@ |
59 | 60 | "props":{"presetID":3,"preset":"laya/pages/prefab/View.prefab"}, |
60 | 61 | "nodeParent":4, |
61 | 62 | "label":"Sprite(View)", |
63 | + "isOpen":null, | |
62 | 64 | "isDirectory":true, |
63 | 65 | "isAniNode":true, |
64 | 66 | "hasChild":true, |
... | ... | @@ -76,7 +78,7 @@ |
76 | 78 | "isDirectory":false, |
77 | 79 | "isAniNode":true, |
78 | 80 | "hasChild":false, |
79 | - "compId":76, | |
81 | + "compId":35, | |
80 | 82 | "child":[ |
81 | 83 | ] |
82 | 84 | }] |
... | ... | @@ -87,6 +89,7 @@ |
87 | 89 | "props":{"presetID":4,"preset":"laya/pages/prefab/View.prefab"}, |
88 | 90 | "nodeParent":4, |
89 | 91 | "label":"Button(View)", |
92 | + "isOpen":null, | |
90 | 93 | "isDirectory":true, |
91 | 94 | "isAniNode":true, |
92 | 95 | "hasChild":true, |
... | ... | @@ -104,7 +107,7 @@ |
104 | 107 | "isDirectory":false, |
105 | 108 | "isAniNode":true, |
106 | 109 | "hasChild":false, |
107 | - "compId":77, | |
110 | + "compId":36, | |
108 | 111 | "child":[ |
109 | 112 | ] |
110 | 113 | }] |
... | ... | @@ -115,6 +118,7 @@ |
115 | 118 | "props":{"presetID":5,"preset":"laya/pages/prefab/View.prefab"}, |
116 | 119 | "nodeParent":4, |
117 | 120 | "label":"Button(View)", |
121 | + "isOpen":null, | |
118 | 122 | "isDirectory":true, |
119 | 123 | "isAniNode":true, |
120 | 124 | "hasChild":true, |
... | ... | @@ -132,7 +136,7 @@ |
132 | 136 | "isDirectory":false, |
133 | 137 | "isAniNode":true, |
134 | 138 | "hasChild":false, |
135 | - "compId":78, | |
139 | + "compId":37, | |
136 | 140 | "child":[ |
137 | 141 | ] |
138 | 142 | }] |
... | ... | @@ -143,6 +147,7 @@ |
143 | 147 | "props":{"presetID":6,"preset":"laya/pages/prefab/View.prefab"}, |
144 | 148 | "nodeParent":4, |
145 | 149 | "label":"Button(View)", |
150 | + "isOpen":null, | |
146 | 151 | "isDirectory":true, |
147 | 152 | "isAniNode":true, |
148 | 153 | "hasChild":true, |
... | ... | @@ -160,7 +165,7 @@ |
160 | 165 | "isDirectory":false, |
161 | 166 | "isAniNode":true, |
162 | 167 | "hasChild":false, |
163 | - "compId":79, | |
168 | + "compId":38, | |
164 | 169 | "child":[ |
165 | 170 | ] |
166 | 171 | }] |
... | ... | @@ -170,7 +175,7 @@ |
170 | 175 | "type":"Box", |
171 | 176 | "searchKey":"Box", |
172 | 177 | "props":{"presetID":7,"preset":"laya/pages/prefab/View.prefab"}, |
173 | - "nodeParent":70, | |
178 | + "nodeParent":86, | |
174 | 179 | "label":"coin", |
175 | 180 | "isOpen":false, |
176 | 181 | "isDirectory":true, |
... | ... | @@ -192,6 +197,19 @@ |
192 | 197 | ] |
193 | 198 | }, |
194 | 199 | { |
200 | + "type":"Label", | |
201 | + "searchKey":"Label", | |
202 | + "props":{"presetID":24,"preset":"laya/pages/prefab/View.prefab"}, | |
203 | + "nodeParent":9, | |
204 | + "label":"Label(View)", | |
205 | + "isDirectory":false, | |
206 | + "isAniNode":true, | |
207 | + "hasChild":false, | |
208 | + "compId":30, | |
209 | + "child":[ | |
210 | + ] | |
211 | + }, | |
212 | + { | |
195 | 213 | "type":"Sprite", |
196 | 214 | "searchKey":"Sprite", |
197 | 215 | "props":{"presetID":9,"preset":"laya/pages/prefab/View.prefab"}, |
... | ... | @@ -210,6 +228,7 @@ |
210 | 228 | "props":{"presetID":10,"preset":"laya/pages/prefab/View.prefab"}, |
211 | 229 | "nodeParent":9, |
212 | 230 | "label":"Label(View)", |
231 | + "isOpen":true, | |
213 | 232 | "isDirectory":false, |
214 | 233 | "isAniNode":true, |
215 | 234 | "hasChild":false, |
... | ... | @@ -242,20 +261,7 @@ |
242 | 261 | "isDirectory":false, |
243 | 262 | "isAniNode":true, |
244 | 263 | "hasChild":false, |
245 | - "compId":72, | |
246 | - "child":[ | |
247 | - ] | |
248 | - }, | |
249 | - { | |
250 | - "type":"Label", | |
251 | - "searchKey":"Label", | |
252 | - "props":{"presetID":24,"preset":"laya/pages/prefab/View.prefab"}, | |
253 | - "nodeParent":9, | |
254 | - "label":"Label(View)", | |
255 | - "isDirectory":false, | |
256 | - "isAniNode":true, | |
257 | - "hasChild":false, | |
258 | - "compId":73, | |
264 | + "compId":29, | |
259 | 265 | "child":[ |
260 | 266 | ] |
261 | 267 | }] |
... | ... | @@ -264,9 +270,9 @@ |
264 | 270 | "type":"Box", |
265 | 271 | "searchKey":"Box", |
266 | 272 | "props":{"presetID":19,"preset":"laya/pages/prefab/View.prefab"}, |
267 | - "nodeParent":70, | |
273 | + "nodeParent":86, | |
268 | 274 | "label":"Box(View)", |
269 | - "isOpen":false, | |
275 | + "isOpen":true, | |
270 | 276 | "isDirectory":true, |
271 | 277 | "isAniNode":true, |
272 | 278 | "hasChild":true, |
... | ... | @@ -278,7 +284,7 @@ |
278 | 284 | "props":{"presetID":13,"preset":"laya/pages/prefab/View.prefab"}, |
279 | 285 | "nodeParent":25, |
280 | 286 | "label":"Button(View)", |
281 | - "isOpen":true, | |
287 | + "isOpen":false, | |
282 | 288 | "isDirectory":true, |
283 | 289 | "isAniNode":true, |
284 | 290 | "hasChild":true, |
... | ... | @@ -296,7 +302,7 @@ |
296 | 302 | "isDirectory":false, |
297 | 303 | "isAniNode":true, |
298 | 304 | "hasChild":false, |
299 | - "compId":75, | |
305 | + "compId":32, | |
300 | 306 | "child":[ |
301 | 307 | ] |
302 | 308 | }] |
... | ... | @@ -307,7 +313,7 @@ |
307 | 313 | "props":{"presetID":14,"preset":"laya/pages/prefab/View.prefab"}, |
308 | 314 | "nodeParent":25, |
309 | 315 | "label":"Button(View)", |
310 | - "isOpen":true, | |
316 | + "isOpen":false, | |
311 | 317 | "isDirectory":true, |
312 | 318 | "isAniNode":true, |
313 | 319 | "hasChild":true, |
... | ... | @@ -325,7 +331,7 @@ |
325 | 331 | "isDirectory":false, |
326 | 332 | "isAniNode":true, |
327 | 333 | "hasChild":false, |
328 | - "compId":80, | |
334 | + "compId":33, | |
329 | 335 | "child":[ |
330 | 336 | ] |
331 | 337 | }] |
... | ... | @@ -336,7 +342,7 @@ |
336 | 342 | "props":{"presetID":15,"preset":"laya/pages/prefab/View.prefab"}, |
337 | 343 | "nodeParent":25, |
338 | 344 | "label":"Button(View)", |
339 | - "isOpen":true, | |
345 | + "isOpen":false, | |
340 | 346 | "isDirectory":true, |
341 | 347 | "isAniNode":true, |
342 | 348 | "hasChild":true, |
... | ... | @@ -354,7 +360,7 @@ |
354 | 360 | "isDirectory":false, |
355 | 361 | "isAniNode":true, |
356 | 362 | "hasChild":false, |
357 | - "compId":81, | |
363 | + "compId":34, | |
358 | 364 | "child":[ |
359 | 365 | ] |
360 | 366 | }] |
... | ... | @@ -365,7 +371,7 @@ |
365 | 371 | "props":{"presetID":16,"preset":"laya/pages/prefab/View.prefab"}, |
366 | 372 | "nodeParent":25, |
367 | 373 | "label":"Button(View)", |
368 | - "isOpen":true, | |
374 | + "isOpen":false, | |
369 | 375 | "isDirectory":true, |
370 | 376 | "isAniNode":true, |
371 | 377 | "hasChild":true, |
... | ... | @@ -383,7 +389,7 @@ |
383 | 389 | "isDirectory":false, |
384 | 390 | "isAniNode":true, |
385 | 391 | "hasChild":false, |
386 | - "compId":82, | |
392 | + "compId":39, | |
387 | 393 | "child":[ |
388 | 394 | ] |
389 | 395 | }] |
... | ... | @@ -391,9 +397,10 @@ |
391 | 397 | { |
392 | 398 | "type":"Button", |
393 | 399 | "searchKey":"Button", |
394 | - "props":{"presetID":17,"preset":"laya/pages/prefab/View.prefab"}, | |
400 | + "props":{"y":297,"x":-21,"presetID":17,"preset":"laya/pages/prefab/View.prefab"}, | |
395 | 401 | "nodeParent":25, |
396 | 402 | "label":"Button(View)", |
403 | + "isOpen":false, | |
397 | 404 | "isDirectory":true, |
398 | 405 | "isAniNode":true, |
399 | 406 | "hasChild":true, |
... | ... | @@ -411,7 +418,7 @@ |
411 | 418 | "isDirectory":false, |
412 | 419 | "isAniNode":true, |
413 | 420 | "hasChild":false, |
414 | - "compId":83, | |
421 | + "compId":40, | |
415 | 422 | "child":[ |
416 | 423 | ] |
417 | 424 | }] |
... | ... | @@ -419,13 +426,14 @@ |
419 | 426 | { |
420 | 427 | "type":"Button", |
421 | 428 | "searchKey":"Button", |
422 | - "props":{"presetID":22,"preset":"laya/pages/prefab/View.prefab"}, | |
429 | + "props":{"y":286,"x":282,"presetID":22,"preset":"laya/pages/prefab/View.prefab"}, | |
423 | 430 | "nodeParent":25, |
424 | 431 | "label":"Button(View)", |
432 | + "isOpen":null, | |
425 | 433 | "isDirectory":true, |
426 | 434 | "isAniNode":true, |
427 | 435 | "hasChild":true, |
428 | - "compId":71, | |
436 | + "compId":28, | |
429 | 437 | "child":[ |
430 | 438 | { |
431 | 439 | "type":"Script", |
... | ... | @@ -434,12 +442,12 @@ |
434 | 442 | "searchKey":"Script,ScaleButtonScript", |
435 | 443 | "removeAble":true, |
436 | 444 | "props":{"presetID":35,"preset":"laya/pages/prefab/View.prefab"}, |
437 | - "nodeParent":71, | |
445 | + "nodeParent":28, | |
438 | 446 | "label":"ScaleButtonScript", |
439 | 447 | "isDirectory":false, |
440 | 448 | "isAniNode":true, |
441 | 449 | "hasChild":false, |
442 | - "compId":84, | |
450 | + "compId":41, | |
443 | 451 | "child":[ |
444 | 452 | ] |
445 | 453 | }] |
... | ... | @@ -454,7 +462,7 @@ |
454 | 462 | "isDirectory":true, |
455 | 463 | "isAniNode":true, |
456 | 464 | "hasChild":true, |
457 | - "compId":74, | |
465 | + "compId":31, | |
458 | 466 | "child":[ |
459 | 467 | { |
460 | 468 | "type":"Script", |
... | ... | @@ -463,12 +471,228 @@ |
463 | 471 | "searchKey":"Script,ScaleButtonScript", |
464 | 472 | "removeAble":true, |
465 | 473 | "props":{"presetID":36,"preset":"laya/pages/prefab/View.prefab"}, |
466 | - "nodeParent":74, | |
474 | + "nodeParent":31, | |
475 | + "label":"ScaleButtonScript", | |
476 | + "isDirectory":false, | |
477 | + "isAniNode":true, | |
478 | + "hasChild":false, | |
479 | + "compId":42, | |
480 | + "child":[ | |
481 | + ] | |
482 | + }] | |
483 | + }, | |
484 | + { | |
485 | + "type":"Button", | |
486 | + "searchKey":"Button", | |
487 | + "props":{"presetID":37,"preset":"laya/pages/prefab/View.prefab"}, | |
488 | + "nodeParent":25, | |
489 | + "label":"Button(View)", | |
490 | + "isOpen":false, | |
491 | + "isDirectory":true, | |
492 | + "isAniNode":true, | |
493 | + "hasChild":true, | |
494 | + "compId":87, | |
495 | + "child":[ | |
496 | + { | |
497 | + "type":"Script", | |
498 | + "switchAble":true, | |
499 | + "source":"src/uitl/ScaleButtonScript.ts", | |
500 | + "searchKey":"Script,ScaleButtonScript", | |
501 | + "removeAble":true, | |
502 | + "props":{"presetID":38,"preset":"laya/pages/prefab/View.prefab"}, | |
503 | + "nodeParent":87, | |
504 | + "label":"ScaleButtonScript", | |
505 | + "isDirectory":false, | |
506 | + "isAniNode":true, | |
507 | + "hasChild":false, | |
508 | + "compId":88, | |
509 | + "child":[ | |
510 | + ] | |
511 | + }] | |
512 | + }, | |
513 | + { | |
514 | + "type":"Button", | |
515 | + "searchKey":"Button", | |
516 | + "props":{"presetID":39,"preset":"laya/pages/prefab/View.prefab"}, | |
517 | + "nodeParent":25, | |
518 | + "label":"Button(View)", | |
519 | + "isOpen":false, | |
520 | + "isDirectory":true, | |
521 | + "isAniNode":true, | |
522 | + "hasChild":true, | |
523 | + "compId":89, | |
524 | + "child":[ | |
525 | + { | |
526 | + "type":"Script", | |
527 | + "switchAble":true, | |
528 | + "source":"src/uitl/ScaleButtonScript.ts", | |
529 | + "searchKey":"Script,ScaleButtonScript", | |
530 | + "removeAble":true, | |
531 | + "props":{"presetID":40,"preset":"laya/pages/prefab/View.prefab"}, | |
532 | + "nodeParent":89, | |
533 | + "label":"ScaleButtonScript", | |
534 | + "isDirectory":false, | |
535 | + "isAniNode":true, | |
536 | + "hasChild":false, | |
537 | + "compId":90, | |
538 | + "child":[ | |
539 | + ] | |
540 | + }] | |
541 | + }, | |
542 | + { | |
543 | + "type":"Button", | |
544 | + "searchKey":"Button", | |
545 | + "props":{"presetID":41,"preset":"laya/pages/prefab/View.prefab"}, | |
546 | + "nodeParent":25, | |
547 | + "label":"Button(View)", | |
548 | + "isOpen":false, | |
549 | + "isDirectory":true, | |
550 | + "isAniNode":true, | |
551 | + "hasChild":true, | |
552 | + "compId":91, | |
553 | + "child":[ | |
554 | + { | |
555 | + "type":"Script", | |
556 | + "switchAble":true, | |
557 | + "source":"src/uitl/ScaleButtonScript.ts", | |
558 | + "searchKey":"Script,ScaleButtonScript", | |
559 | + "removeAble":true, | |
560 | + "props":{"presetID":42,"preset":"laya/pages/prefab/View.prefab"}, | |
561 | + "nodeParent":91, | |
467 | 562 | "label":"ScaleButtonScript", |
468 | 563 | "isDirectory":false, |
469 | 564 | "isAniNode":true, |
470 | 565 | "hasChild":false, |
471 | - "compId":85, | |
566 | + "compId":92, | |
567 | + "child":[ | |
568 | + ] | |
569 | + }] | |
570 | + }, | |
571 | + { | |
572 | + "type":"Button", | |
573 | + "searchKey":"Button", | |
574 | + "props":{"presetID":43,"preset":"laya/pages/prefab/View.prefab"}, | |
575 | + "nodeParent":25, | |
576 | + "label":"Button(View)", | |
577 | + "isOpen":false, | |
578 | + "isDirectory":true, | |
579 | + "isAniNode":true, | |
580 | + "hasChild":true, | |
581 | + "compId":93, | |
582 | + "child":[ | |
583 | + { | |
584 | + "type":"Script", | |
585 | + "switchAble":true, | |
586 | + "source":"src/uitl/ScaleButtonScript.ts", | |
587 | + "searchKey":"Script,ScaleButtonScript", | |
588 | + "removeAble":true, | |
589 | + "props":{"presetID":44,"preset":"laya/pages/prefab/View.prefab"}, | |
590 | + "nodeParent":93, | |
591 | + "label":"ScaleButtonScript", | |
592 | + "isDirectory":false, | |
593 | + "isAniNode":true, | |
594 | + "hasChild":false, | |
595 | + "compId":94, | |
596 | + "child":[ | |
597 | + ] | |
598 | + }] | |
599 | + }, | |
600 | + { | |
601 | + "type":"Button", | |
602 | + "searchKey":"Button", | |
603 | + "props":{"presetID":45,"preset":"laya/pages/prefab/View.prefab"}, | |
604 | + "nodeParent":25, | |
605 | + "label":"Button(View)", | |
606 | + "isOpen":false, | |
607 | + "isDirectory":true, | |
608 | + "isAniNode":true, | |
609 | + "hasChild":true, | |
610 | + "compId":95, | |
611 | + "child":[ | |
612 | + { | |
613 | + "type":"Script", | |
614 | + "switchAble":true, | |
615 | + "source":"src/uitl/ScaleButtonScript.ts", | |
616 | + "searchKey":"Script,ScaleButtonScript", | |
617 | + "removeAble":true, | |
618 | + "props":{"presetID":46,"preset":"laya/pages/prefab/View.prefab"}, | |
619 | + "nodeParent":95, | |
620 | + "label":"ScaleButtonScript", | |
621 | + "isDirectory":false, | |
622 | + "isAniNode":true, | |
623 | + "hasChild":false, | |
624 | + "compId":96, | |
625 | + "child":[ | |
626 | + ] | |
627 | + }] | |
628 | + }, | |
629 | + { | |
630 | + "type":"Button", | |
631 | + "searchKey":"Button", | |
632 | + "props":{"presetID":47,"preset":"laya/pages/prefab/View.prefab"}, | |
633 | + "nodeParent":25, | |
634 | + "label":"Button(View)", | |
635 | + "isOpen":false, | |
636 | + "isDirectory":true, | |
637 | + "isAniNode":true, | |
638 | + "hasChild":true, | |
639 | + "compId":97, | |
640 | + "child":[ | |
641 | + { | |
642 | + "type":"Script", | |
643 | + "switchAble":true, | |
644 | + "source":"src/uitl/ScaleButtonScript.ts", | |
645 | + "searchKey":"Script,ScaleButtonScript", | |
646 | + "removeAble":true, | |
647 | + "props":{"presetID":48,"preset":"laya/pages/prefab/View.prefab"}, | |
648 | + "nodeParent":97, | |
649 | + "label":"ScaleButtonScript", | |
650 | + "isDirectory":false, | |
651 | + "isAniNode":true, | |
652 | + "hasChild":false, | |
653 | + "compId":98, | |
654 | + "child":[ | |
655 | + ] | |
656 | + }] | |
657 | + }, | |
658 | + { | |
659 | + "type":"Button", | |
660 | + "searchKey":"Button", | |
661 | + "props":{"presetID":49,"preset":"laya/pages/prefab/View.prefab"}, | |
662 | + "nodeParent":25, | |
663 | + "label":"Button(View)", | |
664 | + "isOpen":true, | |
665 | + "isDirectory":true, | |
666 | + "isAniNode":true, | |
667 | + "hasChild":true, | |
668 | + "compId":99, | |
669 | + "child":[ | |
670 | + { | |
671 | + "type":"Script", | |
672 | + "switchAble":true, | |
673 | + "source":"src/uitl/ScaleButtonScript.ts", | |
674 | + "searchKey":"Script,ScaleButtonScript", | |
675 | + "removeAble":true, | |
676 | + "props":{"presetID":50,"preset":"laya/pages/prefab/View.prefab"}, | |
677 | + "nodeParent":99, | |
678 | + "label":"ScaleButtonScript", | |
679 | + "isDirectory":false, | |
680 | + "isAniNode":true, | |
681 | + "hasChild":false, | |
682 | + "compId":100, | |
683 | + "child":[ | |
684 | + ] | |
685 | + }, | |
686 | + { | |
687 | + "type":"Label", | |
688 | + "searchKey":"Label", | |
689 | + "props":{"presetID":51,"preset":"laya/pages/prefab/View.prefab"}, | |
690 | + "nodeParent":99, | |
691 | + "label":"Label(View)", | |
692 | + "isDirectory":false, | |
693 | + "isAniNode":true, | |
694 | + "hasChild":false, | |
695 | + "compId":101, | |
472 | 696 | "child":[ |
473 | 697 | ] |
474 | 698 | }] |
... | ... | @@ -478,7 +702,7 @@ |
478 | 702 | "type":"View", |
479 | 703 | "searchKey":"View", |
480 | 704 | "props":{"presetID":18,"preset":"laya/pages/prefab/View.prefab"}, |
481 | - "nodeParent":70, | |
705 | + "nodeParent":86, | |
482 | 706 | "label":"View(View)", |
483 | 707 | "isOpen":null, |
484 | 708 | "isDirectory":true, | ... | ... |
puchi_laya/laya/pages/prefab/View.prefab
1 | 1 | { |
2 | 2 | "x":0, |
3 | 3 | "type":"View", |
4 | - "selectedBox":4, | |
5 | - "selecteID":5, | |
4 | + "selectedBox":58, | |
5 | + "selecteID":60, | |
6 | 6 | "searchKey":"View", |
7 | 7 | "props":{"y":0,"x":0,"width":750,"sceneColor":null,"presetID":1,"preset":"laya/pages/prefab/View.prefab","isPresetRoot":true,"height":1334,"centerY":0,"centerX":0}, |
8 | 8 | "nodeParent":-1, |
9 | - "maxID":43, | |
9 | + "maxID":61, | |
10 | 10 | "label":"View(View)", |
11 | 11 | "isOpen":true, |
12 | 12 | "isDirectory":true, |
... | ... | @@ -64,7 +64,7 @@ |
64 | 64 | "props":{"y":49,"x":180,"var":"btnServer","stateNum":"1","skin":"common/btn_serve(1).png","presetID":4,"preset":"laya/pages/prefab/View.prefab","anchorY":0.5,"anchorX":0.5}, |
65 | 65 | "nodeParent":4, |
66 | 66 | "label":"btnServer", |
67 | - "isOpen":null, | |
67 | + "isOpen":false, | |
68 | 68 | "isDirectory":true, |
69 | 69 | "isAniNode":true, |
70 | 70 | "hasChild":true, |
... | ... | @@ -207,7 +207,7 @@ |
207 | 207 | "x":30, |
208 | 208 | "type":"Label", |
209 | 209 | "searchKey":"Label", |
210 | - "props":{"y":12,"x":85.04541015625,"text":"0","presetID":10,"preset":"laya/pages/prefab/View.prefab","fontSize":34,"color":"#171515"}, | |
210 | + "props":{"y":29,"x":88,"text":"0","presetID":10,"preset":"laya/pages/prefab/View.prefab","fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5}, | |
211 | 211 | "nodeParent":9, |
212 | 212 | "label":"Label(View)", |
213 | 213 | "isOpen":true, |
... | ... | @@ -254,7 +254,7 @@ |
254 | 254 | "x":15, |
255 | 255 | "type":"Box", |
256 | 256 | "searchKey":"Box", |
257 | - "props":{"y":261,"x":242,"presetID":19,"preset":"laya/pages/prefab/View.prefab"}, | |
257 | + "props":{"y":250,"x":218,"presetID":19,"preset":"laya/pages/prefab/View.prefab"}, | |
258 | 258 | "nodeParent":10, |
259 | 259 | "label":"Box(View)", |
260 | 260 | "isOpen":true, |
... | ... | @@ -266,6 +266,66 @@ |
266 | 266 | { |
267 | 267 | "x":30, |
268 | 268 | "type":"Button", |
269 | + "searchKey":"Button,btnPreFull", | |
270 | + "props":{"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":39,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5}, | |
271 | + "nodeParent":25, | |
272 | + "label":"btnPreFull", | |
273 | + "isOpen":false, | |
274 | + "isDirectory":true, | |
275 | + "isAniNode":true, | |
276 | + "hasChild":true, | |
277 | + "compId":48, | |
278 | + "child":[ | |
279 | + { | |
280 | + "type":"Script", | |
281 | + "switchAble":true, | |
282 | + "source":"src/uitl/ScaleButtonScript.ts", | |
283 | + "searchKey":"Script,ScaleButtonScript", | |
284 | + "removeAble":true, | |
285 | + "props":{"presetID":40,"preset":"laya/pages/prefab/View.prefab"}, | |
286 | + "nodeParent":48, | |
287 | + "label":"ScaleButtonScript", | |
288 | + "isDirectory":false, | |
289 | + "isAniNode":true, | |
290 | + "hasChild":false, | |
291 | + "compId":49, | |
292 | + "child":[ | |
293 | + ] | |
294 | + }] | |
295 | + }, | |
296 | + { | |
297 | + "x":30, | |
298 | + "type":"Button", | |
299 | + "searchKey":"Button,btnPreNative", | |
300 | + "props":{"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":37,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5}, | |
301 | + "nodeParent":25, | |
302 | + "label":"btnPreNative", | |
303 | + "isOpen":false, | |
304 | + "isDirectory":true, | |
305 | + "isAniNode":true, | |
306 | + "hasChild":true, | |
307 | + "compId":46, | |
308 | + "child":[ | |
309 | + { | |
310 | + "type":"Script", | |
311 | + "switchAble":true, | |
312 | + "source":"src/uitl/ScaleButtonScript.ts", | |
313 | + "searchKey":"Script,ScaleButtonScript", | |
314 | + "removeAble":true, | |
315 | + "props":{"presetID":38,"preset":"laya/pages/prefab/View.prefab"}, | |
316 | + "nodeParent":46, | |
317 | + "label":"ScaleButtonScript", | |
318 | + "isDirectory":false, | |
319 | + "isAniNode":true, | |
320 | + "hasChild":false, | |
321 | + "compId":47, | |
322 | + "child":[ | |
323 | + ] | |
324 | + }] | |
325 | + }, | |
326 | + { | |
327 | + "x":30, | |
328 | + "type":"Button", | |
269 | 329 | "searchKey":"Button,btnPreloadAD", |
270 | 330 | "props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5}, |
271 | 331 | "nodeParent":25, |
... | ... | @@ -296,18 +356,47 @@ |
296 | 356 | { |
297 | 357 | "x":30, |
298 | 358 | "type":"Button", |
359 | + "searchKey":"Button,btnCloseBanner", | |
360 | + "props":{"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":47,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5}, | |
361 | + "nodeParent":25, | |
362 | + "label":"btnCloseBanner", | |
363 | + "isOpen":false, | |
364 | + "isDirectory":true, | |
365 | + "isAniNode":true, | |
366 | + "hasChild":true, | |
367 | + "compId":56, | |
368 | + "child":[ | |
369 | + { | |
370 | + "type":"Script", | |
371 | + "switchAble":true, | |
372 | + "source":"src/uitl/ScaleButtonScript.ts", | |
373 | + "searchKey":"Script,ScaleButtonScript", | |
374 | + "removeAble":true, | |
375 | + "props":{"presetID":48,"preset":"laya/pages/prefab/View.prefab"}, | |
376 | + "nodeParent":56, | |
377 | + "label":"ScaleButtonScript", | |
378 | + "isDirectory":false, | |
379 | + "isAniNode":true, | |
380 | + "hasChild":false, | |
381 | + "compId":57, | |
382 | + "child":[ | |
383 | + ] | |
384 | + }] | |
385 | + }, | |
386 | + { | |
387 | + "x":30, | |
388 | + "type":"Button", | |
299 | 389 | "searchKey":"Button,btnShowBanner", |
300 | - "props":{"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":14,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5}, | |
390 | + "props":{"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":14,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5}, | |
301 | 391 | "nodeParent":25, |
302 | 392 | "label":"btnShowBanner", |
303 | - "isOpen":true, | |
393 | + "isOpen":false, | |
304 | 394 | "isDirectory":true, |
305 | 395 | "isAniNode":true, |
306 | 396 | "hasChild":true, |
307 | 397 | "compId":18, |
308 | 398 | "child":[ |
309 | 399 | { |
310 | - "x":45, | |
311 | 400 | "type":"Script", |
312 | 401 | "switchAble":true, |
313 | 402 | "source":"src/uitl/ScaleButtonScript.ts", |
... | ... | @@ -328,17 +417,16 @@ |
328 | 417 | "x":30, |
329 | 418 | "type":"Button", |
330 | 419 | "searchKey":"Button,btnShowFullAd", |
331 | - "props":{"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5}, | |
420 | + "props":{"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5}, | |
332 | 421 | "nodeParent":25, |
333 | 422 | "label":"btnShowFullAd", |
334 | - "isOpen":true, | |
423 | + "isOpen":false, | |
335 | 424 | "isDirectory":true, |
336 | 425 | "isAniNode":true, |
337 | 426 | "hasChild":true, |
338 | 427 | "compId":20, |
339 | 428 | "child":[ |
340 | 429 | { |
341 | - "x":45, | |
342 | 430 | "type":"Script", |
343 | 431 | "switchAble":true, |
344 | 432 | "source":"src/uitl/ScaleButtonScript.ts", |
... | ... | @@ -358,18 +446,47 @@ |
358 | 446 | { |
359 | 447 | "x":30, |
360 | 448 | "type":"Button", |
449 | + "searchKey":"Button,btnCloseNative", | |
450 | + "props":{"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":45,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5}, | |
451 | + "nodeParent":25, | |
452 | + "label":"btnCloseNative", | |
453 | + "isOpen":false, | |
454 | + "isDirectory":true, | |
455 | + "isAniNode":true, | |
456 | + "hasChild":true, | |
457 | + "compId":54, | |
458 | + "child":[ | |
459 | + { | |
460 | + "type":"Script", | |
461 | + "switchAble":true, | |
462 | + "source":"src/uitl/ScaleButtonScript.ts", | |
463 | + "searchKey":"Script,ScaleButtonScript", | |
464 | + "removeAble":true, | |
465 | + "props":{"presetID":46,"preset":"laya/pages/prefab/View.prefab"}, | |
466 | + "nodeParent":54, | |
467 | + "label":"ScaleButtonScript", | |
468 | + "isDirectory":false, | |
469 | + "isAniNode":true, | |
470 | + "hasChild":false, | |
471 | + "compId":55, | |
472 | + "child":[ | |
473 | + ] | |
474 | + }] | |
475 | + }, | |
476 | + { | |
477 | + "x":30, | |
478 | + "type":"Button", | |
361 | 479 | "searchKey":"Button,btnShowNativeAd", |
362 | - "props":{"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":16,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5}, | |
480 | + "props":{"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":16,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5}, | |
363 | 481 | "nodeParent":25, |
364 | 482 | "label":"btnShowNativeAd", |
365 | - "isOpen":true, | |
483 | + "isOpen":false, | |
366 | 484 | "isDirectory":true, |
367 | 485 | "isAniNode":true, |
368 | 486 | "hasChild":true, |
369 | 487 | "compId":21, |
370 | 488 | "child":[ |
371 | 489 | { |
372 | - "x":45, | |
373 | 490 | "type":"Script", |
374 | 491 | "switchAble":true, |
375 | 492 | "source":"src/uitl/ScaleButtonScript.ts", |
... | ... | @@ -390,17 +507,16 @@ |
390 | 507 | "x":30, |
391 | 508 | "type":"Button", |
392 | 509 | "searchKey":"Button,btnShowInterAd", |
393 | - "props":{"width":240,"var":"btnShowInterAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5}, | |
510 | + "props":{"width":240,"var":"btnShowInterAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5}, | |
394 | 511 | "nodeParent":25, |
395 | 512 | "label":"btnShowInterAd", |
396 | - "isOpen":true, | |
513 | + "isOpen":false, | |
397 | 514 | "isDirectory":true, |
398 | 515 | "isAniNode":true, |
399 | 516 | "hasChild":true, |
400 | 517 | "compId":22, |
401 | 518 | "child":[ |
402 | 519 | { |
403 | - "x":45, | |
404 | 520 | "type":"Script", |
405 | 521 | "switchAble":true, |
406 | 522 | "source":"src/uitl/ScaleButtonScript.ts", |
... | ... | @@ -421,7 +537,7 @@ |
421 | 537 | "x":30, |
422 | 538 | "type":"Button", |
423 | 539 | "searchKey":"Button,btnRewardAd", |
424 | - "props":{"width":240,"var":"btnRewardAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5}, | |
540 | + "props":{"width":240,"var":"btnRewardAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5}, | |
425 | 541 | "nodeParent":25, |
426 | 542 | "label":"btnRewardAd", |
427 | 543 | "isOpen":null, |
... | ... | @@ -450,8 +566,53 @@ |
450 | 566 | { |
451 | 567 | "x":30, |
452 | 568 | "type":"Button", |
569 | + "searchKey":"Button,btnMinWithDrawal", | |
570 | + "props":{"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":49,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5}, | |
571 | + "nodeParent":25, | |
572 | + "label":"btnMinWithDrawal", | |
573 | + "isOpen":true, | |
574 | + "isDirectory":true, | |
575 | + "isAniNode":true, | |
576 | + "hasChild":true, | |
577 | + "compId":58, | |
578 | + "child":[ | |
579 | + { | |
580 | + "x":45, | |
581 | + "type":"Script", | |
582 | + "switchAble":true, | |
583 | + "source":"src/uitl/ScaleButtonScript.ts", | |
584 | + "searchKey":"Script,ScaleButtonScript", | |
585 | + "removeAble":true, | |
586 | + "props":{"presetID":50,"preset":"laya/pages/prefab/View.prefab"}, | |
587 | + "nodeParent":58, | |
588 | + "label":"ScaleButtonScript", | |
589 | + "isDirectory":false, | |
590 | + "isAniNode":true, | |
591 | + "hasChild":false, | |
592 | + "compId":59, | |
593 | + "child":[ | |
594 | + ] | |
595 | + }, | |
596 | + { | |
597 | + "x":45, | |
598 | + "type":"Label", | |
599 | + "searchKey":"Label,minWithDrawalLab", | |
600 | + "props":{"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"presetID":51,"preset":"laya/pages/prefab/View.prefab","pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"}, | |
601 | + "nodeParent":58, | |
602 | + "label":"minWithDrawalLab", | |
603 | + "isDirectory":false, | |
604 | + "isAniNode":true, | |
605 | + "hasChild":false, | |
606 | + "compId":60, | |
607 | + "child":[ | |
608 | + ] | |
609 | + }] | |
610 | + }, | |
611 | + { | |
612 | + "x":30, | |
613 | + "type":"Button", | |
453 | 614 | "searchKey":"Button,btnRedpacket", |
454 | - "props":{"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5}, | |
615 | + "props":{"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5}, | |
455 | 616 | "nodeParent":25, |
456 | 617 | "label":"btnRedpacket", |
457 | 618 | "isOpen":true, |
... | ... | @@ -477,6 +638,66 @@ |
477 | 638 | "child":[ |
478 | 639 | ] |
479 | 640 | }] |
641 | + }, | |
642 | + { | |
643 | + "x":30, | |
644 | + "type":"Button", | |
645 | + "searchKey":"Button,btnPreInsert", | |
646 | + "props":{"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":41,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5}, | |
647 | + "nodeParent":25, | |
648 | + "label":"btnPreInsert", | |
649 | + "isOpen":false, | |
650 | + "isDirectory":true, | |
651 | + "isAniNode":true, | |
652 | + "hasChild":true, | |
653 | + "compId":50, | |
654 | + "child":[ | |
655 | + { | |
656 | + "type":"Script", | |
657 | + "switchAble":true, | |
658 | + "source":"src/uitl/ScaleButtonScript.ts", | |
659 | + "searchKey":"Script,ScaleButtonScript", | |
660 | + "removeAble":true, | |
661 | + "props":{"presetID":42,"preset":"laya/pages/prefab/View.prefab"}, | |
662 | + "nodeParent":50, | |
663 | + "label":"ScaleButtonScript", | |
664 | + "isDirectory":false, | |
665 | + "isAniNode":true, | |
666 | + "hasChild":false, | |
667 | + "compId":51, | |
668 | + "child":[ | |
669 | + ] | |
670 | + }] | |
671 | + }, | |
672 | + { | |
673 | + "x":30, | |
674 | + "type":"Button", | |
675 | + "searchKey":"Button,btnPreVideo", | |
676 | + "props":{"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":43,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5}, | |
677 | + "nodeParent":25, | |
678 | + "label":"btnPreVideo", | |
679 | + "isOpen":false, | |
680 | + "isDirectory":true, | |
681 | + "isAniNode":true, | |
682 | + "hasChild":true, | |
683 | + "compId":52, | |
684 | + "child":[ | |
685 | + { | |
686 | + "type":"Script", | |
687 | + "switchAble":true, | |
688 | + "source":"src/uitl/ScaleButtonScript.ts", | |
689 | + "searchKey":"Script,ScaleButtonScript", | |
690 | + "removeAble":true, | |
691 | + "props":{"presetID":44,"preset":"laya/pages/prefab/View.prefab"}, | |
692 | + "nodeParent":52, | |
693 | + "label":"ScaleButtonScript", | |
694 | + "isDirectory":false, | |
695 | + "isAniNode":true, | |
696 | + "hasChild":false, | |
697 | + "compId":53, | |
698 | + "child":[ | |
699 | + ] | |
700 | + }] | |
480 | 701 | }] |
481 | 702 | }, |
482 | 703 | { |
... | ... | @@ -486,7 +707,7 @@ |
486 | 707 | "props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"preset":"laya/pages/prefab/View.prefab","height":300}, |
487 | 708 | "nodeParent":10, |
488 | 709 | "label":"NativeAD", |
489 | - "isOpen":null, | |
710 | + "isOpen":false, | |
490 | 711 | "isDirectory":true, |
491 | 712 | "isAniNode":true, |
492 | 713 | "hasChild":true, |
... | ... | @@ -507,7 +728,8 @@ |
507 | 728 | "compId":27, |
508 | 729 | "child":[ |
509 | 730 | ] |
510 | - }] | |
731 | + }], | |
732 | + "$HIDDEN":false | |
511 | 733 | }], |
512 | 734 | "animations":[ |
513 | 735 | { | ... | ... |
puchi_laya/release/.DS_Store
No preview for this file type
puchi_laya/release/web/TestScene.json
1 | -{"type":"Scene","props":{"width":750,"runtime":"TestScene.ts","height":1624},"compId":1,"child":[{"type":"Sprite","props":{"y":0,"x":0,"texture":"local/bg.png","name":"bg"},"compId":24},{"type":"View","props":{"width":750,"presetID":1,"height":1334,"centerY":0,"centerX":0,"y":0,"x":0,"isPresetRoot":true},"compId":70,"child":[{"type":"Box","props":{"presetID":2,"y":37,"x":0,"width":150,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"presetID":3,"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":76}]},{"type":"Button","props":{"presetID":4,"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":77}]},{"type":"Button","props":{"presetID":5,"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":78}]},{"type":"Button","props":{"presetID":6,"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":79}]}]},{"type":"Box","props":{"presetID":7,"y":176,"x":48,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"presetID":8,"skin":"common/img_coin_bg.png"},"compId":11},{"type":"Sprite","props":{"presetID":9,"y":-6,"x":-24,"texture":"common/icon_coin.png"},"compId":12},{"type":"Label","props":{"presetID":10,"y":12,"x":85.04541015625,"text":"0","fontSize":34,"color":"#171515"},"compId":13},{"type":"Button","props":{"presetID":11,"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png"},"compId":14},{"type":"Script","props":{"presetID":23,"tiplab":"@node:30","coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":72},{"type":"Label","props":{"presetID":24,"y":79,"x":85.04541015625,"text":"0","fontSize":34,"color":"#9c7b7b"},"compId":73}]},{"type":"Box","props":{"presetID":19,"y":261,"x":242},"compId":25,"child":[{"type":"Button","props":{"presetID":13,"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":75}]},{"type":"Button","props":{"presetID":14,"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":80}]},{"type":"Button","props":{"presetID":15,"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":81}]},{"type":"Button","props":{"presetID":16,"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":82}]},{"type":"Button","props":{"presetID":17,"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":83}]},{"type":"Button","props":{"presetID":22,"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5},"compId":71,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":84}]},{"type":"Button","props":{"presetID":25,"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":74,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":85}]}]},{"type":"View","props":{"presetID":18,"y":773,"x":75,"width":600,"var":"NativeAD","height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}]}],"loadList":["local/bg.png","prefab/View.prefab"],"loadList3D":[]} | |
2 | 1 | \ No newline at end of file |
2 | +{"type":"Scene","props":{"width":750,"runtime":"TestScene.ts","height":1624},"compId":1,"child":[{"type":"Sprite","props":{"y":0,"x":0,"texture":"local/bg.png","name":"bg"},"compId":24},{"type":"View","props":{"presetID":1,"y":0,"x":0,"width":750,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":86,"child":[{"type":"Box","props":{"presetID":2,"y":37,"x":0,"width":150,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"presetID":3,"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"presetID":4,"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"presetID":5,"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"presetID":6,"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"presetID":7,"y":176,"x":48,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"presetID":8,"skin":"common/img_coin_bg.png"},"compId":11},{"type":"Label","props":{"presetID":24,"y":79,"x":85.04541015625,"text":"0","fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"presetID":9,"y":-6,"x":-24,"texture":"common/icon_coin.png"},"compId":12},{"type":"Label","props":{"presetID":10,"y":29,"x":88,"text":"0","fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},"compId":13},{"type":"Button","props":{"presetID":11,"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png"},"compId":14},{"type":"Script","props":{"presetID":23,"tiplab":"@node:30","coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"presetID":19,"y":250,"x":218},"compId":25,"child":[{"type":"Button","props":{"presetID":13,"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"presetID":14,"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"presetID":15,"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"presetID":16,"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"y":297,"x":-21,"presetID":17,"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"y":286,"x":282,"presetID":22,"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"presetID":25,"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]},{"type":"Button","props":{"presetID":37,"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},"compId":87,"child":[{"type":"Script","props":{"presetID":38,"runtime":"uitl/ScaleButtonScript.ts"},"compId":88}]},{"type":"Button","props":{"presetID":39,"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},"compId":89,"child":[{"type":"Script","props":{"presetID":40,"runtime":"uitl/ScaleButtonScript.ts"},"compId":90}]},{"type":"Button","props":{"presetID":41,"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},"compId":91,"child":[{"type":"Script","props":{"presetID":42,"runtime":"uitl/ScaleButtonScript.ts"},"compId":92}]},{"type":"Button","props":{"presetID":43,"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},"compId":93,"child":[{"type":"Script","props":{"presetID":44,"runtime":"uitl/ScaleButtonScript.ts"},"compId":94}]},{"type":"Button","props":{"presetID":45,"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},"compId":95,"child":[{"type":"Script","props":{"presetID":46,"runtime":"uitl/ScaleButtonScript.ts"},"compId":96}]},{"type":"Button","props":{"presetID":47,"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},"compId":97,"child":[{"type":"Script","props":{"presetID":48,"runtime":"uitl/ScaleButtonScript.ts"},"compId":98}]},{"type":"Button","props":{"presetID":49,"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},"compId":99,"child":[{"type":"Script","props":{"presetID":50,"runtime":"uitl/ScaleButtonScript.ts"},"compId":100},{"type":"Label","props":{"presetID":51,"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},"compId":101}]}]},{"type":"View","props":{"presetID":18,"y":773,"x":75,"width":600,"var":"NativeAD","height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}]}],"loadList":["local/bg.png","prefab/View.prefab"],"loadList3D":[]} | |
3 | 3 | \ No newline at end of file | ... | ... |
puchi_laya/release/web/js/bundle.js
... | ... | @@ -46,14 +46,14 @@ var GameConfig = /** @class */ (function () { |
46 | 46 | exports.default = GameConfig; |
47 | 47 | GameConfig.init(); |
48 | 48 | |
49 | -},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":12,"./uitl/ScaleButtonScript":26}],2:[function(require,module,exports){ | |
49 | +},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":8,"./uitl/ScaleButtonScript":20}],2:[function(require,module,exports){ | |
50 | 50 | "use strict"; |
51 | 51 | Object.defineProperty(exports, "__esModule", { value: true }); |
52 | 52 | var GameConfig_1 = require("./GameConfig"); |
53 | 53 | var AdManager_1 = require("./sdk/AdManager"); |
54 | -var AppSdk_1 = require("./sdk/AppSdk"); | |
55 | -var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); | |
56 | 54 | var ShakeModel_1 = require("./sdk/model/ShakeModel"); |
55 | +var PcSdk_1 = require("./sdk/PcSdk"); | |
56 | +var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); | |
57 | 57 | var Main = /** @class */ (function () { |
58 | 58 | function Main() { |
59 | 59 | //根据IDE设置初始化引擎 |
... | ... | @@ -96,20 +96,21 @@ var Main = /** @class */ (function () { |
96 | 96 | switch (_a.label) { |
97 | 97 | case 0: |
98 | 98 | /**隐藏启动屏 */ |
99 | - AppSdk_1.AppSdk.I.hideSplash(); | |
99 | + PcSdk_1.default.I.hideSplash(); | |
100 | 100 | /**初始化adk 获取app配置信息 */ |
101 | - AppSdk_1.AppSdk.I.init(); | |
101 | + PcSdk_1.default.I.init(); | |
102 | 102 | /**预加载视频 */ |
103 | 103 | AdManager_1.default.I.init(); |
104 | - /**获取红包配置 初始化数据 */ | |
105 | - return [4 /*yield*/, RedpacketModel_1.default.I.init()]; | |
104 | + /**获取红包配置 摇一摇 等静态数据 */ | |
105 | + return [4 /*yield*/, PcSdk_1.default.I.initGameConfig()]; | |
106 | 106 | case 1: |
107 | - /**获取红包配置 初始化数据 */ | |
107 | + /**获取红包配置 摇一摇 等静态数据 */ | |
108 | 108 | _a.sent(); |
109 | - /**初始化摇一摇的数据 */ | |
110 | - return [4 /*yield*/, ShakeModel_1.default.I.init()]; | |
109 | + return [4 /*yield*/, RedpacketModel_1.default.I.init()]; | |
111 | 110 | case 2: |
112 | - /**初始化摇一摇的数据 */ | |
111 | + _a.sent(); | |
112 | + return [4 /*yield*/, ShakeModel_1.default.I.init()]; | |
113 | + case 3: | |
113 | 114 | _a.sent(); |
114 | 115 | return [2 /*return*/]; |
115 | 116 | } |
... | ... | @@ -121,12 +122,12 @@ var Main = /** @class */ (function () { |
121 | 122 | //激活启动类 |
122 | 123 | new Main(); |
123 | 124 | |
124 | -},{"./GameConfig":1,"./sdk/AdManager":7,"./sdk/AppSdk":9,"./sdk/model/RedpacketModel":16,"./sdk/model/ShakeModel":17}],3:[function(require,module,exports){ | |
125 | +},{"./GameConfig":1,"./sdk/AdManager":7,"./sdk/PcSdk":9,"./sdk/model/RedpacketModel":13,"./sdk/model/ShakeModel":14}],3:[function(require,module,exports){ | |
125 | 126 | "use strict"; |
126 | 127 | Object.defineProperty(exports, "__esModule", { value: true }); |
127 | -var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); | |
128 | 128 | var EventCenter_1 = require("./event/EventCenter"); |
129 | 129 | var EventEnum_1 = require("./event/EventEnum"); |
130 | +var PcSdk_1 = require("./sdk/PcSdk"); | |
130 | 131 | /** |
131 | 132 | * 主界面 金币金额 |
132 | 133 | */ |
... | ... | @@ -154,14 +155,13 @@ var RedDrawal = /** @class */ (function (_super) { |
154 | 155 | var coin, str, nextDrawal, leftCoin; |
155 | 156 | return __generator(this, function (_a) { |
156 | 157 | switch (_a.label) { |
157 | - case 0: return [4 /*yield*/, RedpacketModel_1.default.I.getTotalCoin()]; | |
158 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.myCoin()]; | |
158 | 159 | case 1: |
159 | 160 | coin = _a.sent(); |
160 | - // let coin = 1000 | |
161 | 161 | this.totalCoin = coin; |
162 | 162 | this.coinlab.text = '' + coin; |
163 | 163 | str = '可提现'; |
164 | - return [4 /*yield*/, RedpacketModel_1.default.I.minWithDrawal()]; | |
164 | + return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()]; | |
165 | 165 | case 2: |
166 | 166 | nextDrawal = _a.sent(); |
167 | 167 | if (this.totalCoin > 0) { |
... | ... | @@ -180,26 +180,33 @@ var RedDrawal = /** @class */ (function (_super) { |
180 | 180 | }(Laya.Script)); |
181 | 181 | exports.default = RedDrawal; |
182 | 182 | |
183 | -},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/model/RedpacketModel":16}],4:[function(require,module,exports){ | |
183 | +},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/PcSdk":9}],4:[function(require,module,exports){ | |
184 | 184 | "use strict"; |
185 | 185 | Object.defineProperty(exports, "__esModule", { value: true }); |
186 | 186 | var layaMaxUI_1 = require("./ui/layaMaxUI"); |
187 | 187 | var AdManager_1 = require("./sdk/AdManager"); |
188 | -var AppSdk_1 = require("./sdk/AppSdk"); | |
189 | 188 | var ShakeModel_1 = require("./sdk/model/ShakeModel"); |
190 | 189 | var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); |
190 | +var PcSdk_1 = require("./sdk/PcSdk"); | |
191 | +var NativeAd_1 = require("./sdk/NativeAd"); | |
191 | 192 | var TestScene = /** @class */ (function (_super) { |
192 | 193 | __extends(TestScene, _super); |
193 | 194 | function TestScene() { |
194 | 195 | var _this = _super.call(this) || this; |
196 | + _this.isLongVibrate = false; | |
195 | 197 | //关闭多点触控,否则就无敌了 |
196 | 198 | Laya.MouseManager.multiTouchEnabled = false; |
197 | 199 | console.log('---------------TestScene-------'); |
198 | - _this.NativeAD.visible = false; | |
199 | 200 | return _this; |
201 | + // this.NativeAD.visible = false; | |
200 | 202 | } |
201 | 203 | TestScene.prototype.onEnable = function () { |
204 | + var _this = this; | |
202 | 205 | this.btnServer.on(Laya.Event.CLICK, this, this.openServer); |
206 | + this.btnVibrate.on(Laya.Event.CLICK, this, function () { | |
207 | + PcSdk_1.default.I.vibrate(_this.isLongVibrate ? 0 : 1); | |
208 | + _this.isLongVibrate = !_this.isLongVibrate; | |
209 | + }); | |
203 | 210 | this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal); |
204 | 211 | this.btnInvite.on(Laya.Event.CLICK, this, this.invitation); |
205 | 212 | this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake); |
... | ... | @@ -210,35 +217,51 @@ var TestScene = /** @class */ (function (_super) { |
210 | 217 | this.btnShowInterAd.on(Laya.Event.CLICK, this, this.showInterAd); |
211 | 218 | this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd); |
212 | 219 | this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket); |
220 | + this.btnPreVideo.on(Laya.Event.CLICK, this, this.preloadRewardAd); | |
221 | + this.btnPreFull.on(Laya.Event.CLICK, this, this.preloadFull); | |
222 | + this.btnPreInsert.on(Laya.Event.CLICK, this, this.preloadInterAd); | |
223 | + this.btnPreNative.on(Laya.Event.CLICK, this, this.preloadNativeAd); | |
224 | + this.btnCloseBanner.on(Laya.Event.CLICK, this, this.closeAdBanner); | |
225 | + this.btnCloseNative.on(Laya.Event.CLICK, this, this.closeAdverDialog); | |
226 | + this.btnMinWithDrawal.on(Laya.Event.CLICK, this, this.minWithDrawal); | |
213 | 227 | }; |
214 | 228 | /**预加载广告 */ |
215 | 229 | TestScene.prototype.preloadAD = function () { |
216 | 230 | return __awaiter(this, void 0, void 0, function () { |
217 | 231 | return __generator(this, function (_a) { |
218 | - console.log('---------------preloadAD-------'); | |
219 | - // await AdManager.I.init(); | |
220 | - MyBridge.testReturn(function () { | |
221 | - var array = []; | |
222 | - for (var _i = 0; _i < arguments.length; _i++) { | |
223 | - array[_i] = arguments[_i]; | |
224 | - } | |
225 | - console.log("-------web--------onClick----->>cocos JS-------MyBridge.testReturn------" + JSON.stringify(array)); | |
226 | - }); | |
227 | - return [2 /*return*/]; | |
232 | + switch (_a.label) { | |
233 | + case 0: | |
234 | + console.log('---------------preloadAD-------'); | |
235 | + return [4 /*yield*/, AdManager_1.default.I.preloadBanner()]; | |
236 | + case 1: | |
237 | + _a.sent(); | |
238 | + return [2 /*return*/]; | |
239 | + } | |
228 | 240 | }); |
229 | 241 | }); |
230 | 242 | }; |
243 | + TestScene.prototype.preloadRewardAd = function () { | |
244 | + AdManager_1.default.I.preloadRewardAd(); | |
245 | + }; | |
246 | + TestScene.prototype.preloadFull = function () { | |
247 | + AdManager_1.default.I.preloadFullAd(); | |
248 | + }; | |
249 | + TestScene.prototype.preloadInterAd = function () { | |
250 | + AdManager_1.default.I.preloadInterAd(); | |
251 | + }; | |
252 | + TestScene.prototype.preloadNativeAd = function () { | |
253 | + this.NativeAD.getComponent(NativeAd_1.default).initNativeAd(1); | |
254 | + }; | |
255 | + TestScene.prototype.closeAdverDialog = function () { | |
256 | + AdManager_1.default.I.closeAdverDialog(); | |
257 | + }; | |
258 | + TestScene.prototype.closeAdBanner = function () { | |
259 | + AdManager_1.default.I.closeAdBanner(); | |
260 | + }; | |
231 | 261 | /**显示全屏广告 */ |
232 | 262 | TestScene.prototype.showFullAd = function () { |
233 | 263 | console.log('---------------showFullAd-------'); |
234 | - // AdManager.I.showFullAd(); | |
235 | - var ret = MyBridge.mapToString({ | |
236 | - data: { | |
237 | - "count": 2, "title": [{ "name": "nnn", "value": "nnnvalue", "default_show": 1 }, | |
238 | - { "name": "mmm", "value": "mmmvalue\"aasdasd" }] | |
239 | - } | |
240 | - }); | |
241 | - console.log("-------web--------onClick----->>cocos JS-------MyBridge.mapToString------" + JSON.stringify(ret)); | |
264 | + AdManager_1.default.I.showFullAd(); | |
242 | 265 | }; |
243 | 266 | /**显示banner */ |
244 | 267 | TestScene.prototype.showBanner = function () { |
... | ... | @@ -247,8 +270,7 @@ var TestScene = /** @class */ (function (_super) { |
247 | 270 | }; |
248 | 271 | /**信息流广告 */ |
249 | 272 | TestScene.prototype.showNativeAd = function () { |
250 | - console.log('---------------showNativeAd-------'); | |
251 | - this.NativeAD.visible = true; | |
273 | + this.NativeAD.getComponent(NativeAd_1.default).initNativeAd(); | |
252 | 274 | }; |
253 | 275 | /**插屏广告 */ |
254 | 276 | TestScene.prototype.showInterAd = function () { |
... | ... | @@ -273,22 +295,38 @@ var TestScene = /** @class */ (function (_super) { |
273 | 295 | /**意见反馈 */ |
274 | 296 | TestScene.prototype.openServer = function () { |
275 | 297 | console.log('---------------openServer-------'); |
276 | - AppSdk_1.AppSdk.I.feedback(); | |
298 | + PcSdk_1.default.I.feedback(); | |
277 | 299 | }; |
278 | 300 | TestScene.prototype.openRedpacket = function () { |
279 | - RedpacketModel_1.default.I.checkRedpacket(); | |
280 | - console.log('红包获取结果:curRedpacket' + RedpacketModel_1.default.I.curRedpacket); | |
281 | - // console.log('红包获取结果:' + JSON.stringify(data)) | |
282 | - // ViewManager.I.openPopwin(RedpacketPopwin, 0); | |
301 | + return __awaiter(this, void 0, void 0, function () { | |
302 | + return __generator(this, function (_a) { | |
303 | + RedpacketModel_1.default.I.checkRedpacket(); | |
304 | + return [2 /*return*/]; | |
305 | + }); | |
306 | + }); | |
307 | + }; | |
308 | + TestScene.prototype.minWithDrawal = function () { | |
309 | + return __awaiter(this, void 0, void 0, function () { | |
310 | + var money; | |
311 | + return __generator(this, function (_a) { | |
312 | + switch (_a.label) { | |
313 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()]; | |
314 | + case 1: | |
315 | + money = _a.sent(); | |
316 | + this.minWithDrawalLab.text = '最低提现:' + money; | |
317 | + return [2 /*return*/]; | |
318 | + } | |
319 | + }); | |
320 | + }); | |
283 | 321 | }; |
284 | 322 | /**打开个人中心 */ |
285 | 323 | TestScene.prototype.openPersonal = function () { |
286 | 324 | console.log('---------------openServer-------'); |
287 | - AppSdk_1.AppSdk.I.personal(0); | |
325 | + PcSdk_1.default.I.personal(0); | |
288 | 326 | }; |
289 | 327 | /**邀请好友 */ |
290 | 328 | TestScene.prototype.invitation = function () { |
291 | - AppSdk_1.AppSdk.I.invitation(); | |
329 | + PcSdk_1.default.I.invitation(); | |
292 | 330 | }; |
293 | 331 | /** |
294 | 332 | * 1 金币 |
... | ... | @@ -298,10 +336,7 @@ var TestScene = /** @class */ (function (_super) { |
298 | 336 | */ |
299 | 337 | TestScene.prototype.touchShake = function () { |
300 | 338 | console.log('---------------touchShake-------'); |
301 | - // this.skin.btnShakeAni.play(0); | |
302 | - AppSdk_1.AppSdk.I.vibrate(); | |
303 | - // ViewManager.I.showModal(HintModal, ' 今⽇次数已⽤完,请明⽇再来'); | |
304 | - // this.skin.handAni.stop(); | |
339 | + PcSdk_1.default.I.vibrate(); | |
305 | 340 | /** |
306 | 341 | * 1.回去星星 道具 |
307 | 342 | * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币 |
... | ... | @@ -385,7 +420,7 @@ var TestScene = /** @class */ (function (_super) { |
385 | 420 | }(layaMaxUI_1.ui.TestSceneUI)); |
386 | 421 | exports.default = TestScene; |
387 | 422 | |
388 | -},{"./sdk/AdManager":7,"./sdk/AppSdk":9,"./sdk/model/RedpacketModel":16,"./sdk/model/ShakeModel":17,"./ui/layaMaxUI":21}],5:[function(require,module,exports){ | |
423 | +},{"./sdk/AdManager":7,"./sdk/NativeAd":8,"./sdk/PcSdk":9,"./sdk/model/RedpacketModel":13,"./sdk/model/ShakeModel":14,"./ui/layaMaxUI":15}],5:[function(require,module,exports){ | |
389 | 424 | "use strict"; |
390 | 425 | Object.defineProperty(exports, "__esModule", { value: true }); |
391 | 426 | /* |
... | ... | @@ -441,9 +476,27 @@ var AdManager = /** @class */ (function () { |
441 | 476 | AdManager.prototype.init = function () { |
442 | 477 | this.preloadRewardAd(); |
443 | 478 | }; |
479 | + AdManager.prototype.preloadBanner = function () { | |
480 | + TTAdSdk_1.default.I.loadBannerExpressAd(1); | |
481 | + }; | |
444 | 482 | AdManager.prototype.preloadRewardAd = function () { |
445 | 483 | TTAdSdk_1.default.I.showRewardVideoAd(1); |
446 | 484 | }; |
485 | + AdManager.prototype.preloadFullAd = function () { | |
486 | + TTAdSdk_1.default.I.loadFullScreenVideoAd(1); | |
487 | + }; | |
488 | + AdManager.prototype.preloadInterAd = function () { | |
489 | + TTAdSdk_1.default.I.loadFullScreenVideoAd(1); | |
490 | + }; | |
491 | + AdManager.prototype.preloadNativeAd = function () { | |
492 | + // TTAdSdk.I.loadFullScreenVideoAd(1); | |
493 | + }; | |
494 | + AdManager.prototype.closeAdverDialog = function () { | |
495 | + TTAdSdk_1.default.I.closeAdverDialog(); | |
496 | + }; | |
497 | + AdManager.prototype.closeAdBanner = function () { | |
498 | + TTAdSdk_1.default.I.closeAdBanner(); | |
499 | + }; | |
447 | 500 | AdManager.prototype.showRewardAd = function () { |
448 | 501 | return __awaiter(this, void 0, void 0, function () { |
449 | 502 | var ret, e_1; |
... | ... | @@ -466,12 +519,6 @@ var AdManager = /** @class */ (function () { |
466 | 519 | }); |
467 | 520 | }); |
468 | 521 | }; |
469 | - AdManager.prototype.preloadFullAd = function () { | |
470 | - TTAdSdk_1.default.I.loadFullScreenVideoAd(1); | |
471 | - }; | |
472 | - AdManager.prototype.preloadInterAd = function () { | |
473 | - TTAdSdk_1.default.I.loadFullScreenVideoAd(1); | |
474 | - }; | |
475 | 522 | AdManager.prototype.showFullAd = function () { |
476 | 523 | return __awaiter(this, void 0, void 0, function () { |
477 | 524 | var ret, e_2; |
... | ... | @@ -520,14 +567,9 @@ var AdManager = /** @class */ (function () { |
520 | 567 | AdManager.prototype.showBanner = function () { |
521 | 568 | TTAdSdk_1.default.I.loadBannerExpressAd(); |
522 | 569 | }; |
523 | - AdManager.prototype.hideBanner = function () { | |
524 | - TTAdSdk_1.default.I.hideAd(); | |
525 | - }; | |
526 | - AdManager.prototype.showNativeAd = function (x, y, w, h) { | |
527 | - TTAdSdk_1.default.I.loadNativeExpressAd(x, y, w, h); | |
528 | - }; | |
529 | - AdManager.prototype.hideNativeAd = function () { | |
530 | - TTAdSdk_1.default.I.hideAd(); | |
570 | + AdManager.prototype.showNativeAd = function (x, y, w, h, preload) { | |
571 | + if (preload === void 0) { preload = 0; } | |
572 | + TTAdSdk_1.default.I.loadNativeExpressAd(x, y, w, h, preload); | |
531 | 573 | }; |
532 | 574 | Object.defineProperty(AdManager, "I", { |
533 | 575 | get: function () { |
... | ... | @@ -540,428 +582,346 @@ var AdManager = /** @class */ (function () { |
540 | 582 | }()); |
541 | 583 | exports.default = AdManager; |
542 | 584 | |
543 | -},{"../uitl/ObjectInstance":24,"./TTAdSdk":13}],8:[function(require,module,exports){ | |
585 | +},{"../uitl/ObjectInstance":18,"./TTAdSdk":10}],8:[function(require,module,exports){ | |
544 | 586 | "use strict"; |
545 | 587 | Object.defineProperty(exports, "__esModule", { value: true }); |
546 | -var BaseAppSdk_1 = require("./BaseAppSdk"); | |
547 | -var AndroidAppSdk = /** @class */ (function (_super) { | |
548 | - __extends(AndroidAppSdk, _super); | |
549 | - function AndroidAppSdk() { | |
588 | +var AdManager_1 = require("./AdManager"); | |
589 | +var NativeAd = /** @class */ (function (_super) { | |
590 | + __extends(NativeAd, _super); | |
591 | + function NativeAd() { | |
550 | 592 | return _super !== null && _super.apply(this, arguments) || this; |
551 | 593 | } |
552 | - Object.defineProperty(AndroidAppSdk.prototype, "system", { | |
553 | - get: function () { | |
554 | - return 1; | |
555 | - }, | |
556 | - enumerable: true, | |
557 | - configurable: true | |
558 | - }); | |
559 | - AndroidAppSdk.prototype.callApp = function (cmd) { | |
560 | - var params = []; | |
561 | - for (var _i = 1; _i < arguments.length; _i++) { | |
562 | - params[_i - 1] = arguments[_i]; | |
563 | - } | |
564 | - var _a; | |
565 | - this.bridge && (_a = this.bridge).call.apply(_a, [cmd].concat(params)); | |
566 | - // this.bridge && alert(JSON.stringify(this.bridge)); | |
594 | + NativeAd.prototype.initNativeAd = function (preload) { | |
595 | + if (preload === void 0) { preload = 0; } | |
596 | + var globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true); | |
597 | + AdManager_1.default.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height, preload); | |
567 | 598 | }; |
568 | - AndroidAppSdk.prototype.callAppWithBack = function (callBack, cmd) { | |
569 | - var params = []; | |
570 | - for (var _i = 2; _i < arguments.length; _i++) { | |
571 | - params[_i - 2] = arguments[_i]; | |
572 | - } | |
573 | - var _a; | |
574 | - this.bridge && (_a = this.bridge).callWithBack.apply(_a, [callBack, cmd].concat(params)); | |
599 | + NativeAd.prototype.onEnable = function () { | |
600 | + this.initNativeAd(); | |
601 | + }; | |
602 | + NativeAd.prototype.onDisable = function () { | |
603 | + AdManager_1.default.I.closeAdverDialog(); | |
575 | 604 | }; |
576 | - Object.defineProperty(AndroidAppSdk.prototype, "bridge", { | |
605 | + Object.defineProperty(NativeAd.prototype, "item", { | |
577 | 606 | get: function () { |
578 | - return this._bridge || (this._bridge = this.createClass('com.puchi.sdkdemo.JSBridge')); | |
607 | + return this.owner; | |
579 | 608 | }, |
580 | 609 | enumerable: true, |
581 | 610 | configurable: true |
582 | 611 | }); |
583 | - return AndroidAppSdk; | |
584 | -}(BaseAppSdk_1.default)); | |
585 | -exports.default = AndroidAppSdk; | |
612 | + return NativeAd; | |
613 | +}(Laya.Script)); | |
614 | +exports.default = NativeAd; | |
586 | 615 | |
587 | -},{"./BaseAppSdk":10}],9:[function(require,module,exports){ | |
616 | +},{"./AdManager":7}],9:[function(require,module,exports){ | |
588 | 617 | "use strict"; |
589 | 618 | Object.defineProperty(exports, "__esModule", { value: true }); |
590 | -var IosAppSdk_1 = require("./IosAppSdk"); | |
591 | -var AndroidAppSdk_1 = require("./AndroidAppSdk"); | |
592 | -var BaseAppSdk_1 = require("./BaseAppSdk"); | |
593 | -var AppSdk = /** @class */ (function () { | |
594 | - function AppSdk() { | |
619 | +var ObjectInstance_1 = require("../uitl/ObjectInstance"); | |
620 | +var EventCenter_1 = require("../event/EventCenter"); | |
621 | +var EventEnum_1 = require("../event/EventEnum"); | |
622 | +var PcSdk = /** @class */ (function () { | |
623 | + function PcSdk() { | |
595 | 624 | } |
596 | - Object.defineProperty(AppSdk, "I", { | |
625 | + PcSdk.prototype.init = function () { | |
626 | + this.getSystemInfo(); | |
627 | + }; | |
628 | + Object.defineProperty(PcSdk.prototype, "myBridge", { | |
597 | 629 | get: function () { |
598 | - if (!this._instance) { | |
599 | - var conchConfig = window['conchConfig']; | |
600 | - var os = conchConfig && conchConfig.getOS(); | |
601 | - switch (os) { | |
602 | - case "Conch-ios": | |
603 | - this._instance = new IosAppSdk_1.default; | |
604 | - break; | |
605 | - case "Conch-android": | |
606 | - this._instance = new AndroidAppSdk_1.default; | |
607 | - break; | |
608 | - default: | |
609 | - this._instance = new BaseAppSdk_1.default; | |
610 | - break; | |
611 | - } | |
612 | - window['AppSdk'] = this._instance; | |
630 | + if (MyBridge) { | |
631 | + return MyBridge; | |
613 | 632 | } |
614 | - return this._instance; | |
615 | 633 | }, |
616 | 634 | enumerable: true, |
617 | 635 | configurable: true |
618 | 636 | }); |
619 | - return AppSdk; | |
620 | -}()); | |
621 | -exports.AppSdk = AppSdk; | |
622 | - | |
623 | -},{"./AndroidAppSdk":8,"./BaseAppSdk":10,"./IosAppSdk":11}],10:[function(require,module,exports){ | |
624 | -"use strict"; | |
625 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
626 | -var AddGoldData_1 = require("./sdkData/AddGoldData"); | |
627 | -var MyCoinData_1 = require("./sdkData/MyCoinData"); | |
628 | -var GoldConfigData_1 = require("./sdkData/GoldConfigData"); | |
629 | -var BaseAppSdk = /** @class */ (function () { | |
630 | - function BaseAppSdk() { | |
631 | - this.netOnArr = []; | |
632 | - this.netOffArr = []; | |
633 | - } | |
634 | - BaseAppSdk.prototype.init = function () { | |
635 | - var conch = window['conch']; | |
636 | - if (conch) { | |
637 | - conch.setNetworkEvtFunction(this.networkEvtFunc.bind(this)); | |
638 | - } | |
639 | - this.callApp('setAppCallback', 1, 'AppSdk.onShow()'); | |
640 | - this.callApp('setAppCallback', 2, 'AppSdk.onHide()'); | |
641 | - this.getSystemInfo(); | |
637 | + /**获取基本版本信息以及手机的配置 */ | |
638 | + PcSdk.prototype.getSystemInfo = function (key) { | |
639 | + if (key === void 0) { key = 0; } | |
640 | + var _a; | |
641 | + var ret = this.myBridge.getSystemInfo(key); | |
642 | + var _b = JSON.parse(ret), w = _b.w, h = _b.h, versionName = _b.versionName, channel = _b.channel, pangolin = _b.pangolin, adnet = _b.adnet, level = _b.level; | |
643 | + _a = [w, h, versionName, channel, pangolin, adnet, level], this._width = _a[0], this._height = _a[1], this._version = _a[2], this._channel = _a[3], this.pangolinId = _a[4], this.adnetId = _a[5], this._level = _a[6]; | |
642 | 644 | }; |
643 | - BaseAppSdk.prototype.getSystemInfo = function () { | |
644 | - var _this = this; | |
645 | - this.callAppWithBack(function (ret) { | |
646 | - console.log('---------------getSystemInfo-------' + JSON.stringify(ret)); | |
647 | - var _a = JSON.parse(ret), w = _a.w, h = _a.h, versionName = _a.versionName, channel = _a.channel, pangolin = _a.pangolin, adnet = _a.adnet, level = _a.level; | |
648 | - _this._width = w; | |
649 | - _this._height = h; | |
650 | - _this._version = versionName; | |
651 | - _this._channel = channel; | |
652 | - _this.pangolinId = pangolin; | |
653 | - _this.adnetId = adnet; | |
654 | - _this._level = level; | |
655 | - }, 'getSystemInfo', 0); | |
656 | - }; | |
657 | - BaseAppSdk.prototype.onShow = function () { | |
658 | - // EventCenter.emit(EventEnum.APP_SHOW); | |
659 | - }; | |
660 | - BaseAppSdk.prototype.onHide = function () { | |
661 | - // EventCenter.emit(EventEnum.APP_HIDE); | |
662 | - }; | |
663 | - BaseAppSdk.prototype.vibrate = function () { | |
664 | - this.callApp('openSystemFun', 0); | |
665 | - }; | |
666 | - BaseAppSdk.prototype.hideSplash = function () { | |
667 | - this.callApp('hideSplash'); | |
645 | + PcSdk.prototype.initGameConfig = function () { | |
646 | + this._gameConfig = this.getGameConfig(); | |
647 | + }; | |
648 | + /** | |
649 | + * 震动 | |
650 | + * @param key 0 短震动 1 长震动 | |
651 | + */ | |
652 | + PcSdk.prototype.vibrate = function (key) { | |
653 | + if (key === void 0) { key = 0; } | |
654 | + this.myBridge.openSystemFun(key); | |
655 | + }; | |
656 | + /**隐藏启动屏 */ | |
657 | + PcSdk.prototype.hideSplash = function () { | |
658 | + this.myBridge.hideSplash(); | |
668 | 659 | }; |
669 | 660 | /**弹出提现 */ |
670 | - BaseAppSdk.prototype.withDrawal = function () { | |
671 | - this.callApp('withDrawal'); | |
661 | + PcSdk.prototype.withDrawal = function () { | |
662 | + this.myBridge.withDrawal(); | |
672 | 663 | }; |
673 | 664 | /**意见反馈 */ |
674 | - BaseAppSdk.prototype.feedback = function () { | |
675 | - this.callApp('feedback'); | |
665 | + PcSdk.prototype.feedback = function () { | |
666 | + this.myBridge.feedback(); | |
676 | 667 | }; |
677 | 668 | /** |
678 | 669 | * key 默认0 ,签到 1 |
679 | 670 | */ |
680 | - BaseAppSdk.prototype.personal = function (key) { | |
671 | + PcSdk.prototype.personal = function (key) { | |
681 | 672 | if (key === void 0) { key = 0; } |
682 | - this.callApp('personal', key); | |
673 | + this.myBridge.personal(key); | |
683 | 674 | }; |
684 | 675 | /**邀请好友*/ |
685 | - BaseAppSdk.prototype.invitation = function () { | |
686 | - this.callApp('invitation'); | |
687 | - }; | |
688 | - BaseAppSdk.prototype.currentShut = function (value) { | |
689 | - this.callApp('currentShut', value); | |
676 | + PcSdk.prototype.invitation = function () { | |
677 | + this.myBridge.invitation(); | |
690 | 678 | }; |
691 | 679 | /** |
692 | 680 | * 获取金币配表 |
693 | 681 | * @param key 1红包 2 摇一摇红包 |
694 | 682 | */ |
695 | - BaseAppSdk.prototype.getGameConfig = function (key) { | |
696 | - if (key === void 0) { key = 1; } | |
697 | - return __awaiter(this, void 0, void 0, function () { | |
698 | - var result; | |
699 | - return __generator(this, function (_a) { | |
700 | - switch (_a.label) { | |
701 | - case 0: return [4 /*yield*/, this.onCallBack('getGameConfig', key)]; | |
702 | - case 1: | |
703 | - result = _a.sent(); | |
704 | - GoldConfigData_1.GoldConfigData.I.initData(result); | |
705 | - return [2 /*return*/, result]; | |
706 | - } | |
707 | - }); | |
708 | - }); | |
683 | + PcSdk.prototype.getGameConfig = function () { | |
684 | + var result = this.myBridge.getGameConfig(); | |
685 | + // console.log('---------------getGameConfig-------' + JSON.stringify(result)) | |
686 | + return JSON.parse(result); | |
709 | 687 | }; |
710 | 688 | /** |
711 | 689 | * 要求发放金币 |
712 | 690 | * @param key 1红包 |
713 | 691 | */ |
714 | - BaseAppSdk.prototype.addGold = function (key) { | |
715 | - if (key === void 0) { key = 1; } | |
692 | + PcSdk.prototype.addGold = function (key) { | |
716 | 693 | return __awaiter(this, void 0, void 0, function () { |
717 | - var result; | |
694 | + var _this = this; | |
718 | 695 | return __generator(this, function (_a) { |
719 | - switch (_a.label) { | |
720 | - case 0: return [4 /*yield*/, this.onCallBack('addGold', key)]; | |
721 | - case 1: | |
722 | - result = _a.sent(); | |
723 | - AddGoldData_1.default.initData(result); | |
724 | - return [2 /*return*/, result]; | |
725 | - } | |
696 | + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
697 | + return __generator(this, function (_a) { | |
698 | + switch (_a.label) { | |
699 | + case 0: return [4 /*yield*/, this.myBridge.addGold(key, function (res) { | |
700 | + res = JSON.parse(res); | |
701 | + var code = res.code, data = res.data, msg = res.msg; | |
702 | + if ('0' === code || !code) { | |
703 | + resolve(data); | |
704 | + } | |
705 | + else { | |
706 | + reject(msg); | |
707 | + } | |
708 | + })]; | |
709 | + case 1: | |
710 | + _a.sent(); | |
711 | + return [2 /*return*/]; | |
712 | + } | |
713 | + }); | |
714 | + }); })]; | |
726 | 715 | }); |
727 | 716 | }); |
728 | 717 | }; |
729 | - BaseAppSdk.prototype.myCoin = function () { | |
718 | + /**获取总金币 */ | |
719 | + PcSdk.prototype.myCoin = function () { | |
730 | 720 | return __awaiter(this, void 0, void 0, function () { |
731 | - var result; | |
721 | + var _this = this; | |
732 | 722 | return __generator(this, function (_a) { |
733 | - switch (_a.label) { | |
734 | - case 0: return [4 /*yield*/, this.onCallBack('myCoin')]; | |
735 | - case 1: | |
736 | - result = _a.sent(); | |
737 | - MyCoinData_1.default.initData(result); | |
738 | - return [2 /*return*/, result]; | |
739 | - } | |
723 | + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
724 | + return __generator(this, function (_a) { | |
725 | + switch (_a.label) { | |
726 | + case 0: return [4 /*yield*/, this.myBridge.myCoin(function (res) { | |
727 | + res = JSON.parse(res); | |
728 | + var code = res.code, data = res.data, msg = res.msg; | |
729 | + if ('0' === code || !code) { | |
730 | + resolve(data['coin']); | |
731 | + } | |
732 | + else { | |
733 | + reject(msg); | |
734 | + } | |
735 | + })]; | |
736 | + case 1: | |
737 | + _a.sent(); | |
738 | + return [2 /*return*/]; | |
739 | + } | |
740 | + }); | |
741 | + }); })]; | |
740 | 742 | }); |
741 | 743 | }); |
742 | 744 | }; |
743 | 745 | /**获取当前提现的档位 */ |
744 | - BaseAppSdk.prototype.minWithDrawal = function () { | |
746 | + PcSdk.prototype.minWithDrawal = function () { | |
745 | 747 | return __awaiter(this, void 0, void 0, function () { |
746 | - var result; | |
748 | + var _this = this; | |
747 | 749 | return __generator(this, function (_a) { |
748 | - switch (_a.label) { | |
749 | - case 0: return [4 /*yield*/, this.onCallBack('minWithDrawal')]; | |
750 | - case 1: | |
751 | - result = _a.sent(); | |
752 | - if (!Boolean(parseInt(result.code + ''))) { | |
753 | - return [2 /*return*/, parseInt(result.data['money']) * 100]; | |
754 | - } | |
755 | - return [2 /*return*/, 0]; | |
756 | - } | |
750 | + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
751 | + return __generator(this, function (_a) { | |
752 | + switch (_a.label) { | |
753 | + case 0: return [4 /*yield*/, this.myBridge.minWithDrawal(function (res) { | |
754 | + res = JSON.parse(res); | |
755 | + var code = res.code, data = res.data, msg = res.msg; | |
756 | + if ('0' === code || !code) { | |
757 | + resolve(data['money']); | |
758 | + } | |
759 | + else { | |
760 | + reject(msg); | |
761 | + } | |
762 | + })]; | |
763 | + case 1: | |
764 | + _a.sent(); | |
765 | + return [2 /*return*/]; | |
766 | + } | |
767 | + }); | |
768 | + }); })]; | |
757 | 769 | }); |
758 | 770 | }); |
759 | 771 | }; |
760 | - BaseAppSdk.prototype.onCallBack = function (cmd) { | |
772 | + /**上报埋点 */ | |
773 | + PcSdk.prototype.appDotLog = function (key, value) { | |
774 | + this.myBridge.appDotLog(key, value); | |
775 | + }; | |
776 | + /**热云打点 */ | |
777 | + PcSdk.prototype.appDotTracKing = function (key) { | |
778 | + this.myBridge.appDotTracKing(key); | |
779 | + }; | |
780 | + PcSdk.prototype.setCallback = function (funName, pramas) { | |
761 | 781 | var _this = this; |
762 | - var params = []; | |
763 | - for (var _i = 1; _i < arguments.length; _i++) { | |
764 | - params[_i - 1] = arguments[_i]; | |
765 | - } | |
766 | - return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
767 | - return __generator(this, function (_a) { | |
768 | - switch (_a.label) { | |
769 | - case 0: return [4 /*yield*/, this.callAppWithBack.apply(this, [function (res) { | |
770 | - res = JSON.parse(res); | |
771 | - // res = { code: 1000 } | |
772 | - if (!res.code) { | |
773 | - resolve({ code: res.code, data: res.data }); | |
774 | - } | |
775 | - else { | |
776 | - resolve({ code: res.code }); | |
777 | - } | |
778 | - }, cmd].concat(params))]; | |
779 | - case 1: | |
780 | - _a.sent(); | |
781 | - return [2 /*return*/]; | |
782 | + console.log('---------------setCallback---- this.myBridge---' + JSON.stringify(this.myBridge)); | |
783 | + return new Promise(function (resolve, reject) { | |
784 | + _this.myBridge[funName](pramas, function (res) { | |
785 | + var _a = JSON.parse(res), code = _a.code, data = _a.data; | |
786 | + if ('0' === code) { | |
787 | + resolve(data); | |
788 | + } | |
789 | + else { | |
790 | + reject(0); | |
782 | 791 | } |
783 | 792 | }); |
784 | - }); }); | |
793 | + }); | |
785 | 794 | }; |
786 | - BaseAppSdk.prototype.callApp = function (cmd) { | |
787 | - var params = []; | |
788 | - for (var _i = 1; _i < arguments.length; _i++) { | |
789 | - params[_i - 1] = arguments[_i]; | |
790 | - } | |
795 | + PcSdk.prototype.closeAdverDialog = function () { | |
796 | + this.myBridge.closeAdverDialog(); | |
791 | 797 | }; |
792 | - BaseAppSdk.prototype.callAppWithBack = function (callBack, cmd) { | |
793 | - var params = []; | |
794 | - for (var _i = 2; _i < arguments.length; _i++) { | |
795 | - params[_i - 2] = arguments[_i]; | |
796 | - } | |
798 | + PcSdk.prototype.closeAdBanner = function () { | |
799 | + this.myBridge.closeAdBanner(); | |
797 | 800 | }; |
798 | - BaseAppSdk.prototype.networkEvtFunc = function (type) { | |
799 | - var funcArr; | |
800 | - if (type == 0) { | |
801 | - funcArr = this.netOffArr; | |
802 | - } | |
803 | - else if (type == 5) { | |
804 | - funcArr = this.netOnArr; | |
805 | - } | |
806 | - if (funcArr) { | |
807 | - for (var i = 0; i < funcArr.length; i++) { | |
808 | - funcArr[i](); | |
809 | - } | |
810 | - } | |
801 | + /**激励视频 */ | |
802 | + PcSdk.prototype.showRewardVideoAd = function (value, JBCallback) { | |
803 | + this.myBridge.showRewardVideoAd(value, JBCallback); | |
804 | + }; | |
805 | + /** 全屏广告*/ | |
806 | + PcSdk.prototype.loadFullScreenVideoAd = function (data, JBCallback) { | |
807 | + this.myBridge.showRewardVideoAd(data, JBCallback); | |
808 | + }; | |
809 | + /**信息流广告 */ | |
810 | + PcSdk.prototype.loadNativeExpressAd = function (data, JBCallback) { | |
811 | + this.myBridge.loadNativeExpressAd(data, JBCallback); | |
811 | 812 | }; |
812 | - BaseAppSdk.prototype.onNetOn = function (func) { | |
813 | - this.netOnArr.push(func); | |
813 | + /**banner */ | |
814 | + PcSdk.prototype.loadBannerExpressAd = function (data, JBCallback) { | |
815 | + this.myBridge.loadBannerExpressAd(data, JBCallback); | |
814 | 816 | }; |
815 | - BaseAppSdk.prototype.onNetOff = function (func) { | |
816 | - this.netOffArr.push(func); | |
817 | + /**插屏广告 */ | |
818 | + PcSdk.prototype.showInteractionExpressAd = function (data, JBCallback) { | |
819 | + this.myBridge.showInteractionExpressAd(data, JBCallback); | |
817 | 820 | }; |
818 | - Object.defineProperty(BaseAppSdk.prototype, "level", { | |
821 | + Object.defineProperty(PcSdk.prototype, "level", { | |
819 | 822 | get: function () { |
820 | 823 | return this._level; |
821 | 824 | }, |
822 | 825 | enumerable: true, |
823 | 826 | configurable: true |
824 | 827 | }); |
825 | - Object.defineProperty(BaseAppSdk.prototype, "width", { | |
828 | + Object.defineProperty(PcSdk.prototype, "width", { | |
826 | 829 | get: function () { |
827 | 830 | return this._width; |
828 | 831 | }, |
829 | 832 | enumerable: true, |
830 | 833 | configurable: true |
831 | 834 | }); |
832 | - Object.defineProperty(BaseAppSdk.prototype, "height", { | |
835 | + Object.defineProperty(PcSdk.prototype, "height", { | |
833 | 836 | get: function () { |
834 | 837 | return this._height; |
835 | 838 | }, |
836 | 839 | enumerable: true, |
837 | 840 | configurable: true |
838 | 841 | }); |
839 | - Object.defineProperty(BaseAppSdk.prototype, "version", { | |
842 | + Object.defineProperty(PcSdk.prototype, "version", { | |
840 | 843 | get: function () { |
841 | 844 | return this._version; |
842 | 845 | }, |
843 | 846 | enumerable: true, |
844 | 847 | configurable: true |
845 | 848 | }); |
846 | - Object.defineProperty(BaseAppSdk.prototype, "channel", { | |
849 | + Object.defineProperty(PcSdk.prototype, "channel", { | |
847 | 850 | get: function () { |
848 | 851 | return this._channel; |
849 | 852 | }, |
850 | 853 | enumerable: true, |
851 | 854 | configurable: true |
852 | 855 | }); |
853 | - Object.defineProperty(BaseAppSdk.prototype, "bridge", { | |
856 | + Object.defineProperty(PcSdk.prototype, "bridge", { | |
854 | 857 | get: function () { |
855 | 858 | return null; |
856 | 859 | }, |
857 | 860 | enumerable: true, |
858 | 861 | configurable: true |
859 | 862 | }); |
860 | - BaseAppSdk.prototype.createClass = function (name) { | |
861 | - return window['PlatformClass'].createClass(name); | |
862 | - }; | |
863 | - return BaseAppSdk; | |
864 | -}()); | |
865 | -exports.default = BaseAppSdk; | |
866 | - | |
867 | -},{"./sdkData/AddGoldData":18,"./sdkData/GoldConfigData":19,"./sdkData/MyCoinData":20}],11:[function(require,module,exports){ | |
868 | -"use strict"; | |
869 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
870 | -var BaseAppSdk_1 = require("./BaseAppSdk"); | |
871 | -var IosAppSdk = /** @class */ (function (_super) { | |
872 | - __extends(IosAppSdk, _super); | |
873 | - function IosAppSdk() { | |
874 | - return _super !== null && _super.apply(this, arguments) || this; | |
875 | - } | |
876 | - Object.defineProperty(IosAppSdk.prototype, "system", { | |
863 | + Object.defineProperty(PcSdk.prototype, "gameConfig", { | |
877 | 864 | get: function () { |
878 | - return 0; | |
865 | + return this._gameConfig; | |
879 | 866 | }, |
880 | 867 | enumerable: true, |
881 | 868 | configurable: true |
882 | 869 | }); |
883 | - IosAppSdk.prototype.callApp = function (cmd) { | |
884 | - var params = []; | |
885 | - for (var _i = 1; _i < arguments.length; _i++) { | |
886 | - params[_i - 1] = arguments[_i]; | |
887 | - } | |
888 | - var _a; | |
889 | - if (params.length) { | |
890 | - cmd += ':'; | |
891 | - } | |
892 | - this.bridge && (_a = this.bridge).call.apply(_a, [cmd].concat(params)); | |
893 | - // this.bridge && alert(JSON.stringify(this.bridge)); | |
894 | - }; | |
895 | - IosAppSdk.prototype.callAppWithBack = function (callBack, cmd) { | |
896 | - var params = []; | |
897 | - for (var _i = 2; _i < arguments.length; _i++) { | |
898 | - params[_i - 2] = arguments[_i]; | |
899 | - } | |
900 | - var _a; | |
901 | - if (params.length) { | |
902 | - cmd += ':'; | |
903 | - } | |
904 | - this.bridge && (_a = this.bridge).callWithBack.apply(_a, [callBack, cmd].concat(params)); | |
905 | - }; | |
906 | - Object.defineProperty(IosAppSdk.prototype, "bridge", { | |
870 | + Object.defineProperty(PcSdk, "I", { | |
907 | 871 | get: function () { |
908 | - return this._bridge || (this._bridge = this.createClass('JSBridge')); | |
872 | + return ObjectInstance_1.default.get(PcSdk); | |
909 | 873 | }, |
910 | 874 | enumerable: true, |
911 | 875 | configurable: true |
912 | 876 | }); |
913 | - return IosAppSdk; | |
914 | -}(BaseAppSdk_1.default)); | |
915 | -exports.default = IosAppSdk; | |
916 | - | |
917 | -},{"./BaseAppSdk":10}],12:[function(require,module,exports){ | |
918 | -"use strict"; | |
919 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
920 | -var AdManager_1 = require("./AdManager"); | |
921 | -var NativeAd = /** @class */ (function (_super) { | |
922 | - __extends(NativeAd, _super); | |
923 | - function NativeAd() { | |
924 | - return _super !== null && _super.apply(this, arguments) || this; | |
925 | - } | |
926 | - NativeAd.prototype.onEnable = function () { | |
927 | - var globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true); | |
928 | - AdManager_1.default.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height); | |
877 | + return PcSdk; | |
878 | +}()); | |
879 | +exports.default = PcSdk; | |
880 | +// //这里是浏览器环境下, 接收web传过来的消息 | |
881 | +window.onMyBridgeReady = function () { | |
882 | + console.log("onMyBridgeReady load finish, cost:" + (new Date().getTime()) + "ms"); | |
883 | + MyBridge.App.onResume = function () { | |
884 | + var ret = []; | |
885 | + for (var _i = 0; _i < arguments.length; _i++) { | |
886 | + ret[_i] = arguments[_i]; | |
887 | + } | |
888 | + console.log(' laya onResume', ret); | |
889 | + EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.APP_SHOW); | |
929 | 890 | }; |
930 | - NativeAd.prototype.onDisable = function () { | |
931 | - AdManager_1.default.I.hideNativeAd(); | |
891 | + MyBridge.App.onPause = function () { | |
892 | + var ret = []; | |
893 | + for (var _i = 0; _i < arguments.length; _i++) { | |
894 | + ret[_i] = arguments[_i]; | |
895 | + } | |
896 | + console.log(' laya onPause', ret); | |
897 | + EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.APP_HIDE); | |
932 | 898 | }; |
933 | - Object.defineProperty(NativeAd.prototype, "item", { | |
934 | - get: function () { | |
935 | - return this.owner; | |
936 | - }, | |
937 | - enumerable: true, | |
938 | - configurable: true | |
939 | - }); | |
940 | - return NativeAd; | |
941 | -}(Laya.Script)); | |
942 | -exports.default = NativeAd; | |
899 | +}; | |
943 | 900 | |
944 | -},{"./AdManager":7}],13:[function(require,module,exports){ | |
901 | +},{"../event/EventCenter":5,"../event/EventEnum":6,"../uitl/ObjectInstance":18}],10:[function(require,module,exports){ | |
945 | 902 | "use strict"; |
946 | 903 | Object.defineProperty(exports, "__esModule", { value: true }); |
947 | -var AppSdk_1 = require("./AppSdk"); | |
948 | 904 | var ObjectInstance_1 = require("../uitl/ObjectInstance"); |
905 | +var PcSdk_1 = require("./PcSdk"); | |
949 | 906 | var TTAdSdk = /** @class */ (function () { |
950 | 907 | function TTAdSdk() { |
951 | 908 | } |
909 | + /** | |
910 | + * | |
911 | + * @param preload 0 直接加载;1 预加载 | |
912 | + */ | |
952 | 913 | TTAdSdk.prototype.showRewardVideoAd = function (preload) { |
953 | 914 | if (preload === void 0) { preload = 0; } |
954 | 915 | return __awaiter(this, void 0, void 0, function () { |
955 | 916 | var data; |
956 | 917 | return __generator(this, function (_a) { |
957 | 918 | data = { |
958 | - w: AppSdk_1.AppSdk.I.width, | |
959 | - h: AppSdk_1.AppSdk.I.height, | |
919 | + type: 1, | |
960 | 920 | preloading: preload, |
961 | 921 | }; |
962 | 922 | return [2 /*return*/, new Promise(function (resolve, reject) { |
963 | 923 | var isComplete = false; |
964 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
924 | + PcSdk_1.default.I.showRewardVideoAd(data, function (ret) { | |
965 | 925 | var _a = JSON.parse(ret), code = _a.code, message = _a.message; |
966 | 926 | switch (code) { |
967 | 927 | case -1: |
... | ... | @@ -982,7 +942,7 @@ var TTAdSdk = /** @class */ (function () { |
982 | 942 | } |
983 | 943 | break; |
984 | 944 | } |
985 | - }, 'showRewardVideoAd', 1, JSON.stringify(data)); | |
945 | + }); | |
986 | 946 | })]; |
987 | 947 | }); |
988 | 948 | }); |
... | ... | @@ -993,50 +953,66 @@ var TTAdSdk = /** @class */ (function () { |
993 | 953 | var data; |
994 | 954 | return __generator(this, function (_a) { |
995 | 955 | data = { |
996 | - preloading: preload, | |
956 | + w: PcSdk_1.default.I.width, | |
957 | + h: PcSdk_1.default.I.width * 90 / 600, | |
958 | + preloading: 0, | |
959 | + type: 1 | |
997 | 960 | }; |
998 | 961 | return [2 /*return*/, new Promise(function (resolve, reject) { |
999 | - var isComplete = false; | |
1000 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
1001 | - }, 'loadFullScreenVideoAd', 1, JSON.stringify(data)); | |
962 | + PcSdk_1.default.I.loadFullScreenVideoAd(JSON.stringify(data), function (res) { | |
963 | + resolve(res); | |
964 | + }); | |
1002 | 965 | })]; |
1003 | 966 | }); |
1004 | 967 | }); |
1005 | 968 | }; |
1006 | - TTAdSdk.prototype.loadNativeExpressAd = function (x, y, width, height) { | |
969 | + TTAdSdk.prototype.loadNativeExpressAd = function (x, y, width, height, type, preload) { | |
970 | + if (type === void 0) { type = 1; } | |
971 | + if (preload === void 0) { preload = 0; } | |
1007 | 972 | return __awaiter(this, void 0, void 0, function () { |
1008 | 973 | var scaleX, scaleY, data; |
1009 | 974 | return __generator(this, function (_a) { |
1010 | - scaleX = AppSdk_1.AppSdk.I.width / Laya.stage.width; | |
1011 | - scaleY = AppSdk_1.AppSdk.I.height / Laya.stage.height; | |
975 | + scaleX = PcSdk_1.default.I.width / Laya.stage.width; | |
976 | + scaleY = PcSdk_1.default.I.height / Laya.stage.height; | |
1012 | 977 | data = { |
978 | + type: type, | |
979 | + preloading: preload, | |
1013 | 980 | w: width * scaleX, |
1014 | 981 | h: height * scaleY, |
1015 | 982 | left: x * scaleX, |
1016 | 983 | top: y * scaleY |
1017 | 984 | }; |
1018 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
1019 | - }, 'loadNativeExpressAd', JSON.stringify(data)); | |
985 | + PcSdk_1.default.I.loadNativeExpressAd(JSON.stringify(data), function (res) { | |
986 | + return Promise.resolve(res); | |
987 | + }); | |
1020 | 988 | return [2 /*return*/]; |
1021 | 989 | }); |
1022 | 990 | }); |
1023 | 991 | }; |
1024 | - TTAdSdk.prototype.loadBannerExpressAd = function () { | |
992 | + TTAdSdk.prototype.loadBannerExpressAd = function (preload) { | |
993 | + if (preload === void 0) { preload = 0; } | |
1025 | 994 | return __awaiter(this, void 0, void 0, function () { |
1026 | 995 | var data; |
1027 | 996 | return __generator(this, function (_a) { |
1028 | 997 | data = { |
1029 | - w: AppSdk_1.AppSdk.I.width, | |
1030 | - h: AppSdk_1.AppSdk.I.width * 90 / 600, | |
998 | + w: PcSdk_1.default.I.width, | |
999 | + h: PcSdk_1.default.I.width * 90 / 600, | |
1000 | + preloading: preload, | |
1001 | + type: 1 | |
1031 | 1002 | }; |
1032 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
1033 | - }, 'loadBannerExpressAd', 2, JSON.stringify(data)); | |
1034 | - return [2 /*return*/]; | |
1003 | + return [2 /*return*/, new Promise(function (resolve, reject) { | |
1004 | + PcSdk_1.default.I.loadBannerExpressAd(JSON.stringify(data), function (res) { | |
1005 | + resolve(res); | |
1006 | + }); | |
1007 | + })]; | |
1035 | 1008 | }); |
1036 | 1009 | }); |
1037 | 1010 | }; |
1038 | - TTAdSdk.prototype.hideAd = function () { | |
1039 | - AppSdk_1.AppSdk.I.callApp('close_adver_dialog'); | |
1011 | + TTAdSdk.prototype.closeAdverDialog = function () { | |
1012 | + PcSdk_1.default.I.closeAdverDialog(); | |
1013 | + }; | |
1014 | + TTAdSdk.prototype.closeAdBanner = function () { | |
1015 | + PcSdk_1.default.I.closeAdBanner(); | |
1040 | 1016 | }; |
1041 | 1017 | TTAdSdk.prototype.showInteractionExpressAd = function (preload) { |
1042 | 1018 | if (preload === void 0) { preload = 0; } |
... | ... | @@ -1044,14 +1020,15 @@ var TTAdSdk = /** @class */ (function () { |
1044 | 1020 | var data; |
1045 | 1021 | return __generator(this, function (_a) { |
1046 | 1022 | data = { |
1047 | - w: AppSdk_1.AppSdk.I.width * 0.8, | |
1048 | - h: AppSdk_1.AppSdk.I.height, | |
1023 | + w: PcSdk_1.default.I.width * 0.8, | |
1024 | + h: PcSdk_1.default.I.height, | |
1049 | 1025 | preloading: preload, |
1050 | 1026 | }; |
1051 | 1027 | return [2 /*return*/, new Promise(function (resolve, reject) { |
1052 | 1028 | var isComplete = false; |
1053 | - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { | |
1054 | - }, 'showInteractionExpressAd', JSON.stringify(data)); | |
1029 | + PcSdk_1.default.I.showInteractionExpressAd(JSON.stringify(data), function (res) { | |
1030 | + resolve(res); | |
1031 | + }); | |
1055 | 1032 | })]; |
1056 | 1033 | }); |
1057 | 1034 | }); |
... | ... | @@ -1067,11 +1044,11 @@ var TTAdSdk = /** @class */ (function () { |
1067 | 1044 | }()); |
1068 | 1045 | exports.default = TTAdSdk; |
1069 | 1046 | |
1070 | -},{"../uitl/ObjectInstance":24,"./AppSdk":9}],14:[function(require,module,exports){ | |
1047 | +},{"../uitl/ObjectInstance":18,"./PcSdk":9}],11:[function(require,module,exports){ | |
1071 | 1048 | "use strict"; |
1072 | 1049 | Object.defineProperty(exports, "__esModule", { value: true }); |
1073 | -var AppSdk_1 = require("./AppSdk"); | |
1074 | 1050 | var ObjectInstance_1 = require("../uitl/ObjectInstance"); |
1051 | +var PcSdk_1 = require("./PcSdk"); | |
1075 | 1052 | /** |
1076 | 1053 | * 上报热云埋点⽇志 |
1077 | 1054 | * 具体的打点需要跟运营联系 |
... | ... | @@ -1080,7 +1057,7 @@ var TrackingSdk = /** @class */ (function () { |
1080 | 1057 | function TrackingSdk() { |
1081 | 1058 | } |
1082 | 1059 | TrackingSdk.prototype.dot = function (key) { |
1083 | - AppSdk_1.AppSdk.I.callApp('tracking_event', key); | |
1060 | + PcSdk_1.default.I.appDotTracKing(key); | |
1084 | 1061 | }; |
1085 | 1062 | Object.defineProperty(TrackingSdk, "I", { |
1086 | 1063 | get: function () { |
... | ... | @@ -1098,7 +1075,7 @@ var TrackingKey; |
1098 | 1075 | TrackingKey["RedPack5"] = "event_6"; |
1099 | 1076 | })(TrackingKey = exports.TrackingKey || (exports.TrackingKey = {})); |
1100 | 1077 | |
1101 | -},{"../uitl/ObjectInstance":24,"./AppSdk":9}],15:[function(require,module,exports){ | |
1078 | +},{"../uitl/ObjectInstance":18,"./PcSdk":9}],12:[function(require,module,exports){ | |
1102 | 1079 | "use strict"; |
1103 | 1080 | Object.defineProperty(exports, "__esModule", { value: true }); |
1104 | 1081 | var ArrayUtils_1 = require("../../uitl/ArrayUtils"); |
... | ... | @@ -1184,21 +1161,18 @@ var BaseModel = /** @class */ (function () { |
1184 | 1161 | }()); |
1185 | 1162 | exports.default = BaseModel; |
1186 | 1163 | |
1187 | -},{"../../uitl/ArrayUtils":22}],16:[function(require,module,exports){ | |
1164 | +},{"../../uitl/ArrayUtils":16}],13:[function(require,module,exports){ | |
1188 | 1165 | "use strict"; |
1189 | 1166 | Object.defineProperty(exports, "__esModule", { value: true }); |
1190 | 1167 | var BaseModel_1 = require("./BaseModel"); |
1191 | 1168 | var AdManager_1 = require("../../sdk/AdManager"); |
1192 | 1169 | var TrackingSdk_1 = require("../../sdk/TrackingSdk"); |
1193 | -var GoldConfigData_1 = require("../../sdk/sdkData/GoldConfigData"); | |
1194 | -var AddGoldData_1 = require("../../sdk/sdkData/AddGoldData"); | |
1195 | -var MyCoinData_1 = require("../../sdk/sdkData/MyCoinData"); | |
1196 | -var AppSdk_1 = require("../../sdk/AppSdk"); | |
1197 | 1170 | var DateUtils_1 = require("../../uitl/DateUtils"); |
1198 | 1171 | var Util_1 = require("../../uitl/Util"); |
1199 | 1172 | var ObjectInstance_1 = require("../../uitl/ObjectInstance"); |
1200 | 1173 | var EventCenter_1 = require("../../event/EventCenter"); |
1201 | 1174 | var EventEnum_1 = require("../../event/EventEnum"); |
1175 | +var PcSdk_1 = require("../PcSdk"); | |
1202 | 1176 | var RedpacketModel = /** @class */ (function (_super) { |
1203 | 1177 | __extends(RedpacketModel, _super); |
1204 | 1178 | function RedpacketModel() { |
... | ... | @@ -1217,7 +1191,7 @@ var RedpacketModel = /** @class */ (function (_super) { |
1217 | 1191 | var _this = this; |
1218 | 1192 | return __generator(this, function (_a) { |
1219 | 1193 | switch (_a.label) { |
1220 | - case 0: return [4 /*yield*/, GoldConfigData_1.GoldConfigData.I.getGoldConfig()]; | |
1194 | + case 0: return [4 /*yield*/, this.getRedConfig()]; | |
1221 | 1195 | case 1: |
1222 | 1196 | arr = _a.sent(); |
1223 | 1197 | console.log('---------------RedpacketModel-------' + JSON.stringify(arr)); |
... | ... | @@ -1255,6 +1229,47 @@ var RedpacketModel = /** @class */ (function (_super) { |
1255 | 1229 | data.list = []; |
1256 | 1230 | return data; |
1257 | 1231 | }; |
1232 | + RedpacketModel.prototype.getRedConfig = function () { | |
1233 | + return __awaiter(this, void 0, void 0, function () { | |
1234 | + var result, configJson; | |
1235 | + return __generator(this, function (_a) { | |
1236 | + switch (_a.label) { | |
1237 | + case 0: | |
1238 | + result = PcSdk_1.default.I.gameConfig; | |
1239 | + console.log('--------------- 获取配置静态表-----' + JSON.stringify(result)); | |
1240 | + if (!result) return [3 /*break*/, 2]; | |
1241 | + return [4 /*yield*/, this.loadGoldCfg(result['coin_config'][0])]; | |
1242 | + case 1: | |
1243 | + configJson = _a.sent(); | |
1244 | + console.log('-------------- 获取红包静态表-----' + JSON.stringify(result)); | |
1245 | + return [2 /*return*/, configJson]; | |
1246 | + case 2: | |
1247 | + PcSdk_1.default.I.initGameConfig(); | |
1248 | + _a.label = 3; | |
1249 | + case 3: return [2 /*return*/]; | |
1250 | + } | |
1251 | + }); | |
1252 | + }); | |
1253 | + }; | |
1254 | + RedpacketModel.prototype.loadGoldCfg = function (res) { | |
1255 | + return __awaiter(this, void 0, void 0, function () { | |
1256 | + var configJson; | |
1257 | + return __generator(this, function (_a) { | |
1258 | + switch (_a.label) { | |
1259 | + case 0: return [4 /*yield*/, this.load(res)]; | |
1260 | + case 1: | |
1261 | + configJson = _a.sent(); | |
1262 | + return [2 /*return*/, configJson]; | |
1263 | + } | |
1264 | + }); | |
1265 | + }); | |
1266 | + }; | |
1267 | + RedpacketModel.prototype.load = function (res, onProgress) { | |
1268 | + var _this = this; | |
1269 | + return new Promise(function (suc, fail) { | |
1270 | + Laya.loader.load(res, Laya.Handler.create(_this, suc), onProgress); | |
1271 | + }); | |
1272 | + }; | |
1258 | 1273 | RedpacketModel.prototype.checkRedpacket = function () { |
1259 | 1274 | return __awaiter(this, void 0, void 0, function () { |
1260 | 1275 | var cnt, data, ran2, cash; |
... | ... | @@ -1284,6 +1299,7 @@ var RedpacketModel = /** @class */ (function (_super) { |
1284 | 1299 | case 1: |
1285 | 1300 | //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */ |
1286 | 1301 | _a.sent(); |
1302 | + console.log('--------------- 触发了红包-----'); | |
1287 | 1303 | this.getRepacket(); |
1288 | 1304 | /**更新基本显示 */ |
1289 | 1305 | EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.UPDATE_COIN); |
... | ... | @@ -1331,7 +1347,7 @@ var RedpacketModel = /** @class */ (function (_super) { |
1331 | 1347 | var totalCoin; |
1332 | 1348 | return __generator(this, function (_a) { |
1333 | 1349 | switch (_a.label) { |
1334 | - case 0: return [4 /*yield*/, MyCoinData_1.default.getCoin()]; | |
1350 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.myCoin()]; | |
1335 | 1351 | case 1: |
1336 | 1352 | totalCoin = _a.sent(); |
1337 | 1353 | return [2 /*return*/, totalCoin]; |
... | ... | @@ -1346,10 +1362,10 @@ var RedpacketModel = /** @class */ (function (_super) { |
1346 | 1362 | var coinData; |
1347 | 1363 | return __generator(this, function (_a) { |
1348 | 1364 | switch (_a.label) { |
1349 | - case 0: return [4 /*yield*/, AddGoldData_1.default.addCoin(key)]; | |
1365 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.addGold(key)]; | |
1350 | 1366 | case 1: |
1351 | 1367 | coinData = _a.sent(); |
1352 | - return [2 /*return*/, coinData]; | |
1368 | + return [2 /*return*/, coinData['coin']]; | |
1353 | 1369 | } |
1354 | 1370 | }); |
1355 | 1371 | }); |
... | ... | @@ -1360,7 +1376,7 @@ var RedpacketModel = /** @class */ (function (_super) { |
1360 | 1376 | var minCoin; |
1361 | 1377 | return __generator(this, function (_a) { |
1362 | 1378 | switch (_a.label) { |
1363 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.minWithDrawal()]; | |
1379 | + case 0: return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()]; | |
1364 | 1380 | case 1: |
1365 | 1381 | minCoin = _a.sent(); |
1366 | 1382 | return [2 /*return*/, minCoin]; |
... | ... | @@ -1389,14 +1405,14 @@ var RedpacketConfigData = /** @class */ (function () { |
1389 | 1405 | return RedpacketConfigData; |
1390 | 1406 | }()); |
1391 | 1407 | |
1392 | -},{"../../event/EventCenter":5,"../../event/EventEnum":6,"../../sdk/AdManager":7,"../../sdk/AppSdk":9,"../../sdk/TrackingSdk":14,"../../sdk/sdkData/AddGoldData":18,"../../sdk/sdkData/GoldConfigData":19,"../../sdk/sdkData/MyCoinData":20,"../../uitl/DateUtils":23,"../../uitl/ObjectInstance":24,"../../uitl/Util":27,"./BaseModel":15}],17:[function(require,module,exports){ | |
1408 | +},{"../../event/EventCenter":5,"../../event/EventEnum":6,"../../sdk/AdManager":7,"../../sdk/TrackingSdk":11,"../../uitl/DateUtils":17,"../../uitl/ObjectInstance":18,"../../uitl/Util":21,"../PcSdk":9,"./BaseModel":12}],14:[function(require,module,exports){ | |
1393 | 1409 | "use strict"; |
1394 | 1410 | Object.defineProperty(exports, "__esModule", { value: true }); |
1395 | 1411 | var BaseModel_1 = require("./BaseModel"); |
1396 | -var AppSdk_1 = require("../../sdk/AppSdk"); | |
1397 | 1412 | var DateUtils_1 = require("../../uitl/DateUtils"); |
1398 | 1413 | var Util_1 = require("../../uitl/Util"); |
1399 | 1414 | var ObjectInstance_1 = require("../../uitl/ObjectInstance"); |
1415 | +var PcSdk_1 = require("../PcSdk"); | |
1400 | 1416 | /** |
1401 | 1417 | * |
1402 | 1418 | */ |
... | ... | @@ -1415,123 +1431,18 @@ var ShakeModel = /** @class */ (function (_super) { |
1415 | 1431 | _this.cur_shake_day_limit = 0; |
1416 | 1432 | return _this; |
1417 | 1433 | } |
1418 | - /** | |
1419 | - * red_day_limit 红包每日极限产出 | |
1420 | - * shake_day_limit 摇一摇每日极限产出 | |
1421 | - * interstitial_cnt 插屏计数(每出现x次通用获得物品界面后,出现插屏) | |
1422 | - * interstitial_delay 插屏出现延时(毫秒) | |
1423 | - */ | |
1424 | - /** | |
1425 | - * // let result = { | |
1426 | - // data: { | |
1427 | - // gameConfig: { | |
1428 | - // "config": { | |
1429 | - // "red_day_limit": 10, | |
1430 | - // "shake_day_limit": 50, | |
1431 | - // "interstitial_cnt": 2, | |
1432 | - // "interstitial_delay": 500 | |
1433 | - // }, | |
1434 | - // "shake": [ | |
1435 | - // { | |
1436 | - // "id": 1, | |
1437 | - // "type": 1, | |
1438 | - // "weight": 1000, | |
1439 | - // "num": 0 | |
1440 | - // }, | |
1441 | - // { | |
1442 | - // "id": 2, | |
1443 | - // "type": 2, | |
1444 | - // "weight": 400, | |
1445 | - // "num": 0 | |
1446 | - // }, | |
1447 | - // { | |
1448 | - // "id": 3, | |
1449 | - // "type": 3, | |
1450 | - // "weight": 300, | |
1451 | - // "num": 1 | |
1452 | - // }, | |
1453 | - // { | |
1454 | - // "id": 4, | |
1455 | - // "type": 3, | |
1456 | - // "weight": 100, | |
1457 | - // "num": 2 | |
1458 | - // }, | |
1459 | - // { | |
1460 | - // "id": 5, | |
1461 | - // "type": 4, | |
1462 | - // "weight": 300, | |
1463 | - // "num": 1 | |
1464 | - // }, | |
1465 | - // { | |
1466 | - // "id": 6, | |
1467 | - // "type": 4, | |
1468 | - // "weight": 100, | |
1469 | - // "num": 2 | |
1470 | - // }, | |
1471 | - // { | |
1472 | - // "id": 7, | |
1473 | - // "type": 5, | |
1474 | - // "weight": 300, | |
1475 | - // "num": 1 | |
1476 | - // }, | |
1477 | - // { | |
1478 | - // "id": 8, | |
1479 | - // "type": 5, | |
1480 | - // "weight": 100, | |
1481 | - // "num": 2 | |
1482 | - // }, | |
1483 | - // { | |
1484 | - // "id": 9, | |
1485 | - // "type": 6, | |
1486 | - // "weight": 300, | |
1487 | - // "num": 1 | |
1488 | - // }, | |
1489 | - // { | |
1490 | - // "id": 10, | |
1491 | - // "type": 6, | |
1492 | - // "weight": 100, | |
1493 | - // "num": 2 | |
1494 | - // }, | |
1495 | - // { | |
1496 | - // "id": 11, | |
1497 | - // "type": 7, | |
1498 | - // "weight": 300, | |
1499 | - // "num": 1 | |
1500 | - // }, | |
1501 | - // { | |
1502 | - // "id": 12, | |
1503 | - // "type": 7, | |
1504 | - // "weight": 100, | |
1505 | - // "num": 2 | |
1506 | - // }, | |
1507 | - // { | |
1508 | - // "id": 13, | |
1509 | - // "type": 8, | |
1510 | - // "weight": 500, | |
1511 | - // "num": 0 | |
1512 | - // } | |
1513 | - // ], | |
1514 | - // 'coin_config': [] | |
1515 | - // } | |
1516 | - // } | |
1517 | - // } | |
1518 | - */ | |
1519 | 1434 | ShakeModel.prototype.init = function () { |
1520 | 1435 | return __awaiter(this, void 0, void 0, function () { |
1521 | - var result, data, gameData; | |
1436 | + var result, gameData; | |
1522 | 1437 | return __generator(this, function (_a) { |
1523 | - switch (_a.label) { | |
1524 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.getGameConfig()]; | |
1525 | - case 1: | |
1526 | - result = _a.sent(); | |
1527 | - console.log('---------------ShakeModel-------' + JSON.stringify(result.data)); | |
1528 | - data = result.data; | |
1529 | - if (data['gameConfig']) { | |
1530 | - gameData = data['gameConfig']; | |
1531 | - this.update(this.initData(gameData)); | |
1532 | - } | |
1533 | - return [2 /*return*/]; | |
1438 | + result = PcSdk_1.default.I.gameConfig; | |
1439 | + ; | |
1440 | + console.log('---------------ShakeModel-- 获取摇一摇静态表-----' + JSON.stringify(result)); | |
1441 | + if (result['config']) { | |
1442 | + gameData = result['config']; | |
1443 | + this.update(this.initData(gameData)); | |
1534 | 1444 | } |
1445 | + return [2 /*return*/]; | |
1535 | 1446 | }); |
1536 | 1447 | }); |
1537 | 1448 | }; |
... | ... | @@ -1626,148 +1537,7 @@ var ShakeData = /** @class */ (function () { |
1626 | 1537 | return ShakeData; |
1627 | 1538 | }()); |
1628 | 1539 | |
1629 | -},{"../../sdk/AppSdk":9,"../../uitl/DateUtils":23,"../../uitl/ObjectInstance":24,"../../uitl/Util":27,"./BaseModel":15}],18:[function(require,module,exports){ | |
1630 | -"use strict"; | |
1631 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
1632 | -var AppSdk_1 = require("../AppSdk"); | |
1633 | -var AddGoldData = /** @class */ (function () { | |
1634 | - function AddGoldData() { | |
1635 | - } | |
1636 | - AddGoldData.initData = function (data) { | |
1637 | - if (!parseInt(data.code)) { | |
1638 | - AddGoldData.coin = data.data.coin; | |
1639 | - AddGoldData.mycoin = data.data.mycoin; | |
1640 | - } | |
1641 | - }; | |
1642 | - AddGoldData.addCoin = function (key) { | |
1643 | - if (key === void 0) { key = 1; } | |
1644 | - return __awaiter(this, void 0, void 0, function () { | |
1645 | - var result; | |
1646 | - return __generator(this, function (_a) { | |
1647 | - switch (_a.label) { | |
1648 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.addGold(key)]; | |
1649 | - case 1: | |
1650 | - result = _a.sent(); | |
1651 | - return [2 /*return*/, [parseInt(this.coin), parseInt(this.mycoin)]]; | |
1652 | - } | |
1653 | - }); | |
1654 | - }); | |
1655 | - }; | |
1656 | - AddGoldData.coin = '0'; | |
1657 | - AddGoldData.mycoin = '0'; | |
1658 | - return AddGoldData; | |
1659 | -}()); | |
1660 | -exports.default = AddGoldData; | |
1661 | - | |
1662 | -},{"../AppSdk":9}],19:[function(require,module,exports){ | |
1663 | -"use strict"; | |
1664 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
1665 | -var AppSdk_1 = require("../AppSdk"); | |
1666 | -var Util_1 = require("../../uitl/Util"); | |
1667 | -var GoldConfigData = /** @class */ (function () { | |
1668 | - function GoldConfigData() { | |
1669 | - this.coin_config = ''; | |
1670 | - this.code = -3; | |
1671 | - } | |
1672 | - Object.defineProperty(GoldConfigData, "I", { | |
1673 | - get: function () { | |
1674 | - if (!this.instance) | |
1675 | - this.instance = new GoldConfigData(); | |
1676 | - return this.instance; | |
1677 | - }, | |
1678 | - enumerable: true, | |
1679 | - configurable: true | |
1680 | - }); | |
1681 | - GoldConfigData.prototype.initData = function (data) { | |
1682 | - this.code = data.code; | |
1683 | - if (!data.code) { | |
1684 | - data = data.data; | |
1685 | - for (var key in data) { | |
1686 | - if (data.hasOwnProperty(key)) { | |
1687 | - var ele = data[key]; | |
1688 | - this[key] = ele; | |
1689 | - } | |
1690 | - } | |
1691 | - } | |
1692 | - }; | |
1693 | - GoldConfigData.prototype.getGoldConfig = function () { | |
1694 | - return __awaiter(this, void 0, void 0, function () { | |
1695 | - var _this = this; | |
1696 | - return __generator(this, function (_a) { | |
1697 | - return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { | |
1698 | - var result, data, gameData, configJson; | |
1699 | - return __generator(this, function (_a) { | |
1700 | - switch (_a.label) { | |
1701 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.getGameConfig()]; | |
1702 | - case 1: | |
1703 | - result = _a.sent(); | |
1704 | - data = result.data; | |
1705 | - if (!data['gameConfig']) return [3 /*break*/, 3]; | |
1706 | - gameData = data['gameConfig']; | |
1707 | - return [4 /*yield*/, this.loadGoldCfg(gameData['coin_config'][0])]; | |
1708 | - case 2: | |
1709 | - configJson = _a.sent(); | |
1710 | - resolve(configJson); | |
1711 | - _a.label = 3; | |
1712 | - case 3: return [2 /*return*/]; | |
1713 | - } | |
1714 | - }); | |
1715 | - }); })]; | |
1716 | - }); | |
1717 | - }); | |
1718 | - }; | |
1719 | - GoldConfigData.prototype.loadGoldCfg = function (res) { | |
1720 | - return __awaiter(this, void 0, void 0, function () { | |
1721 | - var configJson; | |
1722 | - return __generator(this, function (_a) { | |
1723 | - switch (_a.label) { | |
1724 | - case 0: return [4 /*yield*/, Util_1.default.I.load(res)]; | |
1725 | - case 1: | |
1726 | - configJson = _a.sent(); | |
1727 | - return [2 /*return*/, configJson]; | |
1728 | - } | |
1729 | - }); | |
1730 | - }); | |
1731 | - }; | |
1732 | - GoldConfigData.instance = null; | |
1733 | - return GoldConfigData; | |
1734 | -}()); | |
1735 | -exports.GoldConfigData = GoldConfigData; | |
1736 | - | |
1737 | -},{"../../uitl/Util":27,"../AppSdk":9}],20:[function(require,module,exports){ | |
1738 | -"use strict"; | |
1739 | -Object.defineProperty(exports, "__esModule", { value: true }); | |
1740 | -var AppSdk_1 = require("../AppSdk"); | |
1741 | -var MyCoinData = /** @class */ (function () { | |
1742 | - function MyCoinData() { | |
1743 | - } | |
1744 | - MyCoinData.initData = function (data) { | |
1745 | - if (!parseInt(data.code)) { | |
1746 | - this.coin = data.data.coin; | |
1747 | - } | |
1748 | - else { | |
1749 | - this.coin = '0'; | |
1750 | - } | |
1751 | - }; | |
1752 | - MyCoinData.getCoin = function () { | |
1753 | - return __awaiter(this, void 0, void 0, function () { | |
1754 | - var result; | |
1755 | - return __generator(this, function (_a) { | |
1756 | - switch (_a.label) { | |
1757 | - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.myCoin()]; | |
1758 | - case 1: | |
1759 | - result = _a.sent(); | |
1760 | - return [2 /*return*/, parseInt(this.coin)]; | |
1761 | - } | |
1762 | - }); | |
1763 | - }); | |
1764 | - }; | |
1765 | - MyCoinData.coin = ''; | |
1766 | - return MyCoinData; | |
1767 | -}()); | |
1768 | -exports.default = MyCoinData; | |
1769 | - | |
1770 | -},{"../AppSdk":9}],21:[function(require,module,exports){ | |
1540 | +},{"../../uitl/DateUtils":17,"../../uitl/ObjectInstance":18,"../../uitl/Util":21,"../PcSdk":9,"./BaseModel":12}],15:[function(require,module,exports){ | |
1771 | 1541 | "use strict"; |
1772 | 1542 | Object.defineProperty(exports, "__esModule", { value: true }); |
1773 | 1543 | var Scene = Laya.Scene; |
... | ... | @@ -1789,7 +1559,7 @@ var ui; |
1789 | 1559 | REG("ui.TestSceneUI", TestSceneUI); |
1790 | 1560 | })(ui = exports.ui || (exports.ui = {})); |
1791 | 1561 | |
1792 | -},{}],22:[function(require,module,exports){ | |
1562 | +},{}],16:[function(require,module,exports){ | |
1793 | 1563 | "use strict"; |
1794 | 1564 | Object.defineProperty(exports, "__esModule", { value: true }); |
1795 | 1565 | var ArrayUtils = /** @class */ (function () { |
... | ... | @@ -1870,7 +1640,7 @@ var ArrayUtils = /** @class */ (function () { |
1870 | 1640 | }()); |
1871 | 1641 | exports.default = ArrayUtils; |
1872 | 1642 | |
1873 | -},{}],23:[function(require,module,exports){ | |
1643 | +},{}],17:[function(require,module,exports){ | |
1874 | 1644 | "use strict"; |
1875 | 1645 | Object.defineProperty(exports, "__esModule", { value: true }); |
1876 | 1646 | /** |
... | ... | @@ -2165,7 +1935,7 @@ var DateUtils = /** @class */ (function () { |
2165 | 1935 | }()); |
2166 | 1936 | exports.default = DateUtils; |
2167 | 1937 | |
2168 | -},{}],24:[function(require,module,exports){ | |
1938 | +},{}],18:[function(require,module,exports){ | |
2169 | 1939 | "use strict"; |
2170 | 1940 | Object.defineProperty(exports, "__esModule", { value: true }); |
2171 | 1941 | var ObjectPool_1 = require("./ObjectPool"); |
... | ... | @@ -2191,7 +1961,7 @@ var ObjectInstance = /** @class */ (function () { |
2191 | 1961 | }()); |
2192 | 1962 | exports.default = ObjectInstance; |
2193 | 1963 | |
2194 | -},{"./ObjectPool":25}],25:[function(require,module,exports){ | |
1964 | +},{"./ObjectPool":19}],19:[function(require,module,exports){ | |
2195 | 1965 | "use strict"; |
2196 | 1966 | Object.defineProperty(exports, "__esModule", { value: true }); |
2197 | 1967 | var ObjectPool = /** @class */ (function () { |
... | ... | @@ -2216,7 +1986,7 @@ var ObjectPool = /** @class */ (function () { |
2216 | 1986 | }()); |
2217 | 1987 | exports.default = ObjectPool; |
2218 | 1988 | |
2219 | -},{}],26:[function(require,module,exports){ | |
1989 | +},{}],20:[function(require,module,exports){ | |
2220 | 1990 | "use strict"; |
2221 | 1991 | Object.defineProperty(exports, "__esModule", { value: true }); |
2222 | 1992 | var ScaleButtonScript = /** @class */ (function () { |
... | ... | @@ -2262,7 +2032,7 @@ var ScaleButtonScript = /** @class */ (function () { |
2262 | 2032 | }()); |
2263 | 2033 | exports.default = ScaleButtonScript; |
2264 | 2034 | |
2265 | -},{}],27:[function(require,module,exports){ | |
2035 | +},{}],21:[function(require,module,exports){ | |
2266 | 2036 | "use strict"; |
2267 | 2037 | Object.defineProperty(exports, "__esModule", { value: true }); |
2268 | 2038 | var Util = /** @class */ (function () { |
... | ... | @@ -2301,4 +2071,4 @@ var DataKey; |
2301 | 2071 | })(DataKey = exports.DataKey || (exports.DataKey = {})); |
2302 | 2072 | |
2303 | 2073 | },{}]},{},[2]) |
2304 | -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL0FuZHJvaWRBcHBTZGsudHMiLCJzcmMvc2RrL0FwcFNkay50cyIsInNyYy9zZGsvQmFzZUFwcFNkay50cyIsInNyYy9zZGsvSW9zQXBwU2RrLnRzIiwic3JjL3Nkay9OYXRpdmVBZC50cyIsInNyYy9zZGsvVFRBZFNkay50cyIsInNyYy9zZGsvVHJhY2tpbmdTZGsudHMiLCJzcmMvc2RrL21vZGVsL0Jhc2VNb2RlbC50cyIsInNyYy9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1NoYWtlTW9kZWwudHMiLCJzcmMvc2RrL3Nka0RhdGEvQWRkR29sZERhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvTXlDb2luRGF0YS50cyIsInNyYy91aS9sYXlhTWF4VUkudHMiLCJzcmMvdWl0bC9BcnJheVV0aWxzLnRzIiwic3JjL3VpdGwvRGF0ZVV0aWxzLnRzIiwic3JjL3VpdGwvT2JqZWN0SW5zdGFuY2UudHMiLCJzcmMvdWl0bC9PYmplY3RQb29sLnRzIiwic3JjL3VpdGwvU2NhbGVCdXR0b25TY3JpcHQudHMiLCJzcmMvdWl0bC9VdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztB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WUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJ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RDtJQUFBO0lBaUJBLENBQUM7SUFoQlUsbUJBQUksR0FBWCxVQUFZLEdBQUcsRUFBRSxVQUF5QjtRQUExQyxpQkFJQztRQUhHLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsSUFBSTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELHNCQUFPLEdBQVAsVUFBUSxHQUFXLEVBQUUsS0FBVTtRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUNELHNCQUFPLEdBQVAsVUFBUSxHQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsc0JBQWtCLFNBQUM7YUFBbkI7WUFDSSxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQzs7O09BQUE7SUFDTCxXQUFDO0FBQUQsQ0FqQkEsQUFpQkMsSUFBQTs7QUFFRCxJQUFZLE9BT1g7QUFQRCxXQUFZLE9BQU87SUFDZixrREFBdUMsQ0FBQTtJQUN2QyxzREFBMkMsQ0FBQTtJQUMzQywwQ0FBK0IsQ0FBQTtJQUMvQiw4QkFBbUIsQ0FBQTtJQUNuQixnQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBUFcsT0FBTyxHQUFQLGVBQU8sS0FBUCxlQUFPLFFBT2xCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5pbXBvcnQgVGVzdFNjZW5lIGZyb20gXCIuL1Rlc3RTY2VuZVwiXG5pbXBvcnQgU2NhbGVCdXR0b25TY3JpcHQgZnJvbSBcIi4vdWl0bC9TY2FsZUJ1dHRvblNjcmlwdFwiXG5pbXBvcnQgUmVkRHJhd2FsIGZyb20gXCIuL1JlZERyYXdhbFwiXG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTc1MDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEzMzQ7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cIlRlc3RTY2VuZS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiVGVzdFNjZW5lLnRzXCIsVGVzdFNjZW5lKTtcbiAgICAgICAgcmVnKFwidWl0bC9TY2FsZUJ1dHRvblNjcmlwdC50c1wiLFNjYWxlQnV0dG9uU2NyaXB0KTtcbiAgICAgICAgcmVnKFwiUmVkRHJhd2FsLnRzXCIsUmVkRHJhd2FsKTtcbiAgICAgICAgcmVnKFwic2RrL05hdGl2ZUFkLnRzXCIsTmF0aXZlQWQpO1xyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcclxuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xyXG5pbXBvcnQgU2hha2VNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvU2hha2VNb2RlbFwiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25WID0gR2FtZUNvbmZpZy5hbGlnblY7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduSCA9IEdhbWVDb25maWcuYWxpZ25IO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdH1cclxuXHJcblx0b25Db25maWdMb2FkZWQoKTogdm9pZCB7XHJcblxyXG5cdFx0dGhpcy5pbml0RGF0YSgpO1xyXG5cdFx0Ly/liqDovb1JREXmjIflrprnmoTlnLrmma9cclxuXHRcdEdhbWVDb25maWcuc3RhcnRTY2VuZSAmJiBMYXlhLlNjZW5lLm9wZW4oR2FtZUNvbmZpZy5zdGFydFNjZW5lKTtcclxuXHR9XHJcblxyXG5cdC8qKuWIneWni+WMllNESyAqL1xyXG5cdGFzeW5jIGluaXREYXRhKCkge1xyXG5cdFx0Lyoq6ZqQ6JeP5ZCv5Yqo5bGPICovXHJcblx0XHRBcHBTZGsuSS5oaWRlU3BsYXNoKClcclxuXHRcdC8qKuWIneWni+WMlmFkayDojrflj5ZhcHDphY3nva7kv6Hmga8gKi9cclxuXHRcdEFwcFNkay5JLmluaXQoKTtcclxuXHRcdC8qKumihOWKoOi9veinhumikSAqL1xyXG5cdFx0QWRNYW5hZ2VyLkkuaW5pdCgpO1xyXG5cdFx0Lyoq6I635Y+W57qi5YyF6YWN572uICDliJ3lp4vljJbmlbDmja4gKi9cclxuXHRcdGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuaW5pdCgpO1xyXG5cdFx0Lyoq5Yid5aeL5YyW5pGH5LiA5pGH55qE5pWw5o2uICovXHJcblx0XHRhd2FpdCBTaGFrZU1vZGVsLkkuaW5pdCgpXHJcblx0fVxyXG59XHJcbi8v5r+A5rS75ZCv5Yqo57G7XHJcbm5ldyBNYWluKCk7XHJcbiIsImltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL2V2ZW50L0V2ZW50RW51bVwiO1xuLyoqXG4gKiDkuLvnlYzpnaIgIOmHkeW4gemHkeminVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWREcmF3YWwgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgLyoqIEBwcm9wIHtuYW1lOmNvaW5sYWIsIHRpcHM6XCLph5HluIFcIiwgdHlwZTpOb2RlfSovXG4gICAgY29pbmxhYjogTGF5YS5MYWJlbDtcbiAgICAvKiogQHByb3Age25hbWU6dGlwbGFiLCB0aXBzOlwi5o+Q56S6XCIsIHR5cGU6Tm9kZX0qL1xuICAgIHRpcGxhYjogTGF5YS5MYWJlbDtcblxuICAgIHByaXZhdGUgdG90YWxDb2luOiBudW1iZXIgPSAxMTA7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxuICAgIG9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhcigpO1xuICAgICAgICAvLyB0aGlzLnRpcGxhYi52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW5hYmxlKCkge1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLkFQUF9TSE9XLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLlVQREFURV9DT0lOLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVTdGFyKCkge1xuICAgICAgICBsZXQgY29pbiA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuZ2V0VG90YWxDb2luKCk7XG4gICAgICAgIC8vIGxldCBjb2luID0gMTAwMFxuICAgICAgICB0aGlzLnRvdGFsQ29pbiA9IGNvaW47XG4gICAgICAgIHRoaXMuY29pbmxhYi50ZXh0ID0gJycgKyBjb2luO1xuICAgICAgICBsZXQgc3RyID0gJ+WPr+aPkOeOsCc7XG4gICAgICAgIC8qKuabtOaWsOS4i+S4i+S4gOasoeaPkOeOsOeahOmineW6piAqL1xuICAgICAgICBsZXQgbmV4dERyYXdhbCA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICBpZiAodGhpcy50b3RhbENvaW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgbGVmdENvaW4gPSBuZXh0RHJhd2FsIC0gdGhpcy50b3RhbENvaW47XG4gICAgICAgICAgICBpZiAobGVmdENvaW4gPiAwKVxuICAgICAgICAgICAgICAgIHN0ciA9IGDov5jlt64keyhsZWZ0Q29pbiAvIDEwMDAwKS50b0ZpeGVkKDMpfemHkemineWPr+aPkOeOsGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aXBsYWIudGV4dCA9IHN0cjtcbiAgICAgICAgdGhpcy50aXBsYWIudmlzaWJsZSA9IEJvb2xlYW4obmV4dERyYXdhbCk7XG4gICAgfVxufSIsImltcG9ydCB7IHVpIH0gZnJvbSBcIi4vdWkvbGF5YU1heFVJXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuL3Nkay9BZE1hbmFnZXJcIjtcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcbmltcG9ydCBTaGFrZU1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9TaGFrZU1vZGVsXCI7XG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RTY2VuZSBleHRlbmRzIHVpLlRlc3RTY2VuZVVJIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy/lhbPpl63lpJrngrnop6bmjqfvvIzlkKbliJnlsLHml6DmlYzkuoZcbiAgICAgICAgTGF5YS5Nb3VzZU1hbmFnZXIubXVsdGlUb3VjaEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVRlc3RTY2VuZS0tLS0tLS0nKVxuICAgICAgICB0aGlzLk5hdGl2ZUFELnZpc2libGUgPSBmYWxzZTtcblxuICAgIH1cblxuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ0blNlcnZlci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5TZXJ2ZXIpO1xuICAgICAgICB0aGlzLmJ0bkRyYXdhbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5QZXJzb25hbCk7XG4gICAgICAgIHRoaXMuYnRuSW52aXRlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuaW52aXRhdGlvbik7XG4gICAgICAgIHRoaXMuYnRuX3NoYWtlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMudG91Y2hTaGFrZSk7XG4gICAgICAgIHRoaXMuYnRuUHJlbG9hZEFELm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZEFEKTtcbiAgICAgICAgdGhpcy5idG5TaG93QmFubmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Jhbm5lcik7XG4gICAgICAgIHRoaXMuYnRuU2hvd0Z1bGxBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dGdWxsQWQpO1xuICAgICAgICB0aGlzLmJ0blNob3dOYXRpdmVBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dOYXRpdmVBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd0ludGVyQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93SW50ZXJBZCk7XG4gICAgICAgIHRoaXMuYnRuUmV3YXJkQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93UmV3YXJkQWQpO1xuICAgICAgICB0aGlzLmJ0blJlZHBhY2tldC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5SZWRwYWNrZXQpO1xuXG4gICAgfVxuXG4gICAgLyoq6aKE5Yqg6L295bm/5ZGKICovXG4gICAgYXN5bmMgcHJlbG9hZEFEKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tcHJlbG9hZEFELS0tLS0tLScpXG4gICAgICAgIC8vIGF3YWl0IEFkTWFuYWdlci5JLmluaXQoKTtcbiAgICAgICAgTXlCcmlkZ2UudGVzdFJldHVybihmdW5jdGlvbiAoLi4uYXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLXdlYi0tLS0tLS0tb25DbGljay0tLS0tPj5jb2NvcyBKUy0tLS0tLS1NeUJyaWRnZS50ZXN0UmV0dXJuLS0tLS0tXCIgKyBKU09OLnN0cmluZ2lmeShhcnJheSkpO1xuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKuaYvuekuuWFqOWxj+W5v+WRiiAqL1xuICAgIHNob3dGdWxsQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93RnVsbEFkLS0tLS0tLScpXG4gICAgICAgIC8vIEFkTWFuYWdlci5JLnNob3dGdWxsQWQoKTtcbiAgICAgICAgdmFyIHJldCA9IE15QnJpZGdlLm1hcFRvU3RyaW5nKHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsIFwidGl0bGVcIjogW3sgXCJuYW1lXCI6IFwibm5uXCIsIFwidmFsdWVcIjogXCJubm52YWx1ZVwiLCBcImRlZmF1bHRfc2hvd1wiOiAxIH1cbiAgICAgICAgICAgICAgICAgICAgLCB7IFwibmFtZVwiOiBcIm1tbVwiLCBcInZhbHVlXCI6IFwibW1tdmFsdWVcXFwiYWFzZGFzZFwiIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLXdlYi0tLS0tLS0tb25DbGljay0tLS0tPj5jb2NvcyBKUy0tLS0tLS1NeUJyaWRnZS5tYXBUb1N0cmluZy0tLS0tLVwiICsgSlNPTi5zdHJpbmdpZnkocmV0KSk7XG4gICAgfVxuICAgIC8qKuaYvuekumJhbm5lciAqL1xuICAgIHNob3dCYW5uZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93QmFubmVyLS0tLS0tLScpXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dCYW5uZXIoKTtcbiAgICB9XG5cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBzaG93TmF0aXZlQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93TmF0aXZlQWQtLS0tLS0tJylcbiAgICAgICAgdGhpcy5OYXRpdmVBRC52aXNpYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKirmj5LlsY/lub/lkYogKi9cbiAgICBzaG93SW50ZXJBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dJbnRlckFkLS0tLS0tLScpXG4gICAgICAgIFxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgIH1cbiAgICAvKirmv4DlirHop4bpopHlub/lkYogKi9cbiAgICBhc3luYyBzaG93UmV3YXJkQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93UmV3YXJkQWQtLS0tLS0tJylcbiAgICAgICAgXG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZCgpO1xuICAgICAgICAvKirmiJDlip/lkI7miafooYzlr7nlupTnmoTlpZblirEgKi9cbiAgICB9XG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXG4gICAgb3BlblNlcnZlcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLW9wZW5TZXJ2ZXItLS0tLS0tJylcbiAgICAgICAgQXBwU2RrLkkuZmVlZGJhY2soKTtcbiAgICB9XG5cblxuICAgIG9wZW5SZWRwYWNrZXQoKSB7XG4gICAgICAgIFJlZHBhY2tldE1vZGVsLkkuY2hlY2tSZWRwYWNrZXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8mmN1clJlZHBhY2tldCcgKyBSZWRwYWNrZXRNb2RlbC5JLmN1clJlZHBhY2tldClcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8micgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZHBhY2tldFBvcHdpbiwgMCk7XG4gICAgfVxuXG4gICAgLyoq5omT5byA5Liq5Lq65Lit5b+DICovXG4gICAgb3BlblBlcnNvbmFsKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBBcHBTZGsuSS5wZXJzb25hbCgwKTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LICovXG4gICAgaW52aXRhdGlvbigpIHtcbiAgICAgICAgQXBwU2RrLkkuaW52aXRhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDFcdOmHkeW4gVxuICAgIDJcdOa/gOWKseinhumikeWQjumHkeW4gVxuICAgIDNcdDQgNSA2IDcg5ri45oiP5Lit5a+55bqU55qE6YGT5YW3XG4gICAgOFx056m6XG4gICAgICovXG4gICAgdG91Y2hTaGFrZSgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXRvdWNoU2hha2UtLS0tLS0tJylcbiAgICAgICAgLy8gdGhpcy5za2luLmJ0blNoYWtlQW5pLnBsYXkoMCk7XG4gICAgICAgIEFwcFNkay5JLnZpYnJhdGUoKTtcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5zaG93TW9kYWwoSGludE1vZGFsLCAnIOS7iuK9h+asoeaVsOW3suK9pOWujO+8jOivt+aYjuK9h+WGjeadpScpO1xuICAgICAgICAvLyB0aGlzLnNraW4uaGFuZEFuaS5zdG9wKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAxLuWbnuWOu+aYn+aYnyDpgZPlhbcgXG4gICAgICAgICAqIDIu57qi5YyFICAg55u05o6l6I635b6X4r6m5biB77yb5oiW6ICF55u05o6l5by55r+A5Yqx6KeG6aKR5ZCO77yM6I635b6X4r6m5biBXG4gICAgICAgICAqIDMu5peg6YGT5YW3XG4gICAgICAgICAqIOebtOaOpeWxleK9sOaPkuWxj1xuICAgICAgICAgKiAgKi9cbiAgICAgICAgbGV0IGRhdGEgPSBTaGFrZU1vZGVsLkkuZ2V0U2hha2VUeXBlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCfmkYfkuIDmkYfojrflj5bnu5PmnpzvvJonICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAvKiogJ+iwouiwouWPguS4ju+8jOS4i+asoeWlvei/kO+8gScqLztcbiAgICAgICAgICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29pbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hBRENvaW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb3BzKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UHJvcHMoZGF0YSkge1xuICAgICAgICBsZXQgYm9vc3RlcjtcbiAgICAgICAgbGV0IHJld2FyZE51bSA9IGRhdGEubnVtO1xuICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIOWkhOeQhua4uOaIj+S4reeahOmBk+WFt+aYvuekulxuICAgICAgICAgKi9cbiAgICAgICAgLy8gc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIC8vICAgICBjYXNlIDQ6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJlbW92ZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNjpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuQ2hhbmdlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA1OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SZWZyZXNoO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA3OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SYW5kUmVtb3ZlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSAzOlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5TdGFyO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLkkub3BlblBvcHdpbihSZWNlaXZlUHJvcHNQb3B3aW4sIGJvb3N0ZXIsIHJld2FyZE51bSk7XG5cbiAgICB9XG4gICAgLyoqXG4gICAgICog55yL5bm/5ZGK6I635b6X57qi5YyFXG4gICAgICovXG4gICAgYXN5bmMgd2F0Y2hBRENvaW4oKSB7XG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZCgpO1xuICAgICAgICB0aGlzLmdldENvaW4oKTtcbiAgICB9XG4gICAgLyoq55u05o6l6I635b6X57qi5YyFICovXG4gICAgZ2V0Q29pbigpIHtcbiAgICAgICAgLy9cYuWIt+aWsOaAu+mHkeW4gVxuICAgICAgICAvLyBBcHBNYW5hZ2VyLkkucmVkcGFja2V0LmdldFJlcGFja2V0KClcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZFBhY2tldFJld2FyZCwgMik7XG4gICAgfVxufSIsImltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL0V2ZW50RW51bVwiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBjbGFzcyBFdmVudENlbnRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBMYXlhLkV2ZW50RGlzcGF0Y2hlcjtcbiAgICBwcml2YXRlIHN0YXRpYyBnZXQgSSgpOiBMYXlhLkV2ZW50RGlzcGF0Y2hlciB7XG4gICAgICAgIHdpbmRvd1snZXYnXSA9IHRoaXMuX2luc3RhbmNlO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IExheWEuRXZlbnREaXNwYXRjaGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGVtaXQoZXZlbnQ6IEV2ZW50RW51bSwgLi4uYXJncykge1xuICAgICAgICB0aGlzLkkuZXZlbnQoZXZlbnQudG9TdHJpbmcoKSwgYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGQodHlwZTogRXZlbnRFbnVtLCBjYWxsZXI6IGFueSwgbGlzdGVuZXI6IEZ1bmN0aW9uLCBhcmdzPzogQXJyYXk8YW55Pikge1xuICAgICAgICB0aGlzLkkub24odHlwZS50b1N0cmluZygpLCBjYWxsZXIsIGxpc3RlbmVyLCBhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZSh0eXBlOiBFdmVudEVudW0sIGNhbGxlcjogYW55LCBsaXN0ZW5lcjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5JLm9mZih0eXBlLnRvU3RyaW5nKCksIGNhbGxlciwgbGlzdGVuZXIpO1xuICAgIH1cbn0iLCJleHBvcnQgZW51bSBFdmVudEVudW0ge1xuXG5cdENIRUNLX1JFRFBBQ0tFVCA9IDxhbnk+J2NoZWNrX3JlZHBhY2tldCcsXG5cdEFQUF9TSE9XID0gPGFueT4nYXBwLnNob3cnLFxuXHRBUFBfSElERSA9IDxhbnk+J2FwcC5oaWRlJyxcblxuXG5cdFVQREFURV9DT0lOID0gPGFueT4ndXBkYXRlLmNvaW4nLFxuXG59IiwiaW1wb3J0IFRUQWRTZGsgZnJvbSBcIi4vVFRBZFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkTWFuYWdlciB7XHJcbiAgICBwcml2YXRlIGxhc3RWaWRlb1RpbWU6IG51bWJlcjtcclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcmVsb2FkUmV3YXJkQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFZpZGVvVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJlbG9hZEZ1bGxBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByZWxvYWRJbnRlckFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0Z1bGxBZCgpIHtcclxuICAgICAgICAvLyBjb25zb2xlLndhcm4oJ2Z1bGwnKTtcclxuICAgICAgICAvLyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkRnVsbEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlckFkKCkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUud2FybignZnVsbCcpO1xyXG4gICAgICAgIC8vIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRJbnRlckFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgY2hlY2tWaWRlb0luQ2QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZpZGVvVGltZSAmJiAoTGF5YS50aW1lci5jdXJyVGltZXIgLSB0aGlzLmxhc3RWaWRlb1RpbWUgPD0gMzAwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQmFubmVyKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5oaWRlQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TmF0aXZlQWQoeCwgeSwgdywgaCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKCB4LCB5LCB3LCBoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTmF0aXZlQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmhpZGVBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIHN0YXRpYyBnZXQgSSgpOiBBZE1hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoQWRNYW5hZ2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiaW1wb3J0IEJhc2VBcHBTZGsgZnJvbSBcIi4vQmFzZUFwcFNka1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5kcm9pZEFwcFNkayBleHRlbmRzIEJhc2VBcHBTZGsge1xyXG4gICAgZ2V0IHN5c3RlbSgpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsQXBwKGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgICAgICB0aGlzLmJyaWRnZSAmJiB0aGlzLmJyaWRnZS5jYWxsKGNtZCwgLi4ucGFyYW1zKTtcclxuICAgICAgICAvLyB0aGlzLmJyaWRnZSAmJiBhbGVydChKU09OLnN0cmluZ2lmeSh0aGlzLmJyaWRnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHBXaXRoQmFjayhjYWxsQmFjazogRnVuY3Rpb24sIGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgICAgICB0aGlzLmJyaWRnZSAmJiB0aGlzLmJyaWRnZS5jYWxsV2l0aEJhY2soY2FsbEJhY2ssIGNtZCwgLi4ucGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnJpZGdlIHx8ICh0aGlzLl9icmlkZ2UgPSB0aGlzLmNyZWF0ZUNsYXNzKCdjb20ucHVjaGkuc2RrZGVtby5KU0JyaWRnZScpKTtcclxuICAgIH1cclxufSIsImltcG9ydCBJb3NBcHBTZGsgZnJvbSBcIi4vSW9zQXBwU2RrXCI7XG5pbXBvcnQgQW5kcm9pZEFwcFNkayBmcm9tIFwiLi9BbmRyb2lkQXBwU2RrXCI7XG5pbXBvcnQgQmFzZUFwcFNkayBmcm9tIFwiLi9CYXNlQXBwU2RrXCI7XG5cbmV4cG9ydCBjbGFzcyBBcHBTZGsge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogQmFzZUFwcFNkaztcbiAgICBzdGF0aWMgZ2V0IEkoKTogQmFzZUFwcFNkayB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGxldCBjb25jaENvbmZpZyA9IHdpbmRvd1snY29uY2hDb25maWcnXTtcbiAgICAgICAgICAgIGxldCBvcyA9IGNvbmNoQ29uZmlnICYmIGNvbmNoQ29uZmlnLmdldE9TKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKG9zKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkNvbmNoLWlvc1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBJb3NBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDb25jaC1hbmRyb2lkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEFuZHJvaWRBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEJhc2VBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93WydBcHBTZGsnXSA9IHRoaXMuX2luc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9XG59IiwiaW1wb3J0IEFkZEdvbGREYXRhIGZyb20gXCIuL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcclxuaW1wb3J0IE15Q29pbkRhdGEgZnJvbSBcIi4vc2RrRGF0YS9NeUNvaW5EYXRhXCI7XHJcbmltcG9ydCB7IEdvbGRDb25maWdEYXRhIH0gZnJvbSBcIi4vc2RrRGF0YS9Hb2xkQ29uZmlnRGF0YVwiO1xyXG5cclxuLyoqIOi/lOWbnuWPguaVsOexu+WeiyAqL1xyXG5pbnRlcmZhY2UgSUFwcFJlc3VsdDxUPiB7XHJcbiAgICAvKiog6ZSZ6K+v56CBICovXHJcbiAgICBjb2RlPzogbnVtYmVyO1xyXG4gICAgLyoqIOi/lOWbnuaVsOaNriAqL1xyXG4gICAgZGF0YT86IFQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlQXBwU2RrIHtcclxuICAgIHByb3RlY3RlZCBfYnJpZGdlOiBhbnk7XHJcbiAgICBwcml2YXRlIG5ldE9uQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgbmV0T2ZmQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgX2NoYW5uZWw6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcclxuICAgIHByaXZhdGUgX2xldmVsOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHBhbmdvbGluSWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBhZG5ldElkOiBzdHJpbmc7XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBsZXQgY29uY2ggPSB3aW5kb3dbJ2NvbmNoJ107XHJcbiAgICAgICAgaWYgKGNvbmNoKSB7XHJcbiAgICAgICAgICAgIGNvbmNoLnNldE5ldHdvcmtFdnRGdW5jdGlvbih0aGlzLm5ldHdvcmtFdnRGdW5jLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ3NldEFwcENhbGxiYWNrJywgMSwgJ0FwcFNkay5vblNob3coKScpO1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnc2V0QXBwQ2FsbGJhY2snLCAyLCAnQXBwU2RrLm9uSGlkZSgpJyk7XHJcbiAgICAgICAgdGhpcy5nZXRTeXN0ZW1JbmZvKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3lzdGVtSW5mbygpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tZ2V0U3lzdGVtSW5mby0tLS0tLS0nICsgSlNPTi5zdHJpbmdpZnkocmV0KSlcclxuICAgICAgICAgICAgbGV0IHsgdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWwgfSA9IEpTT04ucGFyc2UocmV0KTtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3O1xyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoO1xyXG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbk5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwgPSBjaGFubmVsO1xyXG4gICAgICAgICAgICB0aGlzLnBhbmdvbGluSWQgPSBwYW5nb2xpbjtcclxuICAgICAgICAgICAgdGhpcy5hZG5ldElkID0gYWRuZXQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XHJcbiAgICAgICAgfSwgJ2dldFN5c3RlbUluZm8nLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2hvdygpIHtcclxuICAgICAgICAvLyBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5BUFBfU0hPVyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkhpZGUoKSB7XHJcbiAgICAgICAgLy8gRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uQVBQX0hJREUpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2aWJyYXRlKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnb3BlblN5c3RlbUZ1bicsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVTcGxhc2goKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsQXBwKCdoaWRlU3BsYXNoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoq5by55Ye65o+Q546wICovXHJcbiAgICB3aXRoRHJhd2FsKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnd2l0aERyYXdhbCcpO1xyXG4gICAgfVxyXG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXHJcbiAgICBmZWVkYmFjaygpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ2ZlZWRiYWNrJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBrZXkg6buY6K6kMCDvvIznrb7liLAgMVxyXG4gICAgICovXHJcbiAgICBwZXJzb25hbChrZXkgPSAwKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsQXBwKCdwZXJzb25hbCcsIGtleSk7XHJcbiAgICB9XHJcbiAgICAvKirpgoDor7flpb3lj4sqL1xyXG4gICAgaW52aXRhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ2ludml0YXRpb24nKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY3VycmVudFNodXQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnY3VycmVudFNodXQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlumHkeW4gemFjeihqFxyXG4gICAgICogQHBhcmFtIGtleSAx57qi5YyFICAgMiDmkYfkuIDmkYfnuqLljIVcclxuICAgICAqL1xyXG5cclxuICAgIGFzeW5jICBnZXRHYW1lQ29uZmlnKGtleTogbnVtYmVyID0gMSkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQ2FsbEJhY2soJ2dldEdhbWVDb25maWcnLCBrZXkpXHJcbiAgICAgICAgR29sZENvbmZpZ0RhdGEuSS5pbml0RGF0YShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDopoHmsYLlj5HmlL7ph5HluIFcclxuICAgICAqIEBwYXJhbSBrZXkgMee6ouWMhVxyXG4gICAgICovXHJcblxyXG4gICAgYXN5bmMgYWRkR29sZChrZXk6IG51bWJlciA9IDEpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbkNhbGxCYWNrKCdhZGRHb2xkJywga2V5KTtcclxuICAgICAgICBBZGRHb2xkRGF0YS5pbml0RGF0YShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBhc3luYyBteUNvaW4oKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25DYWxsQmFjaygnbXlDb2luJylcclxuICAgICAgICBNeUNvaW5EYXRhLmluaXREYXRhKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICB9XHJcbiAgICAvKirojrflj5blvZPliY3mj5DnjrDnmoTmoaPkvY0gKi9cclxuICAgIGFzeW5jIG1pbldpdGhEcmF3YWwoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25DYWxsQmFjaygnbWluV2l0aERyYXdhbCcpO1xyXG4gICAgICAgIGlmICghQm9vbGVhbihwYXJzZUludChyZXN1bHQuY29kZSArICcnKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlc3VsdC5kYXRhWydtb25leSddKSAqIDEwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgb25DYWxsQmFjayhjbWQ6IHN0cmluZywgLi4ucGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElBcHBSZXN1bHQ8YW55W10+Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FsbEFwcFdpdGhCYWNrKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICAgICAgICAgIC8vIHJlcyA9IHsgY29kZTogMTAwMCB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlcy5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IHJlcy5jb2RlLCBkYXRhOiByZXMuZGF0YSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IHJlcy5jb2RlIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGNtZCwgLi4ucGFyYW1zKTtcclxuICAgICAgICB9KVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHAoY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHBXaXRoQmFjayhjYWxsQmFjazogRnVuY3Rpb24sIGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG5ldHdvcmtFdnRGdW5jKHR5cGU6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBmdW5jQXJyO1xyXG4gICAgICAgIGlmICh0eXBlID09IDApIHtcclxuICAgICAgICAgICAgZnVuY0FyciA9IHRoaXMubmV0T2ZmQXJyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSA1KSB7XHJcbiAgICAgICAgICAgIGZ1bmNBcnIgPSB0aGlzLm5ldE9uQXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZnVuY0Fycikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmNBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZ1bmNBcnJbaV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk5ldE9uKGZ1bmM6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5uZXRPbkFyci5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgb25OZXRPZmYoZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm5ldE9mZkFyci5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsZXZlbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBnZXQgd2lkdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBoZWlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmVyc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2hhbm5lbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2xhc3MobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvd1snUGxhdGZvcm1DbGFzcyddLmNyZWF0ZUNsYXNzKG5hbWUpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJhc2VBcHBTZGsgZnJvbSBcIi4vQmFzZUFwcFNka1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW9zQXBwU2RrIGV4dGVuZHMgQmFzZUFwcFNkayB7XHJcbiAgICBnZXQgc3lzdGVtKCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHAoY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNtZCArPSAnOic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJpZGdlICYmIHRoaXMuYnJpZGdlLmNhbGwoY21kLCAuLi5wYXJhbXMpO1xyXG4gICAgICAgIC8vIHRoaXMuYnJpZGdlICYmIGFsZXJ0KEpTT04uc3RyaW5naWZ5KHRoaXMuYnJpZGdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbEFwcFdpdGhCYWNrKGNhbGxCYWNrOiBGdW5jdGlvbiwgY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNtZCArPSAnOic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJpZGdlICYmIHRoaXMuYnJpZGdlLmNhbGxXaXRoQmFjayhjYWxsQmFjaywgY21kLCAuLi5wYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgYnJpZGdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9icmlkZ2UgfHwgKHRoaXMuX2JyaWRnZSA9IHRoaXMuY3JlYXRlQ2xhc3MoJ0pTQnJpZGdlJykpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9BZE1hbmFnZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQWQgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgb25FbmFibGUoKTogdm9pZCB7XG4gICAgICAgIGxldCBnbG9iYWxQb2ludCA9IHRoaXMuaXRlbS5sb2NhbFRvR2xvYmFsKExheWEuUG9pbnQuRU1QVFksIHRydWUpO1xuICAgICAgICBBZE1hbmFnZXIuSS5zaG93TmF0aXZlQWQoZ2xvYmFsUG9pbnQueCwgZ2xvYmFsUG9pbnQueSwgdGhpcy5pdGVtLndpZHRoLCB0aGlzLml0ZW0uaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBvbkRpc2FibGUoKTogdm9pZCB7XG4gICAgICAgIEFkTWFuYWdlci5JLmhpZGVOYXRpdmVBZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGl0ZW0oKTogTGF5YS5WaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXIgYXMgYW55O1xuICAgIH1cbn0iLCJpbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi9BcHBTZGtcIjtcclxuaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUVEFkU2RrIHtcclxuICAgIGFzeW5jIHNob3dSZXdhcmRWaWRlb0FkKCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoLFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgbWVzc2FnZSB9ID0gSlNPTi5wYXJzZShyZXQpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC8qKifmmoLml6Dop4bpopHlub/lkYrvvIHmr4/ml6Uw54K56YeN572uJyovO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIwMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ3VuQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgJ3Nob3dSZXdhcmRWaWRlb0FkJywgMSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkRnVsbFNjcmVlblZpZGVvQWQoIHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgQXBwU2RrLkkuY2FsbEFwcFdpdGhCYWNrKHJldCA9PiB7XHJcbiAgICAgICAgICAgIH0sICdsb2FkRnVsbFNjcmVlblZpZGVvQWQnLCAxLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWROYXRpdmVFeHByZXNzQWQoIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICBsZXQgc2NhbGVYID0gQXBwU2RrLkkud2lkdGggLyBMYXlhLnN0YWdlLndpZHRoO1xyXG4gICAgICAgIGxldCBzY2FsZVkgPSBBcHBTZGsuSS5oZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogd2lkdGggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgIGg6IGhlaWdodCAqIHNjYWxlWSxcclxuICAgICAgICAgICAgbGVmdDogeCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgdG9wOiB5ICogc2NhbGVZXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgIH0sICdsb2FkTmF0aXZlRXhwcmVzc0FkJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEJhbm5lckV4cHJlc3NBZCgpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogQXBwU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IEFwcFNkay5JLndpZHRoICogOTAgLyA2MDAsICBcclxuICAgICAgICB9XHJcbiAgICAgICAgQXBwU2RrLkkuY2FsbEFwcFdpdGhCYWNrKHJldCA9PiB7XHJcbiAgICAgICAgfSwgJ2xvYWRCYW5uZXJFeHByZXNzQWQnLCAyLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWQoKSB7XHJcbiAgICAgICAgQXBwU2RrLkkuY2FsbEFwcCgnY2xvc2VfYWR2ZXJfZGlhbG9nJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoICogMC44LFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICB9LCAnc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgXHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRUQWRTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVFRBZFNkaykgYXMgVFRBZFNkaztcclxuICAgIH1cclxufSIsImltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL0FwcFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuLyoqXHJcbiAqIOS4iuaKpeeDreS6keWfi+eCueK9h+W/l1xyXG4gKiDlhbfkvZPnmoTmiZPngrnpnIDopoHot5/ov5DokKXogZTns7tcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRyYWNraW5nU2RrIHtcclxuICAgIGRvdChrZXk6IHN0cmluZykge1xyXG4gICAgICAgIEFwcFNkay5JLmNhbGxBcHAoJ3RyYWNraW5nX2V2ZW50Jywga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVHJhY2tpbmdTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVHJhY2tpbmdTZGspIGFzIFRyYWNraW5nU2RrO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcmFja2luZ0tleSB7XHJcbiAgICBSZWRQYWNrMSA9ICdldmVudF81JyxcclxuICAgIFJlZFBhY2s1ID0gJ2V2ZW50XzYnXHJcbn1cclxuIiwiaW1wb3J0IEFycmF5VXRpbHMgZnJvbSBcIi4uLy4uL3VpdGwvQXJyYXlVdGlsc1wiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNb2RlbCB7XG4gICAgcHJvdGVjdGVkIF9kYXRhOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHVwZGF0ZUFycjogQXJyYXk8RnVuY3Rpb24+ID0gW107XG4gICAgcHJpdmF0ZSBrZXlVcGRhdGVBcnI6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZShkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RhdGEsXG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmtleVVwZGF0ZUFycikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICAgICBhcnIgJiYgYXJyLmZvckVhY2goZnVuYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdEZvcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2RhdGFba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYiA9IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmVXBkYXRlKGNiLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoY2IsIGtleSwgdHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlKGZ1bmM6IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcsIHJ1bjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgcnVuICYmIHZhbHVlICE9IG51bGwgJiYgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICFhcnIgJiYgKHRoaXMua2V5VXBkYXRlQXJyW2tleV0gPSBhcnIgPSBbXSk7XG4gICAgICAgICAgICBhcnIucHVzaChmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1biAmJiBmdW5jKHRoaXMuX2RhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBcnIucHVzaChmdW5jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvZmZVcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZykge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy5rZXlVcGRhdGVBcnJba2V5XSwgZnVuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy51cGRhdGVBcnIsIGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyR2FtZSgpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi4vLi4vc2RrL0FkTWFuYWdlclwiO1xuaW1wb3J0IFRlYVNkaywgeyBEb3RLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RlYVNka1wiO1xuaW1wb3J0IFRyYWNraW5nU2RrLCB7IFRyYWNraW5nS2V5IH0gZnJvbSBcIi4uLy4uL3Nkay9UcmFja2luZ1Nka1wiO1xuaW1wb3J0IHsgR29sZENvbmZpZ0RhdGEgfSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGFcIjtcbmltcG9ydCBBZGRHb2xkRGF0YSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcbmltcG9ydCBNeUNvaW5EYXRhIGZyb20gXCIuLi8uLi9zZGsvc2RrRGF0YS9NeUNvaW5EYXRhXCI7XG5pbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi4vLi4vc2RrL0FwcFNka1wiO1xuaW1wb3J0IERhdGVVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9EYXRlVXRpbHNcIjtcbmltcG9ydCBVdGlsLCB7IERhdGFLZXkgfSBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRFbnVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHBhY2tldE1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBwcml2YXRlIE1BWCA9IDIwO1xuICAgIC8qKuW9k+WkqemihuWPlue6ouWMheeahOacgOWkp+asoeaVsCAqL1xuICAgIHByaXZhdGUgREFZX01BWF9DTlQgPSA1MDtcbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwdWJsaWMgY3VyUmVkcGFja2V0OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25mTGVuOiBudW1iZXIgPSAwO1xuXG4gICAgLyoq5Yid5aeL5YyW57qi5YyF6YWN572uICovXG4gICAgYXN5bmMgaW5pdCgpIHtcblxuICAgICAgICBsZXQgYXJyID0gYXdhaXQgR29sZENvbmZpZ0RhdGEuSS5nZXRHb2xkQ29uZmlnKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1SZWRwYWNrZXRNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KGFycikpXG4gICAgICAgIFxuICAgICAgICBsZXQgY2FzaCA9IDA7XG4gICAgICAgIHRoaXMuY29uZiA9IHt9O1xuICAgICAgICBhcnIuZm9yRWFjaChjb25mRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZbY29uZkRhdGEuaWRdID0gY29uZkRhdGE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoKSk7XG4gICAgICAgIHRoaXMuY29uZkxlbiA9IHRoaXMuY29uZi5sZW5ndGg7XG5cbiAgICB9XG5cbiAgICBpbml0RGF0YSgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUmVkcGFja2V0RGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5sYXN0VGltZSkgfHwgJzAnO1xuICAgICAgICBkYXRhLmxhc3RUaW1lID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuXG4gICAgICAgIGxldCBsYXN0ID0gRGF0ZVV0aWxzLnRpbWVEYXkoZGF0YS5sYXN0VGltZSk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcbiAgICAgICAgaWYgKGxhc3QgIT0gdG9kYXkpIHtcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5sYXN0VGltZSwgbGFzdFRpbWUpXG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0b2RheUNudCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkudG9kYXlDbnQpIHx8ICcwJztcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSBwYXJzZUludCh0b2RheUNudCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGRhdGFDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LmRhdGFDTlQpIHx8ICcwJztcbiAgICAgICAgZGF0YS5jbnQgPSBwYXJzZUludChkYXRhQ250KTtcbiAgICAgICAgZGF0YS5saXN0ID0gW107XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrUmVkcGFja2V0KCkge1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEudG9kYXlDbnQgPj0gdGhpcy5EQVlfTUFYX0NOVCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQWRNYW5hZ2VyLkkuY2hlY2tWaWRlb0luQ2QoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvKirnuqLljIXojrflj5blkI7msqHmnInnnIvlub/lkYrpooblj5bvvIzlho3mrKHojrflvpfnuqLljIXnmoTmnLrkvJrvvIzkuI3kvJrojrflj5bnuqLljIXvvIwg6Ieq5bex5Lmf5Y+v5Lul5aSE55CG5oiQIOWvueW6lOeahOe6ouWMheaPkOmGkuaIluS4jemcgOimgei/memHjOeahOWIpOaWrSAqL1xuICAgICAgICBpZiAodGhpcy5jdXJSZWRwYWNrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB0aGlzLmRhdGEuY250KSB0aGlzLmRhdGEuY250ID0gMDtcbiAgICAgICAgbGV0IGNudCA9IHRoaXMuZGF0YS5jbnQ7XG4gICAgICAgIGlmIChjbnQgPj0gdGhpcy5jb25mTGVuKSBjbnQgPSB0aGlzLmNvbmZMZW4gLSAxO1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZltjbnQgKyAxXTtcbiAgICAgICAgbGV0IHJhbjIgPSBNYXRoLnJhbmRvbSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIHJhbjIgPCBkYXRhLnBlcikge1xuICAgICAgICAgICAgbGV0IGNhc2ggPSAwLjAwMDAwMTtcbiAgICAgICAgICAgIHRoaXMuY3VyUmVkcGFja2V0ID0gY2FzaDtcbiAgICAgICAgICAgIC8vKirlvLnlh7rnuqLljIXnmoTnlYzpnaIsICDmmoLml7blpITnkIbmiJAg55u05o6l55yL5bm/5ZGK6I635Y+W6YeR5biBICovXG4gICAgICAgICAgIGF3YWl0ICBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKVxuICAgICAgICAgICB0aGlzLmdldFJlcGFja2V0KClcbiAgICAgICAgICAgLyoq5pu05paw5Z+65pys5pi+56S6ICovXG4gICAgICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLlVQREFURV9DT0lOKTtcblxuICAgICAgICAgICAgLyoqKiAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldFJlcGFja2V0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VyUmVkcGFja2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuZGF0YS5jbnQgKz0gMTtcbiAgICAgICAgdGhpcy5kYXRhLmxpc3QucHVzaCh0aGlzLmN1clJlZHBhY2tldCk7XG4gICAgICAgIHRoaXMuZGF0YS5sYXN0VGltZSA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpO1xuICAgICAgICB0aGlzLmRhdGEudG9kYXlDbnQgKz0gMTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gMSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2sxKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gNSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2s1KTtcbiAgICAgICAgdGhpcy5jdXJSZWRwYWNrZXQgPSAwO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmRhdGFDTlQsIHRoaXMuZGF0YS5jbnQpO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCB0aGlzLmRhdGEudG9kYXlDbnQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqICovXG4gICAgYXN5bmMgZ2V0Q3VyUmVkcGFja2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJSZWRwYWNrZXQ7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogUmVkcGFja2V0RGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICAvKirojrflj5bmgLvlhbHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBnZXRUb3RhbENvaW4oKSB7XG4gICAgICAgIGxldCB0b3RhbENvaW4gPSBhd2FpdCBNeUNvaW5EYXRhLmdldENvaW4oKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsQ29pbjtcbiAgICB9XG4gICAgLyoq6I635Y+W5pys5qyh5aWW5Yqx55qE6YeR5biB5pWwICovXG4gICAgYXN5bmMgYWRkQ29pbihrZXk6IG51bWJlciA9IDEpIHtcbiAgICAgICAgbGV0IGNvaW5EYXRhID0gYXdhaXQgQWRkR29sZERhdGEuYWRkQ29pbihrZXkpO1xuICAgICAgICByZXR1cm4gY29pbkRhdGE7XG4gICAgfVxuXG4gICAgLyoq6I635Y+W5pyA5L2O5o+Q5qGjICovXG4gICAgYXN5bmMgIG1pbldpdGhEcmF3YWwoKSB7XG4gICAgICAgIGxldCBtaW5Db2luID0gYXdhaXQgQXBwU2RrLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICByZXR1cm4gbWluQ29pbjtcbiAgICB9XG4gICAgc3RhdGljIGdldCBJKCk6IFJlZHBhY2tldE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChSZWRwYWNrZXRNb2RlbCkgYXMgUmVkcGFja2V0TW9kZWw7XG4gICAgfVxufVxuXG5jbGFzcyBSZWRwYWNrZXREYXRhIHtcbiAgICBjbnQ6IG51bWJlcjtcbiAgICBsaXN0OiBBcnJheTxudW1iZXI+O1xuICAgIGxhc3RUaW1lOiBudW1iZXI7XG4gICAgdG9kYXlDbnQ6IG51bWJlcjtcbn1cblxuY2xhc3MgUmVkcGFja2V0Q29uZmlnRGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBwZXI6IG51bWJlcjtcbiAgICBjYXNoOiBudW1iZXI7XG59IiwiaW1wb3J0IEJhc2VNb2RlbCBmcm9tIFwiLi9CYXNlTW9kZWxcIjtcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuLi8uLi9zZGsvQXBwU2RrXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuXG4vKipcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrZU1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcblxuICAgIHByaXZhdGUgY29uZjogYW55O1xuICAgIHByaXZhdGUgZWxlUHJvYmFiaWxpdHlBcnI6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSB0b3RhbFdlaWdodDogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHByb0FyckxlbjogbnVtYmVyID0gMDtcbiAgICAvKirnuqLljIXlh7rnjrDnmoTmgLvmrKHmlbDmr4/ml6UgKi9cbiAgICBwcml2YXRlIHJlZF9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBjdXJfcmVkX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKirmkYfkuIDmkYflh7rnjrDnmoTmgLvmrKHmlbAgKi9cbiAgICBwcml2YXRlIHNoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcblxuICAgIHByaXZhdGUgY3VyX3NoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKipcbiAgICAgKiByZWRfZGF5X2xpbWl0XHTnuqLljIXmr4/ml6XmnoHpmZDkuqflh7pcdFxuICAgICogIHNoYWtlX2RheV9saW1pdFx05pGH5LiA5pGH5q+P5pel5p6B6ZmQ5Lqn5Ye6XHRcbiAgICAqIGludGVyc3RpdGlhbF9jbnQg5o+S5bGP6K6h5pWw77yI5q+P5Ye6546weOasoemAmueUqOiOt+W+l+eJqeWTgeeVjOmdouWQju+8jOWHuueOsOaPkuWxj++8iVx0XG4gICAgKiBpbnRlcnN0aXRpYWxfZGVsYXlcdOaPkuWxj+WHuueOsOW7tuaXtu+8iOavq+enku+8iVx0XG4gICAgICovXG4gICBcbiAgICAvKipcbiAgICAgKiAgLy8gbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgLy8gICAgIGRhdGE6IHtcbiAgICAgICAgLy8gICAgICAgICBnYW1lQ29uZmlnOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwiY29uZmlnXCI6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwicmVkX2RheV9saW1pdFwiOiAxMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwic2hha2VfZGF5X2xpbWl0XCI6IDUwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJpbnRlcnN0aXRpYWxfY250XCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcImludGVyc3RpdGlhbF9kZWxheVwiOiA1MDBcbiAgICAgICAgLy8gICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJzaGFrZVwiOiBbXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiAxLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogNDAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDBcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiAzLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDMwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAxXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogNCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogMyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAxMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMlxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDUsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDQsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMzAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDFcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiA2LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA0LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogNSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAzMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDUsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiA5LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA2LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDMwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAxXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDYsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAzMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEyLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA3LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTMsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogNTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDBcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICAgICAgXSxcbiAgICAgICAgLy8gICAgICAgICAgICAgJ2NvaW5fY29uZmlnJzogW11cbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgKi9cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgQXBwU2RrLkkuZ2V0R2FtZUNvbmZpZygpO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tU2hha2VNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KHJlc3VsdC5kYXRhKSlcbiAgICAgICAgXG4gICAgICAgIGxldCBkYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIGlmIChkYXRhWydnYW1lQ29uZmlnJ10pIHtcbiAgICAgICAgICAgIGxldCBnYW1lRGF0YSA9IGRhdGFbJ2dhbWVDb25maWcnXTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoZ2FtZURhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREYXRhKGdhbWVEYXRhKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFNoYWtlRGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lKSB8fCAnMCc7XG4gICAgICAgIGxldCBsdCA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGxhc3QgPSBEYXRlVXRpbHMudGltZURheShsdCk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcblxuICAgICAgICBpZiAobGFzdCAhPSB0b2RheSkge1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCAwKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQsIDApO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lLCBsYXN0VGltZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjdXJfcmVkX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQpIHx8ICcwJztcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSBwYXJzZUludChjdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICBsZXQgY3VyX3NoYWtlX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3NoYWtlX2RheV9saW1pdCkgfHwgJzAnO1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gcGFyc2VJbnQoY3VyX3NoYWtlX2RheV9saW1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmNvbmZpZyA9IGdhbWVEYXRhWydjb25maWcnXTtcbiAgICAgICAgZ2FtZURhdGFbJ3NoYWtlJ10uZm9yRWFjaChlbGUgPT4ge1xuICAgICAgICAgICAgZGF0YS5zaGFrZVdlaWdodExpc3QucHVzaChlbGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25mID0gW107XG4gICAgICAgIHRoaXMuY29uZiA9IGRhdGEuc2hha2VXZWlnaHRMaXN0O1xuICAgICAgICB0aGlzLmluaXRQcm9iYWJpbGl0eSgpO1xuICAgICAgICB0aGlzLnNoYWtlX2RheV9saW1pdCA9IGRhdGEuY29uZmlnLnNoYWtlX2RheV9saW1pdDtcbiAgICAgICAgdGhpcy5yZWRfZGF5X2xpbWl0ID0gZGF0YS5jb25maWcucmVkX2RheV9saW1pdDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaW5pdFByb2JhYmlsaXR5KCkge1xuICAgICAgICB0aGlzLnRvdGFsV2VpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5jb25mLmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG90YWxXZWlnaHQgKz0gZWxlLndlaWdodDtcbiAgICAgICAgICAgIGxldCBpdGVtVyA9IGVsZS53ZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKVxuICAgICAgICAgICAgICAgIGl0ZW1XICs9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnJbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIgPSBbLi4udGhpcy5lbGVQcm9iYWJpbGl0eUFyciwgaXRlbVddO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLnByb0FyckxlbiA9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIubGVuZ3RoO1xuXG4gICAgfVxuXG4gICAgZ2V0U2hha2VUeXBlKCkge1xuICAgICAgICArK3RoaXMuY3VyX3NoYWtlX2RheV9saW1pdDtcbiAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPiB0aGlzLnNoYWtlX2RheV9saW1pdCkge1xuICAgICAgICAgICAgLyoqJ+asoeaVsOi+vuWIsOS4iumZkO+8jOivt+aYjuWkqeWGjeadpSovXG5cbiAgICAgICAgICAgIC8qKuWcqOatpOWkhOWPr+S7peW8ueahhuetieWkhOeQhiAqL1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByYW4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnRvdGFsV2VpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucHJvQXJyTGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmVsZVByb2JhYmlsaXR5QXJyW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChlbGUgPj0gcmFuKSB7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IGluZGV4IHx8IDEgPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICsrdGhpcy5jdXJfcmVkX2RheV9saW1pdDtcbiAgICAgICAgICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCwgdGhpcy5jdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cl9yZWRfZGF5X2xpbWl0ID4gdGhpcy5yZWRfZGF5X2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogU2hha2VEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBJKCk6IFNoYWtlTW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFNoYWtlTW9kZWwpIGFzIFNoYWtlTW9kZWw7XG4gICAgfVxufVxuXG5cbmNsYXNzIFNoYWtlRGF0YSB7XG4gICAgY29uZmlnOiBTaGFrZUNvbmZpZztcbiAgICBzaGFrZVdlaWdodExpc3Q6IFNoYWtlV2VpZ2h0RGF0YVtdID0gW107XG59XG5pbnRlcmZhY2UgU2hha2VDb25maWcge1xuICAgIHJlZF9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBzaGFrZV9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBpbnRlcnN0aXRpYWxfY250OiBudW1iZXIsXG4gICAgaW50ZXJzdGl0aWFsX2RlbGF5OiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFNoYWtlV2VpZ2h0RGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgd2VpZ2h0OiBudW1iZXI7XG4gICAgbnVtOiBudW1iZXI7XG59XG5cblxuIiwiaW1wb3J0IHsgQXBwU2RrIH0gZnJvbSBcIi4uL0FwcFNka1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRHb2xkRGF0YSB7XG4gICAgc3RhdGljIGNvaW46IHN0cmluZyA9ICcwJztcbiAgICBzdGF0aWMgbXljb2luOiBzdHJpbmcgPSAnMCc7XG4gICAgc3RhdGljIGluaXREYXRhKGRhdGE6IGFueSkge1xuICAgICAgICBpZiAoIXBhcnNlSW50KGRhdGEuY29kZSkpIHtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLm15Y29pbiA9IGRhdGEuZGF0YS5teWNvaW47XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyAgYWRkQ29pbihrZXk6IG51bWJlciA9IDEpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IEFwcFNkay5JLmFkZEdvbGQoa2V5KTtcbiAgICAgICAgcmV0dXJuIFtwYXJzZUludCh0aGlzLmNvaW4pLHBhcnNlSW50KHRoaXMubXljb2luKV07XG5cbiAgICB9XG59IiwiaW1wb3J0IHsgQXBwU2RrIH0gZnJvbSBcIi4uL0FwcFNka1wiO1xyXG5pbXBvcnQgVXRpbCBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgR29sZENvbmZpZ0RhdGEge1xyXG4gICAgYWQ6IE9iamVjdDtcclxuICAgIGFkbmV0OiBzdHJpbmc7XHJcbiAgICBhcHBfbmFtZTogc3RyaW5nO1xyXG4gICAgY29pbl9jb25maWc6IHN0cmluZyA9ICcnO1xyXG4gICAgZ2FtZVVybDogc3RyaW5nO1xyXG4gICAga3VhaV9hcHBfbmFtZTogc3RyaW5nO1xyXG4gICAgcGFuZ29saW46IHN0cmluZztcclxuICAgIHRUdXJib0FnZW50OiBzdHJpbmc7XHJcbiAgICB0ZWFBZ2VudDogbnVtYmVyO1xyXG4gICAgdHJhY2tpbmc6IHN0cmluZztcclxuICAgIHR0QXBwTG9nOiBzdHJpbmc7XHJcbiAgICB1bWlkOiBzdHJpbmc7XHJcbiAgICBnYW1lQ29uZmlnOiBhbnk7XHJcblxyXG4gICAgY29kZTogbnVtYmVyID0gLTM7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogR29sZENvbmZpZ0RhdGEgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEkoKTogR29sZENvbmZpZ0RhdGEge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSlcclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBHb2xkQ29uZmlnRGF0YSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xyXG4gICAgfVxyXG4gICAgaW5pdERhdGEoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGRhdGEuY29kZTtcclxuICAgICAgICBpZiAoIWRhdGEuY29kZSkge1xyXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlID0gZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IGVsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRHb2xkQ29uZmlnKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IEFwcFNkay5JLmdldEdhbWVDb25maWcoKTtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgaWYgKGRhdGFbJ2dhbWVDb25maWcnXSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdhbWVEYXRhID0gZGF0YVsnZ2FtZUNvbmZpZyddO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCB0aGlzLmxvYWRHb2xkQ2ZnKGdhbWVEYXRhWydjb2luX2NvbmZpZyddWzBdKVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb25maWdKc29uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRHb2xkQ2ZnKHJlczogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCAgVXRpbC5JLmxvYWQocmVzKTtcclxuICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi4vQXBwU2RrXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE15Q29pbkRhdGEge1xuICAgIHN0YXRpYyBjb2luOiBzdHJpbmcgPSAnJztcbiAgICBzdGF0aWMgaW5pdERhdGEoZGF0YTogYW55KSB7XG4gICAgICAgIGlmICghcGFyc2VJbnQoZGF0YS5jb2RlKSl7XG4gICAgICAgICAgICB0aGlzLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmNvaW4gPScwJztcbiAgICAgICAgfVxuICAgICAgIFxuICAgIH1cbiAgICAgc3RhdGljIGFzeW5jIGdldENvaW4oKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBBcHBTZGsuSS5teUNvaW4oKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuY29pbilcbiAgICB9XG59IiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXG5pbXBvcnQgVmlldz1MYXlhLlZpZXc7XHJcbmltcG9ydCBEaWFsb2c9TGF5YS5EaWFsb2c7XHJcbmltcG9ydCBTY2VuZT1MYXlhLlNjZW5lO1xudmFyIFJFRzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XG5leHBvcnQgbW9kdWxlIHVpIHtcclxuICAgIGV4cG9ydCBjbGFzcyBUZXN0U2NlbmVVSSBleHRlbmRzIFNjZW5lIHtcclxuXHRcdHB1YmxpYyBidG5JbnZpdGU6TGF5YS5TcHJpdGU7XG5cdFx0cHVibGljIGJ0blNlcnZlcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuVmlicmF0ZTpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuX3NoYWtlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5EcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZWxvYWRBRDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Jhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Z1bGxBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd05hdGl2ZUFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93SW50ZXJBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmV3YXJkQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blJlZHBhY2tldDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgTmF0aXZlQUQ6VmlldztcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTY2VuZShcIlRlc3RTY2VuZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5UZXN0U2NlbmVVSVwiLFRlc3RTY2VuZVVJKTtcclxufVxyIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJyYXlVdGlscyB7XG4gICAgLyoqXG4gICAgICog56e76Zmk5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUZyb21BcnIoYXJyOiBBcnJheTxhbnk+LCBvYmo6IGFueSkge1xuICAgICAgICBsZXQgaW5kZXggPSBhcnIuaW5kZXhPZihvYmopO1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tRnJvbUFycihhcnI6IEFycmF5PGFueT4pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBhcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOe7hOmaj+acuuaOkuW6j1xuICAgICAqL1xuICAgIHN0YXRpYyBzaHVmZmxlKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICByZXR1cm4gYXJyLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mKGFyciwgY2FsbGJhY2ssIGN0eD8pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGN0eCwgdGhpc1tpXSwgaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBlYWNoKGFyciwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBhcnJbaV0sIGksIGFycikpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcXVldWUoYXJyKSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBwcm9taXNlIG9mIGFycikge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgcHJvbWlzZShyZXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQXJyYXkoYXJyLCBjb3VudCkge1xuICAgICAgICBsZXQgc2h1ZmZsZWQgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIGxldCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBsZXQgbWluID0gbGVuIC0gY291bnQsIHRlbXAsIGluZGV4O1xuICAgICAgICB3aGlsZSAobGVuLS0gPiBtaW4pIHtcbiAgICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcigobGVuICsgMSkgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIHRlbXAgPSBzaHVmZmxlZFtpbmRleF07XG4gICAgICAgICAgICBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtsZW5dO1xuICAgICAgICAgICAgc2h1ZmZsZWRbbGVuXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKG1pbik7XG4gICAgfVxufSIsIi8qKlxuICog5pel5pyf5bel5YW357G7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVVdGlscyB7XG4gICAgc3RhdGljIGdldCBub3coKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5ub3dUaW1lIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBub3dUaW1lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvZGF5KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGhpcy5ub3dUaW1lKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyB0aW1lRGF5KHRpbWVOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGltZU51bSk7XG4gICAgICAgIGxldCB5ZWFyID0gdGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbW9udGggPSB0aW1lLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBsZXQgZGF0ZSA9IHRpbWUuZ2V0RGF0ZSgpO1xuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHt0aGlzLmFkZChtb250aCl9LSR7dGhpcy5hZGQoZGF0ZSl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7np5LmlbDmoLzlvI/ljJblrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gc2Vjb25kIOenkuaVsFxuICAgICAqIEBwYXJhbSB0eXBlIDE6MDA6MDA6MDAgICAyOnl5eXktbW0tZGQgaDptOnMgICAgMzowMDowMCAgIDQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgICogQHJldHVyblxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZChzZWNvbmQ6IG51bWJlciwgdHlwZTogbnVtYmVyID0gMSk6IHN0cmluZyB7XG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQwKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDEoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMihzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQzKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gMDogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDAodDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gNjApO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcih0ICUgNjApO1xuICAgICAgICB2YXIgbWluczogc3RyaW5nO1xuICAgICAgICB2YXIgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbnMgKyBcIjpcIiArIHNlbnM7XG4gICAgfVxuXG4gICAgLy8xOiAwMDowMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMSh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhvdXJzdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMzYwMCk7XG4gICAgICAgIGxldCBob3Vyczogc3RyaW5nO1xuICAgICAgICBsZXQgZGF5ID0gJyc7XG4gICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgaG91cnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91cnN0IDwgMTApXG4gICAgICAgICAgICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzdDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBoID0gaG91cnN0ICUgMjQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA+PSAyNCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcihob3Vyc3QgLyAyNCkgKyAnZCAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgbGV0IHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgbGV0IG1pbnM6IHN0cmluZztcbiAgICAgICAgbGV0IHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXkgKyBob3VycyArIFwiOlwiICsgbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzM6IDAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQzKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzI6eXl5eS1tbS1kZCBoOm06c1xuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB2YXIgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IFx0Ly/ov5Tlm57nmoTmnIjku73ku44wLTEx77ybXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgaG91cnM6IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBzZWNvbmQ6IG51bWJlciA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRheSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIG1pbnV0ZSArIFwiOlwiICsgc2Vjb25kO1xuXG4gICAgfVxuXG4gICAgLy80Onh45aSp5YmN77yMeHjlsI/ml7bliY3vvIx4eOWIhumSn+WJjVxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kNCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgdCA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xuICAgICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0ID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0IC8gMjQpICsgXCLlpKnliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgXCLlsI/ml7bliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWUgLyA2MCkgKyBcIuWIhumSn+WJjVwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ1KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIOavj+S4quaXtumXtOWNleS9jeaJgOWvueW6lOeahOenkuaVsFxuICAgICAgICB2YXIgb25lRGF5OiBudW1iZXIgPSAzNjAwICogMjQ7XG4gICAgICAgIHZhciBvbmVIb3Vyc3Q6IG51bWJlciA9IDM2MDA7XG4gICAgICAgIHZhciBvbmVNaW5zdDogbnVtYmVyID0gNjA7XG5cbiAgICAgICAgdmFyIGRheXMgPSBNYXRoLmZsb29yKHRpbWUgLyBvbmVEYXkpO1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgLyBvbmVIb3Vyc3QpXG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgLyBvbmVNaW5zdCkgIC8vTWF0aC5mbG9vcih0aW1lICUgb25lRGF5ICUgb25lSG91cnN0IC8gb25lTWluc3QpO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgJSBvbmVNaW5zdCkgLy90aW1lO1xuXG4gICAgICAgIHZhciBkYXlzczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIGhvdXJzczogc3RyaW5nID0gXCJcIlxuICAgICAgICB2YXIgbWluc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHZhciBzZWNzczogc3RyaW5nID0gXCJcIlxuICAgICAgICBpZiAodGltZSA+IDApIHtcbiAgICAgICAgICAgIC8v5aSpXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF5c3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIC8v5bCP5pe2XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8v5YiGXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vjc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWluc3MgKyBzZWNzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgc2Vjc3NcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCIwXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgbWluc3M7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IGRheXMgKyBcIuWkqVwiO1xuICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiMFwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIiArIGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXNzICsgaG91cnNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZChudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgT2JqZWN0UG9vbCBmcm9tIFwiLi9PYmplY3RQb29sXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0SW5zdGFuY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIGNsenMgPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBvYmplY3RzID0gW107XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldChjbHM6IGFueSkge1xuICAgICAgICBsZXQgaWR4ID0gdGhpcy5jbHpzLmluZGV4T2YoY2xzKTtcbiAgICAgICAgcmV0dXJuIChpZHggPj0gMCAmJiB0aGlzLm9iamVjdHNbaWR4XSkgfHwgdGhpcy5jcmVhdGUoY2xzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUoY2xzOiBhbnkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE9iamVjdFBvb2wucG9wKGNscyk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICAgIHRoaXMuY2x6cy5wdXNoKGNscyk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0UG9vbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xzQXJyID0gW107XG5cbiAgICBzdGF0aWMgcG9wKGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsc0Fyci5pbmRleE9mKGNscyk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICBpZHggPSB0aGlzLmNsc0Fyci5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNsc0Fyci5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtleSA9ICdwb29sS2V5JyArIGlkeDtcbiAgICAgICAgbGV0IGl0ZW0gPSBMYXlhLlBvb2wuZ2V0SXRlbUJ5Q2xhc3Moa2V5LCBjbHMpO1xuICAgICAgICBpdGVtLnBvb2xLZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGl0ZW0pIHtcbiAgICAgICAgTGF5YS5Qb29sLnJlY292ZXIoaXRlbS5wb29sS2V5LCBpdGVtKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFNjYWxlQnV0dG9uU2NyaXB0IHtcbiBcbiAgICBwdWJsaWMgZGVsYXlUaW1lOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBtaW5TY2FsZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIG1vbmtleUJveDogTGF5YS5JbWFnZTtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICrorr7nva5vd25lcuWHveaVsO+8jOWPr+S7peebtOaOpeiOt+WPluWIsOa3u+WKoOmZhOWKoOiEmuacrOeahOe7hOS7tuWunuS+iyBcbiAgICAgKiovXG4gICAgcHVibGljIHNldCBvd25lcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubW9ua2V5Qm94ID0gdmFsdWU7XG4gICAgICAgIC8v6Ieq5a6a5LmJ55qE6ISa5pys5Lya5pyJ5pe25bqP6Zeu6aKY77yM5omA5Lul5Zyo5q2k5re75Yqg5LiA5Liq5bu25pe2XG4gICAgICAgIHRoaXMubW9ua2V5Qm94LmZyYW1lT25jZSgyLCB0aGlzLCB0aGlzLm9uTG9hZGVkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25Mb2FkZWQoKTogdm9pZCB7XG4gICAgICAgLyog6K6+572u5oyJ6ZKu5Li65Y2V5oCB5oyJ6ZKuXG4gICAgICAgICoqIOWPluWAvO+8mlxuICAgICAgICAqKiAx77ya5Y2V5oCB44CC5Zu+54mH5LiN5YGa5YiH5Ymy77yM5oyJ6ZKu55qE55qu6IKk54q25oCB5Y+q5pyJ5LiA56eN44CCXG4gICAgICAgICoqIDLvvJrkuKTmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB5oyJ5LiL5ZKM57uP6L+H5Y+K6YCJ5Lit54q25oCB55qu6IKk44CCXG4gICAgICAgICoqIDPvvJrkuInmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB57uP6L+H54q25oCB55qu6IKk44CB5oyJ5LiL5ZKM6YCJ5Lit54q25oCB55qu6IKkXG4gICAgICAgICovXG4gICAgICAgIC8v5re75Yqg6byg5qCH5oyJ5LiL5LqL5Lu25L6m5ZCs44CC5oyJ5pe25pe257yp5bCP5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfmiqzotbfkuovku7bkvqblkKzjgILmiqzotbfml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XG4gICAgICAgIC8v5re75Yqg6byg5qCH56a75byA5LqL5Lu25L6m5ZCs44CC56a75byA5pe26L+Y5Y6f5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgcHJpdmF0ZSBzY2FsZVNtYWxsKCk6dm9pZHtcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcbiAgICAgICAgTGF5YS5Ud2Vlbi50byh0aGlzLm1vbmtleUJveCwge3NjYWxlWDowLjgsIHNjYWxlWTogMC44fSwgMik7XG4gICAgfVxuICAgIHByaXZhdGUgc2NhbGVCaWcoKTp2b2lke1xuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjEsIHNjYWxlWToxfSwgMik7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFV0aWwge1xuICAgIHB1YmxpYyBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgIH1cbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBMYXlhLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXRpbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IFV0aWwge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IFV0aWwpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gRGF0YUtleSB7XG4gICAgY3VyX3JlZF9kYXlfbGltaXQgPSAnY3VyX3JlZF9kYXlfbGltaXQnLFxuICAgIGN1cl9zaGFrZV9kYXlfbGltaXQgPSAnY3VyX3NoYWtlX2RheV9saW1pdCcsXG4gICAgc2hha2VMYXN0VGltZSA9ICdzaGFrZUxhc3RUaW1lJyxcbiAgICBkYXRhQ05UID0gJ2RhdGFDTlQnLFxuICAgIHRvZGF5Q250ID0gJ3RvZGF5Q250JyxcbiAgICBsYXN0VGltZSA9ICdsYXN0VGltZScsXG59Il19 | |
2074 | +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL05hdGl2ZUFkLnRzIiwic3JjL3Nkay9QY1Nkay50cyIsInNyYy9zZGsvVFRBZFNkay50cyIsInNyYy9zZGsvVHJhY2tpbmdTZGsudHMiLCJzcmMvc2RrL21vZGVsL0Jhc2VNb2RlbC50cyIsInNyYy9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1NoYWtlTW9kZWwudHMiLCJzcmMvdWkvbGF5YU1heFVJLnRzIiwic3JjL3VpdGwvQXJyYXlVdGlscy50cyIsInNyYy91aXRsL0RhdGVVdGlscy50cyIsInNyYy91aXRsL09iamVjdEluc3RhbmNlLnRzIiwic3JjL3VpdGwvT2JqZWN0UG9vbC50cyIsInNyYy91aXRsL1NjYWxlQnV0dG9uU2NyaXB0LnRzIiwic3JjL3VpdGwvVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNWQSxnR0FBZ0c7QUFDaEcseUNBQW1DO0FBQ25DLDhEQUF3RDtBQUN4RCx5Q0FBbUM7QUFDbkMsMkNBQXFDO0FBQ3JDOztFQUVFO0FBQ0Y7SUFhSTtJQUFjLENBQUM7SUFDUixlQUFJLEdBQVg7UUFDSSxJQUFJLEdBQUcsR0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxHQUFHLENBQUMs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QUFDLGFBQWEsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtB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Q0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQzs7O09BQUE7SUFDTCxXQUFDO0FBQUQsQ0FqQkEsQUFpQkMsSUFBQTs7QUFFRCxJQUFZLE9BT1g7QUFQRCxXQUFZLE9BQU87SUFDZixrREFBdUMsQ0FBQTtJQUN2QyxzREFBMkMsQ0FBQTtJQUMzQywwQ0FBK0IsQ0FBQTtJQUMvQiw4QkFBbUIsQ0FBQTtJQUNuQixnQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBUFcsT0FBTyxHQUFQLGVBQU8sS0FBUCxlQUFPLFFBT2xCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5pbXBvcnQgVGVzdFNjZW5lIGZyb20gXCIuL1Rlc3RTY2VuZVwiXG5pbXBvcnQgU2NhbGVCdXR0b25TY3JpcHQgZnJvbSBcIi4vdWl0bC9TY2FsZUJ1dHRvblNjcmlwdFwiXG5pbXBvcnQgUmVkRHJhd2FsIGZyb20gXCIuL1JlZERyYXdhbFwiXG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTc1MDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEzMzQ7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cIlRlc3RTY2VuZS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiVGVzdFNjZW5lLnRzXCIsVGVzdFNjZW5lKTtcbiAgICAgICAgcmVnKFwidWl0bC9TY2FsZUJ1dHRvblNjcmlwdC50c1wiLFNjYWxlQnV0dG9uU2NyaXB0KTtcbiAgICAgICAgcmVnKFwiUmVkRHJhd2FsLnRzXCIsUmVkRHJhd2FsKTtcbiAgICAgICAgcmVnKFwic2RrL05hdGl2ZUFkLnRzXCIsTmF0aXZlQWQpO1xyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XHJcbmltcG9ydCBTaGFrZU1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9TaGFrZU1vZGVsXCI7XHJcbmltcG9ydCBQY1NkayBmcm9tIFwiLi9zZGsvUGNTZGtcIjtcclxuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25WID0gR2FtZUNvbmZpZy5hbGlnblY7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduSCA9IEdhbWVDb25maWcuYWxpZ25IO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdH1cclxuXHJcblx0b25Db25maWdMb2FkZWQoKTogdm9pZCB7XHJcblxyXG5cdFx0dGhpcy5pbml0RGF0YSgpO1xyXG5cdFx0Ly/liqDovb1JREXmjIflrprnmoTlnLrmma9cclxuXHRcdEdhbWVDb25maWcuc3RhcnRTY2VuZSAmJiBMYXlhLlNjZW5lLm9wZW4oR2FtZUNvbmZpZy5zdGFydFNjZW5lKTtcclxuXHR9XHJcblxyXG5cdC8qKuWIneWni+WMllNESyAqL1xyXG5cdGFzeW5jIGluaXREYXRhKCkge1xyXG5cdFx0Lyoq6ZqQ6JeP5ZCv5Yqo5bGPICovXHJcblx0XHRQY1Nkay5JLmhpZGVTcGxhc2goKVxyXG5cdFx0Lyoq5Yid5aeL5YyWYWRrIOiOt+WPlmFwcOmFjee9ruS/oeaBryAqL1xyXG5cdFx0UGNTZGsuSS5pbml0KCk7XHJcblx0XHQvKirpooTliqDovb3op4bpopEgKi9cclxuXHRcdEFkTWFuYWdlci5JLmluaXQoKTtcclxuXHRcdC8qKuiOt+WPlue6ouWMhemFjee9riDmkYfkuIDmkYcg562J6Z2Z5oCB5pWw5o2uICovXHJcblx0XHRhd2FpdCBQY1Nkay5JLmluaXRHYW1lQ29uZmlnKCk7XHJcblxyXG5cclxuXHRcdGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuaW5pdCgpXHJcblxyXG4gICAgICAgIGF3YWl0IFNoYWtlTW9kZWwuSS5pbml0KCk7XHJcblx0fVxyXG59XHJcbi8v5r+A5rS75ZCv5Yqo57G7XHJcbm5ldyBNYWluKCk7XHJcbiIsImltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL2V2ZW50L0V2ZW50RW51bVwiO1xuaW1wb3J0IFBjU2RrIGZyb20gXCIuL3Nkay9QY1Nka1wiO1xuLyoqXG4gKiDkuLvnlYzpnaIgIOmHkeW4gemHkeminVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWREcmF3YWwgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgLyoqIEBwcm9wIHtuYW1lOmNvaW5sYWIsIHRpcHM6XCLph5HluIFcIiwgdHlwZTpOb2RlfSovXG4gICAgY29pbmxhYjogTGF5YS5MYWJlbDtcbiAgICAvKiogQHByb3Age25hbWU6dGlwbGFiLCB0aXBzOlwi5o+Q56S6XCIsIHR5cGU6Tm9kZX0qL1xuICAgIHRpcGxhYjogTGF5YS5MYWJlbDtcblxuICAgIHByaXZhdGUgdG90YWxDb2luOiBudW1iZXIgPSAxMTA7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxuICAgIG9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhcigpO1xuICAgICAgICAvLyB0aGlzLnRpcGxhYi52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW5hYmxlKCkge1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLkFQUF9TSE9XLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLlVQREFURV9DT0lOLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVTdGFyKCkge1xuICAgICAgICBsZXQgY29pbiA9IGF3YWl0IFBjU2RrLkkubXlDb2luKCk7XG4gICAgICAgIHRoaXMudG90YWxDb2luID0gY29pbjtcbiAgICAgICAgdGhpcy5jb2lubGFiLnRleHQgPSAnJyArIGNvaW47XG4gICAgICAgIGxldCBzdHIgPSAn5Y+v5o+Q546wJztcbiAgICAgICAgLyoq5pu05paw5LiL5LiL5LiA5qyh5o+Q546w55qE6aKd5bqmICovXG4gICAgICAgIGxldCBuZXh0RHJhd2FsID0gYXdhaXQgIFBjU2RrLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICBpZiAodGhpcy50b3RhbENvaW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgbGVmdENvaW4gPSBuZXh0RHJhd2FsIC0gdGhpcy50b3RhbENvaW47XG4gICAgICAgICAgICBpZiAobGVmdENvaW4gPiAwKVxuICAgICAgICAgICAgICAgIHN0ciA9IGDov5jlt64keyhsZWZ0Q29pbiAvIDEwMDAwKS50b0ZpeGVkKDMpfemHkemineWPr+aPkOeOsGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aXBsYWIudGV4dCA9IHN0cjtcbiAgICAgICAgdGhpcy50aXBsYWIudmlzaWJsZSA9IEJvb2xlYW4obmV4dERyYXdhbCk7XG4gICAgfVxufSIsImltcG9ydCB7IHVpIH0gZnJvbSBcIi4vdWkvbGF5YU1heFVJXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuL3Nkay9BZE1hbmFnZXJcIjtcbmltcG9ydCBTaGFrZU1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9TaGFrZU1vZGVsXCI7XG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4vc2RrL1BjU2RrXCI7XG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCI7XG5pbXBvcnQgVXRpbCBmcm9tIFwiLi91aXRsL1V0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFNjZW5lIGV4dGVuZHMgdWkuVGVzdFNjZW5lVUkge1xuICAgIHByaXZhdGUgaXNMb25nVmlicmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvL+WFs+mXreWkmueCueinpuaOp++8jOWQpuWImeWwseaXoOaVjOS6hlxuICAgICAgICBMYXlhLk1vdXNlTWFuYWdlci5tdWx0aVRvdWNoRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tVGVzdFNjZW5lLS0tLS0tLScpXG4gICAgICAgIC8vIHRoaXMuTmF0aXZlQUQudmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgfVxuXG4gICAgb25FbmFibGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnRuU2VydmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblNlcnZlcik7XG4gICAgICAgIHRoaXMuYnRuVmlicmF0ZS5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCAoKSA9PiB7XG4gICAgICAgICAgICBQY1Nkay5JLnZpYnJhdGUodGhpcy5pc0xvbmdWaWJyYXRlID8gMCA6IDEpO1xuICAgICAgICAgICAgdGhpcy5pc0xvbmdWaWJyYXRlID0gIXRoaXMuaXNMb25nVmlicmF0ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYnRuRHJhd2FsLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblBlcnNvbmFsKTtcbiAgICAgICAgdGhpcy5idG5JbnZpdGUub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5pbnZpdGF0aW9uKTtcbiAgICAgICAgdGhpcy5idG5fc2hha2Uub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy50b3VjaFNoYWtlKTtcbiAgICAgICAgdGhpcy5idG5QcmVsb2FkQUQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkQUQpO1xuICAgICAgICB0aGlzLmJ0blNob3dCYW5uZXIub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93QmFubmVyKTtcbiAgICAgICAgdGhpcy5idG5TaG93RnVsbEFkLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Z1bGxBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd05hdGl2ZUFkLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd05hdGl2ZUFkKTtcbiAgICAgICAgdGhpcy5idG5TaG93SW50ZXJBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dJbnRlckFkKTtcbiAgICAgICAgdGhpcy5idG5SZXdhcmRBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dSZXdhcmRBZCk7XG4gICAgICAgIHRoaXMuYnRuUmVkcGFja2V0Lm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblJlZHBhY2tldCk7XG5cbiAgICAgICAgdGhpcy5idG5QcmVWaWRlby5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnByZWxvYWRSZXdhcmRBZCk7XG4gICAgICAgIHRoaXMuYnRuUHJlRnVsbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnByZWxvYWRGdWxsKTtcbiAgICAgICAgdGhpcy5idG5QcmVJbnNlcnQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkSW50ZXJBZCk7XG4gICAgICAgIHRoaXMuYnRuUHJlTmF0aXZlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZE5hdGl2ZUFkKTtcbiAgICAgICAgdGhpcy5idG5DbG9zZUJhbm5lci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLmNsb3NlQWRCYW5uZXIpO1xuICAgICAgICB0aGlzLmJ0bkNsb3NlTmF0aXZlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuY2xvc2VBZHZlckRpYWxvZyk7XG4gICAgICAgIHRoaXMuYnRuTWluV2l0aERyYXdhbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm1pbldpdGhEcmF3YWwpO1xuXG4gICAgfVxuXG4gICAgLyoq6aKE5Yqg6L295bm/5ZGKICovXG4gICAgYXN5bmMgcHJlbG9hZEFEKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tcHJlbG9hZEFELS0tLS0tLScpXG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnByZWxvYWRCYW5uZXIoKTtcbiAgICB9XG5cbiAgICBwcmVsb2FkUmV3YXJkQWQoKSB7XG4gICAgICAgIEFkTWFuYWdlci5JLnByZWxvYWRSZXdhcmRBZCgpO1xuICAgIH1cblxuICAgIHByZWxvYWRGdWxsKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5wcmVsb2FkRnVsbEFkKCk7XG4gICAgfVxuXG4gICAgcHJlbG9hZEludGVyQWQoKSB7XG4gICAgICAgIEFkTWFuYWdlci5JLnByZWxvYWRJbnRlckFkKCk7XG4gICAgfVxuXG4gICAgcHJlbG9hZE5hdGl2ZUFkKCkge1xuICAgICAgICB0aGlzLk5hdGl2ZUFELmdldENvbXBvbmVudChOYXRpdmVBZCkuaW5pdE5hdGl2ZUFkKDEpO1xuICAgIH1cblxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XG4gICAgICAgIEFkTWFuYWdlci5JLmNsb3NlQWR2ZXJEaWFsb2coKVxuICAgIH1cbiAgICBjbG9zZUFkQmFubmVyKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5jbG9zZUFkQmFubmVyKClcbiAgICB9XG5cbiAgICAvKirmmL7npLrlhajlsY/lub/lkYogKi9cbiAgICBzaG93RnVsbEFkKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2hvd0Z1bGxBZC0tLS0tLS0nKVxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93RnVsbEFkKCk7XG4gICAgfVxuICAgIC8qKuaYvuekumJhbm5lciAqL1xuICAgIHNob3dCYW5uZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93QmFubmVyLS0tLS0tLScpXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dCYW5uZXIoKTtcbiAgICB9XG5cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBzaG93TmF0aXZlQWQoKSB7XG4gICAgICAgIHRoaXMuTmF0aXZlQUQuZ2V0Q29tcG9uZW50KE5hdGl2ZUFkKS5pbml0TmF0aXZlQWQoKTtcbiAgICB9XG5cbiAgICAvKirmj5LlsY/lub/lkYogKi9cbiAgICBzaG93SW50ZXJBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dJbnRlckFkLS0tLS0tLScpXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dJbnRlckFkKCk7XG4gICAgfVxuICAgIC8qKua/gOWKseinhumikeW5v+WRiiAqL1xuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dSZXdhcmRBZC0tLS0tLS0nKVxuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKTtcbiAgICAgICAgLyoq5oiQ5Yqf5ZCO5omn6KGM5a+55bqU55qE5aWW5YqxICovXG4gICAgfVxuICAgIC8qKuaEj+ingeWPjemmiCAqL1xuICAgIG9wZW5TZXJ2ZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1vcGVuU2VydmVyLS0tLS0tLScpXG4gICAgICAgIFBjU2RrLkkuZmVlZGJhY2soKTtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuUmVkcGFja2V0KCkge1xuICAgICAgICBSZWRwYWNrZXRNb2RlbC5JLmNoZWNrUmVkcGFja2V0KClcbiAgICB9XG5cbiAgICBhc3luYyBtaW5XaXRoRHJhd2FsKCkge1xuICAgICAgICBsZXQgbW9uZXkgPSBhd2FpdCBQY1Nkay5JLm1pbldpdGhEcmF3YWwoKVxuICAgICAgICB0aGlzLm1pbldpdGhEcmF3YWxMYWIudGV4dCA9ICfmnIDkvY7mj5DnjrA6JyArIG1vbmV5O1xuICAgIH1cblxuXG4gICAgLyoq5omT5byA5Liq5Lq65Lit5b+DICovXG4gICAgb3BlblBlcnNvbmFsKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBQY1Nkay5JLnBlcnNvbmFsKDApO1xuICAgIH1cbiAgICAvKirpgoDor7flpb3lj4sgKi9cbiAgICBpbnZpdGF0aW9uKCkge1xuICAgICAgICBQY1Nkay5JLmludml0YXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxXHTph5HluIFcbiAgICAyXHTmv4DlirHop4bpopHlkI7ph5HluIFcbiAgICAzXHQ0IDUgNiA3IOa4uOaIj+S4reWvueW6lOeahOmBk+WFt1xuICAgIDhcdOepulxuICAgICAqL1xuICAgIHRvdWNoU2hha2UoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS10b3VjaFNoYWtlLS0tLS0tLScpXG4gICAgICAgIFBjU2RrLkkudmlicmF0ZSgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogMS7lm57ljrvmmJ/mmJ8g6YGT5YW3IFxuICAgICAgICAgKiAyLue6ouWMhSAgIOebtOaOpeiOt+W+l+K+puW4ge+8m+aIluiAheebtOaOpeW8uea/gOWKseinhumikeWQju+8jOiOt+W+l+K+puW4gVxuICAgICAgICAgKiAzLuaXoOmBk+WFt1xuICAgICAgICAgKiDnm7TmjqXlsZXivbDmj5LlsY9cbiAgICAgICAgICogICovXG4gICAgICAgIGxldCBkYXRhID0gU2hha2VNb2RlbC5JLmdldFNoYWtlVHlwZSgpO1xuICAgICAgICBjb25zb2xlLmxvZygn5pGH5LiA5pGH6I635Y+W57uT5p6c77yaJyArIEpTT04uc3RyaW5naWZ5KGRhdGEpKVxuICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcbiAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgLyoqICfosKLosKLlj4LkuI7vvIzkuIvmrKHlpb3ov5DvvIEnKi87XG4gICAgICAgICAgICAgICAgQWRNYW5hZ2VyLkkuc2hvd0ludGVyQWQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvaW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICB0aGlzLndhdGNoQURDb2luKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9wcyhkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFByb3BzKGRhdGEpIHtcbiAgICAgICAgbGV0IGJvb3N0ZXI7XG4gICAgICAgIGxldCByZXdhcmROdW0gPSBkYXRhLm51bTtcbiAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiDlpITnkIbmuLjmiI/kuK3nmoTpgZPlhbfmmL7npLpcbiAgICAgICAgICovXG4gICAgICAgIC8vIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAvLyAgICAgY2FzZSA0OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SZW1vdmU7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDY6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLkNoYW5nZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNTpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmVmcmVzaDtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNzpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmFuZFJlbW92ZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgMzpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuU3RhcjtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBWaWV3TWFuYWdlci5JLm9wZW5Qb3B3aW4oUmVjZWl2ZVByb3BzUG9wd2luLCBib29zdGVyLCByZXdhcmROdW0pO1xuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIOeci+W5v+WRiuiOt+W+l+e6ouWMhVxuICAgICAqL1xuICAgIGFzeW5jIHdhdGNoQURDb2luKCkge1xuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKTtcbiAgICAgICAgdGhpcy5nZXRDb2luKCk7XG4gICAgfVxuICAgIC8qKuebtOaOpeiOt+W+l+e6ouWMhSAqL1xuICAgIGdldENvaW4oKSB7XG4gICAgICAgIC8vXGLliLfmlrDmgLvph5HluIFcbiAgICAgICAgLy8gQXBwTWFuYWdlci5JLnJlZHBhY2tldC5nZXRSZXBhY2tldCgpXG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLkkub3BlblBvcHdpbihSZWRQYWNrZXRSZXdhcmQsIDIpO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi9FdmVudEVudW1cIjtcblxuLypcbiogbmFtZTtcbiovXG5leHBvcnQgY2xhc3MgRXZlbnRDZW50ZXIge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTGF5YS5FdmVudERpc3BhdGNoZXI7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0IEkoKTogTGF5YS5FdmVudERpc3BhdGNoZXIge1xuICAgICAgICB3aW5kb3dbJ2V2J10gPSB0aGlzLl9pbnN0YW5jZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBMYXlhLkV2ZW50RGlzcGF0Y2hlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBlbWl0KGV2ZW50OiBFdmVudEVudW0sIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5JLmV2ZW50KGV2ZW50LnRvU3RyaW5nKCksIGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkKHR5cGU6IEV2ZW50RW51bSwgY2FsbGVyOiBhbnksIGxpc3RlbmVyOiBGdW5jdGlvbiwgYXJncz86IEFycmF5PGFueT4pIHtcbiAgICAgICAgdGhpcy5JLm9uKHR5cGUudG9TdHJpbmcoKSwgY2FsbGVyLCBsaXN0ZW5lciwgYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmUodHlwZTogRXZlbnRFbnVtLCBjYWxsZXI6IGFueSwgbGlzdGVuZXI6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuSS5vZmYodHlwZS50b1N0cmluZygpLCBjYWxsZXIsIGxpc3RlbmVyKTtcbiAgICB9XG59IiwiZXhwb3J0IGVudW0gRXZlbnRFbnVtIHtcblxuXHRDSEVDS19SRURQQUNLRVQgPSA8YW55PidjaGVja19yZWRwYWNrZXQnLFxuXHRBUFBfU0hPVyA9IDxhbnk+J2FwcC5zaG93Jyxcblx0QVBQX0hJREUgPSA8YW55PidhcHAuaGlkZScsXG5cblxuXHRVUERBVEVfQ09JTiA9IDxhbnk+J3VwZGF0ZS5jb2luJyxcblxufSIsImltcG9ydCBUVEFkU2RrIGZyb20gXCIuL1RUQWRTZGtcIjtcclxuaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZE1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBsYXN0VmlkZW9UaW1lOiBudW1iZXI7XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWRCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZFJld2FyZEFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5zaG93UmV3YXJkVmlkZW9BZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkRnVsbEFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZEludGVyQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkTmF0aXZlQWQoKXtcclxuICAgICAgICAvLyBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmNsb3NlQWR2ZXJEaWFsb2coKVxyXG4gICAgfVxyXG4gICAgY2xvc2VBZEJhbm5lcigpIHtcclxuICAgICAgICBUVEFkU2RrLkkuY2xvc2VBZEJhbm5lcigpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd1Jld2FyZEFkKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSBhd2FpdCBUVEFkU2RrLkkuc2hvd1Jld2FyZFZpZGVvQWQoKTtcclxuICAgICAgICAgICAgdGhpcy5sYXN0VmlkZW9UaW1lID0gTGF5YS50aW1lci5jdXJyVGltZXI7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIHNob3dGdWxsQWQoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkRnVsbEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlckFkKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSBhd2FpdCBUVEFkU2RrLkkuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkSW50ZXJBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjaGVja1ZpZGVvSW5DZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VmlkZW9UaW1lICYmIChMYXlhLnRpbWVyLmN1cnJUaW1lciAtIHRoaXMubGFzdFZpZGVvVGltZSA8PSAzMDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Jhbm5lcigpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEJhbm5lckV4cHJlc3NBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG4gICAgc2hvd05hdGl2ZUFkKHgsIHksIHcsIGgscHJlbG9hZD0wKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWROYXRpdmVFeHByZXNzQWQoeCwgeSwgdywgaCxwcmVsb2FkKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHN0YXRpYyBnZXQgSSgpOiBBZE1hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoQWRNYW5hZ2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9BZE1hbmFnZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQWQgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG5cbiAgIHB1YmxpYyBpbml0TmF0aXZlQWQocHJlbG9hZD0wKXtcbiAgICAgICAgbGV0IGdsb2JhbFBvaW50ID0gdGhpcy5pdGVtLmxvY2FsVG9HbG9iYWwoTGF5YS5Qb2ludC5FTVBUWSwgdHJ1ZSk7XG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dOYXRpdmVBZChnbG9iYWxQb2ludC54LCBnbG9iYWxQb2ludC55LCB0aGlzLml0ZW0ud2lkdGgsIHRoaXMuaXRlbS5oZWlnaHQscHJlbG9hZCk7XG4gICAgfVxuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgIHRoaXMuaW5pdE5hdGl2ZUFkKCk7ICAgXG4gICAgfVxuXG4gICAgb25EaXNhYmxlKCk6IHZvaWQge1xuICAgICAgICBBZE1hbmFnZXIuSS5jbG9zZUFkdmVyRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBMYXlhLlZpZXcge1xuICAgICAgICByZXR1cm4gdGhpcy5vd25lciBhcyBhbnk7XG4gICAgfVxufSIsImltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuaW1wb3J0IHsgRXZlbnRDZW50ZXIgfSBmcm9tIFwiLi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuLi9ldmVudC9FdmVudEVudW1cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGNTZGsge1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfY2hhbm5lbDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcbiAgICBwcml2YXRlIF9sZXZlbDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2dhbWVDb25maWc6IG51bWJlcjtcblxuICAgIHB1YmxpYyBwYW5nb2xpbklkOiBzdHJpbmc7XG4gICAgcHVibGljIGFkbmV0SWQ6IHN0cmluZztcblxuICAgIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtSW5mbygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IG15QnJpZGdlKCkge1xuICAgICAgICBpZiAoTXlCcmlkZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBNeUJyaWRnZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICAvKirojrflj5bln7rmnKzniYjmnKzkv6Hmga/ku6Xlj4rmiYvmnLrnmoTphY3nva4gKi9cbiAgICBwcml2YXRlIGdldFN5c3RlbUluZm8oa2V5OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGxldCByZXQgPSB0aGlzLm15QnJpZGdlLmdldFN5c3RlbUluZm8oa2V5KTtcbiAgICAgICAgbGV0IHsgdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWwgfSA9IEpTT04ucGFyc2UocmV0KTtcbiAgICAgICAgW3RoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQsIHRoaXMuX3ZlcnNpb24sXG4gICAgICAgIHRoaXMuX2NoYW5uZWwsIHRoaXMucGFuZ29saW5JZCxcbiAgICAgICAgdGhpcy5hZG5ldElkLCB0aGlzLl9sZXZlbF0gPSBbdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWxdO1xuICAgIH1cblxuICAgIGluaXRHYW1lQ29uZmlnKCkge1xuICAgICAgICB0aGlzLl9nYW1lQ29uZmlnID0gdGhpcy5nZXRHYW1lQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6ZyH5YqoXG4gICAgICogQHBhcmFtIGtleSAwIOefremch+WKqCAxIOmVv+mch+WKqFxuICAgICAqL1xuICAgIHZpYnJhdGUoa2V5OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uub3BlblN5c3RlbUZ1bihrZXkpO1xuICAgIH1cblxuICAgIC8qKumakOiXj+WQr+WKqOWxjyAqL1xuICAgIGhpZGVTcGxhc2goKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuaGlkZVNwbGFzaCgpO1xuICAgIH1cblxuICAgIC8qKuW8ueWHuuaPkOeOsCAqL1xuICAgIHdpdGhEcmF3YWwoKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uud2l0aERyYXdhbCgpO1xuICAgIH1cbiAgICAvKirmhI/op4Hlj43ppoggKi9cbiAgICBmZWVkYmFjaygpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5mZWVkYmFjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBrZXkg6buY6K6kMCDvvIznrb7liLAgMVxuICAgICAqL1xuICAgIHBlcnNvbmFsKGtleSA9IDApIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5wZXJzb25hbChrZXkpO1xuICAgIH1cbiAgICAvKirpgoDor7flpb3lj4sqL1xuICAgIGludml0YXRpb24oKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuaW52aXRhdGlvbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDojrflj5bph5HluIHphY3ooahcbiAgICAgKiBAcGFyYW0ga2V5IDHnuqLljIUgICAyIOaRh+S4gOaRh+e6ouWMhVxuICAgICAqL1xuICAgIGdldEdhbWVDb25maWcoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm15QnJpZGdlLmdldEdhbWVDb25maWcoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLWdldEdhbWVDb25maWctLS0tLS0tJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIOimgeaxguWPkeaUvumHkeW4gVxuICAgICAqIEBwYXJhbSBrZXkgMee6ouWMhVxuICAgICAqL1xuICAgIGFzeW5jIGFkZEdvbGQoa2V5KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubXlCcmlkZ2UuYWRkR29sZChrZXksIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtc2cgfSA9IHJlcztcbiAgICAgICAgICAgICAgICBpZiAoJzAnID09PSBjb2RlIHx8ICFjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgLyoq6I635Y+W5oC76YeR5biBICovXG4gICAgYXN5bmMgbXlDb2luKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm15QnJpZGdlLm15Q29pbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgZGF0YSwgbXNnIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSB8fCAhY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGFbJ2NvaW4nXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIC8qKuiOt+WPluW9k+WJjeaPkOeOsOeahOaho+S9jSAqL1xuICAgIGFzeW5jIG1pbldpdGhEcmF3YWwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubXlCcmlkZ2UubWluV2l0aERyYXdhbChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgZGF0YSwgbXNnIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSB8fCAhY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGFbJ21vbmV5J10pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoq5LiK5oql5Z+L54K5ICovXG4gICAgYXBwRG90TG9nKGtleTogc3RyaW5nLCB2YWx1ZT8pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5hcHBEb3RMb2coa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKueDreS6keaJk+eCuSAqL1xuICAgIGFwcERvdFRyYWNLaW5nKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuYXBwRG90VHJhY0tpbmcoa2V5KTtcbiAgICB9XG5cbiAgICBzZXRDYWxsYmFjayhmdW5OYW1lOiBzdHJpbmcsIHByYW1hcz86IGFueSkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2V0Q2FsbGJhY2stLS0tIHRoaXMubXlCcmlkZ2UtLS0nICsgSlNPTi5zdHJpbmdpZnkodGhpcy5teUJyaWRnZSkpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm15QnJpZGdlW2Z1bk5hbWVdKHByYW1hcywgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgeyBjb2RlLCBkYXRhIH0gPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuY2xvc2VBZHZlckRpYWxvZygpO1xuICAgIH1cbiAgICBjbG9zZUFkQmFubmVyKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmNsb3NlQWRCYW5uZXIoKTtcbiAgICB9XG4gICAgLyoq5r+A5Yqx6KeG6aKRICovXG4gICAgc2hvd1Jld2FyZFZpZGVvQWQodmFsdWU6IElWaWRlbywgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5zaG93UmV3YXJkVmlkZW9BZCh2YWx1ZSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLyoqIOWFqOWxj+W5v+WRiiovXG4gICAgbG9hZEZ1bGxTY3JlZW5WaWRlb0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5zaG93UmV3YXJkVmlkZW9BZChkYXRhLCBKQkNhbGxiYWNrKVxuICAgIH1cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBsb2FkTmF0aXZlRXhwcmVzc0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5sb2FkTmF0aXZlRXhwcmVzc0FkKGRhdGEsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKmJhbm5lciAqL1xuICAgIGxvYWRCYW5uZXJFeHByZXNzQWQoZGF0YTogYW55LCBKQkNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmxvYWRCYW5uZXJFeHByZXNzQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLyoq5o+S5bGP5bm/5ZGKICovXG4gICAgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5zaG93SW50ZXJhY3Rpb25FeHByZXNzQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG5cbiAgICBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgICB9XG4gICAgZ2V0IHdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0IGhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICB9XG5cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgfVxuXG4gICAgZ2V0IGNoYW5uZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYnJpZGdlKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZ2FtZUNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dhbWVDb25maWc7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgSSgpOiBQY1NkayB7XG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoUGNTZGspO1xuICAgIH1cbn1cbi8vICAgICAvL+i/memHjOaYr+a1j+iniOWZqOeOr+Wig+S4i++8jCDmjqXmlLZ3ZWLkvKDov4fmnaXnmoTmtojmga9cbndpbmRvdy5vbk15QnJpZGdlUmVhZHkgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJvbk15QnJpZGdlUmVhZHkgbG9hZCBmaW5pc2gsIGNvc3Q6XCIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkpICsgXCJtc1wiKTtcbiAgICBNeUJyaWRnZS5BcHAub25SZXN1bWUgPSAoLi4ucmV0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcgICAgIGxheWEgb25SZXN1bWUnLCByZXQpXG4gICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLkFQUF9TSE9XKTtcbiAgICB9XG4gICAgTXlCcmlkZ2UuQXBwLm9uUGF1c2UgPSAoLi4ucmV0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcgICAgbGF5YSBvblBhdXNlJywgcmV0KVxuICAgICAgICBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5BUFBfSElERSk7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgSVZpZGVvIHtcbiAgICBwcmVsb2FkaW5nOiBudW1iZXIsXG4gICAgdHlwZTogbnVtYmVyLFxufSIsImltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4vUGNTZGtcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRUQWRTZGsge1xyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBwcmVsb2FkICAwIOebtOaOpeWKoOi9ve+8mzEg6aKE5Yqg6L29XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNob3dSZXdhcmRWaWRlb0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdHlwZTogMSxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgUGNTZGsuSS5zaG93UmV3YXJkVmlkZW9BZChkYXRhLCByZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgbWVzc2FnZSB9ID0gSlNPTi5wYXJzZShyZXQpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC8qKifmmoLml6Dop4bpopHlub/lkYrvvIHmr4/ml6Uw54K56YeN572uJyovO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIwMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ3VuQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRGdWxsU2NyZWVuVmlkZW9BZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IFBjU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IFBjU2RrLkkud2lkdGggKiA5MCAvIDYwMCxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogMCxcclxuICAgICAgICAgICAgdHlwZTogMVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBQY1Nkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZChKU09OLnN0cmluZ2lmeShkYXRhKSxyZXM9PntcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZE5hdGl2ZUV4cHJlc3NBZCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0eXBlID0gMSwgcHJlbG9hZDogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIGxldCBzY2FsZVggPSBQY1Nkay5JLndpZHRoIC8gTGF5YS5zdGFnZS53aWR0aDtcclxuICAgICAgICBsZXQgc2NhbGVZID0gUGNTZGsuSS5oZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICAgICAgdzogd2lkdGggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgIGg6IGhlaWdodCAqIHNjYWxlWSxcclxuICAgICAgICAgICAgbGVmdDogeCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgdG9wOiB5ICogc2NhbGVZXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFBjU2RrLkkubG9hZE5hdGl2ZUV4cHJlc3NBZChKU09OLnN0cmluZ2lmeShkYXRhKSxyZXM9PntcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEJhbm5lckV4cHJlc3NBZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IFBjU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IFBjU2RrLkkud2lkdGggKiA5MCAvIDYwMCxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICAgICAgdHlwZTogMVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBQY1Nkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoSlNPTi5zdHJpbmdpZnkoZGF0YSkscmVzPT57XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XHJcbiAgICAgICAgUGNTZGsuSS5jbG9zZUFkdmVyRGlhbG9nKCk7XHJcbiAgICB9XHJcbiAgICBjbG9zZUFkQmFubmVyKCkge1xyXG4gICAgICAgIFBjU2RrLkkuY2xvc2VBZEJhbm5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IFBjU2RrLkkud2lkdGggKiAwLjgsXHJcbiAgICAgICAgICAgIGg6IFBjU2RrLkkuaGVpZ2h0LFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBQY1Nkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChKU09OLnN0cmluZ2lmeShkYXRhKSxyZXM9PntcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRUQWRTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVFRBZFNkaykgYXMgVFRBZFNkaztcclxuICAgIH1cclxufSIsImltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4vUGNTZGtcIjtcclxuLyoqXHJcbiAqIOS4iuaKpeeDreS6keWfi+eCueK9h+W/l1xyXG4gKiDlhbfkvZPnmoTmiZPngrnpnIDopoHot5/ov5DokKXogZTns7tcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRyYWNraW5nU2RrIHtcclxuICAgIGRvdChrZXk6IHN0cmluZykge1xyXG4gICAgICAgIFBjU2RrLkkuYXBwRG90VHJhY0tpbmcoa2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVHJhY2tpbmdTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVHJhY2tpbmdTZGspIGFzIFRyYWNraW5nU2RrO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcmFja2luZ0tleSB7XHJcbiAgICBSZWRQYWNrMSA9ICdldmVudF81JyxcclxuICAgIFJlZFBhY2s1ID0gJ2V2ZW50XzYnXHJcbn1cclxuIiwiaW1wb3J0IEFycmF5VXRpbHMgZnJvbSBcIi4uLy4uL3VpdGwvQXJyYXlVdGlsc1wiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNb2RlbCB7XG4gICAgcHJvdGVjdGVkIF9kYXRhOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHVwZGF0ZUFycjogQXJyYXk8RnVuY3Rpb24+ID0gW107XG4gICAgcHJpdmF0ZSBrZXlVcGRhdGVBcnI6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZShkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RhdGEsXG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmtleVVwZGF0ZUFycikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICAgICBhcnIgJiYgYXJyLmZvckVhY2goZnVuYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdEZvcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2RhdGFba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYiA9IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmVXBkYXRlKGNiLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoY2IsIGtleSwgdHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlKGZ1bmM6IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcsIHJ1bjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgcnVuICYmIHZhbHVlICE9IG51bGwgJiYgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICFhcnIgJiYgKHRoaXMua2V5VXBkYXRlQXJyW2tleV0gPSBhcnIgPSBbXSk7XG4gICAgICAgICAgICBhcnIucHVzaChmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1biAmJiBmdW5jKHRoaXMuX2RhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBcnIucHVzaChmdW5jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvZmZVcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZykge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy5rZXlVcGRhdGVBcnJba2V5XSwgZnVuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy51cGRhdGVBcnIsIGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyR2FtZSgpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi4vLi4vc2RrL0FkTWFuYWdlclwiO1xuaW1wb3J0IFRlYVNkaywgeyBEb3RLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RlYVNka1wiO1xuaW1wb3J0IFRyYWNraW5nU2RrLCB7IFRyYWNraW5nS2V5IH0gZnJvbSBcIi4uLy4uL3Nkay9UcmFja2luZ1Nka1wiO1xuaW1wb3J0IERhdGVVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9EYXRlVXRpbHNcIjtcbmltcG9ydCBVdGlsLCB7IERhdGFLZXkgfSBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRFbnVtXCI7XG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4uL1BjU2RrXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHBhY2tldE1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBwcml2YXRlIE1BWCA9IDIwO1xuICAgIC8qKuW9k+WkqemihuWPlue6ouWMheeahOacgOWkp+asoeaVsCAqL1xuICAgIHByaXZhdGUgREFZX01BWF9DTlQgPSA1MDtcbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwdWJsaWMgY3VyUmVkcGFja2V0OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25mTGVuOiBudW1iZXIgPSAwO1xuXG4gICAgLyoq5Yid5aeL5YyW57qi5YyF6YWN572uICovXG4gICAgYXN5bmMgaW5pdCgpIHtcblxuICAgICAgICBsZXQgYXJyID0gYXdhaXQgdGhpcy5nZXRSZWRDb25maWcoKTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVJlZHBhY2tldE1vZGVsLS0tLS0tLScgKyBKU09OLnN0cmluZ2lmeShhcnIpKVxuICAgICAgICBsZXQgY2FzaCA9IDA7XG4gICAgICAgIHRoaXMuY29uZiA9IHt9O1xuICAgICAgICBhcnIuZm9yRWFjaChjb25mRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZbY29uZkRhdGEuaWRdID0gY29uZkRhdGE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoKSk7XG4gICAgICAgIHRoaXMuY29uZkxlbiA9IHRoaXMuY29uZi5sZW5ndGg7XG5cbiAgICB9XG5cblxuXG4gICAgaW5pdERhdGEoKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFJlZHBhY2tldERhdGE7XG4gICAgICAgIGxldCBsYXN0VGltZSA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkubGFzdFRpbWUpIHx8ICcwJztcbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcblxuICAgICAgICBsZXQgbGFzdCA9IERhdGVVdGlscy50aW1lRGF5KGRhdGEubGFzdFRpbWUpO1xuICAgICAgICBsZXQgdG9kYXkgPSBEYXRlVXRpbHMudG9kYXk7XG4gICAgICAgIGlmIChsYXN0ICE9IHRvZGF5KSB7XG4gICAgICAgICAgICBkYXRhLnRvZGF5Q250ID0gMDtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZVV0aWxzLm5vd1RpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkubGFzdFRpbWUsIGxhc3RUaW1lKVxuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS50b2RheUNudCwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgdG9kYXlDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LnRvZGF5Q250KSB8fCAnMCc7XG4gICAgICAgICAgICBkYXRhLnRvZGF5Q250ID0gcGFyc2VJbnQodG9kYXlDbnQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEubGFzdFRpbWUgPSBwYXJzZUludChsYXN0VGltZSk7XG4gICAgICAgIGxldCBkYXRhQ250ID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5kYXRhQ05UKSB8fCAnMCc7XG4gICAgICAgIGRhdGEuY250ID0gcGFyc2VJbnQoZGF0YUNudCk7XG4gICAgICAgIGRhdGEubGlzdCA9IFtdO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cblxuICAgIGFzeW5jIGdldFJlZENvbmZpZygpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFBjU2RrLkkuZ2FtZUNvbmZpZztcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLSDojrflj5bphY3nva7pnZnmgIHooagtLS0tLScgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgY29uZmlnSnNvbiA9IGF3YWl0IHRoaXMubG9hZEdvbGRDZmcocmVzdWx0Wydjb2luX2NvbmZpZyddWzBdKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tIOiOt+WPlue6ouWMhemdmeaAgeihqC0tLS0tJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFBjU2RrLkkuaW5pdEdhbWVDb25maWcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBsb2FkR29sZENmZyhyZXM6IHN0cmluZykge1xuICAgICAgICBsZXQgY29uZmlnSnNvbiA9IGF3YWl0IHRoaXMubG9hZChyZXMpO1xuICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcbiAgICB9XG5cbiAgICBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBjaGVja1JlZHBhY2tldCgpIHtcblxuICAgICAgICBpZiAodGhpcy5kYXRhLnRvZGF5Q250ID49IHRoaXMuREFZX01BWF9DTlQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKEFkTWFuYWdlci5JLmNoZWNrVmlkZW9JbkNkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLyoq57qi5YyF6I635Y+W5ZCO5rKh5pyJ55yL5bm/5ZGK6aKG5Y+W77yM5YaN5qyh6I635b6X57qi5YyF55qE5py65Lya77yM5LiN5Lya6I635Y+W57qi5YyF77yMIOiHquW3seS5n+WPr+S7peWkhOeQhuaIkCDlr7nlupTnmoTnuqLljIXmj5DphpLmiJbkuI3pnIDopoHov5nph4znmoTliKTmlq0gKi9cbiAgICAgICAgaWYgKHRoaXMuY3VyUmVkcGFja2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5kYXRhLmNudCkgdGhpcy5kYXRhLmNudCA9IDA7XG4gICAgICAgIGxldCBjbnQgPSB0aGlzLmRhdGEuY250O1xuICAgICAgICBpZiAoY250ID49IHRoaXMuY29uZkxlbikgY250ID0gdGhpcy5jb25mTGVuIC0gMTtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZbY250ICsgMV07XG4gICAgICAgIGxldCByYW4yID0gTWF0aC5yYW5kb20oKTtcblxuICAgICAgICBpZiAoZGF0YSAmJiByYW4yIDwgZGF0YS5wZXIpIHtcbiAgICAgICAgICAgIGxldCBjYXNoID0gMC4wMDAwMDE7XG4gICAgICAgICAgICB0aGlzLmN1clJlZHBhY2tldCA9IGNhc2g7XG4gICAgICAgICAgICAvLyoq5by55Ye657qi5YyF55qE55WM6Z2iLCAg5pqC5pe25aSE55CG5oiQIOebtOaOpeeci+W5v+WRiuiOt+WPlumHkeW4gSAqL1xuICAgICAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0g6Kem5Y+R5LqG57qi5YyFLS0tLS0nKVxuICAgICAgICAgICAgdGhpcy5nZXRSZXBhY2tldCgpXG4gICAgICAgICAgICAvKirmm7TmlrDln7rmnKzmmL7npLogKi9cbiAgICAgICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLlVQREFURV9DT0lOKTtcblxuICAgICAgICAgICAgLyoqKiAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldFJlcGFja2V0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VyUmVkcGFja2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuZGF0YS5jbnQgKz0gMTtcbiAgICAgICAgdGhpcy5kYXRhLmxpc3QucHVzaCh0aGlzLmN1clJlZHBhY2tldCk7XG4gICAgICAgIHRoaXMuZGF0YS5sYXN0VGltZSA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpO1xuICAgICAgICB0aGlzLmRhdGEudG9kYXlDbnQgKz0gMTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gMSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2sxKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gNSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2s1KTtcbiAgICAgICAgdGhpcy5jdXJSZWRwYWNrZXQgPSAwO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmRhdGFDTlQsIHRoaXMuZGF0YS5jbnQpO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCB0aGlzLmRhdGEudG9kYXlDbnQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqICovXG4gICAgYXN5bmMgZ2V0Q3VyUmVkcGFja2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJSZWRwYWNrZXQ7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogUmVkcGFja2V0RGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICAvKirojrflj5bmgLvlhbHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBnZXRUb3RhbENvaW4oKSB7XG4gICAgICAgIGxldCB0b3RhbENvaW4gPSBhd2FpdCBQY1Nkay5JLm15Q29pbigpO1xuICAgICAgICByZXR1cm4gdG90YWxDb2luO1xuICAgIH1cbiAgICAvKirojrflj5bmnKzmrKHlpZblirHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBhZGRDb2luKGtleTogbnVtYmVyID0gMSkge1xuICAgICAgICBsZXQgY29pbkRhdGEgPSBhd2FpdCBQY1Nkay5JLmFkZEdvbGQoa2V5KTtcbiAgICAgICAgcmV0dXJuIGNvaW5EYXRhWydjb2luJ107XG4gICAgfVxuXG4gICAgLyoq6I635Y+W5pyA5L2O5o+Q5qGjICovXG4gICAgYXN5bmMgIG1pbldpdGhEcmF3YWwoKSB7XG4gICAgICAgIGxldCBtaW5Db2luID0gYXdhaXQgUGNTZGsuSS5taW5XaXRoRHJhd2FsKCk7XG4gICAgICAgIHJldHVybiBtaW5Db2luO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IEkoKTogUmVkcGFja2V0TW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFJlZHBhY2tldE1vZGVsKSBhcyBSZWRwYWNrZXRNb2RlbDtcbiAgICB9XG59XG5cbmNsYXNzIFJlZHBhY2tldERhdGEge1xuICAgIGNudDogbnVtYmVyO1xuICAgIGxpc3Q6IEFycmF5PG51bWJlcj47XG4gICAgbGFzdFRpbWU6IG51bWJlcjtcbiAgICB0b2RheUNudDogbnVtYmVyO1xufVxuXG5jbGFzcyBSZWRwYWNrZXRDb25maWdEYXRhIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHBlcjogbnVtYmVyO1xuICAgIGNhc2g6IG51bWJlcjtcbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IERhdGVVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9EYXRlVXRpbHNcIjtcbmltcG9ydCBVdGlsLCB7IERhdGFLZXkgfSBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCBQY1NkayBmcm9tIFwiLi4vUGNTZGtcIjtcblxuLyoqXG4gKiBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2VNb2RlbCBleHRlbmRzIEJhc2VNb2RlbCB7XG5cbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwcml2YXRlIGVsZVByb2JhYmlsaXR5QXJyOiBudW1iZXJbXSA9IFtdO1xuICAgIHByaXZhdGUgdG90YWxXZWlnaHQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBwcm9BcnJMZW46IG51bWJlciA9IDA7XG4gICAgLyoq57qi5YyF5Ye6546w55qE5oC75qyh5pWw5q+P5pelICovXG4gICAgcHJpdmF0ZSByZWRfZGF5X2xpbWl0OiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgY3VyX3JlZF9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG4gICAgLyoq5pGH5LiA5pGH5Ye6546w55qE5oC75qyh5pWwICovXG4gICAgcHJpdmF0ZSBzaGFrZV9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG5cbiAgICBwcml2YXRlIGN1cl9zaGFrZV9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG5cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gUGNTZGsuSS5nYW1lQ29uZmlnOztcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVNoYWtlTW9kZWwtLSDojrflj5bmkYfkuIDmkYfpnZnmgIHooagtLS0tLScgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICBpZiAocmVzdWx0Wydjb25maWcnXSkge1xuICAgICAgICAgICAgbGV0IGdhbWVEYXRhID0gcmVzdWx0Wydjb25maWcnXTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoZ2FtZURhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREYXRhKGdhbWVEYXRhKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFNoYWtlRGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lKSB8fCAnMCc7XG4gICAgICAgIGxldCBsdCA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGxhc3QgPSBEYXRlVXRpbHMudGltZURheShsdCk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcblxuICAgICAgICBpZiAobGFzdCAhPSB0b2RheSkge1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCAwKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQsIDApO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lLCBsYXN0VGltZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjdXJfcmVkX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQpIHx8ICcwJztcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSBwYXJzZUludChjdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICBsZXQgY3VyX3NoYWtlX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3NoYWtlX2RheV9saW1pdCkgfHwgJzAnO1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gcGFyc2VJbnQoY3VyX3NoYWtlX2RheV9saW1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmNvbmZpZyA9IGdhbWVEYXRhWydjb25maWcnXTtcbiAgICAgICAgZ2FtZURhdGFbJ3NoYWtlJ10uZm9yRWFjaChlbGUgPT4ge1xuICAgICAgICAgICAgZGF0YS5zaGFrZVdlaWdodExpc3QucHVzaChlbGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25mID0gW107XG4gICAgICAgIHRoaXMuY29uZiA9IGRhdGEuc2hha2VXZWlnaHRMaXN0O1xuICAgICAgICB0aGlzLmluaXRQcm9iYWJpbGl0eSgpO1xuICAgICAgICB0aGlzLnNoYWtlX2RheV9saW1pdCA9IGRhdGEuY29uZmlnLnNoYWtlX2RheV9saW1pdDtcbiAgICAgICAgdGhpcy5yZWRfZGF5X2xpbWl0ID0gZGF0YS5jb25maWcucmVkX2RheV9saW1pdDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaW5pdFByb2JhYmlsaXR5KCkge1xuICAgICAgICB0aGlzLnRvdGFsV2VpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5jb25mLmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG90YWxXZWlnaHQgKz0gZWxlLndlaWdodDtcbiAgICAgICAgICAgIGxldCBpdGVtVyA9IGVsZS53ZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKVxuICAgICAgICAgICAgICAgIGl0ZW1XICs9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnJbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIgPSBbLi4udGhpcy5lbGVQcm9iYWJpbGl0eUFyciwgaXRlbVddO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLnByb0FyckxlbiA9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIubGVuZ3RoO1xuXG4gICAgfVxuXG4gICAgZ2V0U2hha2VUeXBlKCkge1xuICAgICAgICArK3RoaXMuY3VyX3NoYWtlX2RheV9saW1pdDtcbiAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPiB0aGlzLnNoYWtlX2RheV9saW1pdCkge1xuICAgICAgICAgICAgLyoqJ+asoeaVsOi+vuWIsOS4iumZkO+8jOivt+aYjuWkqeWGjeadpSovXG5cbiAgICAgICAgICAgIC8qKuWcqOatpOWkhOWPr+S7peW8ueahhuetieWkhOeQhiAqL1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByYW4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnRvdGFsV2VpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucHJvQXJyTGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmVsZVByb2JhYmlsaXR5QXJyW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChlbGUgPj0gcmFuKSB7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IGluZGV4IHx8IDEgPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICsrdGhpcy5jdXJfcmVkX2RheV9saW1pdDtcbiAgICAgICAgICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCwgdGhpcy5jdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cl9yZWRfZGF5X2xpbWl0ID4gdGhpcy5yZWRfZGF5X2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogU2hha2VEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBJKCk6IFNoYWtlTW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFNoYWtlTW9kZWwpIGFzIFNoYWtlTW9kZWw7XG4gICAgfVxufVxuXG5cbmNsYXNzIFNoYWtlRGF0YSB7XG4gICAgY29uZmlnOiBTaGFrZUNvbmZpZztcbiAgICBzaGFrZVdlaWdodExpc3Q6IFNoYWtlV2VpZ2h0RGF0YVtdID0gW107XG59XG5pbnRlcmZhY2UgU2hha2VDb25maWcge1xuICAgIHJlZF9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBzaGFrZV9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBpbnRlcnN0aXRpYWxfY250OiBudW1iZXIsXG4gICAgaW50ZXJzdGl0aWFsX2RlbGF5OiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFNoYWtlV2VpZ2h0RGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgd2VpZ2h0OiBudW1iZXI7XG4gICAgbnVtOiBudW1iZXI7XG59XG5cblxuIiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXG5pbXBvcnQgVmlldz1MYXlhLlZpZXc7XHJcbmltcG9ydCBEaWFsb2c9TGF5YS5EaWFsb2c7XHJcbmltcG9ydCBTY2VuZT1MYXlhLlNjZW5lO1xudmFyIFJFRzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XG5leHBvcnQgbW9kdWxlIHVpIHtcclxuICAgIGV4cG9ydCBjbGFzcyBUZXN0U2NlbmVVSSBleHRlbmRzIFNjZW5lIHtcclxuXHRcdHB1YmxpYyBidG5JbnZpdGU6TGF5YS5TcHJpdGU7XG5cdFx0cHVibGljIGJ0blNlcnZlcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuVmlicmF0ZTpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuX3NoYWtlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5EcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZWxvYWRBRDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Jhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Z1bGxBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd05hdGl2ZUFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93SW50ZXJBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmV3YXJkQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blJlZHBhY2tldDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUHJlTmF0aXZlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5QcmVGdWxsOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5QcmVJbnNlcnQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZVZpZGVvOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5DbG9zZU5hdGl2ZTpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuQ2xvc2VCYW5uZXI6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0bk1pbldpdGhEcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIG1pbldpdGhEcmF3YWxMYWI6TGF5YS5MYWJlbDtcblx0XHRwdWJsaWMgTmF0aXZlQUQ6VmlldztcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTY2VuZShcIlRlc3RTY2VuZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5UZXN0U2NlbmVVSVwiLFRlc3RTY2VuZVVJKTtcclxufVxyIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJyYXlVdGlscyB7XG4gICAgLyoqXG4gICAgICog56e76Zmk5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUZyb21BcnIoYXJyOiBBcnJheTxhbnk+LCBvYmo6IGFueSkge1xuICAgICAgICBsZXQgaW5kZXggPSBhcnIuaW5kZXhPZihvYmopO1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tRnJvbUFycihhcnI6IEFycmF5PGFueT4pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBhcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOe7hOmaj+acuuaOkuW6j1xuICAgICAqL1xuICAgIHN0YXRpYyBzaHVmZmxlKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICByZXR1cm4gYXJyLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mKGFyciwgY2FsbGJhY2ssIGN0eD8pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGN0eCwgdGhpc1tpXSwgaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBlYWNoKGFyciwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBhcnJbaV0sIGksIGFycikpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcXVldWUoYXJyKSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBwcm9taXNlIG9mIGFycikge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgcHJvbWlzZShyZXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQXJyYXkoYXJyLCBjb3VudCkge1xuICAgICAgICBsZXQgc2h1ZmZsZWQgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIGxldCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBsZXQgbWluID0gbGVuIC0gY291bnQsIHRlbXAsIGluZGV4O1xuICAgICAgICB3aGlsZSAobGVuLS0gPiBtaW4pIHtcbiAgICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcigobGVuICsgMSkgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIHRlbXAgPSBzaHVmZmxlZFtpbmRleF07XG4gICAgICAgICAgICBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtsZW5dO1xuICAgICAgICAgICAgc2h1ZmZsZWRbbGVuXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKG1pbik7XG4gICAgfVxufSIsIi8qKlxuICog5pel5pyf5bel5YW357G7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVVdGlscyB7XG4gICAgc3RhdGljIGdldCBub3coKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5ub3dUaW1lIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBub3dUaW1lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvZGF5KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGhpcy5ub3dUaW1lKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyB0aW1lRGF5KHRpbWVOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGltZU51bSk7XG4gICAgICAgIGxldCB5ZWFyID0gdGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbW9udGggPSB0aW1lLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBsZXQgZGF0ZSA9IHRpbWUuZ2V0RGF0ZSgpO1xuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHt0aGlzLmFkZChtb250aCl9LSR7dGhpcy5hZGQoZGF0ZSl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7np5LmlbDmoLzlvI/ljJblrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gc2Vjb25kIOenkuaVsFxuICAgICAqIEBwYXJhbSB0eXBlIDE6MDA6MDA6MDAgICAyOnl5eXktbW0tZGQgaDptOnMgICAgMzowMDowMCAgIDQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgICogQHJldHVyblxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZChzZWNvbmQ6IG51bWJlciwgdHlwZTogbnVtYmVyID0gMSk6IHN0cmluZyB7XG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQwKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDEoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMihzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQzKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gMDogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDAodDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gNjApO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcih0ICUgNjApO1xuICAgICAgICB2YXIgbWluczogc3RyaW5nO1xuICAgICAgICB2YXIgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbnMgKyBcIjpcIiArIHNlbnM7XG4gICAgfVxuXG4gICAgLy8xOiAwMDowMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMSh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhvdXJzdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMzYwMCk7XG4gICAgICAgIGxldCBob3Vyczogc3RyaW5nO1xuICAgICAgICBsZXQgZGF5ID0gJyc7XG4gICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgaG91cnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91cnN0IDwgMTApXG4gICAgICAgICAgICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzdDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBoID0gaG91cnN0ICUgMjQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA+PSAyNCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcihob3Vyc3QgLyAyNCkgKyAnZCAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgbGV0IHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgbGV0IG1pbnM6IHN0cmluZztcbiAgICAgICAgbGV0IHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXkgKyBob3VycyArIFwiOlwiICsgbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzM6IDAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQzKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzI6eXl5eS1tbS1kZCBoOm06c1xuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB2YXIgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IFx0Ly/ov5Tlm57nmoTmnIjku73ku44wLTEx77ybXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgaG91cnM6IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBzZWNvbmQ6IG51bWJlciA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRheSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIG1pbnV0ZSArIFwiOlwiICsgc2Vjb25kO1xuXG4gICAgfVxuXG4gICAgLy80Onh45aSp5YmN77yMeHjlsI/ml7bliY3vvIx4eOWIhumSn+WJjVxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kNCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgdCA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xuICAgICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0ID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0IC8gMjQpICsgXCLlpKnliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgXCLlsI/ml7bliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWUgLyA2MCkgKyBcIuWIhumSn+WJjVwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ1KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIOavj+S4quaXtumXtOWNleS9jeaJgOWvueW6lOeahOenkuaVsFxuICAgICAgICB2YXIgb25lRGF5OiBudW1iZXIgPSAzNjAwICogMjQ7XG4gICAgICAgIHZhciBvbmVIb3Vyc3Q6IG51bWJlciA9IDM2MDA7XG4gICAgICAgIHZhciBvbmVNaW5zdDogbnVtYmVyID0gNjA7XG5cbiAgICAgICAgdmFyIGRheXMgPSBNYXRoLmZsb29yKHRpbWUgLyBvbmVEYXkpO1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgLyBvbmVIb3Vyc3QpXG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgLyBvbmVNaW5zdCkgIC8vTWF0aC5mbG9vcih0aW1lICUgb25lRGF5ICUgb25lSG91cnN0IC8gb25lTWluc3QpO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgJSBvbmVNaW5zdCkgLy90aW1lO1xuXG4gICAgICAgIHZhciBkYXlzczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIGhvdXJzczogc3RyaW5nID0gXCJcIlxuICAgICAgICB2YXIgbWluc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHZhciBzZWNzczogc3RyaW5nID0gXCJcIlxuICAgICAgICBpZiAodGltZSA+IDApIHtcbiAgICAgICAgICAgIC8v5aSpXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF5c3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIC8v5bCP5pe2XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8v5YiGXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vjc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWluc3MgKyBzZWNzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgc2Vjc3NcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCIwXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgbWluc3M7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IGRheXMgKyBcIuWkqVwiO1xuICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiMFwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIiArIGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXNzICsgaG91cnNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZChudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgT2JqZWN0UG9vbCBmcm9tIFwiLi9PYmplY3RQb29sXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0SW5zdGFuY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIGNsenMgPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBvYmplY3RzID0gW107XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldChjbHM6IGFueSkge1xuICAgICAgICBsZXQgaWR4ID0gdGhpcy5jbHpzLmluZGV4T2YoY2xzKTtcbiAgICAgICAgcmV0dXJuIChpZHggPj0gMCAmJiB0aGlzLm9iamVjdHNbaWR4XSkgfHwgdGhpcy5jcmVhdGUoY2xzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUoY2xzOiBhbnkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE9iamVjdFBvb2wucG9wKGNscyk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICAgIHRoaXMuY2x6cy5wdXNoKGNscyk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0UG9vbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xzQXJyID0gW107XG5cbiAgICBzdGF0aWMgcG9wKGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsc0Fyci5pbmRleE9mKGNscyk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICBpZHggPSB0aGlzLmNsc0Fyci5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNsc0Fyci5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtleSA9ICdwb29sS2V5JyArIGlkeDtcbiAgICAgICAgbGV0IGl0ZW0gPSBMYXlhLlBvb2wuZ2V0SXRlbUJ5Q2xhc3Moa2V5LCBjbHMpO1xuICAgICAgICBpdGVtLnBvb2xLZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGl0ZW0pIHtcbiAgICAgICAgTGF5YS5Qb29sLnJlY292ZXIoaXRlbS5wb29sS2V5LCBpdGVtKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFNjYWxlQnV0dG9uU2NyaXB0IHtcbiBcbiAgICBwdWJsaWMgZGVsYXlUaW1lOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBtaW5TY2FsZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIG1vbmtleUJveDogTGF5YS5JbWFnZTtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICrorr7nva5vd25lcuWHveaVsO+8jOWPr+S7peebtOaOpeiOt+WPluWIsOa3u+WKoOmZhOWKoOiEmuacrOeahOe7hOS7tuWunuS+iyBcbiAgICAgKiovXG4gICAgcHVibGljIHNldCBvd25lcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubW9ua2V5Qm94ID0gdmFsdWU7XG4gICAgICAgIC8v6Ieq5a6a5LmJ55qE6ISa5pys5Lya5pyJ5pe25bqP6Zeu6aKY77yM5omA5Lul5Zyo5q2k5re75Yqg5LiA5Liq5bu25pe2XG4gICAgICAgIHRoaXMubW9ua2V5Qm94LmZyYW1lT25jZSgyLCB0aGlzLCB0aGlzLm9uTG9hZGVkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25Mb2FkZWQoKTogdm9pZCB7XG4gICAgICAgLyog6K6+572u5oyJ6ZKu5Li65Y2V5oCB5oyJ6ZKuXG4gICAgICAgICoqIOWPluWAvO+8mlxuICAgICAgICAqKiAx77ya5Y2V5oCB44CC5Zu+54mH5LiN5YGa5YiH5Ymy77yM5oyJ6ZKu55qE55qu6IKk54q25oCB5Y+q5pyJ5LiA56eN44CCXG4gICAgICAgICoqIDLvvJrkuKTmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB5oyJ5LiL5ZKM57uP6L+H5Y+K6YCJ5Lit54q25oCB55qu6IKk44CCXG4gICAgICAgICoqIDPvvJrkuInmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB57uP6L+H54q25oCB55qu6IKk44CB5oyJ5LiL5ZKM6YCJ5Lit54q25oCB55qu6IKkXG4gICAgICAgICovXG4gICAgICAgIC8v5re75Yqg6byg5qCH5oyJ5LiL5LqL5Lu25L6m5ZCs44CC5oyJ5pe25pe257yp5bCP5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfmiqzotbfkuovku7bkvqblkKzjgILmiqzotbfml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XG4gICAgICAgIC8v5re75Yqg6byg5qCH56a75byA5LqL5Lu25L6m5ZCs44CC56a75byA5pe26L+Y5Y6f5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgcHJpdmF0ZSBzY2FsZVNtYWxsKCk6dm9pZHtcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcbiAgICAgICAgTGF5YS5Ud2Vlbi50byh0aGlzLm1vbmtleUJveCwge3NjYWxlWDowLjgsIHNjYWxlWTogMC44fSwgMik7XG4gICAgfVxuICAgIHByaXZhdGUgc2NhbGVCaWcoKTp2b2lke1xuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjEsIHNjYWxlWToxfSwgMik7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFV0aWwge1xuICAgIHB1YmxpYyBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgIH1cbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBMYXlhLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXRpbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IFV0aWwge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IFV0aWwpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gRGF0YUtleSB7XG4gICAgY3VyX3JlZF9kYXlfbGltaXQgPSAnY3VyX3JlZF9kYXlfbGltaXQnLFxuICAgIGN1cl9zaGFrZV9kYXlfbGltaXQgPSAnY3VyX3NoYWtlX2RheV9saW1pdCcsXG4gICAgc2hha2VMYXN0VGltZSA9ICdzaGFrZUxhc3RUaW1lJyxcbiAgICBkYXRhQ05UID0gJ2RhdGFDTlQnLFxuICAgIHRvZGF5Q250ID0gJ3RvZGF5Q250JyxcbiAgICBsYXN0VGltZSA9ICdsYXN0VGltZScsXG59Il19 | ... | ... |
puchi_laya/release/web/prefab/View.json
1 | -{"type":"View","props":{"y":0,"x":0,"width":750,"presetID":1,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":10,"child":[{"type":"Box","props":{"y":37,"x":0,"width":150,"presetID":2,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","presetID":3,"pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","presetID":4,"anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","presetID":5,"anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","presetID":6,"anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"y":176,"x":48,"presetID":7,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"skin":"common/img_coin_bg.png","presetID":8},"compId":11},{"type":"Label","props":{"y":79,"x":85.04541015625,"text":"0","presetID":24,"fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"y":-6,"x":-24,"texture":"common/icon_coin.png","presetID":9},"compId":12},{"type":"Label","props":{"y":12,"x":85.04541015625,"text":"0","presetID":10,"fontSize":34,"color":"#171515"},"compId":13},{"type":"Button","props":{"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png","presetID":11},"compId":14},{"type":"Script","props":{"tiplab":"@node:30","presetID":23,"coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"y":261,"x":242,"presetID":19},"compId":25,"child":[{"type":"Button","props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":14,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":16,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]}]},{"type":"View","props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}],"loadList":["common/btnInvite.png","common/btn_serve(1).png","common/btn_vibrate_on.png","common/btn_yao.png","common/img_coin_bg.png","common/icon_coin.png","common/btn_drawal.png","common/btn_gr.png"],"loadList3D":[]} | |
2 | 1 | \ No newline at end of file |
2 | +{"type":"View","props":{"y":0,"x":0,"width":750,"presetID":1,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":10,"child":[{"type":"Box","props":{"y":37,"x":0,"width":150,"presetID":2,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","presetID":3,"pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","presetID":4,"anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","presetID":5,"anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","presetID":6,"anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"y":176,"x":48,"presetID":7,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"skin":"common/img_coin_bg.png","presetID":8},"compId":11},{"type":"Label","props":{"y":79,"x":85.04541015625,"text":"0","presetID":24,"fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"y":-6,"x":-24,"texture":"common/icon_coin.png","presetID":9},"compId":12},{"type":"Label","props":{"y":29,"x":88,"text":"0","presetID":10,"fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},"compId":13},{"type":"Button","props":{"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png","presetID":11},"compId":14},{"type":"Script","props":{"tiplab":"@node:30","presetID":23,"coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"y":250,"x":218,"presetID":19},"compId":25,"child":[{"type":"Button","props":{"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":39,"labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},"compId":48,"child":[{"type":"Script","props":{"presetID":40,"runtime":"uitl/ScaleButtonScript.ts"},"compId":49}]},{"type":"Button","props":{"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":37,"labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},"compId":46,"child":[{"type":"Script","props":{"presetID":38,"runtime":"uitl/ScaleButtonScript.ts"},"compId":47}]},{"type":"Button","props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":47,"labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},"compId":56,"child":[{"type":"Script","props":{"presetID":48,"runtime":"uitl/ScaleButtonScript.ts"},"compId":57}]},{"type":"Button","props":{"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":14,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":45,"labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},"compId":54,"child":[{"type":"Script","props":{"presetID":46,"runtime":"uitl/ScaleButtonScript.ts"},"compId":55}]},{"type":"Button","props":{"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":16,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":49,"labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},"compId":58,"child":[{"type":"Script","props":{"presetID":50,"runtime":"uitl/ScaleButtonScript.ts"},"compId":59},{"type":"Label","props":{"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"presetID":51,"pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},"compId":60}]},{"type":"Button","props":{"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]},{"type":"Button","props":{"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":41,"labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},"compId":50,"child":[{"type":"Script","props":{"presetID":42,"runtime":"uitl/ScaleButtonScript.ts"},"compId":51}]},{"type":"Button","props":{"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":43,"labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},"compId":52,"child":[{"type":"Script","props":{"presetID":44,"runtime":"uitl/ScaleButtonScript.ts"},"compId":53}]}]},{"type":"View","props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}],"loadList":["common/btnInvite.png","common/btn_serve(1).png","common/btn_vibrate_on.png","common/btn_yao.png","common/img_coin_bg.png","common/icon_coin.png","common/btn_drawal.png","common/btn_gr.png"],"loadList3D":[]} | |
3 | 3 | \ No newline at end of file | ... | ... |
puchi_laya/src/.DS_Store
No preview for this file type
puchi_laya/src/Main.ts
1 | 1 | import GameConfig from "./GameConfig"; |
2 | 2 | import AdManager from "./sdk/AdManager"; |
3 | -import { AppSdk } from "./sdk/AppSdk"; | |
4 | -import RedpacketModel from "./sdk/model/RedpacketModel"; | |
5 | 3 | import ShakeModel from "./sdk/model/ShakeModel"; |
4 | +import PcSdk from "./sdk/PcSdk"; | |
5 | +import RedpacketModel from "./sdk/model/RedpacketModel"; | |
6 | 6 | class Main { |
7 | 7 | constructor() { |
8 | 8 | //根据IDE设置初始化引擎 |
... | ... | @@ -42,15 +42,18 @@ class Main { |
42 | 42 | /**初始化SDK */ |
43 | 43 | async initData() { |
44 | 44 | /**隐藏启动屏 */ |
45 | - AppSdk.I.hideSplash() | |
45 | + PcSdk.I.hideSplash() | |
46 | 46 | /**初始化adk 获取app配置信息 */ |
47 | - AppSdk.I.init(); | |
47 | + PcSdk.I.init(); | |
48 | 48 | /**预加载视频 */ |
49 | 49 | AdManager.I.init(); |
50 | - /**获取红包配置 初始化数据 */ | |
51 | - await RedpacketModel.I.init(); | |
52 | - /**初始化摇一摇的数据 */ | |
53 | - await ShakeModel.I.init() | |
50 | + /**获取红包配置 摇一摇 等静态数据 */ | |
51 | + await PcSdk.I.initGameConfig(); | |
52 | + | |
53 | + | |
54 | + await RedpacketModel.I.init() | |
55 | + | |
56 | + await ShakeModel.I.init(); | |
54 | 57 | } |
55 | 58 | } |
56 | 59 | //激活启动类 | ... | ... |
puchi_laya/src/RedDrawal.ts
1 | 1 | import RedpacketModel from "./sdk/model/RedpacketModel"; |
2 | 2 | import { EventCenter } from "./event/EventCenter"; |
3 | 3 | import { EventEnum } from "./event/EventEnum"; |
4 | +import PcSdk from "./sdk/PcSdk"; | |
4 | 5 | /** |
5 | 6 | * 主界面 金币金额 |
6 | 7 | */ |
... | ... | @@ -28,13 +29,12 @@ export default class RedDrawal extends Laya.Script { |
28 | 29 | } |
29 | 30 | |
30 | 31 | async updateStar() { |
31 | - let coin = await RedpacketModel.I.getTotalCoin(); | |
32 | - // let coin = 1000 | |
32 | + let coin = await PcSdk.I.myCoin(); | |
33 | 33 | this.totalCoin = coin; |
34 | 34 | this.coinlab.text = '' + coin; |
35 | 35 | let str = '可提现'; |
36 | 36 | /**更新下下一次提现的额度 */ |
37 | - let nextDrawal = await RedpacketModel.I.minWithDrawal(); | |
37 | + let nextDrawal = await PcSdk.I.minWithDrawal(); | |
38 | 38 | if (this.totalCoin > 0) { |
39 | 39 | let leftCoin = nextDrawal - this.totalCoin; |
40 | 40 | if (leftCoin > 0) | ... | ... |
puchi_laya/src/TestScene.ts
1 | 1 | import { ui } from "./ui/layaMaxUI"; |
2 | 2 | import AdManager from "./sdk/AdManager"; |
3 | -import { AppSdk } from "./sdk/AppSdk"; | |
4 | 3 | import ShakeModel from "./sdk/model/ShakeModel"; |
5 | 4 | import RedpacketModel from "./sdk/model/RedpacketModel"; |
5 | +import PcSdk from "./sdk/PcSdk"; | |
6 | +import NativeAd from "./sdk/NativeAd"; | |
7 | +import Util from "./uitl/Util"; | |
6 | 8 | |
7 | 9 | export default class TestScene extends ui.TestSceneUI { |
10 | + private isLongVibrate: boolean = false; | |
8 | 11 | constructor() { |
9 | 12 | super(); |
10 | 13 | //关闭多点触控,否则就无敌了 |
11 | 14 | Laya.MouseManager.multiTouchEnabled = false; |
12 | 15 | console.log('---------------TestScene-------') |
13 | - this.NativeAD.visible = false; | |
16 | + // this.NativeAD.visible = false; | |
14 | 17 | |
15 | 18 | } |
16 | 19 | |
17 | 20 | onEnable(): void { |
18 | 21 | this.btnServer.on(Laya.Event.CLICK, this, this.openServer); |
22 | + this.btnVibrate.on(Laya.Event.CLICK, this, () => { | |
23 | + PcSdk.I.vibrate(this.isLongVibrate ? 0 : 1); | |
24 | + this.isLongVibrate = !this.isLongVibrate; | |
25 | + }); | |
19 | 26 | this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal); |
20 | 27 | this.btnInvite.on(Laya.Event.CLICK, this, this.invitation); |
21 | 28 | this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake); |
... | ... | @@ -27,30 +34,49 @@ export default class TestScene extends ui.TestSceneUI { |
27 | 34 | this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd); |
28 | 35 | this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket); |
29 | 36 | |
37 | + this.btnPreVideo.on(Laya.Event.CLICK, this, this.preloadRewardAd); | |
38 | + this.btnPreFull.on(Laya.Event.CLICK, this, this.preloadFull); | |
39 | + this.btnPreInsert.on(Laya.Event.CLICK, this, this.preloadInterAd); | |
40 | + this.btnPreNative.on(Laya.Event.CLICK, this, this.preloadNativeAd); | |
41 | + this.btnCloseBanner.on(Laya.Event.CLICK, this, this.closeAdBanner); | |
42 | + this.btnCloseNative.on(Laya.Event.CLICK, this, this.closeAdverDialog); | |
43 | + this.btnMinWithDrawal.on(Laya.Event.CLICK, this, this.minWithDrawal); | |
44 | + | |
30 | 45 | } |
31 | 46 | |
32 | 47 | /**预加载广告 */ |
33 | 48 | async preloadAD() { |
34 | 49 | console.log('---------------preloadAD-------') |
35 | - await AdManager.I.init(); | |
36 | - // MyBridge.testReturn(function (...array) { | |
37 | - // console.log("-------web--------onClick----->>cocos JS-------MyBridge.testReturn------" + JSON.stringify(array)); | |
50 | + await AdManager.I.preloadBanner(); | |
51 | + } | |
52 | + | |
53 | + preloadRewardAd() { | |
54 | + AdManager.I.preloadRewardAd(); | |
55 | + } | |
56 | + | |
57 | + preloadFull() { | |
58 | + AdManager.I.preloadFullAd(); | |
59 | + } | |
60 | + | |
61 | + preloadInterAd() { | |
62 | + AdManager.I.preloadInterAd(); | |
63 | + } | |
64 | + | |
65 | + preloadNativeAd() { | |
66 | + this.NativeAD.getComponent(NativeAd).initNativeAd(1); | |
67 | + } | |
38 | 68 | |
39 | - // }); | |
69 | + closeAdverDialog() { | |
70 | + AdManager.I.closeAdverDialog() | |
71 | + } | |
72 | + closeAdBanner() { | |
73 | + AdManager.I.closeAdBanner() | |
40 | 74 | } |
41 | 75 | |
42 | 76 | /**显示全屏广告 */ |
43 | 77 | showFullAd() { |
44 | 78 | console.log('---------------showFullAd-------') |
45 | 79 | AdManager.I.showFullAd(); |
46 | - // var ret = MyBridge.mapToString({ | |
47 | - // data: { | |
48 | - // "count": 2, "title": [{ "name": "nnn", "value": "nnnvalue", "default_show": 1 } | |
49 | - // , { "name": "mmm", "value": "mmmvalue\"aasdasd" }] | |
50 | - // } | |
51 | - // }); | |
52 | - | |
53 | - // console.log("-------web--------onClick----->>cocos JS-------MyBridge.mapToString------" + JSON.stringify(ret)); | |
54 | 80 | } |
55 | 81 | /**显示banner */ |
56 | 82 | showBanner() { |
... | ... | @@ -60,45 +86,44 @@ export default class TestScene extends ui.TestSceneUI { |
60 | 86 | |
61 | 87 | /**信息流广告 */ |
62 | 88 | showNativeAd() { |
63 | - console.log('---------------showNativeAd-------') | |
64 | - this.NativeAD.visible = true; | |
89 | + this.NativeAD.getComponent(NativeAd).initNativeAd(); | |
65 | 90 | } |
66 | 91 | |
67 | 92 | /**插屏广告 */ |
68 | 93 | showInterAd() { |
69 | 94 | console.log('---------------showInterAd-------') |
70 | - | |
71 | 95 | AdManager.I.showInterAd(); |
72 | 96 | } |
73 | 97 | /**激励视频广告 */ |
74 | 98 | async showRewardAd() { |
75 | 99 | console.log('---------------showRewardAd-------') |
76 | - | |
77 | 100 | await AdManager.I.showRewardAd(); |
78 | 101 | /**成功后执行对应的奖励 */ |
79 | 102 | } |
80 | 103 | /**意见反馈 */ |
81 | 104 | openServer() { |
82 | 105 | console.log('---------------openServer-------') |
83 | - AppSdk.I.feedback(); | |
106 | + PcSdk.I.feedback(); | |
84 | 107 | } |
85 | 108 | |
109 | + async openRedpacket() { | |
110 | + RedpacketModel.I.checkRedpacket() | |
111 | + } | |
86 | 112 | |
87 | - openRedpacket() { | |
88 | - RedpacketModel.I.checkRedpacket(); | |
89 | - console.log('红包获取结果:curRedpacket' + RedpacketModel.I.curRedpacket) | |
90 | - // console.log('红包获取结果:' + JSON.stringify(data)) | |
91 | - // ViewManager.I.openPopwin(RedpacketPopwin, 0); | |
113 | + async minWithDrawal() { | |
114 | + let money = await PcSdk.I.minWithDrawal() | |
115 | + this.minWithDrawalLab.text = '最低提现:' + money; | |
92 | 116 | } |
93 | 117 | |
118 | + | |
94 | 119 | /**打开个人中心 */ |
95 | 120 | openPersonal() { |
96 | 121 | console.log('---------------openServer-------') |
97 | - AppSdk.I.personal(0); | |
122 | + PcSdk.I.personal(0); | |
98 | 123 | } |
99 | 124 | /**邀请好友 */ |
100 | 125 | invitation() { |
101 | - AppSdk.I.invitation(); | |
126 | + PcSdk.I.invitation(); | |
102 | 127 | } |
103 | 128 | |
104 | 129 | /** |
... | ... | @@ -109,10 +134,7 @@ export default class TestScene extends ui.TestSceneUI { |
109 | 134 | */ |
110 | 135 | touchShake() { |
111 | 136 | console.log('---------------touchShake-------') |
112 | - // this.skin.btnShakeAni.play(0); | |
113 | - AppSdk.I.vibrate(); | |
114 | - // ViewManager.I.showModal(HintModal, ' 今⽇次数已⽤完,请明⽇再来'); | |
115 | - // this.skin.handAni.stop(); | |
137 | + PcSdk.I.vibrate(); | |
116 | 138 | /** |
117 | 139 | * 1.回去星星 道具 |
118 | 140 | * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币 | ... | ... |
puchi_laya/src/sdk/AdManager.ts
... | ... | @@ -8,10 +8,33 @@ export default class AdManager { |
8 | 8 | this.preloadRewardAd(); |
9 | 9 | } |
10 | 10 | |
11 | - private preloadRewardAd() { | |
11 | + preloadBanner() { | |
12 | + TTAdSdk.I.loadBannerExpressAd(1); | |
13 | + } | |
14 | + | |
15 | + preloadRewardAd() { | |
12 | 16 | TTAdSdk.I.showRewardVideoAd(1); |
13 | 17 | } |
14 | 18 | |
19 | + preloadFullAd() { | |
20 | + TTAdSdk.I.loadFullScreenVideoAd(1); | |
21 | + } | |
22 | + | |
23 | + preloadInterAd() { | |
24 | + // TTAdSdk.I.showInteractionExpressAd(1); | |
25 | + } | |
26 | + | |
27 | + preloadNativeAd(){ | |
28 | + TTAdSdk.I.loadFullScreenVideoAd(1); | |
29 | + } | |
30 | + | |
31 | + closeAdverDialog() { | |
32 | + TTAdSdk.I.closeAdverDialog() | |
33 | + } | |
34 | + closeAdBanner() { | |
35 | + TTAdSdk.I.closeAdBanner() | |
36 | + } | |
37 | + | |
15 | 38 | async showRewardAd() { |
16 | 39 | try { |
17 | 40 | let ret = await TTAdSdk.I.showRewardVideoAd(); |
... | ... | @@ -24,17 +47,8 @@ export default class AdManager { |
24 | 47 | } |
25 | 48 | } |
26 | 49 | |
27 | - private preloadFullAd() { | |
28 | - TTAdSdk.I.loadFullScreenVideoAd( 1); | |
29 | - } | |
30 | - | |
31 | - private preloadInterAd() { | |
32 | - TTAdSdk.I.loadFullScreenVideoAd(1); | |
33 | - } | |
34 | 50 | |
35 | 51 | async showFullAd() { |
36 | - // console.warn('full'); | |
37 | - // return Promise.resolve(); | |
38 | 52 | try { |
39 | 53 | let ret = await TTAdSdk.I.loadFullScreenVideoAd(); |
40 | 54 | this.preloadFullAd(); |
... | ... | @@ -46,8 +60,6 @@ export default class AdManager { |
46 | 60 | } |
47 | 61 | |
48 | 62 | async showInterAd() { |
49 | - // console.warn('full'); | |
50 | - // return Promise.resolve(); | |
51 | 63 | try { |
52 | 64 | let ret = await TTAdSdk.I.showInteractionExpressAd(); |
53 | 65 | this.preloadInterAd(); |
... | ... | @@ -67,19 +79,12 @@ export default class AdManager { |
67 | 79 | TTAdSdk.I.loadBannerExpressAd(); |
68 | 80 | } |
69 | 81 | |
70 | - hideBanner() { | |
71 | - TTAdSdk.I.hideAd(); | |
82 | + | |
83 | + showNativeAd(x, y, w, h,preload=0) { | |
84 | + TTAdSdk.I.loadNativeExpressAd(x, y, w, h,preload); | |
72 | 85 | } |
73 | 86 | |
74 | - showNativeAd(x, y, w, h) { | |
75 | - TTAdSdk.I.loadNativeExpressAd( x, y, w, h); | |
76 | - } | |
77 | 87 | |
78 | - hideNativeAd() { | |
79 | - TTAdSdk.I.hideAd(); | |
80 | - } | |
81 | - | |
82 | - | |
83 | 88 | |
84 | 89 | static get I(): AdManager { |
85 | 90 | return ObjectInstance.get(AdManager); | ... | ... |
puchi_laya/src/sdk/AndroidAppSdk.ts
... | ... | @@ -1,20 +0,0 @@ |
1 | -import BaseAppSdk from "./BaseAppSdk"; | |
2 | - | |
3 | -export default class AndroidAppSdk extends BaseAppSdk { | |
4 | - get system() { | |
5 | - return 1; | |
6 | - } | |
7 | - | |
8 | - callApp(cmd: string, ...params) { | |
9 | - this.bridge && this.bridge.call(cmd, ...params); | |
10 | - // this.bridge && alert(JSON.stringify(this.bridge)); | |
11 | - } | |
12 | - | |
13 | - callAppWithBack(callBack: Function, cmd: string, ...params) { | |
14 | - this.bridge && this.bridge.callWithBack(callBack, cmd, ...params); | |
15 | - } | |
16 | - | |
17 | - protected get bridge() { | |
18 | - return this._bridge || (this._bridge = this.createClass('com.puchi.sdkdemo.JSBridge')); | |
19 | - } | |
20 | -} | |
21 | 0 | \ No newline at end of file |
puchi_laya/src/sdk/AppSdk.ts
... | ... | @@ -1,26 +0,0 @@ |
1 | -import IosAppSdk from "./IosAppSdk"; | |
2 | -import AndroidAppSdk from "./AndroidAppSdk"; | |
3 | -import BaseAppSdk from "./BaseAppSdk"; | |
4 | - | |
5 | -export class AppSdk { | |
6 | - private static _instance: BaseAppSdk; | |
7 | - static get I(): BaseAppSdk { | |
8 | - if (!this._instance) { | |
9 | - let conchConfig = window['conchConfig']; | |
10 | - let os = conchConfig && conchConfig.getOS(); | |
11 | - switch (os) { | |
12 | - case "Conch-ios": | |
13 | - this._instance = new IosAppSdk; | |
14 | - break; | |
15 | - case "Conch-android": | |
16 | - this._instance = new AndroidAppSdk; | |
17 | - break; | |
18 | - default: | |
19 | - this._instance = new BaseAppSdk; | |
20 | - break; | |
21 | - } | |
22 | - window['AppSdk'] = this._instance; | |
23 | - } | |
24 | - return this._instance; | |
25 | - } | |
26 | -} | |
27 | 0 | \ No newline at end of file |
puchi_laya/src/sdk/BaseAppSdk.ts
... | ... | @@ -1,205 +0,0 @@ |
1 | -import AddGoldData from "./sdkData/AddGoldData"; | |
2 | -import MyCoinData from "./sdkData/MyCoinData"; | |
3 | -import { GoldConfigData } from "./sdkData/GoldConfigData"; | |
4 | - | |
5 | -/** 返回参数类型 */ | |
6 | -interface IAppResult<T> { | |
7 | - /** 错误码 */ | |
8 | - code?: number; | |
9 | - /** 返回数据 */ | |
10 | - data?: T; | |
11 | -} | |
12 | - | |
13 | - | |
14 | -export default class BaseAppSdk { | |
15 | - protected _bridge: any; | |
16 | - private netOnArr: Array<Function> = []; | |
17 | - private netOffArr: Array<Function> = []; | |
18 | - private _width: number; | |
19 | - private _height: number; | |
20 | - private _channel: string; | |
21 | - private _version: string; | |
22 | - private _level: number; | |
23 | - | |
24 | - public pangolinId: string; | |
25 | - public adnetId: string; | |
26 | - | |
27 | - init() { | |
28 | - let conch = window['conch']; | |
29 | - if (conch) { | |
30 | - conch.setNetworkEvtFunction(this.networkEvtFunc.bind(this)); | |
31 | - } | |
32 | - this.callApp('setAppCallback', 1, 'AppSdk.onShow()'); | |
33 | - this.callApp('setAppCallback', 2, 'AppSdk.onHide()'); | |
34 | - this.getSystemInfo(); | |
35 | - | |
36 | - } | |
37 | - | |
38 | - private getSystemInfo() { | |
39 | - this.callAppWithBack(ret => { | |
40 | - console.log('---------------getSystemInfo-------' + JSON.stringify(ret)) | |
41 | - let { w, h, versionName, channel, pangolin, adnet, level } = JSON.parse(ret); | |
42 | - this._width = w; | |
43 | - this._height = h; | |
44 | - this._version = versionName; | |
45 | - this._channel = channel; | |
46 | - this.pangolinId = pangolin; | |
47 | - this.adnetId = adnet; | |
48 | - this._level = level; | |
49 | - }, 'getSystemInfo', 0); | |
50 | - } | |
51 | - | |
52 | - private onShow() { | |
53 | - // EventCenter.emit(EventEnum.APP_SHOW); | |
54 | - } | |
55 | - | |
56 | - private onHide() { | |
57 | - // EventCenter.emit(EventEnum.APP_HIDE); | |
58 | - | |
59 | - } | |
60 | - | |
61 | - vibrate() { | |
62 | - this.callApp('openSystemFun', 0); | |
63 | - } | |
64 | - | |
65 | - hideSplash() { | |
66 | - this.callApp('hideSplash'); | |
67 | - } | |
68 | - | |
69 | - /**弹出提现 */ | |
70 | - withDrawal() { | |
71 | - this.callApp('withDrawal'); | |
72 | - } | |
73 | - /**意见反馈 */ | |
74 | - feedback() { | |
75 | - this.callApp('feedback'); | |
76 | - } | |
77 | - | |
78 | - /** | |
79 | - * key 默认0 ,签到 1 | |
80 | - */ | |
81 | - personal(key = 0) { | |
82 | - this.callApp('personal', key); | |
83 | - } | |
84 | - /**邀请好友*/ | |
85 | - invitation() { | |
86 | - this.callApp('invitation'); | |
87 | - } | |
88 | - | |
89 | - | |
90 | - currentShut(value: number) { | |
91 | - this.callApp('currentShut', value); | |
92 | - } | |
93 | - /** | |
94 | - * 获取金币配表 | |
95 | - * @param key 1红包 2 摇一摇红包 | |
96 | - */ | |
97 | - | |
98 | - async getGameConfig(key: number = 1) { | |
99 | - let result = await this.onCallBack('getGameConfig', key) | |
100 | - GoldConfigData.I.initData(result); | |
101 | - return result; | |
102 | - } | |
103 | - | |
104 | - /** | |
105 | - * 要求发放金币 | |
106 | - * @param key 1红包 | |
107 | - */ | |
108 | - | |
109 | - async addGold(key: number = 1) { | |
110 | - let result = await this.onCallBack('addGold', key); | |
111 | - AddGoldData.initData(result); | |
112 | - return result; | |
113 | - } | |
114 | - async myCoin() { | |
115 | - let result = await this.onCallBack('myCoin') | |
116 | - MyCoinData.initData(result); | |
117 | - return result; | |
118 | - | |
119 | - } | |
120 | - /**获取当前提现的档位 */ | |
121 | - async minWithDrawal() { | |
122 | - let result = await this.onCallBack('minWithDrawal'); | |
123 | - if (!Boolean(parseInt(result.code + ''))) { | |
124 | - return parseInt(result.data['money']) * 100; | |
125 | - } | |
126 | - return 0; | |
127 | - } | |
128 | - | |
129 | - | |
130 | - | |
131 | - | |
132 | - onCallBack(cmd: string, ...params) { | |
133 | - return new Promise<IAppResult<any[]>>(async (resolve, reject) => { | |
134 | - await this.callAppWithBack(res => { | |
135 | - res = JSON.parse(res) | |
136 | - // res = { code: 1000 } | |
137 | - if (!res.code) { | |
138 | - resolve({ code: res.code, data: res.data }); | |
139 | - } else { | |
140 | - resolve({ code: res.code }) | |
141 | - } | |
142 | - }, cmd, ...params); | |
143 | - }) | |
144 | - | |
145 | - | |
146 | - | |
147 | - } | |
148 | - | |
149 | - callApp(cmd: string, ...params) { | |
150 | - } | |
151 | - | |
152 | - callAppWithBack(callBack: Function, cmd: string, ...params) { | |
153 | - } | |
154 | - | |
155 | - private networkEvtFunc(type: number) { | |
156 | - let funcArr; | |
157 | - if (type == 0) { | |
158 | - funcArr = this.netOffArr; | |
159 | - } else if (type == 5) { | |
160 | - funcArr = this.netOnArr; | |
161 | - } | |
162 | - if (funcArr) { | |
163 | - for (let i = 0; i < funcArr.length; i++) { | |
164 | - funcArr[i](); | |
165 | - } | |
166 | - } | |
167 | - } | |
168 | - | |
169 | - onNetOn(func: Function) { | |
170 | - this.netOnArr.push(func); | |
171 | - } | |
172 | - | |
173 | - | |
174 | - | |
175 | - onNetOff(func: Function) { | |
176 | - this.netOffArr.push(func); | |
177 | - } | |
178 | - | |
179 | - get level() { | |
180 | - return this._level; | |
181 | - } | |
182 | - get width() { | |
183 | - return this._width; | |
184 | - } | |
185 | - | |
186 | - get height() { | |
187 | - return this._height; | |
188 | - } | |
189 | - | |
190 | - get version() { | |
191 | - return this._version; | |
192 | - } | |
193 | - | |
194 | - get channel() { | |
195 | - return this._channel; | |
196 | - } | |
197 | - | |
198 | - protected get bridge() { | |
199 | - return null; | |
200 | - } | |
201 | - | |
202 | - protected createClass(name: string) { | |
203 | - return window['PlatformClass'].createClass(name); | |
204 | - } | |
205 | -} | |
206 | 0 | \ No newline at end of file |
puchi_laya/src/sdk/IosAppSdk.ts
... | ... | @@ -1,26 +0,0 @@ |
1 | -import BaseAppSdk from "./BaseAppSdk"; | |
2 | - | |
3 | -export default class IosAppSdk extends BaseAppSdk { | |
4 | - get system() { | |
5 | - return 0; | |
6 | - } | |
7 | - | |
8 | - callApp(cmd: string, ...params) { | |
9 | - if (params.length) { | |
10 | - cmd += ':'; | |
11 | - } | |
12 | - this.bridge && this.bridge.call(cmd, ...params); | |
13 | - // this.bridge && alert(JSON.stringify(this.bridge)); | |
14 | - } | |
15 | - | |
16 | - callAppWithBack(callBack: Function, cmd: string, ...params) { | |
17 | - if (params.length) { | |
18 | - cmd += ':'; | |
19 | - } | |
20 | - this.bridge && this.bridge.callWithBack(callBack, cmd, ...params); | |
21 | - } | |
22 | - | |
23 | - protected get bridge() { | |
24 | - return this._bridge || (this._bridge = this.createClass('JSBridge')); | |
25 | - } | |
26 | -} | |
27 | 0 | \ No newline at end of file |
puchi_laya/src/sdk/NativeAd.ts
1 | 1 | import AdManager from "./AdManager"; |
2 | 2 | |
3 | 3 | export default class NativeAd extends Laya.Script { |
4 | - onEnable(): void { | |
4 | + | |
5 | + public initNativeAd(preload=0){ | |
5 | 6 | let globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true); |
6 | - AdManager.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height); | |
7 | + AdManager.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height,preload); | |
8 | + } | |
9 | + onEnable(): void { | |
10 | + this.initNativeAd(); | |
7 | 11 | } |
8 | 12 | |
9 | 13 | onDisable(): void { |
10 | - AdManager.I.hideNativeAd(); | |
14 | + AdManager.I.closeAdverDialog(); | |
11 | 15 | } |
12 | 16 | |
13 | 17 | private get item(): Laya.View { | ... | ... |
... | ... | @@ -0,0 +1,235 @@ |
1 | +import ObjectInstance from "../uitl/ObjectInstance"; | |
2 | + | |
3 | +export default class PcSdk { | |
4 | + private _width: number; | |
5 | + private _height: number; | |
6 | + private _channel: string; | |
7 | + private _version: string; | |
8 | + private _level: number; | |
9 | + private _gameConfig: number; | |
10 | + | |
11 | + public pangolinId: string; | |
12 | + public adnetId: string; | |
13 | + | |
14 | + init() { | |
15 | + this.getSystemInfo(); | |
16 | + } | |
17 | + | |
18 | + private get myBridge() { | |
19 | + if (MyBridge) { | |
20 | + return MyBridge; | |
21 | + } | |
22 | + } | |
23 | + | |
24 | + | |
25 | + | |
26 | + /**获取基本版本信息以及手机的配置 */ | |
27 | + private getSystemInfo(key: number = 0) { | |
28 | + let ret = this.myBridge.getSystemInfo(key); | |
29 | + let { w, h, versionName, channel, pangolin, adnet, level } = JSON.parse(ret); | |
30 | + [this._width, this._height, this._version, | |
31 | + this._channel, this.pangolinId, | |
32 | + this.adnetId, this._level] = [w, h, versionName, channel, pangolin, adnet, level]; | |
33 | + } | |
34 | + | |
35 | + initGameConfig() { | |
36 | + this._gameConfig = this.getGameConfig(); | |
37 | + } | |
38 | + | |
39 | + /** | |
40 | + * 震动 | |
41 | + * @param key 0 短震动 1 长震动 | |
42 | + */ | |
43 | + vibrate(key: number = 0) { | |
44 | + this.myBridge.openSystemFun(key); | |
45 | + } | |
46 | + | |
47 | + /**隐藏启动屏 */ | |
48 | + hideSplash() { | |
49 | + this.myBridge.hideSplash(); | |
50 | + } | |
51 | + | |
52 | + /**弹出提现 */ | |
53 | + withDrawal() { | |
54 | + this.myBridge.withDrawal(); | |
55 | + } | |
56 | + /**意见反馈 */ | |
57 | + feedback() { | |
58 | + this.myBridge.feedback(); | |
59 | + } | |
60 | + /** | |
61 | + * key 默认0 ,签到 1 | |
62 | + */ | |
63 | + personal(key = 0) { | |
64 | + this.myBridge.personal(key); | |
65 | + } | |
66 | + /**邀请好友*/ | |
67 | + invitation() { | |
68 | + this.myBridge.invitation(); | |
69 | + } | |
70 | + | |
71 | + | |
72 | + /**邀请好友*/ | |
73 | + openReward() { | |
74 | + this.myBridge.openReward(); | |
75 | + } | |
76 | + /**签到*/ | |
77 | + openSignin() { | |
78 | + this.myBridge.openSingin(); | |
79 | + } | |
80 | + | |
81 | + | |
82 | + /** | |
83 | + * 获取金币配表 | |
84 | + * @param key 1红包 2 摇一摇红包 | |
85 | + */ | |
86 | + getGameConfig() { | |
87 | + let result = this.myBridge.getGameConfig(); | |
88 | + // console.log('---------------getGameConfig-------' + JSON.stringify(result)) | |
89 | + return JSON.parse(result); | |
90 | + } | |
91 | + /** | |
92 | + * 要求发放金币 | |
93 | + * @param key 1红包 | |
94 | + */ | |
95 | + async addGold(key) { | |
96 | + return new Promise<any>(async (resolve, reject) => { | |
97 | + await this.myBridge.addGold(key, res => { | |
98 | + res = JSON.parse(res) | |
99 | + const { code, data, msg } = res; | |
100 | + if ('0' === code || !code) { | |
101 | + resolve(data) | |
102 | + } else { | |
103 | + reject(msg); | |
104 | + } | |
105 | + }); | |
106 | + }) | |
107 | + } | |
108 | + /**获取总金币 */ | |
109 | + async myCoin() { | |
110 | + return new Promise<any>(async (resolve, reject) => { | |
111 | + await this.myBridge.myCoin(res => { | |
112 | + res = JSON.parse(res) | |
113 | + const { code, data, msg } = res; | |
114 | + if ('0' === code || !code) { | |
115 | + resolve(data['coin']) | |
116 | + } else { | |
117 | + reject(msg); | |
118 | + } | |
119 | + }); | |
120 | + }) | |
121 | + } | |
122 | + | |
123 | + | |
124 | + /**获取当前提现的档位 */ | |
125 | + async minWithDrawal() { | |
126 | + return new Promise<any>(async (resolve, reject) => { | |
127 | + await this.myBridge.minWithDrawal(res => { | |
128 | + res = JSON.parse(res) | |
129 | + const { code, data, msg } = res; | |
130 | + if ('0' === code || !code) { | |
131 | + resolve(data['money']) | |
132 | + } else { | |
133 | + reject(msg); | |
134 | + } | |
135 | + }); | |
136 | + }) | |
137 | + } | |
138 | + | |
139 | + /**上报埋点 */ | |
140 | + appDotLog(key: string, value?) { | |
141 | + this.myBridge.appDotLog(key, value); | |
142 | + } | |
143 | + /**热云打点 */ | |
144 | + appDotTracKing(key: string) { | |
145 | + this.myBridge.appDotTracKing(key); | |
146 | + } | |
147 | + | |
148 | + setCallback(funName: string, pramas?: any) { | |
149 | + console.log('---------------setCallback---- this.myBridge---' + JSON.stringify(this.myBridge)) | |
150 | + return new Promise((resolve, reject) => { | |
151 | + this.myBridge[funName](pramas, res => { | |
152 | + let { code, data } = JSON.parse(res); | |
153 | + if ('0' === code) { | |
154 | + resolve(data); | |
155 | + } else { | |
156 | + reject(0); | |
157 | + } | |
158 | + }) | |
159 | + }) | |
160 | + } | |
161 | + | |
162 | + closeAdverDialog() { | |
163 | + this.myBridge.closeAdverDialog(); | |
164 | + } | |
165 | + closeAdBanner() { | |
166 | + this.myBridge.closeAdBanner(); | |
167 | + } | |
168 | + /**激励视频 */ | |
169 | + showRewardVideoAd(value: IVideo, JBCallback: Function) { | |
170 | + this.myBridge.showRewardVideoAd(value, JBCallback) | |
171 | + } | |
172 | + /** 全屏广告*/ | |
173 | + loadFullScreenVideoAd(data: any, JBCallback: Function) { | |
174 | + this.myBridge.showRewardVideoAd(data, JBCallback) | |
175 | + } | |
176 | + /**信息流广告 */ | |
177 | + loadNativeExpressAd(data: any, JBCallback: Function) { | |
178 | + this.myBridge.loadNativeExpressAd(data, JBCallback) | |
179 | + } | |
180 | + /**banner */ | |
181 | + loadBannerExpressAd(data: any, JBCallback: Function) { | |
182 | + this.myBridge.loadBannerExpressAd(data, JBCallback) | |
183 | + } | |
184 | + /**插屏广告 */ | |
185 | + showInteractionExpressAd(data: any, JBCallback: Function) { | |
186 | + this.myBridge.showInteractionExpressAd(data, JBCallback) | |
187 | + } | |
188 | + | |
189 | + get level() { | |
190 | + return this._level; | |
191 | + } | |
192 | + get width() { | |
193 | + return this._width; | |
194 | + } | |
195 | + | |
196 | + get height() { | |
197 | + return this._height; | |
198 | + } | |
199 | + | |
200 | + get version() { | |
201 | + return this._version; | |
202 | + } | |
203 | + | |
204 | + get channel() { | |
205 | + return this._channel; | |
206 | + } | |
207 | + | |
208 | + protected get bridge() { | |
209 | + return null; | |
210 | + } | |
211 | + | |
212 | + get gameConfig() { | |
213 | + return this._gameConfig; | |
214 | + } | |
215 | + static get I(): PcSdk { | |
216 | + return ObjectInstance.get(PcSdk); | |
217 | + } | |
218 | +} | |
219 | +// //这里是浏览器环境下, 接收web传过来的消息 | |
220 | +window.onMyBridgeReady = () => { | |
221 | + console.log("onMyBridgeReady load finish, cost:" + (new Date().getTime()) + "ms"); | |
222 | + MyBridge.App.onResume = (...ret) => { | |
223 | + console.log(' laya onResume', ret) | |
224 | + // EventCenter.emit(EventEnum.APP_SHOW); | |
225 | + } | |
226 | + MyBridge.App.onPause = (...ret) => { | |
227 | + console.log(' laya onPause', ret) | |
228 | + // EventCenter.emit(EventEnum.APP_HIDE); | |
229 | + } | |
230 | +} | |
231 | + | |
232 | +interface IVideo { | |
233 | + preloading: number, | |
234 | + type: number, | |
235 | +} | |
0 | 236 | \ No newline at end of file | ... | ... |
puchi_laya/src/sdk/TTAdSdk.ts
1 | -import { AppSdk } from "./AppSdk"; | |
2 | 1 | import ObjectInstance from "../uitl/ObjectInstance"; |
2 | +import PcSdk from "./PcSdk"; | |
3 | 3 | |
4 | 4 | export default class TTAdSdk { |
5 | - async showRewardVideoAd( preload: number = 0) { | |
5 | + /** | |
6 | + * | |
7 | + * @param preload 0 直接加载;1 预加载 | |
8 | + */ | |
9 | + async showRewardVideoAd(preload: number = 0) { | |
6 | 10 | let data = { |
7 | - w: AppSdk.I.width, | |
8 | - h: AppSdk.I.height, | |
11 | + type: 1, | |
9 | 12 | preloading: preload, |
10 | 13 | } |
11 | 14 | return new Promise((resolve, reject) => { |
12 | 15 | let isComplete = false; |
13 | - AppSdk.I.callAppWithBack(ret => { | |
16 | + PcSdk.I.showRewardVideoAd(data, ret => { | |
14 | 17 | let { code, message } = JSON.parse(ret); |
15 | 18 | switch (code) { |
16 | 19 | case -1: |
17 | 20 | reject('error'); |
18 | 21 | /**'暂无视频广告!每日0点重置'*/; |
19 | 22 | break; |
20 | - case 200: | |
23 | + case 102: | |
21 | 24 | isComplete = true; |
22 | 25 | break; |
23 | - case 100: | |
24 | - break; | |
25 | - case 0: | |
26 | + case 101: | |
26 | 27 | if (isComplete) { |
27 | 28 | resolve(); |
28 | 29 | } else { |
... | ... | @@ -30,63 +31,75 @@ export default class TTAdSdk { |
30 | 31 | } |
31 | 32 | break; |
32 | 33 | } |
33 | - }, 'showRewardVideoAd', 1, JSON.stringify(data)) | |
34 | + }) | |
34 | 35 | }) |
35 | 36 | } |
36 | 37 | |
37 | - async loadFullScreenVideoAd( preload: number = 0) { | |
38 | + async loadFullScreenVideoAd(preload: number = 0) { | |
38 | 39 | let data = { |
40 | + w: PcSdk.I.width, | |
41 | + h: PcSdk.I.width * 90 / 600, | |
39 | 42 | preloading: preload, |
43 | + type: 1 | |
40 | 44 | } |
41 | 45 | return new Promise((resolve, reject) => { |
42 | - let isComplete = false; | |
43 | - AppSdk.I.callAppWithBack(ret => { | |
44 | - }, 'loadFullScreenVideoAd', 1, JSON.stringify(data)) | |
46 | + PcSdk.I.loadFullScreenVideoAd(JSON.stringify(data),res=>{ | |
47 | + resolve(res) | |
48 | + }) | |
45 | 49 | }) |
46 | 50 | } |
47 | 51 | |
48 | - async loadNativeExpressAd( x, y, width, height) { | |
49 | - let scaleX = AppSdk.I.width / Laya.stage.width; | |
50 | - let scaleY = AppSdk.I.height / Laya.stage.height; | |
52 | + async loadNativeExpressAd(x, y, width, height, type = 1, preload: number = 0) { | |
53 | + let scaleX = PcSdk.I.width / Laya.stage.width; | |
54 | + let scaleY = PcSdk.I.height / Laya.stage.height; | |
51 | 55 | let data = { |
56 | + type: type, | |
57 | + preloading: preload, | |
52 | 58 | w: width * scaleX, |
53 | 59 | h: height * scaleY, |
54 | 60 | left: x * scaleX, |
55 | 61 | top: y * scaleY |
56 | 62 | } |
57 | - AppSdk.I.callAppWithBack(ret => { | |
58 | - }, 'loadNativeExpressAd', JSON.stringify(data)) | |
63 | + PcSdk.I.loadNativeExpressAd(JSON.stringify(data),res=>{ | |
64 | + return Promise.resolve(res) | |
65 | + }) | |
59 | 66 | } |
60 | 67 | |
61 | - async loadBannerExpressAd() { | |
68 | + async loadBannerExpressAd(preload: number = 0) { | |
62 | 69 | let data = { |
63 | - w: AppSdk.I.width, | |
64 | - h: AppSdk.I.width * 90 / 600, | |
70 | + w: PcSdk.I.width, | |
71 | + h: PcSdk.I.width * 90 / 600, | |
72 | + preloading: preload, | |
73 | + type: 1 | |
65 | 74 | } |
66 | - AppSdk.I.callAppWithBack(ret => { | |
67 | - }, 'loadBannerExpressAd', 2, JSON.stringify(data)) | |
75 | + return new Promise((resolve, reject) => { | |
76 | + PcSdk.I.loadBannerExpressAd(JSON.stringify(data),res=>{ | |
77 | + resolve(res) | |
78 | + }) | |
79 | + }) | |
68 | 80 | } |
69 | 81 | |
70 | - hideAd() { | |
71 | - AppSdk.I.callApp('close_adver_dialog'); | |
82 | + closeAdverDialog() { | |
83 | + PcSdk.I.closeAdverDialog(); | |
84 | + } | |
85 | + closeAdBanner() { | |
86 | + PcSdk.I.closeAdBanner(); | |
72 | 87 | } |
73 | 88 | |
74 | - async showInteractionExpressAd( preload: number = 0) { | |
89 | + async showInteractionExpressAd(preload: number = 0) { | |
75 | 90 | let data = { |
76 | - w: AppSdk.I.width * 0.8, | |
77 | - h: AppSdk.I.height, | |
91 | + w: PcSdk.I.width * 0.8, | |
92 | + h: PcSdk.I.height, | |
78 | 93 | preloading: preload, |
79 | 94 | } |
80 | 95 | return new Promise((resolve, reject) => { |
81 | 96 | let isComplete = false; |
82 | - AppSdk.I.callAppWithBack(ret => { | |
83 | - }, 'showInteractionExpressAd', JSON.stringify(data)) | |
97 | + PcSdk.I.showInteractionExpressAd(JSON.stringify(data),res=>{ | |
98 | + resolve(res) | |
99 | + }) | |
84 | 100 | }) |
85 | 101 | } |
86 | 102 | |
87 | - | |
88 | - | |
89 | - | |
90 | 103 | static get I(): TTAdSdk { |
91 | 104 | return ObjectInstance.get(TTAdSdk) as TTAdSdk; |
92 | 105 | } | ... | ... |
puchi_laya/src/sdk/TeaSdk.ts
1 | -import { AppSdk } from "./AppSdk"; | |
2 | 1 | import ObjectInstance from "../uitl/ObjectInstance"; |
2 | +import PcSdk from "./PcSdk"; | |
3 | 3 | /** |
4 | 4 | * 上报埋点⽇志 |
5 | 5 | * 具体的打点需要跟运营联系 |
... | ... | @@ -11,7 +11,7 @@ export default class TeaSdk { |
11 | 11 | } else if (typeof (value) == 'object') { |
12 | 12 | value = JSON.stringify(value); |
13 | 13 | } |
14 | - AppSdk.I.callApp('appLog_dot', key, value); | |
14 | + PcSdk.I.appDotLog(key, value); | |
15 | 15 | } |
16 | 16 | |
17 | 17 | static get I(): TeaSdk { |
... | ... | @@ -21,5 +21,4 @@ export default class TeaSdk { |
21 | 21 | |
22 | 22 | export enum DotKey { |
23 | 23 | NativeAd = 'native_ad', |
24 | - | |
25 | 24 | } | ... | ... |
puchi_laya/src/sdk/TrackingSdk.ts
1 | -import { AppSdk } from "./AppSdk"; | |
2 | 1 | import ObjectInstance from "../uitl/ObjectInstance"; |
2 | +import PcSdk from "./PcSdk"; | |
3 | 3 | /** |
4 | 4 | * 上报热云埋点⽇志 |
5 | 5 | * 具体的打点需要跟运营联系 |
6 | 6 | */ |
7 | 7 | export default class TrackingSdk { |
8 | 8 | dot(key: string) { |
9 | - AppSdk.I.callApp('tracking_event', key); | |
9 | + PcSdk.I.appDotTracKing(key); | |
10 | 10 | } |
11 | 11 | |
12 | 12 | static get I(): TrackingSdk { | ... | ... |
puchi_laya/src/sdk/model/RedpacketModel.ts
... | ... | @@ -2,15 +2,12 @@ import BaseModel from "./BaseModel"; |
2 | 2 | import AdManager from "../../sdk/AdManager"; |
3 | 3 | import TeaSdk, { DotKey } from "../../sdk/TeaSdk"; |
4 | 4 | import TrackingSdk, { TrackingKey } from "../../sdk/TrackingSdk"; |
5 | -import { GoldConfigData } from "../../sdk/sdkData/GoldConfigData"; | |
6 | -import AddGoldData from "../../sdk/sdkData/AddGoldData"; | |
7 | -import MyCoinData from "../../sdk/sdkData/MyCoinData"; | |
8 | -import { AppSdk } from "../../sdk/AppSdk"; | |
9 | 5 | import DateUtils from "../../uitl/DateUtils"; |
10 | 6 | import Util, { DataKey } from "../../uitl/Util"; |
11 | 7 | import ObjectInstance from "../../uitl/ObjectInstance"; |
12 | 8 | import { EventCenter } from "../../event/EventCenter"; |
13 | 9 | import { EventEnum } from "../../event/EventEnum"; |
10 | +import PcSdk from "../PcSdk"; | |
14 | 11 | |
15 | 12 | export default class RedpacketModel extends BaseModel { |
16 | 13 | private MAX = 20; |
... | ... | @@ -23,9 +20,8 @@ export default class RedpacketModel extends BaseModel { |
23 | 20 | /**初始化红包配置 */ |
24 | 21 | async init() { |
25 | 22 | |
26 | - let arr = await GoldConfigData.I.getGoldConfig(); | |
27 | - console.log('---------------RedpacketModel-------'+JSON.stringify(arr)) | |
28 | - | |
23 | + let arr = await this.getRedConfig(); | |
24 | + console.log('---------------RedpacketModel-------' + JSON.stringify(arr)) | |
29 | 25 | let cash = 0; |
30 | 26 | this.conf = {}; |
31 | 27 | arr.forEach(confData => { |
... | ... | @@ -37,6 +33,8 @@ export default class RedpacketModel extends BaseModel { |
37 | 33 | |
38 | 34 | } |
39 | 35 | |
36 | + | |
37 | + | |
40 | 38 | initData() { |
41 | 39 | let data = new RedpacketData; |
42 | 40 | let lastTime = Util.I.getItem(DataKey.lastTime) || '0'; |
... | ... | @@ -60,6 +58,29 @@ export default class RedpacketModel extends BaseModel { |
60 | 58 | return data; |
61 | 59 | } |
62 | 60 | |
61 | + | |
62 | + async getRedConfig() { | |
63 | + let result = PcSdk.I.gameConfig; | |
64 | + console.log('--------------- 获取配置静态表-----' + JSON.stringify(result)) | |
65 | + if (result) { | |
66 | + let configJson = await this.loadGoldCfg(result['coin_config'][0]) | |
67 | + console.log('-------------- 获取红包静态表-----' + JSON.stringify(result)) | |
68 | + return configJson; | |
69 | + } else { | |
70 | + PcSdk.I.initGameConfig(); | |
71 | + } | |
72 | + } | |
73 | + async loadGoldCfg(res: string) { | |
74 | + let configJson = await this.load(res); | |
75 | + return configJson; | |
76 | + } | |
77 | + | |
78 | + load(res, onProgress?: Laya.Handler): Promise<any> { | |
79 | + return new Promise((suc, fail) => { | |
80 | + Laya.loader.load(res, Laya.Handler.create(this, suc), onProgress); | |
81 | + }) | |
82 | + } | |
83 | + | |
63 | 84 | async checkRedpacket() { |
64 | 85 | |
65 | 86 | if (this.data.todayCnt >= this.DAY_MAX_CNT) return false; |
... | ... | @@ -78,10 +99,11 @@ export default class RedpacketModel extends BaseModel { |
78 | 99 | let cash = 0.000001; |
79 | 100 | this.curRedpacket = cash; |
80 | 101 | //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */ |
81 | - await AdManager.I.showRewardAd() | |
82 | - this.getRepacket() | |
83 | - /**更新基本显示 */ | |
84 | - EventCenter.emit(EventEnum.UPDATE_COIN); | |
102 | + await AdManager.I.showRewardAd() | |
103 | + console.log('--------------- 触发了红包-----') | |
104 | + this.getRepacket() | |
105 | + /**更新基本显示 */ | |
106 | + EventCenter.emit(EventEnum.UPDATE_COIN); | |
85 | 107 | |
86 | 108 | /*** */ |
87 | 109 | return true; |
... | ... | @@ -116,18 +138,18 @@ export default class RedpacketModel extends BaseModel { |
116 | 138 | } |
117 | 139 | /**获取总共的金币数 */ |
118 | 140 | async getTotalCoin() { |
119 | - let totalCoin = await MyCoinData.getCoin(); | |
141 | + let totalCoin = await PcSdk.I.myCoin(); | |
120 | 142 | return totalCoin; |
121 | 143 | } |
122 | 144 | /**获取本次奖励的金币数 */ |
123 | 145 | async addCoin(key: number = 1) { |
124 | - let coinData = await AddGoldData.addCoin(key); | |
125 | - return coinData; | |
146 | + let coinData = await PcSdk.I.addGold(key); | |
147 | + return coinData['coin']; | |
126 | 148 | } |
127 | 149 | |
128 | 150 | /**获取最低提档 */ |
129 | 151 | async minWithDrawal() { |
130 | - let minCoin = await AppSdk.I.minWithDrawal(); | |
152 | + let minCoin = await PcSdk.I.minWithDrawal(); | |
131 | 153 | return minCoin; |
132 | 154 | } |
133 | 155 | static get I(): RedpacketModel { | ... | ... |
puchi_laya/src/sdk/model/ShakeModel.ts
1 | 1 | import BaseModel from "./BaseModel"; |
2 | -import { AppSdk } from "../../sdk/AppSdk"; | |
3 | 2 | import DateUtils from "../../uitl/DateUtils"; |
4 | 3 | import Util, { DataKey } from "../../uitl/Util"; |
5 | 4 | import ObjectInstance from "../../uitl/ObjectInstance"; |
5 | +import PcSdk from "../PcSdk"; | |
6 | 6 | |
7 | 7 | /** |
8 | 8 | * |
... | ... | @@ -20,115 +20,12 @@ export default class ShakeModel extends BaseModel { |
20 | 20 | private shake_day_limit: number = 0; |
21 | 21 | |
22 | 22 | private cur_shake_day_limit: number = 0; |
23 | - /** | |
24 | - * red_day_limit 红包每日极限产出 | |
25 | - * shake_day_limit 摇一摇每日极限产出 | |
26 | - * interstitial_cnt 插屏计数(每出现x次通用获得物品界面后,出现插屏) | |
27 | - * interstitial_delay 插屏出现延时(毫秒) | |
28 | - */ | |
29 | - | |
30 | - /** | |
31 | - * // let result = { | |
32 | - // data: { | |
33 | - // gameConfig: { | |
34 | - // "config": { | |
35 | - // "red_day_limit": 10, | |
36 | - // "shake_day_limit": 50, | |
37 | - // "interstitial_cnt": 2, | |
38 | - // "interstitial_delay": 500 | |
39 | - // }, | |
40 | - // "shake": [ | |
41 | - // { | |
42 | - // "id": 1, | |
43 | - // "type": 1, | |
44 | - // "weight": 1000, | |
45 | - // "num": 0 | |
46 | - // }, | |
47 | - // { | |
48 | - // "id": 2, | |
49 | - // "type": 2, | |
50 | - // "weight": 400, | |
51 | - // "num": 0 | |
52 | - // }, | |
53 | - // { | |
54 | - // "id": 3, | |
55 | - // "type": 3, | |
56 | - // "weight": 300, | |
57 | - // "num": 1 | |
58 | - // }, | |
59 | - // { | |
60 | - // "id": 4, | |
61 | - // "type": 3, | |
62 | - // "weight": 100, | |
63 | - // "num": 2 | |
64 | - // }, | |
65 | - // { | |
66 | - // "id": 5, | |
67 | - // "type": 4, | |
68 | - // "weight": 300, | |
69 | - // "num": 1 | |
70 | - // }, | |
71 | - // { | |
72 | - // "id": 6, | |
73 | - // "type": 4, | |
74 | - // "weight": 100, | |
75 | - // "num": 2 | |
76 | - // }, | |
77 | - // { | |
78 | - // "id": 7, | |
79 | - // "type": 5, | |
80 | - // "weight": 300, | |
81 | - // "num": 1 | |
82 | - // }, | |
83 | - // { | |
84 | - // "id": 8, | |
85 | - // "type": 5, | |
86 | - // "weight": 100, | |
87 | - // "num": 2 | |
88 | - // }, | |
89 | - // { | |
90 | - // "id": 9, | |
91 | - // "type": 6, | |
92 | - // "weight": 300, | |
93 | - // "num": 1 | |
94 | - // }, | |
95 | - // { | |
96 | - // "id": 10, | |
97 | - // "type": 6, | |
98 | - // "weight": 100, | |
99 | - // "num": 2 | |
100 | - // }, | |
101 | - // { | |
102 | - // "id": 11, | |
103 | - // "type": 7, | |
104 | - // "weight": 300, | |
105 | - // "num": 1 | |
106 | - // }, | |
107 | - // { | |
108 | - // "id": 12, | |
109 | - // "type": 7, | |
110 | - // "weight": 100, | |
111 | - // "num": 2 | |
112 | - // }, | |
113 | - // { | |
114 | - // "id": 13, | |
115 | - // "type": 8, | |
116 | - // "weight": 500, | |
117 | - // "num": 0 | |
118 | - // } | |
119 | - // ], | |
120 | - // 'coin_config': [] | |
121 | - // } | |
122 | - // } | |
123 | - // } | |
124 | - */ | |
23 | + | |
125 | 24 | async init() { |
126 | - let result = await AppSdk.I.getGameConfig(); | |
127 | - console.log('---------------ShakeModel-------'+JSON.stringify(result.data)) | |
128 | - | |
129 | - let data = result.data; | |
130 | - if (data['gameConfig']) { | |
131 | - let gameData = data['gameConfig']; | |
25 | + let result = PcSdk.I.gameConfig;; | |
26 | + console.log('---------------ShakeModel-- 获取摇一摇静态表-----' + JSON.stringify(result)) | |
27 | + if (result['config']) { | |
28 | + let gameData = result['config']; | |
132 | 29 | this.update(this.initData(gameData)); |
133 | 30 | } |
134 | 31 | } | ... | ... |
puchi_laya/src/sdk/sdkData/AddGoldData.ts
... | ... | @@ -1,19 +0,0 @@ |
1 | -import { AppSdk } from "../AppSdk"; | |
2 | - | |
3 | -export default class AddGoldData { | |
4 | - static coin: string = '0'; | |
5 | - static mycoin: string = '0'; | |
6 | - static initData(data: any) { | |
7 | - if (!parseInt(data.code)) { | |
8 | - AddGoldData.coin = data.data.coin; | |
9 | - AddGoldData.mycoin = data.data.mycoin; | |
10 | - } | |
11 | - | |
12 | - } | |
13 | - | |
14 | - static async addCoin(key: number = 1) { | |
15 | - let result = await AppSdk.I.addGold(key); | |
16 | - return [parseInt(this.coin),parseInt(this.mycoin)]; | |
17 | - | |
18 | - } | |
19 | -} | |
20 | 0 | \ No newline at end of file |
puchi_laya/src/sdk/sdkData/GoldConfigData.ts
... | ... | @@ -1,56 +0,0 @@ |
1 | -import { AppSdk } from "../AppSdk"; | |
2 | -import Util from "../../uitl/Util"; | |
3 | - | |
4 | -export class GoldConfigData { | |
5 | - ad: Object; | |
6 | - adnet: string; | |
7 | - app_name: string; | |
8 | - coin_config: string = ''; | |
9 | - gameUrl: string; | |
10 | - kuai_app_name: string; | |
11 | - pangolin: string; | |
12 | - tTurboAgent: string; | |
13 | - teaAgent: number; | |
14 | - tracking: string; | |
15 | - ttAppLog: string; | |
16 | - umid: string; | |
17 | - gameConfig: any; | |
18 | - | |
19 | - code: number = -3; | |
20 | - private static instance: GoldConfigData = null; | |
21 | - | |
22 | - public static get I(): GoldConfigData { | |
23 | - if (!this.instance) | |
24 | - this.instance = new GoldConfigData(); | |
25 | - return this.instance; | |
26 | - } | |
27 | - initData(data) { | |
28 | - this.code = data.code; | |
29 | - if (!data.code) { | |
30 | - data = data.data; | |
31 | - for (const key in data) { | |
32 | - if (data.hasOwnProperty(key)) { | |
33 | - const ele = data[key]; | |
34 | - this[key] = ele; | |
35 | - } | |
36 | - } | |
37 | - } | |
38 | - } | |
39 | - | |
40 | - async getGoldConfig() { | |
41 | - return new Promise<any>(async (resolve, reject) => { | |
42 | - let result = await AppSdk.I.getGameConfig(); | |
43 | - let data = result.data; | |
44 | - if (data['gameConfig']) { | |
45 | - let gameData = data['gameConfig']; | |
46 | - let configJson = await this.loadGoldCfg(gameData['coin_config'][0]) | |
47 | - resolve(configJson); | |
48 | - } | |
49 | - }); | |
50 | - } | |
51 | - | |
52 | - async loadGoldCfg(res: string) { | |
53 | - let configJson = await Util.I.load(res); | |
54 | - return configJson; | |
55 | - } | |
56 | -} |
puchi_laya/src/sdk/sdkData/MyCoinData.ts
... | ... | @@ -1,17 +0,0 @@ |
1 | -import { AppSdk } from "../AppSdk"; | |
2 | - | |
3 | -export default class MyCoinData { | |
4 | - static coin: string = ''; | |
5 | - static initData(data: any) { | |
6 | - if (!parseInt(data.code)){ | |
7 | - this.coin = data.data.coin; | |
8 | - }else{ | |
9 | - this.coin ='0'; | |
10 | - } | |
11 | - | |
12 | - } | |
13 | - static async getCoin() { | |
14 | - let result = await AppSdk.I.myCoin(); | |
15 | - return parseInt(this.coin) | |
16 | - } | |
17 | -} | |
18 | 0 | \ No newline at end of file |
puchi_laya/src/ui/layaMaxUI.ts
... | ... | @@ -17,6 +17,14 @@ export module ui { |
17 | 17 | public btnShowInterAd:Laya.Button; |
18 | 18 | public btnRewardAd:Laya.Button; |
19 | 19 | public btnRedpacket:Laya.Button; |
20 | + public btnPreNative:Laya.Button; | |
21 | + public btnPreFull:Laya.Button; | |
22 | + public btnPreInsert:Laya.Button; | |
23 | + public btnPreVideo:Laya.Button; | |
24 | + public btnCloseNative:Laya.Button; | |
25 | + public btnCloseBanner:Laya.Button; | |
26 | + public btnMinWithDrawal:Laya.Button; | |
27 | + public minWithDrawalLab:Laya.Label; | |
20 | 28 | public NativeAD:View; |
21 | 29 | constructor(){ super()} |
22 | 30 | createChildren():void { | ... | ... |