(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/util/pathtool.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, '5c24ew9BclME7NqSzhzS5RV', 'pathtool'); // Scripts/util/pathtool.js "use strict"; // -------------------------------------------------------------------- // @author: shiraho@syg.com(必填, 创建模块的人员) // @description: // 获取资源路径的接口 //
Create: new Date().toISOString() // -------------------------------------------------------------------- window.PathTool = { getPrefabPath: function getPrefabPath(module_name, file_name) { return "prefab/" + module_name + "/" + file_name + ".prefab"; // + ".prefab"; }, // 获取动态资源 getIconPath: function getIconPath(module_name, file_name, type) { var suffix = "png"; if (type) suffix = type; return "res/" + module_name + "/" + file_name + "." + suffix; }, // 获取动态资源 getUIIconPath: function getUIIconPath(module_name, file_name, type) { var suffix = "png"; if (type) suffix = type; return "ui_res/" + module_name + "/" + file_name + "." + suffix; }, // 已经废弃 getResFrame: function getResFrame(packageName, resName) { // cc.error(null, "不再使用加载合图的方式加载资源 faild--->" + resName); // return resName = resName || packageName; return "res/" + packageName + "/" + resName + ".plist"; }, // 已经废弃 getPlistPath: function getPlistPath(module_name, file_name) { // cc.error(null, "不再使用加载合图的方式加载资源 faild--->" + file_name); // return return "res/" + module_name + "/" + file_name + ".plist"; }, getHeadRes: function getHeadRes(res_id) { return "res/headicon/" + res_id + ".png"; }, getHeadcircle: function getHeadcircle(res_id) { return "res/headcircle/txt_cn_headcircle_" + res_id + ".png"; }, getHonorRes: function getHonorRes(res_id) { return "res/honor/txt_cn_honor_" + res_id + ".png"; }, getWelfareBannerRes: function getWelfareBannerRes(res_id) { return "res/welfare/welfare_banner/" + res_id + ".png"; }, getBigBuffRes: function getBigBuffRes(res_id) { return "res/bigbufficon/" + res_id + ".png"; }, // COMMON = "common", // SCENE = "scene", // BATTLE = "battle", // DUBBING = "dubbing", // Recruit = "recruit", // Drama = "drama", getSoundRes: function getSoundRes(res_type, res_name) { if (!res_type || !res_name) return; // return "sound/common/" + res_id + ".mp3"; // var res_path = null; return cc.js.formatStr("sound/%s/%s.mp3", res_type, res_name); }, // 获取大图 getBigBg: function getBigBg(res_id, bgType, module_name) { if (module_name) { module_name += "/"; } else { module_name = ""; } return "ui_res/bigbg/" + module_name + res_id + "." + (bgType || "png"); }, getCommonIcomPath: function getCommonIcomPath(icon_name) { return "ui_res/common/" + icon_name + ".png"; }, // 获取物品图标 getItemRes: function getItemRes(res_id) { return "res/item/" + res_id + ".png"; }, // 获取单战斗场景的资源 getBattleSingleBg: function getBattleSingleBg(res_id) { return "ui_res/bigbg/battle_bg/" + res_id + "/b_bg.jpg"; }, // 用于从cdn下载战斗资源的接口 getBattleSceneRes: function getBattleSceneRes(resName, is_jpg) { if (is_jpg == true) { return "ui_res/bigbg/battle_bg/" + resName + ".jpg"; } else { return "ui_res/bigbg/battle_bg/" + resName + ".png"; } }, // 获取buff资源路径 getBuffRes: function getBuffRes(res_id) { return "res/bufficon/" + res_id + ".png"; }, //获取游戏图标的接口 getFunctionRes: function getFunctionRes(res_id) { return "res/functionicon/" + res_id + ".png"; }, // 获取剧情副本的战斗背景 getBattleDrameBg: function getBattleDrameBg(res_id) { var bg_path = "ui_res/bigbg/battle_bg/" + res_id; return { s: bg_path + "/map_bg.png", f: bg_path + "/m_bg.png" }; }, getActivityBig: function getActivityBig(res_id) { return "res/activity/activity_big/" + res_id + ".png"; }, /** * 获取spine路径 */ getSpinePath: function getSpinePath(res_id, res_name) { if (res_name == null) { res_name = PlayerAction.action; } return "spine/" + res_id + "/" + res_name + ".atlas"; }, // 获取战斗中的阵法图标 getBattleFormIcon: function getBattleFormIcon(res_id) { return "res/battleformicon/battle_form_icon_" + res_id + ".png"; }, // 获取战斗中的阵营图标 getBattleCampIcon: function getBattleCampIcon(res_id) { return "res/battlecamp/battlecamp_" + res_id + ".png"; }, // 获取战斗中的阵营图标 getBattleCampIconByType: function getBattleCampIconByType(camp_type) { if (camp_type == null) { camp_type = 1; } var HeroConst = require("hero_const"); if (camp_type == HeroConst.CampType.eWater) { return "res/battlecamp/battlecamp_1001.png"; } else if (camp_type == HeroConst.CampType.eFire) { return "res/battlecamp/battlecamp_1002.png"; } else if (camp_type == HeroConst.CampType.eWind) { return "res/battlecamp/battlecamp_1003.png"; } else if (camp_type == HeroConst.CampType.eLight) { return "res/battlecamp/battlecamp_1004.png"; } else if (camp_type == HeroConst.CampType.eDark) { return "res/battlecamp/battlecamp_1005.png"; } else { return "res/battlecamp/battlecamp_1000.png"; } }, // 获取品质框背景(圆形的) getRoundQualityBg: function getRoundQualityBg(quality) { var quality = quality || 1; if (quality > 5) { quality = 5; } quality = 2000 + quality; var res_id = "mainui_" + quality; return PathTool.getUIIconPath("mainui", res_id); }, //获取配置表中的effect资源id吧 getEffectRes: function getEffectRes(id) { return gdata("effect_data", "data_effect_info", [id]) || "E88888"; }, // 根据物品品质色获取指定的图集ia getItemQualityBG: function getItemQualityBG(quality) { if (quality == null) { quality = 0; } else if (quality > 5) { quality = 5; } if (quality == 0) { return "common_1005"; } else if (quality == 1) { return "common_1006"; } else if (quality == 2) { return "common_1007"; } else if (quality == 3) { return "common_1008"; } else if (quality == 4) { return "common_1009"; } else { return "common_1010"; } }, // 获取阵营资源 getHeroCampRes: function getHeroCampRes(camp) { if (camp == null) { camp = 1; } else if (camp > 6) { camp = 1; } if (camp == 1) { // 水 return "common_90067"; } else if (camp == 2) { // 火 return "common_90068"; } else if (camp == 3) { // 风 return "common_90069"; } else if (camp == 4) { // 光 return "common_90070"; } else if (camp == 5) { // 暗 return "common_90071"; } else if (camp == 6) { //光和暗 return "common_90079"; } }, // 获取属性图标 getAttrIconByStr: function getAttrIconByStr(str) { if (str == "atk" || str == "atk_per") { return "common_90021"; } else if (str == "hp" || str == "hp_max" || str == "hp_max_per") { return "common_90022"; } else if (str == "def" || str == "def_per") { return "common_90023"; } else if (str == "speed") { return "common_90038"; } else if (str == "crit_rate") { return "common_90043"; } else if (str == "crit_ratio") { return "common_90039"; } else if (str == "hit_magic") { return "common_90040"; } else if (str == "dodge_magic") { return "common_90037"; } else if (str == "tenacity") { return "common_90021_1"; } else if (str == "hit_rate") { return "common_90021_2"; } else if (str == "res") { return "common_90021_3"; } else if (str == "dodge_rate") { return "common_90021_4"; } else if (str == "cure") { return "common_90021_5"; } else if (str == "be_cure") { return "common_90021_6"; } else if (str == "dam") { return "common_90021_7"; } else { return "common_90037"; } }, // 获取阵营图标 getHeroCampTypeIcon: function getHeroCampTypeIcon(camp_type) { if (camp_type == null) { camp_type = 1; } var HeroConst = require("hero_const"); if (camp_type == HeroConst.CampType.eWater) { return "common_90067"; } else if (camp_type == HeroConst.CampType.eFire) { return "common_90068"; } else if (camp_type == HeroConst.CampType.eWind) { return "common_90069"; } else if (camp_type == HeroConst.CampType.eLight) { return "common_90070"; } else if (camp_type == HeroConst.CampType.eLingtDark) { return "common_90079"; } else { return "common_90071"; } }, //这类单位是没有show动作的,所以要特殊处理 specialBSModel: function specialBSModel(id) { return id == 37300 || id == 37301 || id == 37302; }, //获取伙伴类型的,坦克法师这些 getPartnerTypeIcon: function getPartnerTypeIcon(_type) { _type = _type || 1; var _index = 45 + _type; return this.getCommonIcomPath("common_900" + _index); }, //获取伙伴半身像资源 getPartnerBustRes: function getPartnerBustRes(bust_id) { bust_id = bust_id || 10000; return this.getIconPath("partner", bust_id); }, getLogoRes: function getLogoRes() { // var logo_res = cc.js.formatStr("ui_res/login/%s/txt_cn_logo.png", "app") return "ui_res/login/txt_cn_logo.png"; }, //获取选中背景,通用 getSelectBg: function getSelectBg() { return this.getUIIconPath("common", "common_90019"); } }; module.exports = PathTool; cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcdXRpbFxccGF0aHRvb2wuanMiXSwibmFtZXMiOlsid2luZG93IiwiUGF0aFRvb2wiLCJnZXRQcmVmYWJQYXRoIiwibW9kdWxlX25hbWUiLCJmaWxlX25hbWUiLCJnZXRJY29uUGF0aCIsInR5cGUiLCJzdWZmaXgiLCJnZXRVSUljb25QYXRoIiwiZ2V0UmVzRnJhbWUiLCJwYWNrYWdlTmFtZSIsInJlc05hbWUiLCJnZXRQbGlzdFBhdGgiLCJnZXRIZWFkUmVzIiwicmVzX2lkIiwiZ2V0SGVhZGNpcmNsZSIsImdldEhvbm9yUmVzIiwiZ2V0V2VsZmFyZUJhbm5lclJlcyIsImdldEJpZ0J1ZmZSZXMiLCJnZXRTb3VuZFJlcyIsInJlc190eXBlIiwicmVzX25hbWUiLCJjYyIsImpzIiwiZm9ybWF0U3RyIiwiZ2V0QmlnQmciLCJiZ1R5cGUiLCJnZXRDb21tb25JY29tUGF0aCIsImljb25fbmFtZSIsImdldEl0ZW1SZXMiLCJnZXRCYXR0bGVTaW5nbGVCZyIsImdldEJhdHRsZVNjZW5lUmVzIiwiaXNfanBnIiwiZ2V0QnVmZlJlcyIsImdldEZ1bmN0aW9uUmVzIiwiZ2V0QmF0dGxlRHJhbWVCZyIsImJnX3BhdGgiLCJzIiwiZiIsImdldEFjdGl2aXR5QmlnIiwiZ2V0U3BpbmVQYXRoIiwiUGxheWVyQWN0aW9uIiwiYWN0aW9uIiwiZ2V0QmF0dGxlRm9ybUljb24iLCJnZXRCYXR0bGVDYW1wSWNvbiIsImdldEJhdHRsZUNhbXBJY29uQnlUeXBlIiwiY2FtcF90eXBlIiwiSGVyb0NvbnN0IiwicmVxdWlyZSIsIkNhbXBUeXBlIiwiZVdhdGVyIiwiZUZpcmUiLCJlV2luZCIsImVMaWdodCIsImVEYXJrIiwiZ2V0Um91bmRRdWFsaXR5QmciLCJxdWFsaXR5IiwiZ2V0RWZmZWN0UmVzIiwiaWQiLCJnZGF0YSIsImdldEl0ZW1RdWFsaXR5QkciLCJnZXRIZXJvQ2FtcFJlcyIsImNhbXAiLCJnZXRBdHRySWNvbkJ5U3RyIiwic3RyIiwiZ2V0SGVyb0NhbXBUeXBlSWNvbiIsImVMaW5ndERhcmsiLCJzcGVjaWFsQlNNb2RlbCIsImdldFBhcnRuZXJUeXBlSWNvbiIsIl90eXBlIiwiX2luZGV4IiwiZ2V0UGFydG5lckJ1c3RSZXMiLCJidXN0X2lkIiwiZ2V0TG9nb1JlcyIsImdldFNlbGVjdEJnIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQUEsTUFBTSxDQUFDQyxRQUFQLEdBQWtCO0FBQ2RDLEVBQUFBLGFBQWEsRUFBRSx1QkFBVUMsV0FBVixFQUF1QkMsU0FBdkIsRUFBa0M7QUFDN0MsV0FBTyxZQUFZRCxXQUFaLEdBQTBCLEdBQTFCLEdBQWdDQyxTQUFoQyxHQUE0QyxTQUFuRCxDQUQ2QyxDQUU3QztBQUNILEdBSmE7QUFNZDtBQUNBQyxFQUFBQSxXQUFXLEVBQUUscUJBQVVGLFdBQVYsRUFBdUJDLFNBQXZCLEVBQWtDRSxJQUFsQyxFQUF3QztBQUNqRCxRQUFJQyxNQUFNLEdBQUcsS0FBYjtBQUNBLFFBQUlELElBQUosRUFBVUMsTUFBTSxHQUFHRCxJQUFUO0FBQ1YsV0FBTyxTQUFTSCxXQUFULEdBQXVCLEdBQXZCLEdBQTZCQyxTQUE3QixHQUF5QyxHQUF6QyxHQUErQ0csTUFBdEQ7QUFDSCxHQVhhO0FBYWQ7QUFDQUMsRUFBQUEsYUFBYSxFQUFFLHVCQUFVTCxXQUFWLEVBQXVCQyxTQUF2QixFQUFrQ0UsSUFBbEMsRUFBd0M7QUFDbkQsUUFBSUMsTUFBTSxHQUFHLEtBQWI7QUFDQSxRQUFJRCxJQUFKLEVBQVVDLE1BQU0sR0FBR0QsSUFBVDtBQUNWLFdBQU8sWUFBWUgsV0FBWixHQUEwQixHQUExQixHQUFnQ0MsU0FBaEMsR0FBNEMsR0FBNUMsR0FBa0RHLE1BQXpEO0FBQ0gsR0FsQmE7QUFvQmQ7QUFDQUUsRUFBQUEsV0FBVyxFQUFFLHFCQUFVQyxXQUFWLEVBQXVCQyxPQUF2QixFQUFnQztBQUN6QztBQUNBO0FBQ0FBLElBQUFB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RCxhQUFPLGNBQVA7QUFDSDtBQUNKLEdBOVFhO0FBZ1JkO0FBQ0FDLEVBQUFBLGNBQWMsRUFBRSx3QkFBVVQsRUFBVixFQUFjO0FBQzFCLFdBQU9BLEVBQUUsSUFBSSxLQUFOLElBQWVBLEVBQUUsSUFBSSxLQUFyQixJQUE4QkEsRUFBRSxJQUFJLEtBQTNDO0FBQ0gsR0FuUmE7QUFxUmQ7QUFDQVUsRUFBQUEsa0JBQWtCLEVBQUUsNEJBQVVDLEtBQVYsRUFBaUI7QUFDakNBLElBQUFBLEtBQUssR0FBR0EsS0FBSyxJQUFJLENBQWpCOztBQUNBLFFBQUlDLE1BQU0sR0FBRyxLQUFLRCxLQUFsQjs7QUFDQSxXQUFPLEtBQUsxQyxpQkFBTCxDQUF1QixlQUFlMkMsTUFBdEMsQ0FBUDtBQUNILEdBMVJhO0FBNFJkO0FBQ0FDLEVBQUFBLGlCQUFpQixFQUFDLDJCQUFTQyxPQUFULEVBQWlCO0FBQy9CQSxJQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxLQUFyQjtBQUNBLFdBQU8sS0FBS25FLFdBQUwsQ0FBaUIsU0FBakIsRUFBMkJtRSxPQUEzQixDQUFQO0FBQ0gsR0FoU2E7QUFrU2RDLEVBQUFBLFVBQVUsRUFBQyxzQkFBVTtBQUNqQjtBQUNBLFdBQU8sOEJBQVA7QUFDSCxHQXJTYTtBQXVTZDtBQUNBQyxFQUFBQSxXQXhTYyx5QkF3U0Q7QUFDVCxXQUFPLEtBQUtsRSxhQUFMLENBQW1CLFFBQW5CLEVBQTZCLGNBQTdCLENBQVA7QUFDSDtBQTFTYSxDQUFsQjtBQTZTQW1FLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjNFLFFBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogc2hpcmFob0BzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDojrflj5botYTmupDot6/lvoTnmoTmjqXlj6Ncbi8vIDxici8+Q3JlYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbndpbmRvdy5QYXRoVG9vbCA9IHtcbiAgICBnZXRQcmVmYWJQYXRoOiBmdW5jdGlvbiAobW9kdWxlX25hbWUsIGZpbGVfbmFtZSkge1xuICAgICAgICByZXR1cm4gXCJwcmVmYWIvXCIgKyBtb2R1bGVfbmFtZSArIFwiL1wiICsgZmlsZV9uYW1lICsgXCIucHJlZmFiXCI7XG4gICAgICAgIC8vICsgXCIucHJlZmFiXCI7XG4gICAgfSxcblxuICAgIC8vIOiOt+WPluWKqOaAgei1hOa6kFxuICAgIGdldEljb25QYXRoOiBmdW5jdGlvbiAobW9kdWxlX25hbWUsIGZpbGVfbmFtZSwgdHlwZSkge1xuICAgICAgICB2YXIgc3VmZml4ID0gXCJwbmdcIlxuICAgICAgICBpZiAodHlwZSkgc3VmZml4ID0gdHlwZVxuICAgICAgICByZXR1cm4gXCJyZXMvXCIgKyBtb2R1bGVfbmFtZSArIFwiL1wiICsgZmlsZV9uYW1lICsgXCIuXCIgKyBzdWZmaXg7XG4gICAgfSxcblxuICAgIC8vIOiOt+WPluWKqOaAgei1hOa6kFxuICAgIGdldFVJSWNvblBhdGg6IGZ1bmN0aW9uIChtb2R1bGVfbmFtZSwgZmlsZV9uYW1lLCB0eXBlKSB7XG4gICAgICAgIHZhciBzdWZmaXggPSBcInBuZ1wiXG4gICAgICAgIGlmICh0eXBlKSBzdWZmaXggPSB0eXBlXG4gICAgICAgIHJldHVybiBcInVpX3Jlcy9cIiArIG1vZHVsZV9uYW1lICsgXCIvXCIgKyBmaWxlX25hbWUgKyBcIi5cIiArIHN1ZmZpeDtcbiAgICB9LFxuXG4gICAgLy8g5bey57uP5bqf5byDXG4gICAgZ2V0UmVzRnJhbWU6IGZ1bmN0aW9uIChwYWNrYWdlTmFtZSwgcmVzTmFtZSkge1xuICAgICAgICAvLyBjYy5lcnJvcihudWxsLCBcIuS4jeWGjeS9v+eUqOWKoOi9veWQiOWbvueahOaWueW8j+WKoOi9vei1hOa6kCBmYWlsZC0tLT5cIiArIHJlc05hbWUpO1xuICAgICAgICAvLyByZXR1cm5cbiAgICAgICAgcmVzTmFtZSA9IHJlc05hbWUgfHwgcGFja2FnZU5hbWU7XG4gICAgICAgIHJldHVybiBcInJlcy9cIiArIHBhY2thZ2VOYW1lICsgXCIvXCIgKyByZXNOYW1lICsgXCIucGxpc3RcIjtcbiAgICB9LFxuXG4gICAgLy8g5bey57uP5bqf5byDXG4gICAgZ2V0UGxpc3RQYXRoOiBmdW5jdGlvbiAobW9kdWxlX25hbWUsIGZpbGVfbmFtZSkge1xuICAgICAgICAvLyBjYy5lcnJvcihudWxsLCBcIuS4jeWGjeS9v+eUqOWKoOi9veWQiOWbvueahOaWueW8j+WKoOi9vei1hOa6kCBmYWlsZC0tLT5cIiArIGZpbGVfbmFtZSk7XG4gICAgICAgIC8vIHJldHVyblxuICAgICAgICByZXR1cm4gXCJyZXMvXCIgKyBtb2R1bGVfbmFtZSArIFwiL1wiICsgZmlsZV9uYW1lICsgXCIucGxpc3RcIjtcbiAgICB9LFxuXG4gICAgZ2V0SGVhZFJlczogZnVuY3Rpb24gKHJlc19pZCkge1xuICAgICAgICByZXR1cm4gXCJyZXMvaGVhZGljb24vXCIgKyByZXNfaWQgKyBcIi5wbmdcIjtcbiAgICB9LFxuICAgIGdldEhlYWRjaXJjbGU6IGZ1bmN0aW9uIChyZXNfaWQpIHtcbiAgICAgICAgcmV0dXJuIFwicmVzL2hlYWRjaXJjbGUvdHh0X2NuX2hlYWRjaXJjbGVfXCIgKyByZXNfaWQgKyBcIi5wbmdcIjtcbiAgICB9LFxuICAgIGdldEhvbm9yUmVzOiBmdW5jdGlvbiAocmVzX2lkKSB7XG4gICAgICAgIHJldHVybiBcInJlcy9ob25vci90eHRfY25faG9ub3JfXCIgKyByZXNfaWQgKyBcIi5wbmdcIjtcbiAgICB9LFxuICAgIGdldFdlbGZhcmVCYW5uZXJSZXM6IGZ1bmN0aW9uKHJlc19pZCl7XG4gICAgICAgIHJldHVybiBcInJlcy93ZWxmYXJlL3dlbGZhcmVfYmFubmVyL1wiICsgcmVzX2lkICsgXCIucG5nXCJcbiAgICB9LFxuICAgIGdldEJpZ0J1ZmZSZXMocmVzX2lkKXtcbiAgICAgICAgcmV0dXJuIFwicmVzL2JpZ2J1ZmZpY29uL1wiICsgcmVzX2lkICsgXCIucG5nXCJcbiAgICB9LFxuICAgIC8vIENPTU1PTiAgID0gXCJjb21tb25cIixcbiAgICAvLyBTQ0VORSAgICA9IFwic2NlbmVcIixcbiAgICAvLyBCQVRUTEUgICA9IFwiYmF0dGxlXCIsXG4gICAgLy8gRFVCQklORyAgPSBcImR1YmJpbmdcIixcbiAgICAvLyBSZWNydWl0ICA9IFwicmVjcnVpdFwiLFxuICAgIC8vIERyYW1hICAgID0gXCJkcmFtYVwiLFxuICAgIGdldFNvdW5kUmVzOiBmdW5jdGlvbiAocmVzX3R5cGUsIHJlc19uYW1lKSB7XG4gICAgICAgIGlmICghcmVzX3R5cGUgfHwgIXJlc19uYW1lKSByZXR1cm5cbiAgICAgICAgLy8gcmV0dXJuIFwic291bmQvY29tbW9uL1wiICsgcmVzX2lkICsgXCIubXAzXCI7XG4gICAgICAgIC8vIHZhciByZXNfcGF0aCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjYy5qcy5mb3JtYXRTdHIoXCJzb3VuZC8lcy8lcy5tcDNcIiwgcmVzX3R5cGUsIHJlc19uYW1lKTtcbiAgICB9LFxuXG4gICAgLy8g6I635Y+W5aSn5Zu+IFxuICAgIGdldEJpZ0JnOiBmdW5jdGlvbiAocmVzX2lkLCBiZ1R5cGUsIG1vZHVsZV9uYW1lKSB7XG4gICAgICAgIGlmIChtb2R1bGVfbmFtZSkge1xuICAgICAgICAgICAgbW9kdWxlX25hbWUgKz0gXCIvXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2R1bGVfbmFtZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwidWlfcmVzL2JpZ2JnL1wiICsgbW9kdWxlX25hbWUgKyByZXNfaWQgKyBcIi5cIiArIChiZ1R5cGUgfHwgXCJwbmdcIik7XG4gICAgfSxcblxuICAgIGdldENvbW1vbkljb21QYXRoOiBmdW5jdGlvbiAoaWNvbl9uYW1lKSB7XG4gICAgICAgIHJldHVybiBcInVpX3Jlcy9jb21tb24vXCIgKyBpY29uX25hbWUgKyBcIi5wbmdcIjtcbiAgICB9LFxuXG4gICAgLy8g6I635Y+W54mp5ZOB5Zu+5qCHXG4gICAgZ2V0SXRlbVJlczogZnVuY3Rpb24gKHJlc19pZCkge1xuICAgICAgICByZXR1cm4gXCJyZXMvaXRlbS9cIiArIHJlc19pZCArIFwiLnBuZ1wiO1xuICAgIH0sXG4gICAgLy8g6I635Y+W5Y2V5oiY5paX5Zy65pmv55qE6LWE5rqQXG4gICAgZ2V0QmF0dGxlU2luZ2xlQmc6IGZ1bmN0aW9uIChyZXNfaWQpIHtcbiAgICAgICAgcmV0dXJuIFwidWlfcmVzL2JpZ2JnL2JhdHRsZV9iZy9cIiArIHJlc19pZCArIFwiL2JfYmcuanBnXCI7XG4gICAgfSxcblxuICAgIC8vIOeUqOS6juS7jmNkbuS4i+i9veaImOaWl+i1hOa6kOeahOaOpeWPo1xuICAgIGdldEJhdHRsZVNjZW5lUmVzOmZ1bmN0aW9uKHJlc05hbWUsIGlzX2pwZyl7XG4gICAgICAgIGlmKGlzX2pwZyA9PSB0cnVlKXtcbiAgICAgICAgICAgIHJldHVybiBcInVpX3Jlcy9iaWdiZy9iYXR0bGVfYmcvXCIrcmVzTmFtZStcIi5qcGdcIjtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4gXCJ1aV9yZXMvYmlnYmcvYmF0dGxlX2JnL1wiKyByZXNOYW1lICtcIi5wbmdcIjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDojrflj5ZidWZm6LWE5rqQ6Lev5b6EXG4gICAgZ2V0QnVmZlJlczpmdW5jdGlvbihyZXNfaWQpe1xuICAgICAgICByZXR1cm4gXCJyZXMvYnVmZmljb24vXCIgKyByZXNfaWQgKyBcIi5wbmdcIjtcbiAgICB9LFxuXG4gICAgLy/ojrflj5bmuLjmiI/lm77moIfnmoTmjqXlj6NcbiAgICBnZXRGdW5jdGlvblJlczpmdW5jdGlvbihyZXNfaWQpe1xuICAgICAgICByZXR1cm4gXCJyZXMvZnVuY3Rpb25pY29uL1wiICsgcmVzX2lkICsgXCIucG5nXCJcbiAgICB9LFxuXG4gICAgLy8g6I635Y+W5Ymn5oOF5Ymv5pys55qE5oiY5paX6IOM5pmvXG4gICAgZ2V0QmF0dGxlRHJhbWVCZzogZnVuY3Rpb24gKHJlc19pZCkge1xuICAgICAgICB2YXIgYmdfcGF0aCA9IFwidWlfcmVzL2JpZ2JnL2JhdHRsZV9iZy9cIiArIHJlc19pZDtcbiAgICAgICAgcmV0dXJuIHsgczogYmdfcGF0aCArIFwiL21hcF9iZy5wbmdcIiwgZjogYmdfcGF0aCArIFwiL21fYmcucG5nXCIgfTtcbiAgICB9LFxuICAgIGdldEFjdGl2aXR5QmlnOiBmdW5jdGlvbiAocmVzX2lkKSB7XG4gICAgICAgIHJldHVybiBcInJlcy9hY3Rpdml0eS9hY3Rpdml0eV9iaWcvXCIgKyByZXNfaWQgKyBcIi5wbmdcIjtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIOiOt+WPlnNwaW5l6Lev5b6EXG4gICAgICovXG4gICAgZ2V0U3BpbmVQYXRoOiBmdW5jdGlvbiAocmVzX2lkLCByZXNfbmFtZSkge1xuICAgICAgICBpZiAocmVzX25hbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzX25hbWUgPSBQbGF5ZXJBY3Rpb24uYWN0aW9uXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwic3BpbmUvXCIgKyByZXNfaWQgKyBcIi9cIiArIHJlc19uYW1lICsgXCIuYXRsYXNcIjtcbiAgICB9LFxuXG4gICAgLy8g6I635Y+W5oiY5paX5Lit55qE6Zi15rOV5Zu+5qCHXG4gICAgZ2V0QmF0dGxlRm9ybUljb246ZnVuY3Rpb24ocmVzX2lkKXtcbiAgICAgICAgcmV0dXJuIFwicmVzL2JhdHRsZWZvcm1pY29uL2JhdHRsZV9mb3JtX2ljb25fXCIgKyByZXNfaWQgKyBcIi5wbmdcIjtcbiAgICB9LFxuXG4gICAgLy8g6I635Y+W5oiY5paX5Lit55qE6Zi16JCl5Zu+5qCHXG4gICAgZ2V0QmF0dGxlQ2FtcEljb246ZnVuY3Rpb24ocmVzX2lkKXtcbiAgICAgICAgcmV0dXJuIFwicmVzL2JhdHRsZWNhbXAvYmF0dGxlY2FtcF9cIiArIHJlc19pZCArIFwiLnBuZ1wiO1xuICAgIH0sXG5cbiAgICAvLyDojrflj5bmiJjmlpfkuK3nmoTpmLXokKXlm77moIdcbiAgICBnZXRCYXR0bGVDYW1wSWNvbkJ5VHlwZTpmdW5jdGlvbihjYW1wX3R5cGUpe1xuICAgICAgICBpZiAoY2FtcF90eXBlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNhbXBfdHlwZSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEhlcm9Db25zdCA9IHJlcXVpcmUoXCJoZXJvX2NvbnN0XCIpXG4gICAgICAgIGlmIChjYW1wX3R5cGUgPT0gSGVyb0NvbnN0LkNhbXBUeXBlLmVXYXRlcikge1xuICAgICAgICAgICAgcmV0dXJuIFwicmVzL2JhdHRsZWNhbXAvYmF0dGxlY2FtcF8xMDAxLnBuZ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGNhbXBfdHlwZSA9PSBIZXJvQ29uc3QuQ2FtcFR5cGUuZUZpcmUpIHtcbiAgICAgICAgICAgIHJldHVybiBcInJlcy9iYXR0bGVjYW1wL2JhdHRsZWNhbXBfMTAwMi5wbmdcIjtcbiAgICAgICAgfSBlbHNlIGlmIChjYW1wX3R5cGUgPT0gSGVyb0NvbnN0LkNhbXBUeXBlLmVXaW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJyZXMvYmF0dGxlY2FtcC9iYXR0bGVjYW1wXzEwMDMucG5nXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoY2FtcF90eXBlID09IEhlcm9Db25zdC5DYW1wVHlwZS5lTGlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBcInJlcy9iYXR0bGVjYW1wL2JhdHRsZWNhbXBfMTAwNC5wbmdcIjtcbiAgICAgICAgfSBlbHNlIGlmIChjYW1wX3R5cGUgPT0gSGVyb0NvbnN0LkNhbXBUeXBlLmVEYXJrKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJyZXMvYmF0dGxlY2FtcC9iYXR0bGVjYW1wXzEwMDUucG5nXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXCJyZXMvYmF0dGxlY2FtcC9iYXR0bGVjYW1wXzEwMDAucG5nXCI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6I635Y+W5ZOB6LSo5qGG6IOM5pmvKOWchuW9oueahClcbiAgICBnZXRSb3VuZFF1YWxpdHlCZzpmdW5jdGlvbihxdWFsaXR5KXtcbiAgICAgICAgdmFyIHF1YWxpdHkgPSBxdWFsaXR5IHx8IDE7XG4gICAgICAgIGlmKHF1YWxpdHkgPiA1KXtcbiAgICAgICAgICAgIHF1YWxpdHkgPSA1O1xuICAgICAgICB9XG4gICAgICAgIHF1YWxpdHkgPSAyMDAwICsgcXVhbGl0eTtcbiAgICAgICAgdmFyIHJlc19pZCA9IFwibWFpbnVpX1wiK3F1YWxpdHk7XG4gICAgICAgIHJldHVybiBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibWFpbnVpXCIsIHJlc19pZCk7XG4gICAgfSxcblxuICAgIC8v6I635Y+W6YWN572u6KGo5Lit55qEZWZmZWN06LWE5rqQaWTlkKdcbiAgICBnZXRFZmZlY3RSZXM6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICByZXR1cm4gZ2RhdGEoXCJlZmZlY3RfZGF0YVwiLCBcImRhdGFfZWZmZWN0X2luZm9cIiwgW2lkXSkgfHwgXCJFODg4ODhcIjtcbiAgICB9LFxuXG4gICAgLy8g5qC55o2u54mp5ZOB5ZOB6LSo6Imy6I635Y+W5oyH5a6a55qE5Zu+6ZuGaWFcbiAgICBnZXRJdGVtUXVhbGl0eUJHOiBmdW5jdGlvbiAocXVhbGl0eSkge1xuICAgICAgICBpZiAocXVhbGl0eSA9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWFsaXR5ID0gMFxuICAgICAgICB9IGVsc2UgaWYgKHF1YWxpdHkgPiA1KSB7XG4gICAgICAgICAgICBxdWFsaXR5ID0gNVxuICAgICAgICB9XG4gICAgICAgIGlmIChxdWFsaXR5ID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl8xMDA1XCJcbiAgICAgICAgfSBlbHNlIGlmIChxdWFsaXR5ID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl8xMDA2XCJcbiAgICAgICAgfSBlbHNlIGlmIChxdWFsaXR5ID09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl8xMDA3XCJcbiAgICAgICAgfSBlbHNlIGlmIChxdWFsaXR5ID09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl8xMDA4XCJcbiAgICAgICAgfSBlbHNlIGlmIChxdWFsaXR5ID09IDQpIHtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl8xMDA5XCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl8xMDEwXCJcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDojrflj5bpmLXokKXotYTmupBcbiAgICBnZXRIZXJvQ2FtcFJlczogZnVuY3Rpb24gKGNhbXApIHtcbiAgICAgICAgaWYgKGNhbXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FtcCA9IDFcbiAgICAgICAgfSBlbHNlIGlmIChjYW1wID4gNikge1xuICAgICAgICAgICAgY2FtcCA9IDFcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtcCA9PSAxKSB7ICAgICAgICAgICAgICAgIC8vIOawtFxuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDY3XCJcbiAgICAgICAgfSBlbHNlIGlmIChjYW1wID09IDIpIHsgICAgICAgICAvLyDngatcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl85MDA2OFwiXG4gICAgICAgIH0gZWxzZSBpZiAoY2FtcCA9PSAzKSB7ICAgICAgICAgLy8g6aOOXG4gICAgICAgICAgICByZXR1cm4gXCJjb21tb25fOTAwNjlcIlxuICAgICAgICB9IGVsc2UgaWYgKGNhbXAgPT0gNCkgeyAgICAgICAgIC8vIOWFiVxuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDcwXCJcbiAgICAgICAgfSBlbHNlIGlmIChjYW1wID09IDUpeyAgICAgICAgICAvLyDmmpdcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl85MDA3MVwiXG4gICAgICAgIH0gZWxzZSBpZihjYW1wID09IDYpeyAgICAgICAgICAgLy/lhYnlkozmmpdcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl85MDA3OVwiXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6I635Y+W5bGe5oCn5Zu+5qCHXG4gICAgZ2V0QXR0ckljb25CeVN0cjogZnVuY3Rpb24gKHN0cikge1xuICAgICAgICBpZiAoc3RyID09IFwiYXRrXCIgfHwgc3RyID09IFwiYXRrX3BlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tb25fOTAwMjFcIlxuICAgICAgICB9IGVsc2UgaWYgKHN0ciA9PSBcImhwXCIgfHwgc3RyID09IFwiaHBfbWF4XCIgfHwgc3RyID09IFwiaHBfbWF4X3BlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tb25fOTAwMjJcIlxuICAgICAgICB9IGVsc2UgaWYgKHN0ciA9PSBcImRlZlwiIHx8IHN0ciA9PSBcImRlZl9wZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDIzXCJcbiAgICAgICAgfSBlbHNlIGlmIChzdHIgPT0gXCJzcGVlZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tb25fOTAwMzhcIlxuICAgICAgICB9IGVsc2UgaWYgKHN0ciA9PSBcImNyaXRfcmF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tb25fOTAwNDNcIlxuICAgICAgICB9IGVsc2UgaWYgKHN0ciA9PSBcImNyaXRfcmF0aW9cIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDM5XCJcbiAgICAgICAgfSBlbHNlIGlmIChzdHIgPT0gXCJoaXRfbWFnaWNcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDQwXCJcbiAgICAgICAgfSBlbHNlIGlmIChzdHIgPT0gXCJkb2RnZV9tYWdpY1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tb25fOTAwMzdcIlxuICAgICAgICB9IGVsc2UgaWYoc3RyID09IFwidGVuYWNpdHlcIil7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tb25fOTAwMjFfMVwiXG4gICAgICAgIH0gZWxzZSBpZihzdHIgPT0gXCJoaXRfcmF0ZVwiKXtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl85MDAyMV8yXCJcbiAgICAgICAgfSBlbHNlIGlmKHN0ciA9PSBcInJlc1wiKXtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl85MDAyMV8zXCJcbiAgICAgICAgfSBlbHNlIGlmKHN0ciA9PSBcImRvZGdlX3JhdGVcIil7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tb25fOTAwMjFfNFwiXG4gICAgICAgIH0gZWxzZSBpZihzdHIgPT0gXCJjdXJlXCIpe1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDIxXzVcIlxuICAgICAgICB9IGVsc2UgaWYoc3RyID09IFwiYmVfY3VyZVwiKXtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl85MDAyMV82XCJcbiAgICAgICAgfSBlbHNlIGlmKHN0ciA9PSBcImRhbVwiKXtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl85MDAyMV83XCJcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDM3XCJcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDojrflj5bpmLXokKXlm77moIdcbiAgICBnZXRIZXJvQ2FtcFR5cGVJY29uOmZ1bmN0aW9uKGNhbXBfdHlwZSl7XG4gICAgICAgIGlmIChjYW1wX3R5cGUgPT0gbnVsbCl7XG4gICAgICAgICAgICBjYW1wX3R5cGUgPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBIZXJvQ29uc3QgPSByZXF1aXJlKFwiaGVyb19jb25zdFwiKVxuICAgICAgICBpZiAoY2FtcF90eXBlID09IEhlcm9Db25zdC5DYW1wVHlwZS5lV2F0ZXIpe1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDY3XCI7XG4gICAgICAgIH1lbHNlIGlmKGNhbXBfdHlwZSA9PSBIZXJvQ29uc3QuQ2FtcFR5cGUuZUZpcmUpe1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDY4XCI7XG4gICAgICAgIH1lbHNlIGlmKGNhbXBfdHlwZSA9PSBIZXJvQ29uc3QuQ2FtcFR5cGUuZVdpbmQpe1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDY5XCI7XG4gICAgICAgIH1lbHNlIGlmKGNhbXBfdHlwZSA9PSBIZXJvQ29uc3QuQ2FtcFR5cGUuZUxpZ2h0KXtcbiAgICAgICAgICAgIHJldHVybiBcImNvbW1vbl85MDA3MFwiO1xuICAgICAgICB9ZWxzZSBpZihjYW1wX3R5cGUgPT0gSGVyb0NvbnN0LkNhbXBUeXBlLmVMaW5ndERhcmspe1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDc5XCI7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbW9uXzkwMDcxXCI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/ov5nnsbvljZXkvY3mmK/msqHmnIlzaG935Yqo5L2c55qELOaJgOS7peimgeeJueauiuWkhOeQhlxuICAgIHNwZWNpYWxCU01vZGVsOiBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkID09IDM3MzAwIHx8IGlkID09IDM3MzAxIHx8IGlkID09IDM3MzAyXG4gICAgfSxcblxuICAgIC8v6I635Y+W5LyZ5Ly057G75Z6L55qELOWdpuWFi+azleW4iOi/meS6m1xuICAgIGdldFBhcnRuZXJUeXBlSWNvbjogZnVuY3Rpb24gKF90eXBlKSB7XG4gICAgICAgIF90eXBlID0gX3R5cGUgfHwgMTtcbiAgICAgICAgdmFyIF9pbmRleCA9IDQ1ICsgX3R5cGU7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbW1vbkljb21QYXRoKFwiY29tbW9uXzkwMFwiICsgX2luZGV4KTtcbiAgICB9LFxuXG4gICAgLy/ojrflj5bkvJnkvLTljYrouqvlg4/otYTmupBcbiAgICBnZXRQYXJ0bmVyQnVzdFJlczpmdW5jdGlvbihidXN0X2lkKXtcbiAgICAgICAgYnVzdF9pZCA9IGJ1c3RfaWQgfHwgMTAwMDA7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEljb25QYXRoKFwicGFydG5lclwiLGJ1c3RfaWQpO1xuICAgIH0sXG5cbiAgICBnZXRMb2dvUmVzOmZ1bmN0aW9uKCl7XG4gICAgICAgIC8vIHZhciBsb2dvX3JlcyA9IGNjLmpzLmZvcm1hdFN0cihcInVpX3Jlcy9sb2dpbi8lcy90eHRfY25fbG9nby5wbmdcIiwgXCJhcHBcIilcbiAgICAgICAgcmV0dXJuIFwidWlfcmVzL2xvZ2luL3R4dF9jbl9sb2dvLnBuZ1wiXG4gICAgfSxcblxuICAgIC8v6I635Y+W6YCJ5Lit6IOM5pmvLOmAmueUqFxuICAgIGdldFNlbGVjdEJnKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFVJSWNvblBhdGgoXCJjb21tb25cIiwgXCJjb21tb25fOTAwMTlcIilcbiAgICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXRoVG9vbDtcbiJdfQ==