Remove Copy Watermark

Remove copyright watermark appended to the end of copied content

当前为 2023-01-19 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @namespace     https://github.com/jeffreytse
// @name          Remove Copy Watermark
// @description   Remove copyright watermark appended to the end of copied content
// @version       0.1.0
// @author        Jeffrey Tse <[email protected]>
// @license       MIT
// @copyright     2022, MIT
// @match         *://*/*
// @grant         none
// @run-at        document-start
// ==/UserScript==
/******/ (function() { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ "./dist/plugins/tampermonkey/remove-copy-watermark.user.js":
/*!*****************************************************************!*\
  !*** ./dist/plugins/tampermonkey/remove-copy-watermark.user.js ***!
  \*****************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {



var __importDefault = this && this.__importDefault || function (mod) {
  return mod && mod.__esModule ? mod : {
    "default": mod
  };
};
Object.defineProperty(exports, "__esModule", ({
  value: true
}));
const src_1 = __importDefault(__webpack_require__(/*! ../../src */ "./dist/src/index.js"));
const package_json_1 = __importDefault(__webpack_require__(/*! ../../package.json */ "./dist/package.json"));
(function () {
  'use strict';

  console.log(`=== Tamper Monkey Plugin ===
    Name: ${package_json_1.default.name}
    Version: ${package_json_1.default.version}
    Homepage: ${package_json_1.default.homepage}`.replace(/^\s+/gm, ''));
  src_1.default.hijack();
})();

/***/ }),

/***/ "./dist/src/hijack.js":
/*!****************************!*\
  !*** ./dist/src/hijack.js ***!
  \****************************/
/***/ (function(__unused_webpack_module, exports) {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
const checkWatermark = (keywords, event, callback) => {
  var _a, _b, _c;
  let data;
  if ((((_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.types) || []).indexOf('text/plain') < 0) {
    data = ((_b = window.getSelection()) === null || _b === void 0 ? void 0 : _b.toString()) || '';
  } else {
    data = ((_c = event.clipboardData) === null || _c === void 0 ? void 0 : _c.getData('text/plain')) || '';
  }
  setTimeout(() => {
    var _a;
    const oriData = ((_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.toString()) || '';
    const extData = data.substring(oriData.length || data.length);
    if (extData.length === 0) {
      return;
    }
    const tmpData = extData.toLowerCase();
    const hasWatermark = keywords.some(keyword => tmpData.search(keyword));
    callback && callback(hasWatermark ? extData : undefined);
  });
};
const removeWatermark = event => {
  const target = event.target;
  const injectCopy = event => {
    event.stopPropagation();
    target === null || target === void 0 ? void 0 : target.removeEventListener('copy', injectCopy);
  };
  target === null || target === void 0 ? void 0 : target.addEventListener('copy', injectCopy);
  document.execCommand('copy', true);
};
const copyHandler = keywords => {
  const handler = event => {
    checkWatermark(keywords, event, watermark => {
      if (!watermark) {
        return;
      }
      console.log('Remove Copy From Watermark!\n' + watermark);
      removeWatermark(event);
    });
  };
  return handler;
};
const hijack = keywords => {
  console.log('Hijack Remove Copy Watermark...');
  const handler = copyHandler(keywords || ['copyright', '版权', '著作権', '版權', '저작권', 'Авторские права', window.location.href]);
  const addEventListener = window.addEventListener;
  addEventListener('copy', handler);
};
exports["default"] = hijack;

/***/ }),

/***/ "./dist/src/index.js":
/*!***************************!*\
  !*** ./dist/src/index.js ***!
  \***************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {



var __importDefault = this && this.__importDefault || function (mod) {
  return mod && mod.__esModule ? mod : {
    "default": mod
  };
};
Object.defineProperty(exports, "__esModule", ({
  value: true
}));
const hijack_1 = __importDefault(__webpack_require__(/*! ./hijack */ "./dist/src/hijack.js"));
exports["default"] = {
  hijack: hijack_1.default
};

/***/ }),

/***/ "./dist/package.json":
/*!***************************!*\
  !*** ./dist/package.json ***!
  \***************************/
