据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。
前言:
作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
专栏介绍:猿人学WEB题目专解 ,提供猿人学WEB题目总计20题的解题思路与方法,如有讲述错误,请不吝赐教。
想看往期历史文章,可以浏览此博文: 历史文章目录
,后续所有文章发布都会同步更新此博文~
猿人学第18题
- 题目网址
- 题目详情
- 题目思路
- 解题源码
题目网址
猿人学第18题
题目详情
让我们计算 加和。
题目思路
我们像往常一样找入口函数,在这题面前却显得不一样:
这题用了原始的 XMLHttpRequest
请求方式,没用 ajax
请求方式,但是我们却看不到哪里有加密的东西,我们只看到了 location.href + 'data" />
那么还有两个参数哪里来的呢?
我们新建一个 XHR
断点:
鼠标不经意间滑动到 xml.open
方法上:
很明显这个函数被动过手脚了,不再是原来的函数了,我们继续往下。
重新打断点,打在 open
上:
发现跳转到了这个鬼都看不懂的代码堆里:
放上这段令人头皮发麻的代码段:(不想看?我经历的痛苦你也要跟着经历)
!function(_, __) {var ___ = "undefined" == typeof global " />: global, v__ = [[___, null, null, this, arguments]], V__ = String.fromCharCode, y__ = decodeURIComponent, u__ = ReferenceError, U__ = Object.keys, _v_ = parseFloat, _V_ = parseInt, _y_ = Math.pow, _u_ = RegExp, _U_ = ___.BigInt, __v = 1, __V = [], __y = [], __u = Vu_(48, 58) + Vu_(97, 123), __U = Vu_(65, 91), v_ = "[" + __U + "]*[" + __u + "]", V_ = __u + __U, y_ = /[0-9a-f]{2}/g, u_ = "%$&", U_ = "$", _v = " is not defined", _V = "null", _y = "number", _u = "object", _U = "0", vv_ = "g", vV_ = "", vy_ = "arguments";function vu_(_, __) {return _.push(__)}function vU_(_) {return _.pop()}function v_v(_) {return _.length}function v_V(_, __) {return _.indexOf(__)}function v_y(_, __) {return _.lastIndexOf(__)}function v_u(_, __) {return _.toString(__)}function v_U(_) {return y__(_.replace(y_, u_))}function Vv_(_, __) {return _.hasOwnProperty(__)}function VV_(_) {return _V_(_, 16)}function Vy_(_, __) {if (3 == __ || 6 == __ || 28 == __ || 15 == __ || 11 == __ || 13 == __ || 30 == __ || 41 == __) {(u__ = {})._ = __;var ___ = function(_, __) {var ___, v__ = V_V(__), y__ = v__[0], u__ = v__[1], U__ = __V[y__];function _y_(_, __) {return V_y(v_U(_))[0] ^ 127 & __}function __v(_, __) {return V_u(V_y(v_U(_)), 127 & __)}if (3 == _ && (___ = _y_(U__, y__)),6 == _ && (___ = v_U(U__)),28 == _ && (___ = null),15 == _ && (___ = v_U(U__)),11 == _ && (___ = _v_(__v(U__, y__))),13 == _ && (___ = !!_V_(V__(_y_(U__, y__)))),30 == _ && (___ = _U_(__v(U__, y__))),41 == _) {var __y = __v(U__, y__), __u = __y.slice(0, v_y(__y, U_)), __U = __y.slice(v_y(__y, U_) + 1);___ = _u_(__u, __U)}return [___, y__, u__]}(__, _.slice(__v, 10));return u__[__] = ___[0],[function(_, __, ___) {var v__ = v_V(__y, _[__]);return -1 == v__ ? (vu_(__y, _[__]),_[__] = v_v(__y) - 1) : _[__] = v__,_.__ = ___,_}(u__, __, ___[1]), ___[2]]}for (var v__ = V_U(_, __v)[0], y__ = [], u__ = {}; v_v(v__); ) {var U__ = VU_(v__.slice(0, __v));if (3 != U__ && 6 != U__ && 28 != U__ && 15 != U__ && 11 != U__ && 13 != U__ && 30 != U__ && 41 != U__) {var _y_ = V_U(v__, __v, 1);vu_(y__, V_v(v__)),v__ = v__.slice(_y_[1])} else {var __u = V_v(v__);vu_(y__, __u[0]),v__ = v__.slice(__v + __u[1])}}return u__[__] = y__,u__._ = __,u__}function Vu_(_, __) {for (var ___ = "", v__ = _; v__ < __; v__++)___ += V__(v__);return ___}function VU_(_) {return v_V(V_, _)}function V_v(_) {var __ = VU_(_.slice(0, __v));return Vy_(_, __)}function V_V(_) {var __ = 0, ___ = _.match(v_)[0], v__ = ___.slice(0, -1), V__ = ___[v_v(___) - 1];__ += v_V(__u, V__);for (var y__ = 0, u__ = v_v(v__) - 1; u__ >= 0; u__--)__ += v_V(__U, v__[u__]) * _y_(v_v(__U), y__) * v_v(__u),y__ += 1;return [__, v_v(___)]}function V_y(_) {for (var __, ___ = [], v__ = 0; v__ < v_v(_); v__++)___[v__] = (__ = v__,_.charCodeAt(__));return ___}function V_u(_, __) {for (var ___ = [], v__ = 0; v__ < v_v(_); v__++)___[v__] = V__(_[v__] ^ __);return ___.join(vV_)}function V_U(_, __, ___) {var v__ = V_V(__ ? _.slice(__) : _);return [___ ? null : _.slice(__ + v__[1], __ + v__[0] + v__[1]), __ + v__[0] + v__[1]]}!function(_) {function __(_, __) {var ___ = __y[_[__]];return !___ || 15 != __ && 6 != __ ? ___ : V_u(V_y(___), 127 & _.__)}function ___(_) {return _[v_v(_) - 1]}function V__(_, __) {return _[v_v(_) - 1] = __}function y__(_) {if (Array.isArray(_)) {for (var __ = 0, ___ = Array(v_v(_)); __ < v_v(_); __++)___[__] = _[__];return ___}return Array.from(_)}function _v_(_, __, v__) {if (__ == _V)return null;if (__ == vy_)return ___(_)[4];for (var V__ = v_v(_) - 1; V__ >= 0; V__--) {if (Vv_(_[V__][0], __))return _[V__][0][__];if (0 == V__ && _[V__][0][__])return _[V__][0][__]}if (!v__)throw u__(__ + _v)}function _V_(_, __, ___) {for (var v__ = v_v(_) - 1; v__ >= 0; v__--)if (-1 != v_V(U__(_[v__][0]), __))return _[v__][0][__] = ___;return _[0][0][__] = ___}function _u_(_) {return ___(_)}function _U_(_, ___, v__, V__, y__) {var u__;if (Vv_(v__, 32)) {var U__ = __V(_, (_u_ = v__[32])[0]);if (29 == __V(_, _u_[2]))var _u_ = __(_u_[1], 15) || __(_u_[1], 11) || __V(_, _u_[1]);else_u_ = __(_u_[1], 15) || __(_u_[1], 11) || __(_u_[1], 6);u__ = !0} elsev__ = __(v__, 6);return y__ && (V__ = __V(_, V__)),15 == ___ ? u__ ? U__[_u_] = V__ : _V_(_, v__, V__) : 11 == ___ ? u__ ? U__[_u_] += V__ : _V_(_, v__, _v_(_, v__) + V__) : 30 == ___ ? u__ ? U__[_u_] -= V__ : _V_(_, v__, _v_(_, v__) - V__) : 28 == ___ ? u__ ? U__[_u_] *= V__ : _V_(_, v__, _v_(_, v__) * V__) : 41 == ___ ? u__ ? U__[_u_] /= V__ : _V_(_, v__, _v_(_, v__) / V__) : 13 == ___ ? u__ ? U__[_u_] %= V__ : _V_(_, v__, _v_(_, v__) % V__) : 22 == ___ ? u__ ? U__[_u_] <<= V__ : _V_(_, v__, _v_(_, v__) << V__) : 3 == ___ ? u__ ? U__[_u_] >>= V__ : _V_(_, v__, _v_(_, v__) >> V__) : 48 == ___ ? u__ ? U__[_u_] >>>= V__ : _V_(_, v__, _v_(_, v__) >>> V__) : 43 == ___ ? u__ ? U__[_u_] &= V__ : _V_(_, v__, _v_(_, v__) & V__) : 36 == ___ ? u__ ? U__[_u_] |= V__ : _V_(_, v__, _v_(_, v__) | V__) : 7 == ___ ? u__ ? U__[_u_] ^= V__ : _V_(_, v__, _v_(_, v__) ^ V__) : 6 == ___ ? u__ ? U__[_u_] = _y_(U__[_u_], V__) : _V_(_, v__, _y_(_v_(_, v__), V__)) : void 0}function __v(_, ___, v__) {if (v__)var V__ = __(___, 15) || __(___, 11) || __V(_, ___);elseV__ = __(___, 15) || __(___, 11) || __(___, 6);return V__}function __V(_, v__, u__, __y, __u) {var __U = v__._;if (3 == __U || 15 == __U || 11 == __U || 13 == __U || 28 == __U || 30 == __U || 41 == __U)return __(v__, __U);if (6 == __U)return _v_(_, __(v__, __U));var v_, V_, y_, u_ = v__[__U];if (43 == __U)u_.map(function(__) {__V(_, __)});else {if (22 == __U)return u_.map(function(__) {return v_u(__V(_, __))}).join(vV_);if (35 == __U)return __V(_, u_[0]);if (36 == __U)if (Vv_(u_[0], 29))_v = __V(_, u_[1]),u_[0][29].map(function(___, v__) {_u_(_)[0][__(___, 6)] = _v[v__]});else {var U_ = __(u_[0], 6), _v = __V(_, u_[1]);Vv_(u_[1], 3) && 49 == __(u_[1], 3) ? _u_(_)[0][U_] = _u_(_)[0][U_] : _u_(_)[0][U_] = _v}else if (7 == __U) {var _U = u__;u_.map(function(__) {__V(_, __, _U)})} else {if (33 == __U) {var vv_ = __(u_[0], 3), vy_ = u_[1];if (Vv_(vy_, 29)) {var v_V = __V(_, u_[2]);return vy_[29].map(function(__, ___) {return _U_(_, vv_, __, v_V[___])})}return _U_(_, vv_, vy_, u_[2], 1)}if (45 == __U)return __V(_, u_[0]);if (8 == __U)return u_.map(function(__) {return __V(_, __)});if (27 == __U) {vv_ = __(u_[0], 3);var v_y = __V(_, u_[1]), v_U = __V(_, u_[2]);return V_ = v_y,y_ = v_U,33 == (v_ = vv_) ? V_ instanceof y_ : 23 == v_ ? V_ in y_ : 19 == v_ ? V_ + y_ : 46 == v_ ? V_ - y_ : 14 == v_ ? V_ / y_ : 31 == v_ ? V_ * y_ : 32 == v_ ? _y_(V_, y_) : 27 == v_ ? V_ % y_ : 25 == v_ ? V_ < y_ : 2 == v_ ? V_ <= y_ : 16 == v_ ? V_ > y_ : 42 == v_ ? V_ >= y_ : 40 == v_ ? V_ & y_ : 39 == v_ ? V_ != y_ : 21 == v_ ? V_ !== y_ : 47 == v_ ? V_ | y_ : 50 == v_ ? V_ ^ y_ : 26 == v_ ? V_ == y_ : 37 == v_ ? V_ === y_ : 8 == v_ ? V_ << y_ : 18 == v_ ? V_ >> y_ : 1 == v_ ? V_ >>> y_ : void 0}if (46 == __U) {_U = u__;for (var VV_ = u_.filter(function(___) {return ___[19] ? __V(_, ___) && null : !___[43] || (___[43].map(function(___) {var v__ = __(v__ = ___[36][0], 6);Vv_(_u_(_)[0], v__) || (_u_(_)[0][v__] = void 0)}),!0)}), Vy_ = 0; Vy_ < v_v(VV_); Vy_++) {if (___(_U[35])) {V__(_U[35], 0);break}if (Vu_ = __V(_, VV_[Vy_], _U),___(_U[9]))break;if (_U[0])return Vu_}} else {if (14 == __U)return (_U = u__) && (_U[0] = 1),___(Vu_ = u_.map(function(__) {return __V(_, __)}));if (4 == __U)(_U = u__) && V__(_U[9], 1);else if (24 == __U)(_U = u__) && V__(_U[35], 1);else {if (18 == __U) {var Vu_ = {};return u_.map(function(__) {var ___ = __V(_, __), v__ = ___[0], V__ = ___[1];Vu_[v__] = V__}),Vu_}if (1 == __U)return [U_ = __v(_, u_[0], 0), _v = __V(_, u_[1])];if (23 == __U)return ___(Vu_ = u_.map(function(__) {return __V(_, __)}));if (31 == __U) {_U = u__;var VU_ = __V(_, u_[0]);if (Vu_ = __V(_, VU_ ? u_[1] : u_[2], _U),_U[0])return Vu_} else if (25 == __U) {for (vu_((_U = u__)[9], 0),vu_(_U[35], 0),__V(_, u_[0]); __V(_, u_[1]); __V(_, u_[2]))if (___(_U[35]))V__(_U[35], 0);else {if (Vu_ = __V(_, u_[3], _U),___(_U[9]))break;if (_U[0])return Vu_}vU_(_U[9]),vU_(_U[35])} else if (17 == __U || 9 == __U) {vu_((_U = u__)[9], 0),vu_(_U[35], 0);var V_v = !0;function V_V(_, ___, v__, V__, y__) {___[v__].map(function(___) {Vv_(___, v__) ? V_V(_, ___, v__, V__, y__) : Vv_(___, 6) && (V_v ? (V_v = !1,y__ ? _u_(_)[0][__(___, 6)] = V__ : _V_(_, __(___, 6), V__)) : y__ ? _u_(_)[0][__(___, 6)] = void 0 : _V_(_, __(___, 6), void 0))})}function V_y(_, ___, v__, V__) {___[v__].map(function(___) {var v__ = ___[36][0];Vv_(v__, 6) ? _u_(_)[0][__(v__, 6)] = V__ : Vv_(v__, 29) && V_V(_, v__, 29, V__, 1)})}var V_u = __V(_, u_[1]);for (var _v in V_u)if (9 == __U && (_v = V_u[_v]),___(_U[35]))V__(_U[35], 0);else {if (Vv_(u_[0], 6) ? _V_(_, __(u_[0], 6), _v) : Vv_(u_[0], 29) ? (V_V(_, u_[0], 29, _v),V_v = !0) : Vv_(u_[0], 43) && (V_y(_, u_[0], 43, _v),V_v = !0),Vu_ = __V(_, u_[2], _U),___(_U[9]))break;if (_U[0])return Vu_}vU_(_U[9]),vU_(_U[35])} else {if (2 == __U) {var V_U = __V(_, u_[0]), yv_ = __V(_, u_[1]), yV_ = u_[2];return function(_, ___, v__, V__) {if (10 == ___) {if (Vv_(V__, 32)) {var y__ = __V(_, (u__ = V__[32])[0]);return u__ = __v(_, u__[1], 29 == __V(_, u__[2])),29 == v__ ? ++y__[u__] : y__[u__]++}return u__ = __V(_, V__),Vv_(V__, 6) && _V_(_, __(V__, 6), u__ + 1),29 == v__ ? u__ + 1 : u__}var u__;if (44 == ___)return Vv_(V__, 32) ? (y__ = __V(_, (u__ = V__[32])[0]),u__ = __v(_, u__[1], 29 == __V(_, u__[2])),29 == v__ ? --y__[u__] : y__[u__]--) : (u__ = __V(_, V__),Vv_(V__, 6) && _V_(_, __(V__, 6), u__ - 1),29 == v__ ? u__ - 1 : u__)}(_, V_U, yv_, yV_)}if (0 == __U) {vu_((_U = u__)[9], 0),vu_(_U[35], 0);do {if (___(_U[35]))V__(_U[35], 0);else {if (Vu_ = __V(_, u_[1], _U),___(_U[9]))break;if (_U[0])return Vu_}} while (__V(_, u_[0], _U));vU_(_U[9]),vU_(_U[35])} else if (50 == __U) {for (vu_((_U = u__)[9], 0),vu_(_U[35], 0); __V(_, u_[0], _U); )if (___(_U[35]))V__(_U[35], 0);else {if (Vu_ = __V(_, u_[1], _U),___(_U[9]))break;if (_U[0])return Vu_}vU_(_U[9]),vU_(_U[35])} else if (21 == __U) {_U = u__;try {if (Vu_ = __V(_, u_[0], _U),_U[0])return Vu_} catch (__) {if (Vu_ = __V(_, u_[1], _U, __),_U[0])return Vu_}} else {if (5 == __U)throw __V(_, u_[0]);if (39 == __U) {_U = u__;var yy_ = {};if (yy_[__(u_[0], 6)] = __y,vu_(_, [yy_, null]),Vu_ = __V(_, u_[1], _U),vU_(_),_U[0])return Vu_} else {if (16 == __U)return __V(_, u_[0]) ? __V(_, u_[1]) : __V(_, u_[2]);if (26 == __U)return function(_, ___, v__) {if (19 == ___)return +__V(_, v__);if (46 == ___)return -__V(_, v__);if (12 == ___)return !__V(_, v__);if (45 == ___)return ~__V(_, v__);if (4 == ___)return Vv_(v__, 6) ? typeof _v_(_, __(v__, 6), 1) : typeof __V(_, v__);if (5 != ___) {if (38 == ___) {if (Vv_(v__, 6))return !Vv_(_u_(_)[0], __(v__, 6)) || delete _u_(_)[0][__(v__, 6)];if (Vv_(v__, 32)) {var V__ = __V(_, (y__ = v__[32])[0]);if (29 == __V(_, y__[2]))var y__ = __(y__[1], 15) || __(y__[1], 11) || __V(_, y__[1]);elsey__ = __(y__[1], 15) || __(y__[1], 11) || __(y__[1], 6);return delete V__[y__]}return __V(_, v__),!0}} else__V(_, v__)}(_, __V(_, u_[0]), u_[1]);if (20 == __U)return function(_, __, ___, v__) {return 20 == __ ? ___ || __V(_, v__) : 34 == __ ? ___ && __V(_, v__) : void 0}(_, __V(_, u_[0]), __V(_, u_[1]), u_[2]);if (19 == __U) {U_ = __(___(u_), 6),_v = u_[v_v(u_) - 2];var yu_ = u_.slice(0, v_v(u_) - 2), yU_ = _U__(_, U_, _v, yu_);_u_(_)[0][U_] = yU_} else {if (42 == __U)return U_ = __(___(u_), 6),_v = u_[v_v(u_) - 2],yu_ = u_.slice(0, v_v(u_) - 2),yU_ = _U__(_, U_, _v, yu_);if (34 == __U)return _v = ___(u_),yu_ = u_.slice(0, v_v(u_) - 1),yU_ = _U__(_, _V, _v, yu_);if (37 == __U) {var y_v = __V(_, ___(u_)), ____ = u_.slice(0, v_v(u_) - 1).map(function(__) {return __V(_, __)});return new (Function.prototype.bind.apply(y_v, [null].concat(y__(____))))}if (38 == __U)return _u_(_)[3];if (40 == __U) {_U = u__,VU_ = __V(_, u_[0]);var v___ = u_.slice(1), V___ = !1;for (vu_(_U[9], 0),vu_(_U[35], 0),Vy_ = 0; Vy_ < v_v(v___); Vy_++)if (___(_U[35]))V__(_U[35], 0);else {var y___ = __V(_, v___[Vy_], VU_), u___ = y___[0], U___ = y___[1];if (VU_ === u___ && (V___ = !0),V___ && (Vu_ = __V(_, U___, _U)),___(_U[9]))break;if (_U[0])return Vu_}vU_(_U[9]),vU_(_U[35])} else {if (47 == __U)return [u___ = Vv_(u_[0], 6) && __(u_[0], 6) == _V ? u__ : __V(_, u_[0]), u_[1]];if (44 == __U)debugger ;else if (49 == __U) {for (VV_ = u_.filter(function(___) {return ___[19] ? __V(_, ___) && null : !___[43] || (___[43].map(function(___) {var v__ = __(v__ = ___[36][0], 6);_u_(_)[0][v__] = void 0}),!0)}),_U = {9: [],35: [],0: 0},Vy_ = 0; Vy_ < v_v(VV_); Vy_++)if (Vu_ = __V(_, VV_[Vy_], _U),_U[0])return Vu_} else {if (32 == __U) {_v = __v(_, u_[1], 29 == __V(_, u_[2]));var _v__ = __y || [];return yU_ = __V(_, u_[0], typeof u__ != _y ? 1 : u__ + 1, _v__, __u),u__ ? (vu_(_v__, _v),[yU_, yU_[_v]]) : (_v__.map(function(_) {return yU_ = yU_[0],_}).map(function(_) {yU_ = yU_[_]}),__u && __u[24] ? function() {for (var _ = v_v(arguments), __ = Array(_), ___ = 0; ___ < _; ___++)__[___] = arguments[___];return yU_[_v].apply(yU_, __)}: yU_[_v])}if (48 == __U) {var _V__, _y__ = !1, _u__ = (____ = u_.slice(0, -1).map(function(__) {if (!Vv_(__, 45))return __V(_, __);_V__ = __V(_, __),_y__ = !0}),typeof u__ == _u ? u__ : {});return _u__[24] = 1,____ = _y__ ? ____.slice(0, v_v(____) - 1).concat(_V__) : ____,__V(_, ___(u_), 0, 0, _u__).apply(void 0, y__(____))}}}}}}}}}}}function _U__(_, ___, v__, V__) {return function y__() {var u__ = [].concat(_, [[{}, V__, v__, this, arguments]]);___ !== _V && (_u_(u__)[0][___] = y__);var _v_ = _u_(u__), _V_ = (_u_(_),{9: [],35: [],0: 0});return _v_[1].map(function(_, ___) {if (Vv_(_, 6)) {var v__ = __(_, 6);_v_[0][v__] = _v_[4][___]} elseVv_(_, [12]) && (v__ = __(__(_[12], 6), 6),_v_[0][v__] = U__(_v_[4]).map(function(_) {return _v_[4][_]}).slice(___))}),__V(u__, _v_[2], _V_)}}}__V(v__, _)}(V_v(__ = function(_) {var __, ___, v__, V__ = V_U(_, 0), y__ = V__[0], u__ = V__[1];for (y__ = function(_) {var __ = V_V((_ = _.match(_u_(v_, vv_))).slice(0, 1)[0])[0], ___ = _.slice(1, -1), v__ = [];___.map(function(_) {for (var __ = v_u(V_V(_)[0], 16), ___ = 8 - v_v(__), V__ = 0; V__ < ___; V__++)__ = _U + __;vu_(v__, __)});for (var V__ = v_u(V_V(_.slice(-1)[0])[0], 16), y__ = __ - 8 * v_v(___) - v_v(V__), u__ = 0; u__ < y__; u__++)V__ = _U + V__;return vu_(v__, V__),v__.join(vV_)}(y__); v_v(y__); ) {var U__ = (___ = VV_((__ = y__).slice(0, 1)),v__ = VV_(__.slice(1, 1 + ___)),[__.slice(1 + ___, 1 + ___ + v__), 1 + ___ + v__]), _v_ = U__[1];vu_(__V, U__[0]),y__ = y__.slice(_v_)}return _.slice(u__)}(__)))}("jsvmpzl:ver.1.1.3", "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66HrbJqA66HsbJrA66HtbJsA66HubHdvlrd3BifCyq53E66ye2ba64vlqc3Bcw76y6Ei30e36Hh64vlqc3Bcw76y6Ca30e36Hi64vsqj3Bcwew76y6Ca306Dm30e36Hj64vzqq3Bcwlwew76y6Ca306Dm306Ej30e36Hk64vnwew76y6Ei306Fl30e36Hl64vBekB43Bgwew76y6Ei306Dn30MjfFlwew76y6Ei306Dn30e36Hm64HaA86Ek83FK2hC9H7A56Hv3a6yhBvH7A56Fm3a6EkvBgkB63Bgwfw86Ek6Fm316Fk30Mk6Hvwfw86Ek6Fm316Fk30e36Hn64HBuAB26Fn8xfK3fK4fK5fK6fK7fK8fK9fKafKbfKcfKdAn6Fo8ifKefKffKgfKhfKifKjhB1H7A56Hw3a6Fovnwe6yw86Fo6Hw3131e36Ho64hB8H7A56Hx3a6Fnvuwlw76y6Ca30w86Fn6Hx3131e36Hp64hC0H7A56Fp3aw76y6Ca30vBfkB53BgMdFKkw86Fp6Hy30wlwew76y6Ca306Fp316Kl30e36Hq64eF8gF5kC33Bgks3Bgw76y6Fq30wew76y6Fq306Bd30rB33E9q43tbaMsfKmwnMgwew76y6Fq306Bd306El306HrgCtMqfKnwlwew76y6Ca306Dm306Ej306HsgBvMqfFlwlwew76y6Ca306Dm306Ej306HtgyMqfKowlwew76y6Ca306Dm306Ej306Hu6Hg64K0KQDd79x7326Bki07xxv32w86BkbBe31Mhwfw86Bq6Kp306Bd307mxk32w76Bkb631w76Bqbh317uxs32w76Bkba31wfw86BkbBe316Bl307BoxBl32w76Bkbh31rB73tw76Bkba31wuMnFKqfE5wfw86BkbBe316Kr306Bl30vPYmqC93BckC33BgkB13Bgrf3Biw76Bkbh31bK0rf3Biw76Bkba31bKsru3H9MjfKtwew76Bkb6316El30q43tbaKa78q63E86BkKPVu7PVgMPVcGPV8KPV2HEJ2AEIy6BrkEIr3C86BrMEIh6CfGEIa6Cf6CyKEHyHDdADa6B9kD43C8w86Ku6B930MCoGClKCgj5K06Eaa0eC4GC16HzKBtH7A56Bm3a7hxf32w86Ea6Cz306Hz7cxa326BmB36Ea7gxe32w86Ea6Cz30s4e36Bm6464H7A56B3i0HlAj6B4xe32w86B36Do30i0HOhAOe6BhxO832w86B46Bh30MNtGNqKNleNiiNf1Ga6uGG56FrKFxHeAc6BmM7C2636B9vo6FrKh7fMd6Frw86Bm6Em3064vD9kBd3C8qi3BcMdfB1w86Bm6Dn30ro3Haw9C2636B130w86Bm6B130KBo7BlxBi32w86Bm6B130GB3Kz7xMvC2636Bqwmwfw86Bm6I0306B1306En3064647oxm32wfw86Bm6B1306Cz306Bm7ixg32w86Bm6I030C263e36Bm641Bq6B9GBkKBfHhAf6EoMaw8C2636u307pMn6Eo6Bqwfw86Eo6B1306En30e36Eo64196B1G4K0641Dm6EmGDg6D0KD8hBsH7A56Ep3a6D0KBdvBaMd6Epw86D06Dn30Kr7pxn32w9C2636Ep31w86D06Ep3164vBaMdfBdw86D06Dn30Kr7pxn32w9C2636Bd30w86D06Bd3064641B66BsGB0KweuMsC263wmwgw9C2636B1306Cz306u306464HBHxABHt6BaxBHm32w86B46Ba30MBH6iBGt1D46B1GCy696qKCp7txr3269xl32w8C2636930k73C86980vBrr83E96q6CyKi7gxe32w8C2636q306qKv7txr32w8C2636q30rd3kw7696Bl30bg641B26BdGx6I1KqeoMmC263wgk93C86I16Fj6Cg30641Kb6DpGK56B7KJxHfAd6Fsw8C2636930HeAc6Ftw76B76930HfAd6Dqw8C2636q30HeAc6Eqw76B76q307dMbw9C2636Fu30vGvr83B56DqbgKEapE7H6A465bhr73x656Eq263z3065KDfHBiABf6I2rB93brB237wd6Ftr63765b631rj3tbmrd3kr73B565bgbibf7BrxBo3E7wk6Fsrd37r73e6Dq65b631rx3d6I2rq3tbmrk3kre3B5r73e6Dq65bgbiKC5pC2H6A465bhr73x656Eqx73Bt65bgKB97B6xB332wk6Fsrd37r73e6Dq65b631wd6Ftr63765b6317ixg3Btw8C2636q306Eqe4C263641Dn6FuGDhKDcHeAc69w8C2636930HeAc6qw8C2636q307BdxBa3Kvwc69r6376qb631rr3dbI3rk3tbCprd3kr73B56qbgbi7yxw32w7696Bl30Mjr73Bu6qbgw86Cf6I430641Ca6BsGC4KBzHsAq6BsMlC263wfw86Bh6Bs306C4307yxw32w76Bs6930Mjbhwfw8C26369306Cq30e36Bs641Lx6ErGLr6ChKLjH6A46980HH2AGz6HbGGt6CrKGlH8A66Cr6CrH8A66DrbKwH8A66EsbI3eFoGFlKFg7BbxB8326DrrB03brt3erf3kbKxr83b6DrbI5r83H86Drbl6Es7BbxB8326CrrB03brt3erf3kbKyr83b6CrbI5r83H86Crbl6EsHsAq6Etrl3bre3er73d6Drbl6Cr6Es7bx93Jl6EtbFv7bx93Bt6EtbI6eB1rz3k6Etgsri3DfMaw86Cf6Er30bI6baq43tba6464pDkHdA465bhA56Fw3ar73x656Chx73Bt65bgKCkHB1Az6FxMurp3kki3C86FwMaw86Cf6Er30bFv6Hb7jxh326Fwra3kM36FxbKz7tMrrg3nra3kM36FxbFvbhw7696C330ehBf696Chw86Ba6B13064w76Bh6u30HlAj6Cbxe32w86B36D130i0HLtALq6FjxLk32w86Cb6Fj30iL51G96CgGG36B7KFvHdAb69w76B76930HdAb6qw76B76q30H7A56Eu80pE8H6A465bhr63x656q263z3065KDhHBhABe6DlrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibf7wMuMiblwer7376Dlbg6Bd30w86Eu6C3307xMvMjblwfr83b6DlbHd6Bd30w86Eu6C330efMdfE5w86Eu6Fy30641Eq6BvGEk6FzKEcHfAd6G0w86Fz6Bl30H6A46980pCuH6A465bhr73x656G0x73Bt65b6KC17ByxBv3E7wd69r73765bBe31rBa3dMlMe65b6w86Fz6L030bl6I7rj3tbmrd3kr73B565bibgeoBm69r83Bu6G0b6w86Ba6B13064HKdAKa6EvxK432w86Cb6Ev30iJp1F56CgGEz6B7KErHdAb69w76B76930HdAb6qw76B76q30H7A56G180pD4H6A465bhr63x656q263z3065KCdHBhABe6DlrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibf7rMpMd6Dlw86L16L230w86G16C330efMdfE5w86G16Fy30641Ee6BvGE86G2KE0HfAd6G3w86G26Bl30H6A46980pCpH6A465bhr73x656G3263z3065KBx7BuxBr3E7wc69r63765b631rB73dri3bMc65w86G26Ew30bfrj3tbmrd3kr73B565bgbiehBf696G3w86Ba6B13064HDoADl6CexDf32w86Cb6Ce30iD01Br6CgGBl6B7KBdlBaKrepMnMiMd6B7w86Ev6Cg306L36L4Df6BxKa58B6fL56L6641B36BvGy6I8KrepMnMbM66I86I96L7w86Ev6Bv3064HT0ASx6CixSr32w86B46Ci30MSciS01Bn6CcGBhKBc7rxp32w9C2636D230Baw86Ba6B1307hxf32w9C2636Ia30bh641D56DsGCz6B8KCrvB8re3Biq63E66B8fG4Ko7mxk326B8Md6B8w86Ce6Bv30647nMl6B8wgw9C2636D2306Dp307pxn3Btw9C2636Ia30w76B86q30641Kf6D3GK96IbKK1HgAe6B8w9C2636D230HeAc6G5w76B86930HeAc6G6w76B86q30HgAe6B0w9C2636B030HeAc6Dtr73k6B0bgHgAe6D4r93Bu6G66DtvCa6IbKo7mxk326D4Md6D4w86Cf6I430KBe7BbxB8326D4MB0rm3tr73n6D4bhw9C2636G730bhw86Cf6L830HfAd6Dur83k6D46B0HtAr6G8Mmr73k6Dubg6G6w86Cf6L930vCv6DuKCnpBdH6A46jbhr73x6j6Dux83Bt6j6B0Kk7iMg6G56jw9C2636Ic30HmAk6IdMfbh6Duw86G56Ie307hxf3G9w76B86q306G864eiBg6Id6G8w86Ba6B130641Ca6BsGC4KBzHsAq6BsMlC263wfw86Bh6Bs306C4307yxw32w86Bs6D230Miwgw9C2636D2306Bs30e36Bs64156G7bhw76Bh6u30HMdAMa6IfxM432w86B46If30MLpiLd1d68M9w76Bh6u301Bs6B1GBm68KBf7yxw32w8C2636830Mi68wew8C26368306u307dMbw9C2636Cc30641Bf6CcGB9KB47nMlC263wfw86Ci6Cc306C4307dMbw9C2636Ga30641Bh6LaGBb6DvKB37gMe6Dvw9C2636Ds307dMbw9C2636D330e4C263641Bu6D5GBo6DvKBgvp6DvKi7gMe6Dvw9C2636Ds3064HiAg6HfMbw9C2636Ex30e36Hf641e6B0r93BubJybCp1Bl6GbGBf6EyKB7eB4GB16C568KseqMo6C5wjBc68w86Ey6B1306D53064641Bx6LbGBr6EyKBjeBgGBd6C56oKB3eB0My6C5wtBm6Ey6owfw86D66Lc306B1306D5306464w76Ci6u30HlAj6D6xe32w86B36Gc30i0e36B3647BIfMBIbGBI7KBI1H8A66B36BrHfAd6B4w86B36Do30HfAd6Baw86B46Ba30HfAd6Cbw86B36D130HYbAY86D7xY232w86Cb6D730iXn1Pe6CgGP86B7KP0HdAb69w76B76930HdAb6qw76B76q30HgAe6Csw9C2636Gd307cMaw86B76Fu30H7A56Dw80pKhH6A465bhr63x656qx83Bt65bBeKJoHBhABe6IgrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibfHBtABq6IhrBk3brBd37wi69rc37r63e65bab631rp3tbmrj3krd3B5r63e65babgbibfHBtABq6IirBk3brBd37wi69rc37r63e65b6b631rp3tbmrj3krd3B5r63e65b6bgbibfHyAw6Ijrr3nrk3nr73d6Igblr73d6Ihbi6IipD9H7A56C6bhky3Bgr73x6C6bgrk3xre3e65r83k6C6bLd6q273z306C6KBo7BlMBiMB5rt3brm376Ijrf3kbDhr83tbBe6C6bJvw86Cs6Ge30w86Dw6C330HkAi6D8MdbEbw86Cs6Ge30vBb6D8KB3OB0rf3B5w86Dw6Bl30bgKh7fMd6D8w86Dw6C33064efMdfE5w86Dw6Fy30641Hv6BvGHp6CtKHhHfAd6Dxw86Ct6Bl30HgAe6Csw9C2636Gd30HgAe6Cjw9C2636Ik30vD2q63Bc6CjKCp7oxm326Cjxf32w9C2636Ik3080pBwH7A56C6bhrf3x6C6w86Cs6Bl30273z306C6Kv7txr32wk6CjMd6C6w86Cs6Ew30316C664HkAi6D8MdbEbw86Cs6Ge30vBq6D8KBiHkAi6GfMd6D8w86Ct6El30vurc3H96Gfq43tbaKc7ax8326Dx6Gf6464eeMc6Ct6Dx6Cj6Il64166GdfLejHv6Ct6Dx6CjKHgH6A46980H7A56ChbhpGdH6A465bhr73x656Dx263z3065KFlvFir73B565bgKF4HBhABe6ImrB83dwp6CjMir63t65baw86Ct6Ew3031rd3kr73B565bgb6HBiABf6InrB937wj6CjMc65w86Ct6Ew3031rk3tbDhrd3kr73B565bgb67BlxBi3E7wd69r7376Chb631ry3dr83n6Im6Inrk3tbmre3kr83B56Chbgbi79273z306Ch64ehMf696Chw86Ba6B9306Il647EUvkEUr3C8wfw86Br6Do306Cu30MEU3GETz6CyKETqH8A66B36BrHfAd6B4w86B36Do30HfAd6Bhw86B46Bh30HfAd6Baw86B46Ba30HfAd6Ciw86B46Ci30HfAd6Cbw86B36D130HfAd6Cew86Cb6Ce30HfAd6D7w86Cb6D730HfAd6D6w86B36Gc30HfAd6Ggw86D66Gg30HRvARs6CuxRm32w86B46Cu30MR7iQv1d68M9w76Bh6u301B86EzGB26o68KuesMqw9C2636F0306o68w9C2636B930641B86F1GB26o68KuesMqw9C2636Io306o68w9C2636B930641D06B1GCu6Ip6o68KCi7yxw32w8C2636830Mi68wew8C26368306u307ixg32w9C2636Gh306Ip7hxf32w9C2636Gi306o7dMbw9C2636Cc30641Bf6CcGB9KB47nMlC263wfw86Ci6Cc306C4307dMbw9C2636Ga30641Ba6LfGB46DyKx7gMe6Dyw9C2636Ds30edMbw9C2636D330641Bu6D5GBo6DyKBgvp6DyKi7gMe6Dyw9C2636Ds3064HiAg6IqMbw9C2636Ex30e36Iq641e6Bbr93BubDjbCp1e6D9r93BubDjbCp156F0ba156Iob61Em6GbMEgGEdKE8jB26oKvvtrd3Biq53E66ofG4K5e36GjK5e36Cv6GkeD0GCx6sKCqeCniCk1B86DaGB26C56o68KrepMn6s6C56o68wcM56o6Gk6Da30641B66DzGB06p6o68KqeoMm6s6p6o68wcM56o6Gk6Dz30646464w76Ci6u30HCnACk6IrxCe32w86B46Ir30MBziBn1Bd6ExGB7KB2HvAt6DbMoqb3Bcq63BcfGlw9C2636D330e36Db64156B0baw76Cu6u30HlAj6Isxe32w86B36Bw30i0HEwAEt6GmxEn32w86B46Gm30ME8iDw1B36EzGy6s6vKqeoMm6s6vwgw9C2636It306B930641B36F1Gy6s6vKqeoMm6s6vwgw9C2636Iu306B930641Bh6B1GBb6s6vKB27hxf32w9C2636Gn306s7hxf32w9C2636Go306v64w76Bh6u30HP5AP26C2xOw32w86Is6C230MOhGOeKO9HgAe6C2M9w76Gm6u307EjxEg32w86C26It30ME1iDp1Dm6GpGDg696jKD7HfAd6sw9C2636Gn30HeAc6B0w76s6B0307nMlC263696j6B0w86Gq6C4307fMd696jw76s6Iv307B1xz32w9C2636Gr30Mk6jr73e6j6B0w7696Cq3064w76C26u307EsxEp32w86C26Iu30MEaiDy1Dv6GpGDp696jKDgHfAd6sw9C2636Gn30HeAc6B0w76s6B030HrAp6IwMk6jr73e6j6B0w7696Cq307fMd696jw76s6Ix307nMlC263696j6B0w86Gq6C4307ixg32w9C2636Gr306Iw64w76C26u30jE2696j6B0KDpHfAd6vw9C2636Go30vBh6vKtH7A56Gs6v7ixg32w9C2636Go306CyKiHgAe6Gsw9C2636Gr30pBlH6A465bhr73x656B0263z3065Ku7sxq3Ffwc69r63e6j6531w76Gs65316Gqe36C264HlAj6Iyxe32w86B36Eg30i0HJ4AJ16F2xIv32w86Iy6F230iIg1Fz6EgGFt6B86B0KFiHeAc6Dtr73k6B0bgHtAr6Cdrm3t6Dtrf3B5w76B86q306DtHBdABa6IzrB43nrx3nrk3nr73d6Cdbmr73d6Cdblr73d6Cdbi6CdH7A56Gt80pB9H6A465bhr73x656Cdx73Bt65bgKh7fMd6Izw86Gt6C330HnAl6C7Mg6Gt6Cdw86Ba6B9307fMd6C7w86B86Dp30641Cb6J0GC56B8KBxHBbAB86CdrB23bwww76B86930rj37rd3tw76B86q30bab631bf7hxf3G9w76B86q306Cd64HSwASt6DcxSn32w86B46Dc30MS8iRw1B168Mxig166Bw6C2166C76F2wdw76Cu68306u301Jl6CcGJfKJa7nMlC263wfw86Cu6Cc306C430HeAc68w8C2636830HcAa6vw6686v30HeAc6Bww7686Bw30vCdrp3Biw9C2636Gh30w9C2636F030KhHfAd6E0w86Bw6Ez30KB0HfAd6E0w86Bw6F1307hxf32w9C2636G730bavEskB43Bgw9C2636Dd30ro3Biwgw9C2636Dd306J1306E0KB77B4MB1C263kd3Bg6vw66v6930wgw9C2636Dd306B130KC87BexBb32w9C2636Dd30Mw6BwC263kd3Bg6vw66v6930w86E06C4307pxn32wgw9C2636Dd306J1306E0641B36IcGy696jKq7oMm696jwgw9C2636Dd306Gp30641Ff6ExGF9KF4HmAk6C7wfw8C26368306C730vE8rp3Biw9C2636Gh30w9C2636F030KBx7yMww9C2636D230w9C2636B030w86C76Eg30HvAt6DbMoqb3Bcq63BcfGlw9C2636D330KBeHvAt6DbMoqb3Bcq63BcfGlw9C2636D3307fMd6Dbw86C76J030e36Db641e6B0r93BubDjbCpw76Cu6u30HDaAD76E1xD132w86B46E130MCmiCa1u6B1Gp6E2Ki7gMe6E2w9C2636Em30641Bb6BdGB56F3KyewMuC263wokh3C86F3w9C2636F3306Cg3064w76Bh6u30HlAj6J2xe32w86B36Cw30i0HKfAKc6J3xK632w86J26J430iJr1Dt6CgGDn6E2KDfHdAb6pw76E26p30HfAd6Bfw86E26Bf30vBz6BfKBiHBfABc6B7MB66pwB1Mu6BfwpMi86bJ5bJ6w86Ba6B9306Dp306Dp30K9H7A56B76pefMd6D7w86B76Bd30641Fs6BvGFm6J7KFeHjAh6pMd6J7w86D76Bv30HdAb6E3w66p6930vD7kB13Bgrf3Biw76E3bh31bJ5rf3Biw76E3ba31bJ6KByHxAv6BfMqMeb6bgw86E36Cq30w86Ba6B9307gMebhbgw86E36Ie307fxd3G9w66p6q30bl64H8A66Bf6CyesMqie146p6p166Bf6Bfw86E16B93064HN4AN16CvxMv32w86B46Cv30MMgiM41n68Mji8166Cw6J3w76Bh6u301G06DaGFu6s6C56o68KFg7qxo3268Mi68wew8C26368306u30HkAi6GuMd6o68w76s6Ez30HjAh6pMd6C5w86Gu6D530HeAc6F4w76Gu6830eCyMCviCi146p6p146o6o1b6vw76F46v30156Lg6s1d6Bww86F46Bw301d6C7w86F46C7301c6B0w76s6B0301c6F3w7686Cw30w86E16B930641Dg6DzGDa6s6p6o68KCx7qxo3268Mi68wew8C26368306u307uxs326pMm6pw7686Cw30w9C2636Gv30HB1Az6F5Muw66p6p30wkMd6o68w76s6F1306D530e36F5641Bq6GvGBk6p6CwKBavB7rd3Biq53E66pfG4KkeiMg6pC263w86Cw6Bv30K4e26p64w76Bh6u30HlAj6J8xe32w86B36F630i0HH6AH36J9xGx32w86J86J430iGi1Gf6GwGG96De6Bb6D96BfKFsvB7q63Bc6BfKv7txr326BfMkr83BubEbbiw86Ba6Er3064HBeABb6oMB66De6BfwyMrif1d6Bbr83e6Bb6D9w86Gg6B9306Lh30HBbAB86vMB3Mi6Bbwdw66o69306Cq30r73k6D9bgw86Ba6B9307lxj32w66o6q30r73k6BbbgeyMwik146o6o146v6v166Bf6Bfw86E16B93064HN8AN56GjxMz32w86B46Gj30MMkiM81t68Mpi8166F66J9wdw76Cv68306u301F96DaGF36s6C56De68KEo7qxo3268Mi68wew8C26368306u30HBaAB76CxMB16Dew76s6Bb30w76s6D930wew7686F6306Gw307lxj32w6686v30w76Cx6v30HB9AB66pMB1C2636s6C5w76Cx6o3068wfw86Cv6Da306C4307eMc6Cxw76p6Em30e26p641Fy6DzGFs6s6p6De68KFe7qxo3268Mi68wew8C26368306u307uxs326pMm6pw7686Cw30w9C2636Gv30HBjABg6CxMBa6Dew76s6Bb30w76s6D930w76p6Bf30wew7686F6306Gw307lxj32w6686v30w76Cx6v30HB9AB66F5MB0C2636s6pw76Cx6o3068wfw86Cv6Dz306C430e36F564w76Cv6u30647EBvMEBrGEBnKEBhH8A66B36BrHfAd6B4w86B36Do30HfAd6Dcw86B46Dc30HfAd6D6w86B36Gc30H6A46r80H7A56Gx80H7A56Ck80H7A56Cl80H7A56Cm80H7A56Cn80H7A56F780H7A56F880H7A56F980H7A56Fa807WxMWuGWrKWmH7A56Bj80pCpH6A465bhr73x65bFi263z3065KBxvBur73x65bDjKn7lxj32w76Bj6531r63d65baKu7sxq32w76Bj6531rd36r63d65babJxH7A56BobhH7A56C9bhpT0H6A465bhr73x65bFi263z3065KS8HBsABp6BprBj36rB536rr36re366C9r73d6C9bar73d6C9b6r83d6C9bBer73d6C9bg7B0xy326Bprr36rk36r7376Bpbir73b6BpbfbJw7gxe32w76r6Bo316Bp7hxf32w86Gx6Bp316BoHfAd6Diw86Bj6Bo31HfAd6Fgw86Bj6Di31HfAd6Fhw86Bj6Fg31HzAx6crt36rf3kw86Bj6Bp31bHer83k6BpbJa7yxw32w86Ck6Bo31ri3nr63d6cbmr6376cbi7yxw32w86Cl6Bo31ri3nr63d6cblr6376cbl7yxw32w86Cm6Bo31ri3nr63d6cbir6376cbm7gxe32w86Cn6Bo316cHBnABk6crBf36rB036rm36r83k6FhbLir83k6FgbLjr83k6DibHer83k6BobJa7yxw32w86F76Bp31ri3nr63d6cbmr6376cbi7yxw32w86F86Bp31ri3nr63d6cblr6376cbl7yxw32w86F96Bp31ri3nr63d6cbir6376cbm7gxe32w86Fa6Bp316cvD0q63Bc6BoKi7gxe326Box7326C9baKC57BbxB8326BorB0366Diwt6Bjwm6Bjwf6Bjr8366Fh6Di3131317pxn3Ff6C9wf6Bjw86Bj6C9313164HyAw6Jb8rbhbab6bgbiblbCpbEbbDjbJtbJuHCYcACY86DkxCY132w86D66Dk30MCXliCX81BBt6GaGBBmKBBgvBgkB53Bgw9C2636Gy30rp3Haw9C2636Jc30w9C2636Gi30K4e26464HuAs6oxo32w9C2636Jc30w9C2636Gi30HdAb6Jdw66o6930HkAi6Bbrd3Buw66o6q30bgHuAs6Fbxn32w9C2636Gy30r83e6BbbDhHkAi6Fcrd3kr73e6FbbabgHmAk6B6xf32w9C2636Je3080pNaH6A46wbhr73x6w6Fc263z306wKMivMfr73x6w6BbKo7mxk32w76B66w31w76Jd6w31KLdHjAh6cwd6B6r63t6wba31vJoqd3Bcr83B56w6BbKEy7qxo326cri3nr63d6cbir6376cbm7D0xCx326crCq3nrC73nrBc3nri3dwc6rr6376cbm31bmro3dwi6rrc3br6376cblbf31blro3dwi6rrc3br6376cbibf31biwc6rr63b6cbf317B0xy3Ff6crr3dwl6Jbre3nr83Bu6w6Bbbh31bmvE5kv3Bgr93Df6BbbDhrf3Bir83B56w6BbbgKD37D0xCx326crCq3nrC73nrBc3nri3dwc6rr6376cbm31bmro3dwi6rrc3br6376cblbf31blro3dwi6rrc3br6376cbibf31biwc6rr63b6cbf31647zxx32w76B66w31rk36we6B6r73t6w6Bb316cHmAk6Gzxf32w9C2636Jf3080pHqH7A56Cobhr83x6Co6Fc273z306CoKGvHeAc6wr83t6Fc6CovBer83B56CobgKfHdAb6cw76B66w31KlHjAh6cwd6B6r63t6wbg31vEvkl3C8r73x6Cobgr73Jk6wbgKi7gxe32w86Gz6Co316cKDl7DixDf32w86Gz6Co31rD036rCa36rBe36wj6F7wc6rr6376cbm3131wp6F8wi6rrc3br6376cblbf3131wp6F9wi6rrc3br6376cbibf3131wj6Fawc6rr63b6cbf3131641Br6IvGBl6B26jKBb7B8MB56B26jw9C2636Je306Ck6Cl6Cm6Cn6rw9C2636H030641Gc6IxGG66B26jKFwHjAh6cwd6B2r63e6jba317zxx32wd6B2r63e6jba31we6B2r73e6jbBe317mxk32we6B2r73e6jbBe316c7B9MB66B26jw9C2636Jf306F76F86F96Fa6Gxw9C2636H030HjAh6cwd6B2r63e6jba317zxx32wd6B2r63e6jba31we6B2r73e6jbBe317mxk32we6B2r73e6jbBe316c641BMi6H0GBMb6B26j6B66Ck6Cl6Cm6Cn6rKBLjHgAe6Fbw9C2636Gy30HrAp6Byrk36w76B26j31w76B6bh31HxAv6Bzrq36wd6B2r63e6jba31w76B6ba31HxAv6C0rq36wd6B2r63e6jb631w76B6b631HzAx6C1rs36we6B2r73e6jbBe31w86B6bBe31H6A46wbgpPjH7A56H1bar83x6H16Fb273z306H1KOoHD9AD66EcrD036rCg36rBv36rB436we6Ckr7376Bybm31wk6Clrd3br7376Bzblbf31wk6Cmrd3br7376C0bibf31we6Cnr73b6C1bf31wd6B6263z306w31HD9AD66EdrD036rCg36rBv36rB436we6Ckr7376Bzbm31wk6Clrd3br7376C0blbf31wk6Cmrd3br7376C1bibf31we6Cnr73b6Bybf31wd6B6263z306w31HD9AD66EerD036rCg36rBv36rB436we6Ckr7376C0bm31wk6Clrd3br7376C1blbf31wk6Cmrd3br7376Bybibf31we6Cnr73b6Bzbf31wd6B6263z306w31HD9AD66EfrD036rCg36rBv36rB436we6Ckr7376C1bm31wk6Clrd3br7376Byblbf31wk6Cmrd3br7376Bzbibf31we6Cnr73b6C0bf31wd6B6263z306w317ax8326By6Ec7ax8326Bz6Ed7ax8326C06Ee7ax8326C16EfHDnADk6EcrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376Bybm31bmrp3dwj6rrd3br7376Bzblbf31blrp3dwj6rrd3br7376C0bibf31biwd6rr73b6C1bf31wd6B6263z306w31HDnADk6EdrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376Bzbm31bmrp3dwj6rrd3br7376C0blbf31blrp3dwj6rrd3br7376C1bibf31biwd6rr73b6Bybf31wd6B6263z306w31HDnADk6EerDe36rCu3nrCa3nrBe3nrj3dwd6rr7376C0bm31bmrp3dwj6rrd3br7376C1blbf31blrp3dwj6rrd3br7376Bybibf31biwd6rr73b6Bzbf31wd6B6263z306w31HDnADk6EfrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376C1bm31bmrp3dwj6rrd3br7376Byblbf31blrp3dwj6rrd3br7376Bzbibf31biwd6rr73b6C0bf31wd6B6263z306w317gxe32w76B26j316Ec7mxk32wd6B2r63e6jba316Ed7mxk32wd6B2r63e6jb6316Ee7nxl32we6B2r73e6jbBe316Ef641e6Bbr93BubFibCpw76Dc6u307txr32w86B36Dk30Md6Dkw86Dc6Gb30647GjxGg32w76y6Jg30GG26Eh6H2KFrHxAv6oMr6H2wmwfw86Br6D1306Ce306Bv30HxAv6vMr6H2wmwfw86Br6D1306Ce306Bv30HyAw6EhMr6Ehwmwfw86Br6D1306Ce306Bv30HCmACj6pMCewCbMC36Eh6oiBe1k6Bwwfw86Br6Bw306C2301k6C7wfw86Br6Eg306F230146v6vwfw86Br6Dk306Da306Bd30e26p64H7A56Bn807D4MD1fLkGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fLlw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H6307D4MD1fLmGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fBjw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H6307D4MD1fLnGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fHcw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H630HmAk6H7wfw86Jh6Cz306Ji307P8xP532wfw86Jh6Cz306Ji30GOjKOevObMjw76Bqba31w8FLo6Fk30KN0H8A66E4dJjHwAu6FdwpMjFLpwew76Bqba316Hy30ba31vKvr83Bi6FdfaKc7ax8326E4dFevK4r93Bi6FdfDgKc7ax8326E4dFeKJcpCeH6A465bhre3x65w86Bn6Bl30263z3065KBfvBcru3E9MjfHcwew76Bn65316El30q43tbaKc7ax8326E4dFe64vBjru3E9Mmq43tbawew76Bqba316Cq30fE8Kj7hxf3Btw76Bqba31fE864HtAr6cMnri3BuMaw86K16Lq30bJz6I77wxu3Btw76Bqba31rg3efLrM9w76c6Bd30HBdABa6cMB5bhblwzrs3eMbblw76c6Bd30Mbblw76c6Bd306Cq307BxxBu3Btw76Bqba31rBf3efLsMB7MB1ro3er83e6FdfLtMaw86Bn6Bd306cw76y6Jg306I9vs6E4KlejMhC2636Bqw86H76En3064KlejMhC2636Bqw86H76En30646478q63E86Bka0")
好,我看不懂,我看你当中的值可以吧!
观察到传入的参数中有 CryptoJS
、AES
、CBC
、pkcs7
这些参数,所以我们只需要想办法找到 key
和 iv
还有要被加密的值就可以了,可是怎么加密呢?
根据 JavaScript
中的 CryptoJS
加密模型,可以推断出 CryptoJS.AES.encrypt
方法只有三个参数:
所以我们来 hook
(我是因为已经知道 a、b、c
的值,所以直接打印转换后的,正常可以直接使用 debugger
查看他们的值):
first = true;crypto_js = _[1][0].CryptoJS.AES.encrypt;_[1][0].CryptoJS.AES.encrypt = function(a, b, c) {if (first) {first = !first;console.log(_[1][0].CryptoJS.enc.Utf8.stringify(a));console.log(_[1][0].CryptoJS.enc.Utf8.stringify(b));console.log(_[1][0].CryptoJS.enc.Utf8.stringify(c.iv));// debugger;}return crypto_js(a, b, c);};
放开断点后的第一次输出,就是我们的相关参数:
可以发现 key
和 iv
都是一样的,而且像是两个一样的字符串叠加,而我们要加密的文本先是 page
参数,然后竖线,然后一堆随机数,当中是字母,我们先把他们都当定值使用,进行一次 AES
解密:
import base64from Crypto.Cipher import AESfrom Crypto.Util.Padding import pada = '646503bf646503bf'b = '2|225m259,225m258,225m257,225d257,225u257'aes = AES.new(key=a.encode('utf-8'), mode=AES.MODE_CBC, iv=a.encode('utf-8'))v = base64.b64encode(aes.encrypt(pad(b.encode('utf-8'), AES.block_size, style='pkcs7'))).decode('utf-8')print(v)
我们来对比一下两边执行的结果:
Nice!这加密并没有任何魔改的地方。
我们看到参数中有个时间戳,然而加密中并没有,让我相信他们之间没有任何联系?
我不信,把这个短的加密值的一半变成10进制:
世界上的很多事情就是这么巧,然后我们稍微试试要被加密的文本,发现他大部分都是长度填充,真正有意义的只有那个 u
。
也就是说,不管你写成 2|225m259,225m258,225m257,225d257,225u257
还是 2|_______,_______,_______,_______,___u___
还是 2|u
,都可以正常请求!
解题源码
import osimport timeimport base64import requestsimport jsonpathfrom urllib import parsefrom Crypto.Cipher import AESfrom Crypto.Util.Padding import pados.environ["EXECJS_RUNTIME"] = "Node"headers = {'cookie': 'sessionid=j4ypr929ukbi8rcou79p57yylrnccr8i','User-Agent': 'yuanrenxue.project'}value = 0for index in range(1, 6):t = int(time.time())# a = f'{index}|225m259,225m258,225m257,225d257,225u257'# a = f'{index}|_______,_______,_______,_______,___u___'a = f'{index}|u'b = hex(t)[2:] * 2aes = AES.new(key=b.encode('utf-8'), mode=AES.MODE_CBC, iv=b.encode('utf-8'))v = base64.b64encode(aes.encrypt(pad(a.encode('utf-8'), AES.block_size, style='pkcs7'))).decode('utf-8')url = f'https://match.yuanrenxue.cn/match/18data" />{index}&t={t}&v={parse.quote(v)}'# value += sum(v['value'] for v in requests.get(url, headers=headers).json()['data'])value += sum(jsonpath.jsonpath(requests.get(url, headers=headers).json(), '$..value'))print(value)