/***/ (function(module) {

module.exports = JSON.parse('{"name":"remove-copy-watermark","version":"0.1.0","description":"Remove copyright watermark appended to the end of copied content","main":"index.js","scripts":{"build":"rimraf dist && tsc && npm run bundle","bundle":"webpack --config dist/webpack.config.js","test":"echo \\"Error: no test specified\\" && exit 1","lint":"gts lint","clean":"gts clean","compile":"tsc","fix":"gts fix","prepare":"npm run compile","pretest":"npm run compile","posttest":"npm run lint"},"repository":{"type":"git","url":"git+https://github.com/jeffreytse/remove-copy-watermark.git"},"author":"Jeffrey Tse <[email protected]>","homepage":"https://github.com/jeffreytse/remove-copy-watermark#readme","bugs":{"url":"https://github.com/jeffreytse/remove-copy-watermark/issues"},"license":"MIT","engines":{"node":">=14"},"devDependencies":{"@babel/core":"^7.20.12","@babel/preset-env":"^7.20.2","@types/node":"^14.18.36","@types/webpack":"^5.28.0","babel-loader":"^9.1.2","gts":"^3.1.1","rimraf":"^4.0.5","typescript":"^4.9.4","webpack":"^5.75.0","webpack-cli":"^5.0.1"}}');

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module is referenced by other modules so it can't be inlined
/******/ 	var __webpack_exports__ = __webpack_require__("./dist/plugins/tampermonkey/remove-copy-watermark.user.js");
/******/ 	
/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0MsR0FBRyxDQUFDLGlDQUFpQyxDQUFDO0VBQzlDLE1BQU0yQyxPQUFPLEdBQUdELFdBQVcsQ0FBQ2xDLFFBQVEsSUFBSSxDQUNwQyxXQUFXLEVBQ1gsSUFBSSxFQUNKLEtBQUssRUFDTCxJQUFJLEVBQ0osS0FBSyxFQUNMLGlCQUFpQixFQUNqQlUsTUFBTSxDQUFDMkIsUUFBUSxDQUFDQyxJQUFJLENBQ3ZCLENBQUM7RUFDRixNQUFNUCxnQkFBZ0IsR0FBR3JCLE1BQU0sQ0FBQ3FCLGdCQUFnQjtFQUNoREEsZ0JBQWdCLENBQUMsTUFBTSxFQUFFSSxPQUFPLENBQUM7QUFDckMsQ0FBQztBQUNEakQsa0JBQWUsR0FBR1ksTUFBTTs7Ozs7Ozs7OztBQzFEWDs7QUFDYixJQUFJakIsZUFBZSxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLGVBQWUsSUFBSyxVQUFVQyxHQUFHLEVBQUU7RUFDbkUsT0FBUUEsR0FBRyxJQUFJQSxHQUFHLENBQUNDLFVBQVUsR0FBSUQsR0FBRyxHQUFHO0lBQUUsU0FBUyxFQUFFQTtFQUFJLENBQUM7QUFDN0QsQ0FBQztBQUNERSw4Q0FBNkM7RUFBRUcsS0FBSyxFQUFFO0FBQUssQ0FBQyxFQUFDO0FBQzdELE1BQU1vRCxRQUFRLEdBQUcxRCxlQUFlLENBQUNRLG1CQUFPLENBQUMsc0NBQVUsQ0FBQyxDQUFDO0FBQ3JESCxrQkFBZSxHQUFHO0VBQ2RZLE1BQU0sRUFBRXlDLFFBQVEsQ0FBQzlDO0FBQ3JCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7VUNSRDtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7O1VFdEJBO1VBQ0E7VUFDQTtVQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vZGlzdC9wbHVnaW5zL3RhbXBlcm1vbmtleS9yZW1vdmUtY29weS13YXRlcm1hcmsudXNlci5qcyIsIndlYnBhY2s6Ly8vLi9kaXN0L3NyYy9oaWphY2suanMiLCJ3ZWJwYWNrOi8vLy4vZGlzdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYWZ0ZXItc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHNyY18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9zcmNcIikpO1xuY29uc3QgcGFja2FnZV9qc29uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhY2thZ2UuanNvblwiKSk7XG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBjb25zb2xlLmxvZyhgPT09IFRhbXBlciBNb25rZXkgUGx1Z2luID09PVxuICAgIE5hbWU6ICR7cGFja2FnZV9qc29uXzEuZGVmYXVsdC5uYW1lfVxuICAgIFZlcnNpb246ICR7cGFja2FnZV9qc29uXzEuZGVmYXVsdC52ZXJzaW9ufVxuICAgIEhvbWVwYWdlOiAke3BhY2thZ2VfanNvbl8xLmRlZmF1bHQuaG9tZXBhZ2V9YC5yZXBsYWNlKC9eXFxzKy9nbSwgJycpKTtcbiAgICBzcmNfMS5kZWZhdWx0LmhpamFjaygpO1xufSkoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY2hlY2tXYXRlcm1hcmsgPSAoa2V5d29yZHMsIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGxldCBkYXRhO1xuICAgIGlmICgoKChfYSA9IGV2ZW50LmNsaXBib2FyZERhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50eXBlcykgfHwgW10pLmluZGV4T2YoJ3RleHQvcGxhaW4nKSA8IDApIHtcbiAgICAgICAgZGF0YSA9ICgoX2IgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b1N0cmluZygpKSB8fCAnJztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSAoKF9jID0gZXZlbnQuY2xpcGJvYXJkRGF0YSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmdldERhdGEoJ3RleHQvcGxhaW4nKSkgfHwgJyc7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG9yaURhdGEgPSAoKF9hID0gd2luZG93LmdldFNlbGVjdGlvbigpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9TdHJpbmcoKSkgfHwgJyc7XG4gICAgICAgIGNvbnN0IGV4dERhdGEgPSBkYXRhLnN1YnN0cmluZyhvcmlEYXRhLmxlbmd0aCB8fCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIGlmIChleHREYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRtcERhdGEgPSBleHREYXRhLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGhhc1dhdGVybWFyayA9IGtleXdvcmRzLnNvbWUoa2V5d29yZCA9PiB0bXBEYXRhLnNlYXJjaChrZXl3b3JkKSk7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKGhhc1dhdGVybWFyayA/IGV4dERhdGEgOiB1bmRlZmluZWQpO1xuICAgIH0pO1xufTtcbmNvbnN0IHJlbW92ZVdhdGVybWFyayA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCBpbmplY3RDb3B5ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29weScsIGluamVjdENvcHkpO1xuICAgIH07XG4gICAgdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCBpbmplY3RDb3B5KTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScsIHRydWUpO1xufTtcbmNvbnN0IGNvcHlIYW5kbGVyID0gKGtleXdvcmRzKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgICAgICBjaGVja1dhdGVybWFyayhrZXl3b3JkcywgZXZlbnQsIHdhdGVybWFyayA9PiB7XG4gICAgICAgICAgICBpZiAoIXdhdGVybWFyaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmUgQ29weSBGcm9tIFdhdGVybWFyayFcXG4nICsgd2F0ZXJtYXJrKTtcbiAgICAgICAgICAgIHJlbW92ZVdhdGVybWFyayhldmVudCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZXI7XG59O1xuY29uc3QgaGlqYWNrID0gKGtleXdvcmRzKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0hpamFjayBSZW1vdmUgQ29weSBXYXRlcm1hcmsuLi4nKTtcbiAgICBjb25zdCBoYW5kbGVyID0gY29weUhhbmRsZXIoa2V5d29yZHMgfHwgW1xuICAgICAgICAnY29weXJpZ2h0JyxcbiAgICAgICAgJ+eJiOadgycsXG4gICAgICAgICfokZfkvZzmqKknLFxuICAgICAgICAn54mI5qyKJyxcbiAgICAgICAgJ+yggOyekeq2jCcsXG4gICAgICAgICfQkNCy0YLQvtGA0YHQutC40LUg0L/RgNCw0LLQsCcsXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIF0pO1xuICAgIGNvbnN0IGFkZEV2ZW50TGlzdGVuZXIgPSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcjtcbiAgICBhZGRFdmVudExpc3RlbmVyKCdjb3B5JywgaGFuZGxlcik7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gaGlqYWNrO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoaWphY2tfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9oaWphY2tcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGhpamFjazogaGlqYWNrXzEuZGVmYXVsdCxcbn07XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9kaXN0L3BsdWdpbnMvdGFtcGVybW9ua2V5L3JlbW92ZS1jb3B5LXdhdGVybWFyay51c2VyLmpzXCIpO1xuIiwiIl0sIm5hbWVzIjpbIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsInNyY18xIiwicmVxdWlyZSIsInBhY2thZ2VfanNvbl8xIiwiY29uc29sZSIsImxvZyIsImRlZmF1bHQiLCJuYW1lIiwidmVyc2lvbiIsImhvbWVwYWdlIiwicmVwbGFjZSIsImhpamFjayIsImNoZWNrV2F0ZXJtYXJrIiwia2V5d29yZHMiLCJldmVudCIsImNhbGxiYWNrIiwiX2EiLCJfYiIsIl9jIiwiZGF0YSIsImNsaXBib2FyZERhdGEiLCJ0eXBlcyIsImluZGV4T2YiLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJ0b1N0cmluZyIsImdldERhdGEiLCJzZXRUaW1lb3V0Iiwib3JpRGF0YSIsImV4dERhdGEiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJ0bXBEYXRhIiwidG9Mb3dlckNhc2UiLCJoYXNXYXRlcm1hcmsiLCJzb21lIiwia2V5d29yZCIsInNlYXJjaCIsInVuZGVmaW5lZCIsInJlbW92ZVdhdGVybWFyayIsInRhcmdldCIsImluamVjdENvcHkiLCJzdG9wUHJvcGFnYXRpb24iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRvY3VtZW50IiwiZXhlY0NvbW1hbmQiLCJjb3B5SGFuZGxlciIsImhhbmRsZXIiLCJ3YXRlcm1hcmsiLCJsb2NhdGlvbiIsImhyZWYiLCJoaWphY2tfMSJdLCJzb3VyY2VSb290IjoiIn0=