'&7 597 497emmmm是什么意思思

项目语言:None
权限:read-only(如需更高权限请先加入项目)
Index: searchreplace/searchreplace.html
===================================================================
--- searchreplace/searchreplace.html (revision 0)
+++ searchreplace/searchreplace.html (revision 2)
@@ -0,0 +1,82 @@
+&!DOCTYPE HTML PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN&
&http://www.w3.org/TR/html4/loose.dtd&&
&title&&/title&
&meta content=&text/ charset=utf-8& http-equiv=&Content-Type&/&
&script type=&text/javascript& src=&../internal.js&&&/script&
&style type=&text/css&&
.warpper{ position:width: 380 height: 100%; margin: 10}
.tabbody{height: 160}
.tabbody table{width:100%;border-collapse:border-spacing: 3}
.tabbody .panel{width:373height:100%;padding-left: 5position:background-color: #}
.tabbody input.int{ width:190height:21border:1px solid #d7d7d7;line-height:21}
.tabbody input.btn{padding: 0 5 text-align:line-height:24 text-decoration:height:24background:url(&../../themes/default/images/dialog-title-bg.png&) repeat-x;border:1px solid # }
+&div class=&warpper& id=&searchtab&&
&div id=&head& class=&tabhead&&
tabsrc=&find& class=&focus&&&var id=&lang_tab_search&&&/var&&/span&
tabsrc=&replace& &&var id=&lang_tab_replace&&&/var&&/span&
&div class=&tabbody&&
&div class=&panel& id=&find&&
&td width=&80&&&var id=&lang_search1&&&/var&: &/td&
&td&&input id=&findtxt& type=&text& class=&int& /&&/td&
&td colspan=&2&&&span style=&color:red&&&var id=&lang_searchReg&&&/var&&/span&&/td&
&td&&var id=&lang_case_sensitive1&&&/var&&/td&
&input id=&matchCase& type=&checkbox& /&
&td colspan=&2&&
&input id=&nextFindBtn& type=&button& class=&btn& /&
&input id=&preFindBtn& type=&button& class=&btn& /&
&div class=&panel& id=&replace&&
&td width=&80&&&var id=&lang_search2&&&/var&: &/td&
&td&&input id=&findtxt1& type=&text& class=&int&
&td colspan=&2&&&span style=&color:red&&&var id=&lang_searchReg1&&&/var&&/span&&/td&
&td&&var id=&lang_replace&&&/var&: &/td&
&td&&input id=&replacetxt& type=&text& class=&int& /&&/td&
&td&&var id=&lang_case_sensitive2&&&/var&&/td&
&input id=&matchCase1& type=&checkbox& /&
&td colspan=&2&&
&input id=&nextReplaceBtn& type=&button& class=&btn& /&
&input id=&preReplaceBtn& type=&button& class=&btn& /&
&input id=&repalceBtn& type=&button& class=&btn& /&
&input id=&repalceAllBtn& type=&button& class=&btn& /&
+&script type=&text/javascript& src=&searchreplace.js&&&/script&
\ No newline at end of file
Index: searchreplace/searchreplace.js
===================================================================
--- searchreplace/searchreplace.js (revision 0)
+++ searchreplace/searchreplace.js (revision 2)
@@ -0,0 +1,157 @@
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-9-26
+ * Time: 下午12:29
+ * To change this template use File | Settings | File Templates.
+//清空上次查选的痕迹
+editor.firstForSR = 0;
+editor.currentRangeForSR =
+//给tab注册切换事件
+ * tab点击处理事件
+ * @param tabHeads
+ * @param tabBodys
+ * @param obj
+function clickHandler( tabHeads,tabBodys,obj ) {
//head样式更改
for ( var k = 0, len = tabHeads. k & k++ ) {
tabHeads[k].className = &&;
obj.className = &focus&;
//body显隐
var tabSrc = obj.getAttribute( &tabSrc& );
for ( var j = 0, length = tabBodys. j & j++ ) {
var body = tabBodys[j],
id = body.getAttribute( &id& );
if ( id != tabSrc ) {
body.style.zIndex = 1;
body.style.zIndex = 200;
+ * TAB切换
+ * @param tabParentId
tab的父节点ID或者对象本身
+function switchTab( tabParentId ) {
var tabElements = $G( tabParentId ).children,
tabHeads = tabElements[0].children,
tabBodys = tabElements[1].
for ( var i = 0, length = tabHeads. i & i++ ) {
var head = tabHeads[i];
if ( head.className === &focus& )clickHandler(tabHeads,tabBodys, head );
head.onclick = function () {
clickHandler(tabHeads,tabBodys,this);
+//是否区分大小写
+function getMatchCase(id) {
return $G(id).checked ? true :
+$G(&nextFindBtn&).onclick = function (txt, dir, mcase) {
var findtxt = $G(&findtxt&).value,
if (!findtxt) {
searchStr:findtxt,
casesensitive:getMatchCase(&matchCase&)
if (!frCommond(obj)) {
alert(lang.getEnd);
+$G(&nextReplaceBtn&).onclick = function (txt, dir, mcase) {
var findtxt = $G(&findtxt1&).value,
if (!findtxt) {
searchStr:findtxt,
casesensitive:getMatchCase(&matchCase1&)
frCommond(obj);
+$G(&preFindBtn&).onclick = function (txt, dir, mcase) {
var findtxt = $G(&findtxt&).value,
if (!findtxt) {
searchStr:findtxt,
casesensitive:getMatchCase(&matchCase&)
if (!frCommond(obj)) {
alert(lang.getStart);
+$G(&preReplaceBtn&).onclick = function (txt, dir, mcase) {
var findtxt = $G(&findtxt1&).value,
if (!findtxt) {
searchStr:findtxt,
casesensitive:getMatchCase(&matchCase1&)
frCommond(obj);
+$G(&repalceBtn&).onclick = function () {
var findtxt = $G(&findtxt1&).value.replace(/^\s|\s$/g, &&), obj,
replacetxt = $G(&replacetxt&).value.replace(/^\s|\s$/g, &&);
if (!findtxt) {
if (findtxt == replacetxt || (!getMatchCase(&matchCase1&) && findtxt.toLowerCase() == replacetxt.toLowerCase())) {
searchStr:findtxt,
casesensitive:getMatchCase(&matchCase1&),
replaceStr:replacetxt
frCommond(obj);
+//全部替换
+$G(&repalceAllBtn&).onclick = function () {
var findtxt = $G(&findtxt1&).value.replace(/^\s|\s$/g, &&), obj,
replacetxt = $G(&replacetxt&).value.replace(/^\s|\s$/g, &&);
if (!findtxt) {
if (findtxt == replacetxt || (!getMatchCase(&matchCase1&) && findtxt.toLowerCase() == replacetxt.toLowerCase())) {
searchStr:findtxt,
casesensitive:getMatchCase(&matchCase1&),
replaceStr:replacetxt,
var num = frCommond(obj);
if (num) {
alert(lang.countMsg.replace(&{#count}&, num));
+var frCommond = function (obj) {
return editor.execCommand(&searchreplace&, obj);
+switchTab(&searchtab&);
\ No newline at end of file
Index: snapscreen/snapscreen.html
===================================================================
--- snapscreen/snapscreen.html (revision 0)
+++ snapscreen/snapscreen.html (revision 2)
@@ -0,0 +1,58 @@
+&!DOCTYPE HTML&
&meta http-equiv=&Content-Type& content=&text/ charset=utf-8&/&
&title&&/title&
&script type=&text/javascript& src=&../internal.js&&&/script&
&style type=&text/css&&
*{color: #838383}
html,body {
font-size: 12
width:100%;
height:100%;
h2 { font-size: 16 margin: 20}
padding:5px 15px 0 15
height:100%;
dt,dd { margin-left: 0; padding-left: 0;}
dt a { display:
height: 30
line-height: 30
background: #EFEFEF;
border: 1px solid #CCC;
padding: 0 10
text-decoration:
dt a:hover{
background: #e0e0e0;
border-color: #999
dt a:active{
background: #
border-color: #999;
color: #666;
dd { line-height:20margin-top: 10}
span{ padding-right:4}
input{width:210height:21background: #FFF;border:1px solid #d7d7d7;padding: 0 margin: 0 }
&div class=&content&&
&h2&&var id=&lang_showMsg&&&/var&&/h2&
&dt&&a href=&../../third-party/snapscreen/UEditorSnapscreen.exe& target=&_blank& id=&downlink&&&var id=&lang_download&&&/var&&/a&&/dt&
&dd&&var id=&lang_step1&&&/var&&/dd&
&dd&&var id=&lang_step2&&&/var&&/dd&
\ No newline at end of file
Index: image/image.html
===================================================================
--- image/image.html (revision 0)
+++ image/image.html (revision 2)
@@ -0,0 +1,204 @@
+&!DOCTYPE HTML PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN&
&http://www.w3.org/TR/html4/loose.dtd&&
&title&&/title&
&meta http-equiv=&Content-Type& content=&text/charset=utf-8&/&
&script type=&text/javascript& src=&../internal.js&&&/script&
&link rel=&stylesheet& href=&image.css& type=&text/css& /&
&div class=&wrapper&&
&div id=&imageTab&&
&div id=&tabHeads& class=&tabhead&&
&span tabSrc=&remote&
class=&focus&&&var id=&lang_tab_remote&&&/var&&/span&
&span tabSrc=&local&&&var id=&lang_tab_local&&&/var&&/span&
&span tabSrc=&imgManager&&&var id=&lang_tab_imgManager&&&/var&&/span&
&span tabSrc=&imgSearch&&&var id=&lang_tab_imgSearch&&&/var&&/span&
&div id=&tabBodys& class=&tabbody&&
&div id=&remote& class=&panel&&
&table cellpadding=&0& cellspacing=&0&&
&td class=&label&&&label for=&url&&&var id=&lang_input_url&&&/var&&/label&&/td&
&td&&input id=&url& type=&text&/&&/td&
&td class=&label&&&label for=&width&&&var id=&lang_input_width&&&/var&&/label&&/td&
&td&&input type=&text& id=&width&/& px&/td&
&td class=&label&&&label for=&height&&&var id=&lang_input_height&&&/var&&/label&&/td&
&td&&input type=&text& id=&height&/& px&/td&
&td class=&label&&&label for=&border&&&var id=&lang_input_border&&&/var&&/label&&/td&
&td&&input type=&text& id=&border&/& px&/td&
&td class=&label&&&label for=&vhSpace&&&var id=&lang_input_vhspace&&&/var&&/label&&/td&
&td&&input type=&text& id=&vhSpace&/& px&/td&
&td class=&label&&&label for=&title&&&var id=&lang_input_title&&&/var&&/label&&/td&
&td&&input type=&text& id=&title&/&&/td&
&td class=&label&&&var id=&lang_input_remoteAlign&&&/var&&/td&
&td id=&remoteFloat&&&/td&
&div id=&preview&&&/div&
&div class=&lock&&&input id=&lock& type=&checkbox& checked=&checked&&&/div&
&div id=&local& class=&panel&&
&div id=&flashContainer&&&/div&
&div&&div id=&upload& style=&display: none& &&/div&&div id=&duiqi&&&/div&&div id=&localFloat&&&/div&&/div&
&div class=&saveDir&&
&var id=&lang_savePath& &&/var&:&select id=&savePath&&
&option value=&1&&upload&/option&
&option value=&2&&upload1&/option&
&div id=&imgManager& class=&panel&&
&div id=&imageList&&&var id=&lang_imgLoading&&&/var&&/div&
&div id=&imgSearch& class=&panel&&
&table style=&margin-top: 5&&
&td width=&200&&&input id=&imgSearchTxt& type=&text& /&&/td&
&td width=&65&&
&select id=&imgType&&
&!--具体内容值将由国际化组件动态填充--&
&option value=&&s=4&z=0&&&/option&
&option value=&&s=1&z=19&&&/option&
&option value=&&s=2&z=0&&&/option&
&option value=&&s=3&z=0&&&/option&
&td width=&80&&&input id=&imgSearchBtn& type=&button&
&td width=&80&&&input id=&imgSearchReset& type=&button& /&&/td&
&div id=&searchList&&&/div&
&iframe id=&maskIframe& src=&about:blank& scrolling=&no& frameborder=&no&&&/iframe&
&script type=&text/javascript& src=&../tangram.js&&&/script&
&script type=&text/javascript& src=&image.js&&&/script&
&script type=&text/javascript&&
//全局变量
var imageUrls = [],
//用于保存从服务器返回的图片信息数组
selectedImageCount = 0;
//当前已选择的但未上传的图片数量
editor.setOpt({
imageFieldName:&upfile&,
compressSide:0,
maxImageSideLength:900
utils.domReady(function(){
var flashOptions = {
container:&flashContainer&,
//flash容器id
url:editor.options.imageUrl,
// 上传处理页面的url地址
ext:'{&param1&:&value1&, &param2&:&value2&}',
//可向服务器提交的自定义参数列表
fileType:'{&description&:&'+lang.fileType+'&, &extension&:&*.*.*.*.jpg&}',
//上传文件格式限制
flashUrl:'imageUploader.swf',
//上传用的flash组件地址
width:608,
//flash的宽度
height:272,
//flash的高度
gridWidth:121,
// 每一个预览图片所占的宽度
gridHeight:120,
// 每一个预览图片所占的高度
picWidth:100,
// 单张预览图片的宽度
picHeight:100,
// 单张预览图片的高度
uploadDataFieldName:editor.options.imageFieldName,
// POST请求中图片数据的key
picDescFieldName:'pictitle',
// POST请求中图片描述的key
maxSize:4,
// 文件的最大体积,单位M
compressSize:2,
// 上传前如果图片体积超过该值,会先压缩,单位M
maxNum:32,
// 单次最大可上传多少个文件
compressSide:editor.options.compressSide,
//等比压缩的基准,0为按照最长边,1为按照宽度,2为按照高度
compressLength:editor.options.maxImageSideLength
//能接受的最大边长,超过该值Flash会自动等比压缩
//回调函数集合,支持传递函数名的字符串、函数句柄以及函数本身三种类型
var callbacks = {
// 选择文件的回调
selectFileCallback: function(selectFiles){
utils.each(selectFiles,function(file){
var tmp = {};
tmp.id = file.
tmp.data = {};
postConfig.push(tmp);
selectedImageCount += selectFiles.
if(selectedImageCount) baidu.g(&upload&).style.display = &&;
dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮
// 删除文件的回调
deleteFileCallback: function(delFiles){
for(var i = 0,len = delFiles.i&i++){
var index = delFiles[i].
postConfig.splice(index,1);
selectedImageCount -= delFiles.
if (!selectedImageCount) {
baidu.g(&upload&).style.display = &none&;
dialog.buttons[0].setDisabled(false);
//没有选择图片时重新点亮按钮
// 单个文件上传完成的回调
uploadCompleteCallback: function(data){
var info = eval(&(& + data.info + &)&);
info && imageUrls.push(info);
selectedImageCount--;
}catch(e){}
// 单个文件上传失败的回调,
uploadErrorCallback: function (data){
if(!data.info){
alert(lang.netError);
//console && console.log(data);
// 全部上传完成时的回调
allCompleteCallback: function(){
dialog.buttons[0].setDisabled(false);
//上传完毕后点亮按钮
// 文件超出限制的最大体积时的回调
//exceedFileCallback: 'exceedFileCallback',
// 开始上传某个文件时的回调
startUploadCallback: function(){
var config = postConfig.shift();
//也可以在这里更改
//if(config.id==2){ //设置第三张图片的对应参数
config.data={&myParam&:&value&}
flashObj.addCustomizedParams(config.id,config.data);
imageUploader.init(flashOptions,callbacks);
$G(&upload&).onclick = function () {
* 接口imageUploader.setPostParams()可以在提交时设置本次上传提交的参数(包括所有图片)
* 参数为json对象{&key1&:&value1&,&key2&:&value2&},其中key即为向后台post提交的name,value即为值。
* 其中有一个特殊的保留key值为action,若设置,可以更改本次提交的处理地址
var postParams = {
&dir&:baidu.g(&savePath&).value
imageUploader.setPostParams(postParams);
flashObj.upload();
this.style.display = &none&;
$G(&savePath&).parentNode.style.display = &none&;
\ No newline at end of file
Index: image/images/left_focus.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: image/images/left_focus.jpg
===================================================================
--- image/images/left_focus.jpg (revision 0)
+++ image/images/left_focus.jpg (revision 2)
Property changes on: image/images/left_focus.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: image/images/right_focus.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: image/images/right_focus.jpg
===================================================================
--- image/images/right_focus.jpg (revision 0)
+++ image/images/right_focus.jpg (revision 2)
Property changes on: image/images/right_focus.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: image/images/none_focus.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: image/images/none_focus.jpg
===================================================================
--- image/images/none_focus.jpg (revision 0)
+++ image/images/none_focus.jpg (revision 2)
Property changes on: image/images/none_focus.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: image/images/center_focus.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: image/images/center_focus.jpg
===================================================================
--- image/images/center_focus.jpg (revision 0)
+++ image/images/center_focus.jpg (revision 2)
Property changes on: image/images/center_focus.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: image/image.css
===================================================================
--- image/image.css (revision 0)
+++ image/image.css (revision 2)
@@ -0,0 +1,69 @@
+@charset &utf-8&;
+.wrapper{ width: 623margin: 10zoom:1;position:}
+.tabbody{ height:325_height:330}/*tab样式框大小*/
+.panel { position:width:100%; height:100%;background: #}
+#remote{ z-index: 200;}
+#remote table{border-collapse:width: 620 height: 300 margin-top: 5}
+#remote td.label{text-align:width: 80 }
+#remote td{height: 40}
+td input {
width: 150
height: 21
line-height: 21
background: #FFF;
border: 1px solid #d7d7d7;
+#url {width: 520margin-bottom: 2}
+#preview{width: 260 height: 260 position:top:50 left: 341 z-index: 9999;background-color: #eee}
height: 40
background: url(&../../themes/default/images/lock.gif&) 3px -4px no-
line-height: 40
padding-top:10
+.saveDir{
/*width: 132*/
/*text-align:*/
height: 40
line-height: 40
margin-left: 30
+.saveDir select{
height: 30
+#duiqi{ width: 62 height: 38float: left}
+#remoteFloat div,#localFloat div{cursor:opacity: 0.5;filter: alpha(opacity = 50);margin-left:1width:38height:36float:}
+#remoteFloat .focus,#localFloat .focus{opacity: 1;filter: alpha(opacity = 100)}
+#maskIframe{ width: 620 height: 325 position:z-index: 100; }
+#flashContainer { margin: 6position:}
+#upload{width: 100height: 30float: margin:3px 6px 0 0;cursor:}
+#imageList{width: 620height: 315 margin-top: 10overflow:overflow-y:}
+#imageList img{cursor:border: 2px solid #fff}
+#imgManager #imageList div{float:width: 100height: 100margin: 5px 10}
+#imgSearchTxt{padding-left:2margin-left:15background: #FFF;width:200height:21line-height:21border: 1px solid #d7d7d7;}
+#searchList{width: 620overflow:zoom:1;height: 270}
+#searchList div{float:width: 116height: 135margin: 5px 15_margin:5px 10}
+#searchList img{margin: 2px 8cursor:border: 2px solid #fff} /*不用缩略图*/
+#searchList p{margin-left: 10_margin-left:8}
+#imgType{
height: 23
line-height: 22
border: 1px solid #d7d7d7;
+#imgSearchBtn,#imgSearchReset{
width: 100%;
height: 25
margin: 0 3
line-height: 25
background: #
border: 1px solid #d7d7d7;
cursor: pointer
+.msg{margin-left: 5}
\ No newline at end of file
Index: image/imageUploader.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: image/imageUploader.swf
===================================================================
--- image/imageUploader.swf (revision 0)
+++ image/imageUploader.swf (revision 2)
Property changes on: image/imageUploader.swf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: image/image.js
===================================================================
--- image/image.js (revision 0)
+++ image/image.js (revision 2)
@@ -0,0 +1,712 @@
+ * Created by JetBrains PhpStorm.
+ * User: taoqili
+ * Date: 12-01-08
+ * Time: 下午2:52
+ * To change this template use File | Settings | File Templates.
+var imageUploader = {},
flashObj = null,
postConfig=[];
+(function () {
var g = $G,
ajax = parent.baidu.editor.ajax,
maskIframe = g(&maskIframe&); //tab遮罩层,用来解决flash和其他dom元素的z-index层级不一致问题
//flash上传对象
var flagImg = null, flashC
imageUploader.init = function (opt, callbacks) {
switchTab(&imageTab&);
createAlignButton([&remoteFloat&, &localFloat&]);
createFlash(opt, callbacks);
var srcImg = editor.selection.getRange().getClosedNode();
if (srcImg) {
showImageInfo(srcImg);
showPreviewImage(srcImg, true);
var tabElements = g(&imageTab&).children,
tabHeads = tabElements[0].children,
tabBodys = tabElements[1].
for (var i = 0, ci = tabHeads[i++];) {
if (ci.getAttribute(&tabSrc&) == &remote&) {
clickHandler(tabHeads, tabBodys, ci);
addUrlChangeListener();
addOKListener();
addScrollListener();
addSearchListener();
$focus(g(&url&));
imageUploader.setPostParams = function(obj,index){
if(index===undefined){
utils.each(postConfig,function(config){
config.data =
postConfig[index].data =
function insertImage(imgObjs) {
editor.fireEvent('beforeInsertImage', imgObjs);
editor.execCommand(&insertImage&, imgObjs);
function searchImage() {
var imgSearchInput = $G(&imgSearchTxt&);
if (!imgSearchInput.getAttribute(&hasClick&) || !imgSearchInput.value) {
selectTxt(imgSearchInput);
g(&searchList&).innerHTML = &&p class='msg'&& + lang.imageLoading + &&/p&&;
var key = imgSearchInput.value,
type = $G(&imgType&).value,
url = &http://image.baidu.com/i?ct=&cl=2&lm=-1&st=-1&tn=baiduimagejson&istype=2&rn=32&fm=index&pv=&word=& + encodeToGb2312(key) + type + &&& + +new D
var reqCallBack = function (data) {
var imgObjs = data.
} catch (e) {
var frg = document.createDocumentFragment();
if (imgObjs.length & 2) {
g(&searchList&).innerHTML = &&p class='msg'&& + lang.tryAgain + &&/p&&;
for (var i = 0, len = imgObjs. i & len - 1; i++) {
var img = document.createElement(&img&), obj = imgObjs[i], div = document.createElement(&div&);
img.src = obj.objURL; //obj.thumbURL 为缩略图,只能针对百度内部使用
img.setAttribute(&sourceUrl&, obj.objURL);
var title = obj.fromPageTitleEnc.replace(/^\.\.\./i, &&);
img.setAttribute(&title&, lang.toggleSelect + obj.width + &X& + obj.height);
img.onclick = function () {
changeSelected(this);
scale(img, 100, obj.width, obj.height);
div.appendChild(img);
var p = document.createElement(&p&);
p.innerHTML = &&a target='_blank' href='& + obj.fromURL + &'&& + title + &&/a&&;
div.appendChild(p);
//setTimeout(function(){
frg.appendChild(div);
g(&searchList&).innerHTML = &&;
g(&searchList&).appendChild(frg);
baidu.sio.callByServer(url, reqCallBack, {charset:&GB18030&});
function selectTxt(node) {
if (node.select) {
node.select();
var r = node.createTextRange && node.createTextRange();
r.select();
function addSearchListener() {
g(&imgSearchTxt&).onclick = function () {
selectTxt(this);
this.setAttribute(&hasClick&, true);
if (this.value == lang.searchInitInfo) {
this.value = &&;
g(&imgSearchTxt&).onkeyup = function () {
this.setAttribute(&hasClick&, true);
//只触发一次
this.onkeyup =
g(&imgSearchBtn&).onclick = function () {
searchImage();
g(&imgSearchReset&).onclick = function () {
var txt = g(&imgSearchTxt&);
txt.value = &&;
txt.focus();
g(&searchList&).innerHTML = &&;
g(&imgType&).onchange = function () {
searchImage();
domUtils.on(g(&imgSearchTxt&), &keyup&, function (evt) {
if (evt.keyCode == 13) {
searchImage();
* 延迟加载
function addScrollListener() {
g(&imageList&).onscroll = function () {
var imgs = this.getElementsByTagName(&img&),
top = Math.ceil(this.scrollTop / 100) - 1;
top = top & 0 ? 0 :
for (var i = top * 5; i & (top + 5) * 5; i++) {
var img = imgs[i];
if (img && !img.getAttribute(&src&)) {
img.src = img.getAttribute(&lazy_src&);
img.removeAttribute(&lazy_src&);
* 绑定确认按钮
function addOKListener() {
dialog.onok = function () {
var currentTab = findFocus(&tabHeads&, &tabSrc&);
switch (currentTab) {
case &remote&:
return insertSingle();
case &local&:
return insertBatch();
case &imgManager&:
return insertSearch(&imageList&);
case &imgSearch&:
return insertSearch(&searchList&, true);
dialog.oncancel = function () {
hideFlash();
function hideFlash() {
flashObj =
flashContainer.innerHTML = &&;
* 将元素id下的所有图片文件插入到编辑器中。
* @param id
* @param catchRemote
是否需要替换远程图片
function insertSearch(id, catchRemote) {
var imgs = $G(id).getElementsByTagName(&img&), imgObjs = [];
for (var i = 0, ci = imgs[i++];) {
if (ci.getAttribute(&selected&)) {
var url = ci.getAttribute(&src&, 2).replace(/(\s*$)/g, &&), img = {};
img._src =
imgObjs.push(img);
insertImage(imgObjs);
catchRemote && editor.fireEvent(&catchRemoteImage&);
hideFlash();
* 插入单张图片
function insertSingle() {
var url = g(&url&),
width = g(&width&),
height = g(&height&),
border = g(&border&),
vhSpace = g(&vhSpace&),
title = g(&title&),
align = findFocus(&remoteFloat&, &name&),
imgObj = {};
if (!url.value)
if (!flagImg)
//粘贴地址后如果没有生成对应的预览图,可以认为本次粘贴地址失败
if (!checkNum([width, height, border, vhSpace]))
imgObj.src = url.
imgObj._src = url.
imgObj.width = width.
imgObj.height = height.
imgObj.border = border.
imgObj.floatStyle =
imgObj.vspace = imgObj.hspace = vhSpace.
imgObj.title = title.
imgObj.style = &width:& + width.value + &height:& + height.value + &&;
insertImage(imgObj);
editor.fireEvent(&catchRemoteImage&);
hideFlash();
* 检测传入的所有input框中输入的长宽是否是正数
* @param nodes input框集合,
function checkNum(nodes) {
for (var i = 0, ci = nodes[i++];) {
if (!isNumber(ci.value) || ci.value & 0) {
alert(lang.numError);
ci.value = &&;
ci.focus();
* 数字判断
* @param value
function isNumber(value) {
return /(0|^[1-9]\d*$)/.test(value);
* 插入多张图片
function insertBatch() {
if (imageUrls.length & 1)
var imgObjs = [],
align = findFocus(&localFloat&, &name&);
for (var i = 0, ci = imageUrls[i++];) {
var tmpObj = {};
tmpObj.title = ci.
tmpObj.floatStyle =
//修正显示时候的地址数据,如果后台返回的是图片的绝对地址,那么此处无需修正
tmpObj._src = tmpObj.src = editor.options.imagePath + ci.
imgObjs.push(tmpObj);
insertImage(imgObjs);
hideFlash();
* 找到id下具有focus类的节点并返回该节点下的某个属性
* @param id
* @param returnProperty
function findFocus(id, returnProperty) {
var tabs = g(id).children,
for (var i = 0, ci = tabs[i++];) {
if (ci.className == &focus&) {
property = ci.getAttribute(returnProperty);
* 绑定地址框改变事件
function addUrlChangeListener() {
var value = g(&url&).
if (browser.ie) {
g(&url&).onpropertychange = function () {
var v = this.
if (v != value) {
createPreviewImage(v);
g(&url&).addEventListener(&input&, function () {
var v = this.
if (v != value) {
createPreviewImage(v);
}, false);
* 绑定图片等比缩放事件
* @param percent
function addSizeChangeListener(percent) {
var width = g(&width&),
height = g(&height&),
lock = g('lock');
width.onkeyup = function () {
if (!isNaN(this.value) && lock.checked) {
height.value = Math.round(this.value / percent) || this.
height.onkeyup = function () {
if (!isNaN(this.value) && lock.checked) {
width.value = Math.round(this.value * percent) || this.
* 依据url中的地址创建一个预览图片并将对应的信息填入信息框和预览框
function createPreviewImage(url) {
if (!url) {
g(&preview&).innerHTML = &&;
g(&width&).value = &&;
g(&height&).value = &&;
g(&border&).value = &&;
g(&vhSpace&).value = &&;
g(&title&).value = &&;
$focus(g(&url&));
var img = document.createElement(&img&),
preview = g(&preview&);
var imgTypeReg = /\.(png|gif|jpg|jpeg)$/gi, //格式过滤
urlFilter = &&;
//地址过滤
if (!imgTypeReg.test(url) || url.indexOf(urlFilter) == -1) {
preview.innerHTML = &&span style='color: red'&& + lang.imageUrlError + &&/span&&;
preview.innerHTML = lang.imageL
img.onload = function () {
showImageInfo(this);
showPreviewImage(this,true);
this.onload =
img.onerror = function () {
preview.innerHTML = &&span style='color: red'&& + lang.imageLoadError + &&/span&&;
this.onerror =
* 显示图片对象的信息
* @param img
function showImageInfo(img) {
if (!img.getAttribute(&src&) || !img.src)
var wordImgFlag = img.getAttribute(&word_img&);
g(&url&).value = wordImgFlag ? wordImgFlag.replace(&&&, &&&) : (img.getAttribute('_src') || img.getAttribute(&src&, 2).replace(&&&, &&&));
g(&width&).value = img.width || 0;
g(&height&).value = img.height || 0;
g(&border&).value = img.getAttribute(&border&) || 0;
g(&vhSpace&).value = img.getAttribute(&vspace&) || 0;
g(&title&).value = img.title || &&;
var align = editor.queryCommandValue(&imageFloat&) || &none&;
updateAlignButton(align);
//保存原始比例,用于等比缩放
var percent = (img.width / img.height).toFixed(2);
addSizeChangeListener(percent);
* 将img显示在预览框,
* @param img
* @param needClone
是否需要克隆后显示
function showPreviewImage(img, needClone) {
var tmpWidth = img.width, tmpHeight = img.
var maxWidth = 262,maxHeight = 262,
target = scaling(tmpWidth,tmpHeight,maxWidth,maxHeight);
target.border = img.border||0;
target.src = img.
if ((target.width + 2 * target.border) & maxWidth) {
target.width = maxWidth - 2 * target.
if ((target.height + 2 * target.border) & maxWidth) {
target.height = maxWidth - 2 * target.
var preview = g(&preview&);
preview.innerHTML = '&img src=&' + target.src + '& width=&' + target.width + '& height=&' + target.height + '& border=&' + target.border + 'px solid #000& /&';
* 图片缩放
* @param img
* @param max
function scale(img, max, oWidth, oHeight) {
var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oH
if (ow & max || oh & max) {
if (ow &= oh) {
if (width = ow - max) {
percent = (width / ow).toFixed(2);
img.height = oh - oh *
img.width =
if (height = oh - max) {
percent = (height / oh).toFixed(2);
img.width = ow - ow *
img.height =
function scaling(width,height,maxWidth,maxHeight){
if(width&maxWidth && height&maxHeight) return {width:width,height:height};
var srcRatio = (width/height).toFixed(2),
tarRatio = (maxWidth/maxHeight).toFixed(2),
if(srcRatio&tarRatio){
w = h*srcR
h = w/srcR
return {width:w.toFixed(0),height:h.toFixed(0)}
* 创建flash实例
* @param opt
* @param callbacks
function createFlash(opt, callbacks) {
var i18n = utils.extend({}, lang.flashI18n);
//处理图片资源地址的编码,补全等问题
for (var i in i18n) {
if (!(i in {&lang&:1, &uploadingTF&:1, &imageTF&:1, &textEncoding&:1}) && i18n[i]) {
i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + &/images/& + i18n[i]);
opt = utils.extend(opt, i18n, false);
var option = {
createOptions:{
id:'flash',
url:opt.flashUrl,
width:opt.width,
height:opt.height,
errorMessage:lang.flashError,
wmode:browser.safari ? 'transparent' : 'window',
ver:'10.0.0',
container:opt.container
flashContainer = $G(opt.container);
option = utils.extend(option, callbacks, false);
flashObj = new baidu.flash.imageUploader(option);
* 依据传入的align值更新按钮信息
* @param align
function updateAlignButton(align) {
var aligns = g(&remoteFloat&).
for (var i = 0, ci = aligns[i++];) {
if (ci.getAttribute(&name&) == align) {
if (ci.className != &focus&) {
ci.className = &focus&;
if (ci.className == &focus&) {
ci.className = &&;
* 创建图片浮动选择按钮
* @param ids
function createAlignButton(ids) {
for (var i = 0, ci = ids[i++];) {
var floatContainer = g(ci),
nameMaps = {&none&:lang.floatDefault, &left&:lang.floatLeft, &right&:lang.floatRight, &center&:lang.floatCenter};
for (var j in nameMaps) {
var div = document.createElement(&div&);
div.setAttribute(&name&, j);
if (j == &none&) div.className = &focus&;
div.style.cssText = &background:url(images/& + j + &_focus.jpg);&;
div.setAttribute(&title&, nameMaps[j]);
floatContainer.appendChild(div);
switchSelect(ci);
function toggleFlash(show) {
if (flashContainer && browser.webkit) {
flashContainer.style.left = show ? &0& : &-10000px&;
* tab点击处理事件
* @param tabHeads
* @param tabBodys
* @param obj
function clickHandler(tabHeads, tabBodys, obj) {
//head样式更改
for (var k = 0, len = tabHeads. k & k++) {
tabHeads[k].className = &&;
obj.className = &focus&;
//body显隐
var tabSrc = obj.getAttribute(&tabSrc&);
for (var j = 0, length = tabBodys. j & j++) {
var body = tabBodys[j],
id = body.getAttribute(&id&);
body.onclick = function () {
this.style.zoom = 1;
if (id != tabSrc) {
body.style.zIndex = 1;
body.style.zIndex = 200;
//当切换到本地图片上传时,隐藏遮罩用的iframe
if (id == &local&) {
toggleFlash(true);
maskIframe.style.display = &none&;
//处理确定按钮的状态
if (selectedImageCount) {
dialog.buttons[0].setDisabled(true);
toggleFlash(false);
maskIframe.style.display = &&;
dialog.buttons[0].setDisabled(false);
var list = g(&imageList&);
list.style.display = &none&;
//切换到图片管理时,ajax请求后台图片列表
if (id == &imgManager&) {
list.style.display = &&;
//已经初始化过时不再重复提交请求
if (!list.children.length) {
ajax.request(editor.options.imageManagerUrl, {
timeout:100000,
action:&get&,
onsuccess:function (xhr) {
//去除空格
var tmp = utils.trim(xhr.responseText),
imageUrls = !tmp ? [] : tmp.split(&ue_separate_ue&),
length = imageUrls.
g(&imageList&).innerHTML = !length ? &&&& + lang.noUploadImage : &&;
for (var k = 0, ci = imageUrls[k++];) {
var img = document.createElement(&img&);
var div = document.createElement(&div&);
div.appendChild(img);
div.style.display = &none&;
g(&imageList&).appendChild(div);
img.onclick = function () {
changeSelected(this);
img.onload = function () {
this.parentNode.style.display = &&;
var w = this.width, h = this.
scale(this, 100, 120, 80);
this.title = lang.toggleSelect + w + &X& +
this.onload =
img.setAttribute(k & 35 ? &src& : &lazy_src&, editor.options.imageManagerPath + ci.replace(/\s+|\s+/ig, &&));
img.setAttribute(&_src&, editor.options.imageManagerPath + ci.replace(/\s+|\s+/ig, &&));
onerror:function () {
g(&imageList&).innerHTML = lang.imageLoadE
if (id == &imgSearch&) {
selectTxt(g(&imgSearchTxt&));
if (id == &remote&) {
$focus(g(&url&));
* @param tabParentId
tab的父节点ID或者对象本身
function switchTab(tabParentId) {
var tabElements = g(tabParentId).children,
tabHeads = tabElements[0].children,
tabBodys = tabElements[1].
for (var i = 0, length = tabHeads. i & i++) {
var head = tabHeads[i];
if (head.className === &focus&)clickHandler(tabHeads, tabBodys, head);
head.onclick = function () {
clickHandler(tabHeads, tabBodys, this);
* 改变o的选中状态
* @param o
function changeSelected(o) {
if (o.getAttribute(&selected&)) {
o.removeAttribute(&selected&);
o.style.cssText = &filter:alpha(Opacity=100);-moz-opacity:1;opacity: 1;border: 2px solid #fff&;
o.setAttribute(&selected&, &true&);
o.style.cssText = &filter:alpha(Opacity=50);-moz-opacity:0.5;opacity: 0.5;border:2&;
* 选择切换,传入一个container的ID
* @param selectParentId
function switchSelect(selectParentId) {
var select = g(selectParentId),
children = select.
domUtils.on(select, &click&, function (evt) {
var tar = evt.srcElement || evt.
for (var j = 0, cj = children[j++];) {
cj.className = &&;
cj.removeAttribute && cj.removeAttribute(&class&);
tar.className = &focus&;
* gb2312编码
* @param str
function encodeToGb2312(str) {
var strOut = &&;
for (var i = 0; i & str. i++) {
var c = str.charAt(i),
code = str.charCodeAt(i);
if (c == & &) strOut += &+&;
else if (code &= 19968 && code &= 40869) {
var index = code - 19968;
strOut += &%& + z.substr(index * 4, 2) + &%& + z.substr(index * 4 + 2, 2);
strOut += &%& + str.charCodeAt(i).toString(16);
return strO
var z = 'D2BBB6ACDF2D5C9C8FDC9CFCFC2D8A2B2BBD3EBB3FC7D2D8A7CACB1FBD2B5B4D4B6ABCBBFD8A9B6AA814AC1BDD1CF814BC9A5D8AD814CB8F6D1BEE3DCD6DE50C1D52CDE8B5A4CEAAD6FBED9D8AFC4CB8157BECC3B4D2E58159D6AECEDAD5A7BAF5B7A6C0DC5D2C7C5CB3CBD2DBFBEC5C6F2D2B2CFB0CFE18162CAECAC2F2C2D6C816D816E816FC7ACB817CC1CB817DD3E8D5F9817ECAC2B6FED8A1D3DABFFBBA5D8C1CEE5BEAEAD0A6D8BDD9EFCDF6BFBA8187BDBBBAA5D2E0B2FABAE0C4B68188CFEDBEA9CDA4C1CBC7D7D9F8D818E818F8190C8CBD8E3D2DACAB2C8CAD8ECD8EAD8C6BDF6C6CDB3F08194D8EBBDF1BDEB4DDD7D0CACBCBFBD5CCB8B6CFCBD9DAD8F0C7AA819CD8EE819DB4FAC1EED2DED81A0D2C7D8EFC3C781A181A281A3D1F681A4D6D9D8F281A5D8F5BCFEBCDB81A681A781A8C8CE81A9B7DD81AAB7C281ABC6F381AC81AD81AE81AF81B081B181B2D8F8D2C181B381B4CEE9BCBFB7FCB7A5D0DD81B581B681B781B881B9D6DAD3C5BBEFBBE1D8F181BA81BBC9A1CEB0B4AB81BCD8F381BDC9CBD8F6C2D7D8F781BE81BFCEB1D8F981C081C181C2B2AEB9C081C3D9A381C4B0E981C5C1E681C6C9EC81C7CBC581C8CBC6D9A481C981CA81CB81CC81CDB5E881CE81CFB5AB81D081D181D281D381D481D5CEBBB5CDD7A1D7F4D3D381D6CCE581D7BACE81D8D9A2D9DCD3E0D8FDB7F0D7F7D8FED8FAD9A1C4E381D981DAD3B6D8F4D9DD81DBD8FB81DCC5E581DD81DEC0D081DF81E0D1F0B0DB81E181E2BCD1D9A681E3D9A581E481E581E681E7D9ACD9AE81E8D9ABCAB981E981EA81EBD9A9D6B681EC81ED81EEB3DED9A881EFC0FD81F0CACC81F1D9AA81F2D9A781F381F4D9B081F581F6B6B181F781F881F9B9A981FAD2C081FB81FCCFC081FD81FEC2C28240BDC4D5ECB2E0C7C8BFEBD9AD42CEEABAEEDA824B824C824D824E824FB4D9B6EDD9B68257BFAAD9DEC7CEC0FED9BD825E825FCBD7B7FD61D9B7B1A3D3E1D9B63D9BBC1A9D9BBCF3D0DEB8A98269BEE6B826C826D826ED9BA826FB0B2D9CB827C827D827EB1BB98284BEF7CCC8BAF2D2D89828ABDE8C828D828ED9C5BEEB828FD9C6D9BBC4DF8290D9BED9C1D9CAE829CD6B9E829F82A082A1D9C882A282A382A4BCD9D9CA82A582A682A7D9BC82A8D9CBC6AB82A982AA82AB82AC82ADD9C982AE82AF82B082B1D7F682B2CDA382B382B482B582B682B782B882B982BABDA182BB82BC82BD82BE82BF82C0D9CC82C182C282C382C482C582C682C782C882C9C5BCCDB582CA82CB82CCD9CD82CD82CED9C7B3A5BFFE82CF82D082D182D2B8B582D382D4C0FC82D582D682D782D8B0F882D982DA82DB82DC82DD82DE82DF82E082E182E282E382E482E582E682E782E882E982EA82EB82EC82EDB4F682EED9CE82EFD9CFB4A2D9D082F082F1B4DF82F282F382F482F582F6B0C182F782F882F982FA82FB82FC82FDD9D1C9B582FEB834C834D834E834FCFF7D9DAC1CD835E835FD9D6C9AED9D4D9DC836DCBDB836EBDAAC837DD9D3D9D1D9D7C8EA838B838C838D838E838FC0DCB839C839D839E839F83A083A183A283A383A483A583A683A783A883A983AA83AB83AC83AD83AE83AF83B083B183B2B6F9D8A3D4CA83B3D4AAD0D6B3E4D5D783B4CFC8B9E283B5BFCB83B6C3E283B783B883B9B6D283BA83BBCDC3D9EED9F083BC83BD83BEB5B383BFB6B583C083C183C283C383C4BEA483C583C6C8EB83C783C8C8AB83C983CAB0CBB9ABC1F9D9E283CBC0BCB9B283CCB9D8D0CBB1F8C6E4BEDFB5E4D7C883CDD1F8BCE6CADE83CE83CFBCBDD9E6D8E783D083D1C4DA83D283D3B8D4C8BD83D483D5B2E1D4D983D683D783D883D9C3B083DA83DBC3E1DAA2C8DF83DCD0B483DDBEFCC5A983DE83DF83E0B9DA83E1DAA383E2D4A9DAA483E383E483E583E683E7D9FBB6AC83E883E9B7EBB1F9D9FCB3E5BEF683EABFF6D2B1C0E483EB83EC83EDB6B3D9FED9FD83EE83EFBEBB83F083F183F2C6E083F3D7BCDAA183F4C1B983F5B5F2C1E883F683F7BCF583F8B4D583F983FA83FB83FC83FD83FEC1DD448445BCB8B7BEFA844B844C844DD9EC844EC6BE844FBFADBBCBCA8452DBC9D0D78453CDB9B0BCB3F6BBF7DBCABAAFB5B6B5F3D8D6C8DD6C7D0D8D78457BFAFDBBBD8DCCBBAE845C845D845EEBBEC1D0C1F5D4F2B8D5B4BBEC5D7C5D9C0FB69D8D9B9CE846AB5BD846B846CD8DA846D846ED6C6CBA2C8AFC9B2B4CCBFCC846FB9F48470D8DBD8DCB6E7BCC1CCEACFF78477D8DDC7BD0BDABCCDE847CC6CA847D847ED8EDFB0FE8489BEE7848ACAA3BCFD848EB8BEE849AD8E2849BBDCB849CD8E4D8EF84A084A1C5FC84A284A384A484A584A684A784A8D8E584A984AAD8E684AB84AC84AD84AE84AF84B084B1C1A684B2C8B0B0ECB9A6BCD3CEF1DBBDC1D384B384B484B584B6B6AFD6FAC5ACBDD9DBBEDBBF84B784B884B9C0F8BEA2C0CD84BA84BB84BC84BD84BE84BF84C084C184C284C3DBC0CAC684C484C584C6B2AA84C784C884C9D3C284CAC3E384CBD1AB84CC84CD84CE84CFDBC284D0C0D584D184D284D3DBC384D4BFB184D584D684D784D884D984DAC4BC84DB84DC84DD84DEC7DA84DF84E084E184E284E384E484E584E684E784E884E9DBC484EA84EB84EC84ED84EE84EF84F084F1D9E8C9D784F284F384F4B9B4CEF0D4C884F584F684F784F8B0FCB4D284F9D0D984FA84FB84FC84FDD9E984FEDECBD9EBBBAFB1BD8CEDBDB3BFEF8549CFBB854A854BD8DEB7CB854FDA855BC6A5C7F8D2BD855C855DD8D2C4E4855ECAAE855FC7A61C9FDCEE7BBDCB0EBBBAAD0ADD7E4D7BFC2F4C4CFA6AB1E5DFB2D5BCBFA8C2ACD8D5C2BCED4856CDAE0856DCECB4C3AED3A1CEA38570BCB4C8B4C2D18571BEEDD0B68572DAEACCFCC0FA857A857BC0FD1E1D8CE58587BAFC8B858CCFE1D8C9858DD8CACFCBEC99DBCC859A859B859C859DC8AA0CFD885A1C8FEB2CE85A285A385A485A585A6D3D6B2E6BCB0D3D1CBABB7B485A785A885A9B7A285AA85ABCAE585ACC8A1CADCB1E4D0F085ADC5D185AE85AF85B0DBC5B5FE85B185B2BFDAB9C5BEE4C1ED85B3DFB6DFB5D6BBBDD0D5D9B0C8B6A3BFC9CCA8DFB3CAB7D3D285B4D8CFD2B6BAC5CBBECCBE85B5DFB7B5F0DFB485B685B785B8D3F585B9B3D4B8F785BADFBA85BBBACFBCAAB5F585BCCDACC3FBBAF3C0F4CDC2CFF2DFB8CFC585BDC2C0DFB9C2F085BE85BF85C0BEFD85C1C1DFCDCCD2F7B7CDDFC185C2DFC485C385C4B7F1B0C9B6D6B7D485C5BAACCCFDBFD4CBB1C6F485C6D6A8DFC585C7CEE2B3B385C885C9CEFCB4B585CACEC7BAF085CBCEE185CCD1BD85CD85CEDFC085CF85D0B4F485D1B3CA85D2B8E6DFBB85D385D485D585D6C4C585D7DFBCDFBDDFBEC5BBDFBFDFC2D4B1DFC385D8C7BACED885D985DA85DB85DC85DDC4D885DEDFCA85DFDFCF85E0D6DC85E185E285E385E485E585E685E785E8DFC9DFDACEB685E9BAC7DFCEDFC8C5DE85EA85EBC9EBBAF4C3FC85EC85EDBED785EEDFC685EFDFCD85F0C5D885F185F285F385F4D5A6BACD85F5BECCD3BDB8C085F6D6E485F7DFC7B9BEBFA785F885F9C1FCDFCBDFCC85FADFD085FB85FC85FD85FE8640DFDBDFE58641DFD7DFD6D7C9DFE3DFE4E5EBD2A7DFD28642BFA44BFC8DFD7CFCCDFDD864AD1CA864BDFDEB0A7C6B7DFD3864CBAE5864DB6DFCDDBB9FED4DFDFDFCFECB0A5DFE7DFD1D1C6DFD5DFD8DFD9DFDC8650BBA98651DFE0DFE18652DFE2DFE6DFE8D3BE7C5B6DFEAC9DAC1A8C4CBFDECFFCD5DCDFEE865D865E865FB2B88663BADFDFEC8664DBC69CBF4B4BD866AB0AD866E866FDFF1CCC6DFFDFEDDFEA867BDFEB867CDFEFDFF0BBBD867D867EDFFDFF48682BBA38683CADBCEA8E0A7B3AAE0AA868BDFFE868CCDD9DFFC868DDFFA868EBFD0D7C908691DFF8B0ADFFD869ADFFBE0AD869E869FE0A886A086A186A286A3B7C886A486A5C6A1C9B6C0B2DFF586A686A7C5BE86A8D8C4DFF9C4F686A986AA86AB86AC86AD86AEE0A3E0A4E0A5D0A586AF86B0E0B4CCE486B1E0B186B2BFA6E0AFCEB9E0ABC9C686B386B4C0AEE0AEBAEDBAB0E0A986B586B686B7DFF686B8E0B386B986BAE0B886BB86BC86BDB4ADE0B986BE86BFCFB2BAC886C0E0B086C186C286C386C486C586C686C7D0FA86C886C986CA86CB86CC86CD86CE86CF86D0E0AC86D1D4FB86D2DFF786D3C5E786D4E0AD86D5D3F786D6E0B6E0B786D786D886D986DA86DBE0C4D0E186DC86DD86DEE0BC86DF86E0E0C9E0CA86E186E286E3E0BEE0AAC9A4E0C186E4E0B286E586E686E786E886E9CAC8E0C386EAE0B586EBCECB86ECCBC3E0CDE0C6E0C286EDE0CB86EEE0BAE0BFE0C086EF86F0E0C586F186F2E0C7E0C886F3E0CC86F4E0BB86F586F686F786F886F9CBD4E0D586FAE0D6E0D286FB86FC86FD86FED0BCCEDD8CA874B874CD0EA874D874EC2EF874F8750E0CFE0BDE0D4E0DD88759E0DCE0DCD6F6B3B5ECBBB875F61CEFBBADA876B876C876D876E876FE0DDD2ADEDBE0D9E0DFEC877D877EE0DEC6F7D8ACD4EBE0E6CAC8BB8CE878FE0E7E0EE9E0EA879B879C879D879EBABFCCEA1E0EA87A287A387A487A587A687A787A887A987AA87AB87AC87AD87AE87AF87B0CFF987B187B287B387B487B587B687B787B887B987BA87BBE0EB87BC87BD87BE87BF87C087C187C2C8C287C387C487C587C6BDC087C787C887C987CA87CB87CC87CD87CE87CF87D087D187D287D3C4D287D487D587D687D787D887D987DA87DB87DCE0EC87DD87DEE0ED87DF87E0C7F4CBC487E1E0EEBBD8D8B6D2F2E0EFCDC587E2B6DA87E387E487E587E687E787E8E0F187E9D4B087EA87EBC0A7B4D187EC87EDCEA7E0F087EE87EF87F0E0F2B9CC87F187F2B9FACDBCE0F387F387F487F5C6D4E0F487F6D4B287F7C8A6E0F6E0F587F887F987FA87FB87FC87FD87FE4A884BCDCECAA18852D4DADBD7DBD98853DBD8B9E7DBDCDBDDB5DDBDA8859885ADBDBB3A1DBDF885B885CBBF5EDBE18862BEFBB8865DBD0CCAEBFB2BBB5D7F8BFDABFECBCE1CCB3DBDEB0D3CEEBB7D8D7B9C6CA4886FCCB98870DBE7DBE1C6BADBE38871DBEDBEADBE9BFCADBE6DBED887EC0ACC2A2DBE2DBE38884D0CDDBEDDDDBFC888D888E888F94DBF3DBD2B9B8D4ABDBEC8895BFD1DBF08896DBD98DBEBBFEBDBEE889CDBFFDBF988A088A188A288A388A488A588A688A788A8B9A1B0A388A988AA88AB88AC88AD88AE88AFC2F188B088B1B3C7DBEF88B288B3DBF888B4C6D2DBF488B588B6DBF5DBF7DBF688B788B8DBFE88B9D3F2B2BA88BA88BB88BCDBFD88BD88BE88BF88C088C188C288C388C4DCA488C5DBFB88C688C788C888C9DBFA88CA88CB88CCDBFCC5E0BBF988CD88CEDCA388CF88D0DCA588D1CCC388D288D388D4B6D1DDC088D588D688D7DCA188D8DCA288D988DA88DBC7B588DC88DD88DEB6E988DF88E088E1DCA788E288E388E488E5DCA688E6DCA9B1A488E788E8B5CC88E988EA88EB88EC88EDBFB088EE88EF88F088F188F2D1DF88F388F488F588F6B6C288F788F888F988FA88FB88FC88FD88FEDCAB894CCBFAEBFFCBDCCBFECCCFB895A895B895C895D895E895FDCAACCEEDCABA896B896C896D896E896FDBD38976DCAFDCAC8977BEB38978CAFBBDCAD897C897D897ECAC4BBDDCAE898A898B898CD4F6D0EFABB6DA899B899C899D899E899F89A089A189A289A389A489A589A6DBD489A789A889A989AAB1DA89AB89AC89ADDBD589AE89AF89B089B189B289B389B489B589B689B789B8DBD689B989BA89BBBABE89BC89BD89BE89BF89C089C189C289C389C489C589C689C789C889C9C8C089CA89CB89CC89CD89CE89CFCABFC8C989D0D7B389D1C9F989D289D3BFC789D489D5BAF889D689D7D2BC89D889D989DA89DB89DC89DD89DE89DFE2BA89E0B4A689E189E2B1B889E389E489E589E689E7B8B489E8CFC489E989EA89EB89ECD9E7CFA6CDE289ED89EED9EDB6E089EFD2B989F089F1B9BB89F289F389F489F5E2B9E2B789F6B4F389F7CCECCCABB7F289F8D8B2D1EBBABB89F9CAA789FA89FBCDB789FC89FDD2C4BFE4BCD0B6E189FEDEC58A408A418A428A43DEC6DBBC8A44D1D98A458A46C6E6C4CEB7EE8A47B7DC8A488A49BFFCD7E08A4AC6F58A4B8A4CB1BCDEC8BDB1CCD7DECA8A4DDEC98A4E8A4F8A508A518A52B5EC8A53C9DD8A548A55B0C28A568A578A588A598A5A8A5B8A5C8A5D8A5E8A5F8A608A618A62C5AEC5AB8A63C4CC8A64BCE9CBFD8A658A668A67BAC38A688A698A6AE5F9C8E7E5FACDFD8A6BD7B1B8BEC2E88A6CC8D18A6D8A6EE5FB8A6F8A708A718A72B6CABCCB8A738A74D1FDE6A18A75C3EE8A768A778A788A79E6A48A7A8A7B8A7C8A7DE5FEE6A5CDD78A7E8A80B7C1E5FCE5FDE6A38A818A82C4DDE6A88A838A84E6A78A858A868A878A888A898A8AC3C38A8BC6DE8A8C8A8DE6AA8A8E8A8F8A908A918A928A938A94C4B78A958A968A97E6A2CABC8A988A998A9A8A9BBDE3B9C3E6A6D0D5CEAF8A9C8A9DE6A9E6B08A9ED2A68A9FBDAAE6AD8AA08AA18AA28AA38AA4E6AF8AA5C0D18AA68AA7D2CC8AA88AA98AAABCA78AAB8AAC8AAD8AAE8AAF8AB08AB18AB28AB38AB48AB58AB6E6B18AB7D2F68AB88AB98ABAD7CB8ABBCDFE8ABCCDDEC2A6E6ABE6ACBDBFE6AEE6B38ABD8ABEE6B28ABF8AC08AC18AC2E6B68AC3E6B88AC48AC58AC68AC7C4EF8AC88AC98ACAC4C88ACB8ACCBEEAC9EF8ACD8ACEE6B78ACFB6F08AD08AD18AD2C3E48AD38AD48AD58AD68AD78AD88AD9D3E9E6B48ADAE6B58ADBC8A28ADC8ADD8ADE8ADF8AE0E6BD8AE18AE28AE3E6B98AE48AE58AE68AE78AE8C6C58AE98AEACDF1E6BB8AEB8AEC8AED8AEE8AEF8AF08AF18AF28AF38AF4E6BC8AF58AF68AF78AF8BBE98AF98AFA8AFB8AFC8AFD8AFE8B40E6BE8B418B428B438B44E6BA8B458B46C0B78B478B488B498B4A8B4B8B4C8B4D8B4E8B4FD3A4E6BFC9F4E6C38B508B51E6C48B528B538B548B55D0F68B568B578B588B598B5A8B5B8B5C8B5D8B5E8B5F8B608B618B628B638B648B658B668B67C3BD8B688B698B6A8B6B8B6C8B6D8B6EC3C4E6C28B6F8B708B718B728B738B748B758B768B778B788B798B7A8B7B8B7CE6C18B7D8B7E8B808B818B828B838B84E6C7CFB18B85EBF48B868B87E6CA8B888B898B8A8B8B8B8CE6C58B8D8B8EBCDEC9A98B8F8B908B918B928B938B94BCB58B958B96CFD38B978B988B998B9A8B9BE6C88B9CE6C98B9DE6CE8B9EE6D08B9F8BA08BA1E6D18BA28BA38BA4E6CBB5D58BA5E6CC8BA68BA7E6CF8BA88BA9C4DB8BAAE6C68BAB8BAC8BAD8BAE8BAFE6CD8BB08BB18BB28BB38BB48BB58BB68BB78BB88BB98BBA8BBB8BBC8BBD8BBE8BBF8BC08BC18BC28BC38BC48BC58BC6E6D28BC78BC88BC98BCA8BCB8BCC8BCD8BCE8BCF8BD08BD18BD2E6D4E6D38BD38BD48BD58BD68BD78BD88BD98BDA8BDB8BDC8BDD8BDE8BDF8BE08BE18BE28BE38BE48BE58BE68BE78BE88BE98BEA8BEB8BECE6D58BEDD9F88BEE8BEFE6D68BF08BF18BF28BF38BF48BF58BF68BF7E6D78BF88BF98BFA8BFB8BFC8BFD8BFE8C408C418C428C438C448C458C468C47D7D3E6DD8C48E6DEBFD7D4D08C49D7D6B4E6CBEFE6DAD8C3D7CED0A28C4AC3CF8C4B8C4CE6DFBCBEB9C2E6DBD1A78C4D8C4EBAA2C2CF8C4FD8AB8C508C518C52CAEBE5EE8C53E6DC8C54B7F58C558C568C578C58C8E68C598C5AC4F58C5B8C5CE5B2C4FE8C5DCBFCE5B3D5AC8C5ED3EECAD8B0B28C5FCBCECDEA8C608C61BAEA8C628C638C64E5B58C65E5B48C66D7DAB9D9D6E6B6A8CDF0D2CBB1A6CAB58C67B3E8C9F3BFCDD0FBCAD2E5B6BBC28C688C698C6ACFDCB9AC8C6B8C6C8C6D8C6ED4D78C6F8C70BAA6D1E7CFFCBCD28C71E5B7C8DD8C728C738C74BFEDB1F6CBDE8C758C76BCC58C77BCC4D2FAC3DCBFDC8C788C798C7A8C7BB8BB8C7C8C7D8C7EC3C28C80BAAED4A28C818C828C838C848C858C868C878C888C89C7DEC4AFB2EC8C8AB9D18C8B8C8CE5BBC1C88C8D8C8ED5AF8C8F8C908C918C928C93E5BC8C94E5BE8C958C968C978C988C998C9A8C9BB4E7B6D4CBC2D1B0B5BC8C9C8C9DCAD98C9EB7E28C9F8CA0C9E48CA1BDAB8CA28CA3CEBED7F08CA48CA58CA68CA7D0A18CA8C9D98CA98CAAB6FBE6D8BCE28CABB3BE8CACC9D08CADE6D9B3A28CAE8CAF8CB08CB1DECC8CB2D3C8DECD8CB3D2A28CB48CB58CB68CB7DECE8CB88CB98CBA8CBBBECD8CBC8CBDDECF8CBE8CBF8CC0CAACD2FCB3DFE5EAC4E1BEA1CEB2C4F2BED6C6A8B2E38CC18CC2BED38CC38CC4C7FCCCEBBDECCEDD8CC58CC6CABAC6C1E5ECD0BC8CC78CC88CC9D5B98CCA8CCB8CCCE5ED8CCD8CCE8CCF8CD0CAF48CD1CDC0C2C58CD2E5EF8CD3C2C4E5F08CD48CD58CD68CD78CD88CD98CDAE5F8CDCD8CDBC9BD8CDC8CDD8CDE8CDF8CE08CE18CE2D2D9E1A88CE38CE48CE58CE6D3EC8CE7CBEAC6F18CE88CE98CEA8CEB8CECE1AC8CED8CEE8CEFE1A7E1A98CF08CF1E1AAE1AF8CF28CF3B2ED8CF4E1ABB8DAE1ADE1AEE1B0B5BAE1B18CF58CF68CF78CF88CF9E1B3E1B88CFA8CFB8CFC8CFD8CFED1D28D40E1B6E1B5C1EB8D418D428D43E1B78D44D4C08D45E1B28D46E1BAB0B68D478D488D498D4AE1B48D4BBFF98D4CE1B98D4D8D4EE1BB8D4F8D508D518D528D538D54E1BE8D558D568D578D588D598D5AE1BC8D5B8D5C8D5D8D5E8D5F8D60D6C58D618D628D638D648D658D668D67CFBF8D688D69E1BDE1BFC2CD8D6AB6EB8D6BD3F88D6C8D6DC7CD8D6E8D6FB7E58D708D718D728D738D748D758D768D778D788D79BEFE8D7A8D7B8D7C8D7D8D7E8D80E1C0E1C18D818D82E1C7B3E78D838D848D858D868D878D88C6E98D898D8A8D8B8D8C8D8DB4DE8D8ED1C28D8F8D908D918D92E1C88D938D94E1C68D958D968D978D988D99E1C58D9AE1C3E1C28D9BB1C08D9C8D9D8D9ED5B8E1C48D9F8DA08DA18DA28DA3E1CB8DA48DA58DA68DA78DA88DA98DAA8DABE1CCE1CA8DAC8DAD8DAE8DAF8DB08DB18DB28DB3EFFA8DB48DB5E1D3E1D2C7B68DB68DB78DB88DB98DBA8DBB8DBC8DBD8DBE8DBF8DC0E1C98DC18DC2E1CE8DC3E1D08DC48DC58DC68DC78DC88DC98DCA8DCB8DCC8DCD8DCEE1D48DCFE1D1E1CD8DD08DD1E1CF8DD28DD38DD48DD5E1D58DD68DD78DD88DD98DDA8DDB8DDC8DDD8DDE8DDF8DE08DE18DE2E1D68DE38DE48DE58DE68DE78DE88DE98DEA8DEB8DEC8DED8DEE8DEF8DF08DF18DF28DF38DF48DF58DF68DF78DF8E1D78DF98DFA8DFBE1D88DFC8DFD8DFE8E408E418E428E438E448E458E468E478E488E498E4A8E4B8E4C8E4D8E4E8E4F8E508E518E528E538E548E55E1DA8E568E578E588E598E5A8E5B8E5C8E5D8E5E8E5F8E608E618E62E1DB8E638E648E658E668E678E688E69CEA18E6A8E6B8E6C8E6D8E6E8E6F8E708E718E728E738E748E758E76E7DD8E77B4A8D6DD8E788E79D1B2B3B28E7A8E7BB9A4D7F3C7C9BEDEB9AE8E7CCED78E7D8E7EB2EEDBCF8E80BCBAD2D1CBC8B0CD8E818E82CFEF8E838E848E858E868E87D9E3BDED8E888E89B1D2CAD0B2BC8E8ACBA7B7AB8E8BCAA68E8C8E8D8E8ECFA38E8F8E90E0F8D5CAE0FB8E918E92E0FAC5C1CCFB8E93C1B1E0F9D6E3B2AFD6C4B5DB8E948E958E968E978E988E998E9A8E9BB4F8D6A18E9C8E9D8E9E8E9F8EA0CFAFB0EF8EA18EA2E0FC8EA38EA48EA58EA68EA7E1A1B3A38EA88EA9E0FDE0FEC3B18EAA8EAB8EAC8EADC3DD8EAEE1A2B7F98EAF8EB08EB18EB28EB38EB4BBCF8EB58EB68EB78EB88EB98EBA8EBBE1A3C4BB8EBC8EBD8EBE8EBF8EC0E1A48EC18EC2E1A58EC38EC4E1A6B4B18EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECE8ECF8ED08ED18ED28ED3B8C9C6BDC4EA8ED4B2A28ED5D0D28ED6E7DBBBC3D3D7D3C48ED7B9E3E2CF8ED88ED98EDAD7AF8EDBC7ECB1D38EDC8EDDB4B2E2D18EDE8EDF8EE0D0F2C2AEE2D08EE1BFE2D3A6B5D7E2D2B5EA8EE2C3EDB8FD8EE3B8AE8EE4C5D3B7CFE2D48EE58EE68EE78EE8E2D3B6C8D7F98EE98EEA8EEB8EEC8EEDCDA58EEE8EEF8EF08EF18EF2E2D88EF3E2D6CAFCBFB5D3B9E2D58EF48EF58EF68EF7E2D78EF88EF98EFA8EFB8EFC8EFD8EFE8F408F418F42C1AEC0C88F438F448F458F468F478F48E2DBE2DAC0AA8F498F4AC1CE8F4B8F4C8F4D8F4EE2DC8F4F8F508F518F528F538F548F558F568F578F588F598F5AE2DD8F5BE2DE8F5C8F5D8F5E8F5F8F608F618F628F638F64DBC88F65D1D3CDA28F668F67BDA88F688F698F6ADEC3D8A5BFAADBCDD2ECC6FAC5AA8F6B8F6C8F6DDEC48F6EB1D7DFAE8F6F8F708F71CABD8F72DFB18F73B9AD8F74D2FD8F75B8A5BAEB8F768F77B3DA8F788F798F7AB5DCD5C58F7B8F7C8F7D8F7EC3D6CFD2BBA18F80E5F3E5F28F818F82E5F48F83CDE48F84C8F58F858F868F878F888F898F8A8F8BB5AFC7BF8F8CE5F68F8D8F8E8F8FECB08F908F918F928F938F948F958F968F978F988F998F9A8F9B8F9C8F9D8F9EE5E68F9FB9E9B5B18FA0C2BCE5E8E5E7E5E98FA18FA28FA38FA4D2CD8FA58FA68FA7E1EAD0CE8FA8CDAE8FA9D1E58FAA8FABB2CAB1EB8FACB1F2C5ED8FAD8FAED5C3D3B08FAFE1DC8FB08FB18FB2E1DD8FB3D2DB8FB4B3B9B1CB8FB58FB68FB7CDF9D5F7E1DE8FB8BEB6B4FD8FB9E1DFBADCE1E0BBB2C2C9E1E18FBA8FBB8FBCD0EC8FBDCDBD8FBE8FBFE1E28FC0B5C3C5C7E1E38FC18FC2E1E48FC38FC48FC58FC6D3F98FC78FC88FC98FCA8FCB8FCCE1E58FCDD1AD8FCE8FCFE1E6CEA28FD08FD18FD28FD38FD48FD5E1E78FD6B5C28FD78FD88FD98FDAE1E8BBD58FDB8FDC8FDD8FDE8FDFD0C4E2E0B1D8D2E48FE08FE1E2E18FE28FE3BCC9C8CC8FE4E2E3ECFEECFDDFAF8FE58FE68FE7E2E2D6BECDFCC3A68FE88FE98FEAE3C38FEB8FECD6D2E2E78FED8FEEE2E88FEF8FF0D3C78FF18FF2E2ECBFEC8FF3E2EDE2E58FF48FF5B3C08FF68FF78FF8C4EE8FF98FFAE2EE8FFB8FFCD0C38FFDBAF6E2E9B7DEBBB3CCACCBCBE2E4E2E6E2EAE2EB8FFEFF4D4F5E2FAD9046D5FAC5C2B2CEFC1AFCBBC904A904BB5A1E2FEBCB1E2F1D0D4D4B9E2F5B9D6E2F1C7DFDCEDAF8905EEDA5E2FECAD66BBDBFD69069BAEBCBAEEDA6EDAEDA39074BBD6EDA7D0FEDA4BADEB6F7E3A1B6B2CCF1B9A79077CFA2C7ABFDF1907CE2FAE2FBE2FDE2FCC4D5E3A7EA7C7C49085CFAA9BABA908BE3A8908CBBDA908DE3A0E3A4E3AA92CEF2D3CBBBCC989099EDA8D0FCE3A9BE3ADB1AF909CE3BFBCC290A090A1E3ACB5BF90A290A390A490A590A690A790A890A9C7E9E3B090AA90AB90ACBEAACDEF90AD90AE90AF90B090B1BBF390B290B390B4CCE890B590B6E3AF90B7E3B190B8CFA7E3AE90B9CEA9BBDD90BA90BB90BC90BD90BEB5EBBEE5B2D2B3CD90BFB1B9E3ABB2D1B5ACB9DFB6E890C090C1CFEBE3B790C2BBCC90C390C4C8C7D0CA90C590C690C790C890C9E3B8B3EE90CA90CB90CC90CDEDA990CED3FAD3E490CF90D090D1EDAAE3B9D2E290D290D390D490D590D6E3B590D790D890D990DAD3DE90DB90DC90DD90DEB8D0E3B390DF90E0E3B6B7DF90E1E3B4C0A290E290E390E4E3BA90E590E690E790E890E990EA90EB90EC90ED90EE90EF90F090F190F290F390F490F590F690F7D4B890F890F990FA90FB90FC90FD90FE41E3BB9142BBCE8C4BDB914C914D914E914FEDAB57BBDBBFAEA915B915C915D915ECEBF915FE3BC9163BFBC916D916E916FFB917C917DE3BE917E9186EDAD918A918B918C918D918E918FE3BFBAA9EDACBDA919BE3CE919F91A091A1BAB691A291A391A4B6AE91A591A691A791A891A9D0B891AAB0C3EDAE91AB91AC91AD91AE91AFEDAFC0C191B0E3C191B191B291B391B491B591B691B791B891B991BA91BB91BC91BD91BE91BF91C091C1C5B391C291C391C491C591C691C791C891C991CA91CB91CC91CD91CE91CFE3C291D091D191D291D391D491D591D691D791D8DCB291D991DA91DB91DC91DD91DEEDB091DFB8EA91E0CEECEAA7D0E7CAF9C8D6CFB7B3C9CED2BDE491E191E2E3DEBBF2EAA8D5BD91E3C6DDEAA991E491E591E6EAAA91E7EAACEAAB91E8EAAEEAAD91E991EA91EB91ECBDD891EDEAAF91EEC2BE91EF91F091F191F2B4C1B4F791F391F4BBA791F591F691F791F891F9ECE6ECE5B7BFCBF9B1E291FAECE791FB91FC91FDC9C8ECE8ECE991FECAD6DED0B2C5D4FACBB0C7B4F2C8D4CDDBFBC924DBFDB924E924FC7A4D6BDED1C9A8D1EFC5A4B0E7B3B6C8CEFFAFB3D0BCBC925A925B925CB3AD925D925E925F9260BEF1B0D6D2D6CAE3D7A59267CDB6B6B6BFB9D5DBC5DBDED2BFD9C2D5C7C0926CBBA4B1AEA926F9270C5FBCCAB5DAC4A8927BDED3D1BAB3E7D927EB7FB5A3B2F0C4B4C4E9C0ADDEDC5C4C1E83BEDCCDD8B0CE9284CDCFDED6BED0D7BEDED5D5D0B0DDEA3BCFC0B9C5A1B2A6D4FA8CAC3DED7D5FC928CB9B0928DC8ADCBA9928EDED9BFBD928FC6B4D7A7CAB0C4CB9DEAFCB0BA929BBFEDCCFA092A1CDDA92A292A392A4D6BFC2CE92A5CECECCA2D0AEC4D3B5B2DED8D5F5BCB7BBD392A692A7B0A492A8C5B2B4EC92A992AA92ABD5F192AC92ADEAFD92AE92AF92B092B192B292B3DEDACDA692B492B5CDEC92B692B792B892B9CEE6DEDC92BACDB1C0A692BB92BCD7BD92BDDEDBB0C6BAB4C9D3C4F3BEE892BE92BF92C092C1B2B692C292C392C492C592C692C792C892C9C0CCCBF092CABCF1BBBBB5B792CB92CC92CDC5F592CEDEE692CF92D092D1DEE3BEDD92D292D3DEDF92D492D592D692D7B4B7BDDD92D892D9DEE0C4ED92DA92DB92DC92DDCFC692DEB5E092DF92E092E192E2B6DECADAB5F4DEE592E3D5C692E4DEE1CCCDC6FE92E5C5C592E692E792E8D2B492E9BEF292EA92EB92EC92ED92EE92EF92F0C2D392F1CCBDB3B892F2BDD392F3BFD8CDC6D1DAB4EB92F4DEE4DEDDDEE792F5EAFE92F692F7C2B0DEE292F892F9D6C0B5A792FAB2F492FBDEE892FCDEF292FD92FEDEED9343DEFE8D7E1DEEFC3E8CCE4A934B934CD2BE934D934E934F9353DEEE9354DEEBCED59935ABFABBEBE935B935CBDDF9360DEE62DEDE9363DEEA68DEECB2F3B8E9C2AABDCD936E936FDEF5DEFABB4AEAC9A9DEF6CBD7BDEF7DEFA937C937D937E9380DEF3CCCB4EEAE5BA938B938C938D938E938FD0AFEB9392EBA19393DEFE3DEF3B0DAD2A1B1F79396CCAF939A939B939C939DDEF0939ECBAA1D5AA93A293A393A493A593A6DEFB93A793A893A993AA93AB93AC93AD93AEB4DD93AFC4A693B093B193B2DEFD93B393B493B593B693B793B893B993BA93BB93BCC3FEC4A1DFA193BD93BE93BF93C093C193C293C3C1CC93C4DEFCBEEF93C5C6B293C693C793C893C993CA93CB93CC93CD93CEB3C5C8F693CF93D0CBBADEFE93D193D2DFA493D393D493D593D6D7B293D793D893D993DA93DBB3B793DC93DD93DE93DFC1C393E093E1C7CBB2A5B4E993E2D7AB93E393E493E593E6C4EC93E7DFA2DFA393E8DFA593E9BAB393EA93EB93ECDFA693EDC0DE93EE93EFC9C393F093F193F293F393F493F593F6B2D9C7E693F7DFA793F8C7DC93F993FA93FB93FCDFA8EBA293FD93FECBD5DFAA9446DFA4B944C944D944E944FB945C945D945E945F679468DFABB946C946D946E946FCB947C947D947EDFACBEFDFADD6AC948DEAB7EBB6CAD5948ED8FCB8CC5D5FECAA7F4CDDF4949DBECA0EBB7B0BD94A194A2BDCC94A3C1B294A4B1D6B3A894A594A694A7B8D2C9A294A894A9B6D894AA94AB94AC94ADEBB8BEB494AE94AF94B0CAFD94B1C7C394B2D5FB94B394B4B7F394B594B694B794B894B994BA94BB94BC94BD94BE94BF94C094C194C294C3CEC494C494C594C6D5ABB1F394C794C894C9ECB3B0DF94CAECB594CB94CC94CDB6B794CEC1CF94CFF5FAD0B194D094D1D5E594D2CED394D394D4BDEFB3E294D5B8AB94D6D5B694D7EDBD94D8B6CF94D9CBB9D0C294DA94DB94DC94DD94DE94DF94E094E1B7BD94E294E3ECB6CAA994E494E594E6C5D494E7ECB9ECB8C2C3ECB794E894E994EA94EBD0FDECBA94ECECBBD7E594ED94EEECBC94EF94F094F1ECBDC6EC94F294F394F494F594F694F794F894F9CEDE94FABCC894FB94FCC8D5B5A9BEC9D6BCD4E794FD94FED1AED0F1EAB8EAB9EABABAB29543CAB1BFFCDFA9549954AEAC0954BB0BAEABE954C954DC0A0EABB52C3F7BBE5D2D7CEF4EABFEABCBEACD3BF61C3C1D7F66CAC79567EACEAC4EAC7EACC956D956ED6E7956FCFDEACB9572BBCE9579BDFAC9CE957A957BEACC957C957DC9B9CFFEEACAD4CEEACDEACF957E9580CDED9584EAC99585EACECEEE9588BBDE8A958B958C958D958EC6D5BEB0CEFA958FE79592BEA7EADC7C1CAD4DD959BEADDCFBE959E959F95A095A1EAD295A295A395A495A5CAEE95A695A795A895A9C5AFB0B595AA95AB95AC95AD95AEEAD495AF95B095B195B295B395B495B595B695B7EAD3F4DF95B895B995BA95BB95BCC4BA95BD95BE95BF95C095C1B1A995C295C395C495C5E5DF95C695C795C895C9EAD595CA95CB95CC95CD95CE95CF95D095D195D295D395D495D595D695D795D895D995DA95DB95DC95DD95DE95DF95E095E195E295E3CAEF95E4EAD6EAD7C6D895E595E695E795E895E995EA95EB95ECEAD895ED95EEEAD995EF95F095F195F295F395F4D4BB95F5C7FAD2B7B8FC95F695F7EAC295F8B2DC95F995FAC2FC95FBD4F8CCE6D7EE95FC95FD95FED3D0EBC3C5F459646EBD9CBB7EBDE964AC0CA964B964C964DCDFB964EB3AF964FC6DAEBFC57CEB4C4A9B1BED4FD9658CAF5A965BC6D3B6EE965FBBFAEBC8ACB9667E8BEC9BCBB966AC0EED0D3B2C4B4E6C966DD5CC59673E8BDCAF8B8DCCCF6C0BEEE8BFE8CABABC967BB1ADBDDC967CEABDE8C7EE8CB84CBC9B0E59685BCABBC1968ACDF8C968D968E968FCEF94C1D6E8C96B9FBD6A6E8C9CAE0D4E9BE8C5E8CB7E9EBFDDE8DE8D796A1E8D5BCDCBCCFE8DB96A296A396A496A596A696A796A896A9E8DE96AAE8DAB1FA96AB96AC96AD96AE96AF96B096B196B296B396B4B0D8C4B3B8CCC6E2C8BEC8E196B596B696B7E8CFE8D4E8D696B8B9F1E8D8D7F596B9C4FB96BAE8DC96BB96BCB2E996BD96BE96BFE8D196C096C1BCED96C296C3BFC2E8CDD6F996C4C1F8B2F196C596C696C796C896C996CA96CB96CCE8DF96CDCAC1E8D996CE96CF96D096D1D5A496D2B1EAD5BBE8CEE8D0B6B0E8D396D3E8DDC0B896D4CAF796D5CBA896D696D7C6DCC0F596D896D996DA96DB96DCE8E996DD96DE96DFD0A396E096E196E296E396E496E596E6E8F2D6EA96E796E896E996EA96EB96EC96EDE8E0E8E196EE96EF96F0D1F9BACBB8F996F196F2B8F1D4D4E8EF96F3E8EEE8ECB9F0CCD2E8E6CEA6BFF296F4B0B8E8F1E8F096F5D7C096F6E8E496F7CDA9C9A396F8BBB8BDDBE8EA96F996FA96FB96FC96FD96FEE8E3E8E5B5B5E8E7C7C5E8EBE8EDBDB0D7AE4B974CE8F5974DCDB0E8F6C1BA58C3B7B0FB975C975D975E975FE8F6B9AC976D976E976FC3CECEE0C0E69777CBF39778CCDDD0BACAE7C977D977E9786BCEC8B978C978DC3DE978EC6E93B0FDBCAC9C979DCCCA697A097A197A297A397A497A597A697A797A897A9C9AD97AAE9A2C0E297AB97AC97ADBFC397AE97AF97B0E8FEB9D797B1E8FB97B297B397B497B5E9A497B697B797B8D2CE97B997BA97BB97BC97BDE9A397BED6B2D7B597BFE9A797C0BDB797C197C297C397C497C597C697C797C897C997CA97CB97CCE8FCE8FD97CD97CE97CFE9A197D097D197D297D397D497D597D697D7CDD697D897D9D2AC97DA97DB97DCE9B297DD97DE97DF97E0E9A997E197E297E3B4AA97E4B4BB97E597E6E9AB97E797E897E997EA97EB97EC97ED97EE97EF97F097F197F297F397F497F597F697F7D0A897F897F9E9A597FA97FBB3FE97FC97FDE9ACC0E397FEE9AABBFA984A984BE9AE984F9850BFACE9B1E9BAA5E9AF57E9AD9858D3DCE9B4E9B5E9BBE9CE985FC6E9CBBBB0FB986C986D986E986FE9BCD5ABEE9CFBCE9BD987D987EE9CC8CE9B6988DBBB0E9C6BCF9E9C4E9CC989D989E989F98A098A198A298A398A498A5E9CA98A698A798A898A9E9CE98AA98AB98AC98AD98AE98AF98B098B198B298B3B2DB98B4E9C898B598B698B798B898B998BA98BB98BC98BD98BEB7AE98BF98C098C198C298C398C498C598C698C798C898C998CAE9CBE9CC98CB98CC98CD98CE98CF98D0D5C198D1C4A398D298D398D498D598D698D7E9D898D8BAE198D998DA98DB98DCE9C998DDD3A398DE98DF98E0E9D498E198E298E398E498E598E698E7E9D7E9D098E898E998EA98EB98ECE9CF98ED98EEC7C198EF98F098F198F298F398F498F598F6E9D298F798F898F998FA98FB98FC98FDE9D9B3C898FEE9DCFF7E9CDA994B994C994D994E994FB3F5A995BE9DA995C995D995ECCB1CFADAE9D5996BE9DCE9DB996C996D996E996FDB997C997D997EDD9982E9DFC3CAB998C998D998E998FB999C999D999E999F99A099A199A299A399A499A599A699A799A899A999AA99AB99AC99AD99AE99AF99B099B199B299B399B499B599B699B799B899B999BA99BB99BC99BD99BE99BF99C099C199C299C399C499C599C699C799C899C999CA99CB99CC99CD99CE99CF99D099D199D299D399D499D599D699D799D899D999DA99DB99DC99DD99DE99DF99E099E199E299E399E499E599E699E799E899E999EA99EB99EC99ED99EE99EF99F099F199F299F399F499F5C7B7B4CEBBB6D0C0ECA399F699F7C5B799F899F999FA99FB99FC99FD99FE9A409A419A42D3FB9A439A449A459A46ECA49A47ECA5C6DB9A489A499A4ABFEE9A4B9A4C9A4D9A4EECA69A4F9A50ECA7D0AA9A51C7B89A529A53B8E89A549A559A569A579A589A599A5A9A5B9A5C9A5D9A5E9A5FECA89A609A619A629A639A649A659A669A67D6B9D5FDB4CBB2BDCEE4C6E79A689A69CDE19A6A9A6B9A6C9A6D9A6E9A6F9A709A719A729A739A749A759A769A77B4F59A78CBC0BCDF9A799A7A9A7B9A7CE9E2E9E3D1EAE9E59A7DB4F9E9E49A7ED1B3CAE2B2D09A80E9E89A819A829A839A84E9E6E9E79A859A86D6B39A879A889A89E9E9E9EA9A8A9A8B9A8C9A8D9A8EE9EB9A8F9A909A919A929A939A949A959A96E9EC9A979A989A999A9A9A9B9A9C9A9D9A9EECAFC5B9B6CE9A9FD2F39AA09AA19AA29AA39AA49AA59AA6B5EE9AA7BBD9ECB19AA89AA9D2E39AAA9AAB9AAC9AAD9AAECEE39AAFC4B89AB0C3BF9AB19AB2B6BED8B9B1C8B1CFB1D1C5FE9AB3B1D09AB4C3AB9AB59AB69AB79AB89AB9D5B19ABA9ABB9ABC9ABD9ABE9ABF9AC09AC1EBA4BAC19AC29AC39AC4CCBA9AC59AC69AC7EBA59AC8EBA79AC99ACA9ACBEBA89ACC9ACD9ACEEBA69ACF9AD09AD19AD29AD39AD49AD5EBA9EBABEBAA9AD69AD79AD89AD99ADAEBAC9ADBCACFD8B5C3F19ADCC3A5C6F8EBADC4CA9ADDEBAEEBAFEBB0B7D59ADE9ADF9AE0B7FA9AE1EBB1C7E29AE2EBB39AE3BAA4D1F5B0B1EBB2EBB49AE49AE59AE6B5AAC2C8C7E89AE7EBB59AE8CBAEE3DF9AE99AEAD3C09AEB9AEC9AED9AEED9DB9AEF9AF0CDA1D6ADC7F39AF19AF29AF3D9E0BBE39AF4BABAE3E29AF59AF69AF79AF89AF9CFAB9AFA9AFB9AFCE3E0C9C79AFDBAB99AFE9B409B41D1B4E3E1C8EAB9AFBDADB3D8CEDB9B429B43CCC09B449B459B46E3E8E3E9CDF49B479B489B499B4A9B4BCCAD9B4CBCB39B4DE3EA9B4EE3EB9B4F9B50D0DA9B519B529B53C6FBB7DA9B549B55C7DFD2CACED69B56E3E4E3EC9B57C9F2B3C19B589B59E3E79B5A9B5BC6E3E3E59B5C9B5DEDB3E3E69B5E9B5F9B609B61C9B39B62C5E69B639B649B65B9B59B66C3BB9B67E3E3C5BDC1A4C2D9B2D79B68E3EDBBA6C4AD9B69E3F0BEDA9B6A9B6BE3FBE3F5BAD39B6C9B6D9B6E9B6FB7D0D3CD9B70D6CED5D3B9C1D5B4D1D89B719B729B739B74D0B9C7F69B759B769B77C8AAB2B49B78C3DA9B799B7A9B7BE3EE9B7C9B7DE3FCE3EFB7A8E3F7E3F49B7E9B809B81B7BA9B829B83C5A29B84E3F6C5DDB2A8C6FC9B85C4E09B869B87D7A29B88C0E1E3F99B899B8AE3FAE3FDCCA9E3F39B8BD3BE9B8CB1C3EDB4E3F1E3F29B8DE3F8D0BAC6C3D4F3E3FE9B8E9B8FBDE09B909B91E4A79B929B93E4A69B949B959B96D1F3E4A39B97E4A99B989B999B9AC8F79B9B9B9C9B9D9B9ECFB49B9FE4A8E4AEC2E59BA09BA1B6B49BA29BA39BA49BA59BA69BA7BDF29BA8E4A29BA99BAABAE9E4AA9BAB9BACE4AC9BAD9BAEB6FDD6DEE4B29BAFE4AD9BB09BB19BB2E4A19BB3BBEECDDDC7A2C5C99BB49BB5C1F79BB6E4A49BB7C7B3BDACBDBDE4A59BB8D7C7B2E29BB9E4ABBCC3E4AF9BBABBEBE4B0C5A8E4B19BBB9BBC9BBD9BBED5E3BFA39BBFE4BA9BC0E4B79BC1E4BB9BC29BC3E4BD9BC49BC5C6D69BC69BC7BAC6C0CB9BC89BC99BCAB8A1E4B49BCB9BCC9BCD9BCED4A19BCF9BD0BAA3BDFE9BD19BD29BD3E4BC9BD49BD59BD69BD79BD8CDBF9BD99BDAC4F99BDB9BDCCFFBC9E69BDD9BDED3BF9BDFCFD19BE09BE1E4B39BE2E4B8E4B9CCE99BE39BE49BE59BE69BE7CCCE9BE8C0D4E4B5C1B0E4B6CED09BE9BBC1B5D39BEAC8F3BDA7D5C7C9ACB8A2E4CA9BEB9BECE4CCD1C49BED9BEED2BA9BEF9BF0BAAD9BF19BF2BAD49BF39BF49BF59BF69BF79BF8E4C3B5ED9BF99BFA9BFBD7CDE4C0CFFDE4BF9BFC9BFD9BFEC1DCCCCA9C409C419C429C43CAE79C449C459C469C47C4D79C48CCD4E4C89C499C4A9C4BE4C7E4C19C4CE4C4B5AD9C4D9C4ED3D99C4FE4C69C509C519C529C53D2F9B4E39C54BBB49C559C56C9EE9C57B4BE9C589C599C5ABBEC9C5BD1CD9C5CCCEDEDB59C5D9C5E9C5F9C609C619C629C639C64C7E59C659C669C679C68D4A89C69E4CBD7D5E4C29C6ABDA5E4C59C6B9C6CD3E69C6DE4C9C9F89C6E9C6FE4BE9C709C71D3E59C729C73C7FEB6C99C74D4FCB2B3E4D79C759C769C77CEC29C78E4CD9C79CEBC9C7AB8DB9C7B9C7CE4D69C7DBFCA9C7E9C809C81D3CE9C82C3EC9C839C849C859C869C879C889C899C8AC5C8E4D89C8B9C8C9C8D9C8E9C8F9C909C919C92CDC4E4CF9C939C949C959C96E4D4E4D59C97BAFE9C98CFE69C999C9AD5BF9C9B9C9C9C9DE4D29C9E9C9F9CA09CA19CA29CA39CA49CA59CA69CA79CA8E4D09CA99CAAE4CE9CAB9CAC9CAD9CAE9CAF9CB09CB19CB29CB39CB49CB59CB69CB79CB89CB9CDE5CAAA9CBA9CBB9CBCC0A39CBDBDA6E4D39CBE9CBFB8C89CC09CC19CC29CC39CC4E4E7D4B49CC59CC69CC79CC89CC99CCA9CCBE4DB9CCC9CCD9CCEC1EF9CCF9CD0E4E99CD19CD2D2E79CD39CD4E4DF9CD5E4E09CD69CD7CFAA9CD89CD99CDA9CDBCBDD9CDCE4DAE4D19CDDE4E59CDEC8DCE4E39CDF9CE0C4E7E4E29CE1E4E19CE29CE39CE4B3FCE4E89CE59CE69CE79CE8B5E19CE99CEA9CEBD7CC9CEC9CED9CEEE4E69CEFBBAC9CF0D7D2CCCFEBF89CF1E4E49CF29CF3B9F69CF49CF59CF6D6CDE4D9E4DCC2FAE4DE9CF7C2CBC0C4C2D09CF8B1F5CCB29CF99CFA9CFB9CFC9CFD9CFE9D409D419D429D43B5CE9D449D459D469D47E4EF9D489D499D4A9D4B9D4C9D4D9D4E9D4FC6AF9D509D519D52C6E19D539D54E4F59D559D569D579D589D59C2A99D5A9D5B9D5CC0ECD1DDE4EE9D5D9D5E9D5F9D609D619D629D639D649D659D66C4AE9D679D689D69E4ED9D6A9D6B9D6C9D6DE4F6E4F4C2FE9D6EE4DD9D6FE4F09D70CAFE9D71D5C49D729D73E4F19D749D759D769D779D789D799D7AD1FA9D7B9D7C9D7D9D7E9D809D819D82E4EBE4EC9D839D849D85E4F29D86CEAB9D879D889D899D8A9D8B9D8C9D8D9D8E9D8F9D90C5CB9D919D929D93C7B19D94C2BA9D959D969D97E4EA9D989D999D9AC1CA9D9B9D9C9D9D9D9E9D9F9DA0CCB6B3B19DA19DA29DA3E4FB9DA4E4F39DA59DA69DA7E4FA9DA8E4FD9DA9E4FC9DAA9DAB9DAC9DAD9DAE9DAF9DB0B3CE9DB19DB29DB3B3BAE4F79DB49DB5E4F9E4F8C5EC9DB69DB79DB89DB99DBA9DBB9DBC9DBD9DBE9DBF9DC09DC19DC2C0BD9DC39DC49DC59DC6D4E89DC79DC89DC99DCA9DCBE5A29DCC9DCD9DCE9DCF9DD09DD19DD29DD39DD49DD59DD6B0C49DD79DD8E5A49DD99DDAE5A39DDB9DDC9DDD9DDE9DDF9DE0BCA49DE1E5A59DE29DE39DE49DE59DE69DE7E5A19DE89DE99DEA9DEB9DEC9DED9DEEE4FEB1F49DEF9DF09DF19DF29DF39DF49DF59DF69DF79DF89DF9E5A89DFAE5A9E5A69DFB9DFC9DFD9DFE9E409E419E429E439E449E459E469E47E5A7E5AA9E489E499E4A9E4B9E4C9E4D9E4E9E4F9E509E519E529E539E549E559E569E579E589E599E5A9E5B9E5C9E5D9E5E9E5F9E609E619E629E639E649E659E669E679E68C6D99E699E6A9E6B9E6C9E6D9E6E9E6F9E70E5ABE5AD9E719E729E739E749E759E769E77E5AC9E789E799E7A9E7B9E7C9E7D9E7E9E809E819E829E839E849E859E869E879E889E89E5AF9E8A9E8B9E8CE5AE9E8D9E8E9E8F9E909E919E929E939E949E959E969E979E989E999E9A9E9B9E9C9E9D9E9EB9E09E9F9EA0E5B09EA19EA29EA39EA49EA59EA69EA79EA89EA99EAA9EAB9EAC9EAD9EAEE5B19EAF9EB09EB19EB29EB39EB49EB59EB69EB79EB89EB99EBABBF0ECE1C3F09EBBB5C6BBD29EBC9EBD9EBE9EBFC1E9D4EE9EC0BEC49EC19EC29EC3D7C69EC4D4D6B2D3ECBE9EC59EC69EC79EC8EAC19EC99ECA9ECBC2AFB4B69ECC9ECD9ECED1D79ECF9ED09ED1B3B49ED2C8B2BFBBECC09ED39ED4D6CB9ED59ED6ECBFECC19ED79ED89ED99EDA9EDB9EDC9EDD9EDE9EDF9EE09EE19EE29EE3ECC5BEE6CCBFC5DABEBC9EE4ECC69EE5B1FE9EE69EE79EE8ECC4D5A8B5E39EE9ECC2C1B6B3E39EEA9EEBECC3CBB8C0C3CCFE9EEC9EED9EEE9EEFC1D29EF0ECC89EF19EF29EF39EF49EF59EF69EF79EF89EF99EFA9EFB9EFC9EFDBAE6C0D39EFED6F29F409F419F42D1CC9F439F449F459F46BFBE9F47B7B3C9D5ECC7BBE29F48CCCCBDFDC8C89F49CFA99F4A9F4B9F4C9F4D9F4E9F4F9F50CDE99F51C5EB9F529F539F54B7E99F559F569F579F589F599F5A9F5B9F5C9F5D9F5E9F5FD1C9BAB89F609F619F629F639F64ECC99F659F66ECCA9F67BBC0ECCB9F68ECE2B1BAB7D99F699F6A9F6B9F6C9F6D9F6E9F6F9F709F719F729F73BDB99F749F759F769F779F789F799F7A9F7BECCCD1E6ECCD9F7C9F7D9F7E9F80C8BB9F819F829F839F849F859F869F879F889F899F8A9F8B9F8C9F8D9F8EECD19F8F9F909F919F92ECD39F93BBCD9F94BCE59F959F969F979F989F999F9A9F9B9F9C9F9D9F9E9F9F9FA09FA1ECCF9FA2C9B79FA39FA49FA59FA69FA7C3BA9FA8ECE3D5D5ECD09FA99FAA9FAB9FAC9FADD6F39FAE9FAF9FB0ECD2ECCE9FB19FB29FB39FB4ECD49FB5ECD59FB69FB7C9BF9FB89FB99FBA9FBB9FBC9FBDCFA89FBE9FBF9FC09FC19FC2D0DC9FC39FC49FC59FC6D1AC9FC79FC89FC99FCAC8DB9FCB9FCC9FCDECD6CEF59FCE9FCF9FD09FD19FD2CAECECDA9FD39FD49FD59FD69FD79FD89FD9ECD99FDA9FDB9FDCB0BE9FDD9FDE9FDF9FE09FE19FE2ECD79FE3ECD89FE49FE59FE6ECE49FE79FE89FE99FEA9FEB9FEC9FED9FEE9FEFC8BC9FF09FF19FF29FF39FF49FF59FF69FF79FF89FF9C1C79FFA9FFB9FFC9FFD9FFEECDCD1E0A040A041A042A043A044A045A046A047A048A049ECDBA04AA04BA04CA04DD4EFA04EECDDA04FA050A051A052A053A054DBC6A055A056A057A058A059A05AA05BA05CA05DA05EECDEA05FA060A061A062A063A064A065A066A067A068A069A06AB1ACA06BA06CA06DA06EA06FA070A071A072A073A074A075A076A077A078A079A07AA07BA07CA07DA07EA080A081ECDFA082A083A084A085A086A087A088A089A08AA08BECE0A08CD7A6A08DC5C0A08EA08FA090EBBCB0AEA091A092A093BEF4B8B8D2AFB0D6B5F9A094D8B3A095CBACA096E3DDA097A098A099A09AA09BA09CA09DC6ACB0E6A09EA09FA0A0C5C6EBB9A0A1A0A2A0A3A0A4EBBAA0A5A0A6A0A7EBBBA0A8A0A9D1C0A0AAC5A3A0ABEAF2A0ACC4B2A0ADC4B5C0CEA0AEA0AFA0B0EAF3C4C1A0B1CEEFA0B2A0B3A0B4A0B5EAF0EAF4A0B6A0B7C9FCA0B8A0B9C7A3A0BAA0BBA0BCCCD8CEFEA0BDA0BEA0BFEAF5EAF6CFACC0E7A0C0A0C1EAF7A0C2A0C3A0C4A0C5A0C6B6BFEAF8A0C7EAF9A0C8EAFAA0C9A0CAEAFBA0CBA0CCA0CDA0CEA0CFA0D0A0D1A0D2A0D3A0D4A0D5A0D6EAF1A0D7A0D8A0D9A0DAA0DBA0DCA0DDA0DEA0DFA0E0A0E1A0E2C8AEE1EBA0E3B7B8E1ECA0E4A0E5A0E6E1EDA0E7D7}

我要回帖

更多关于 985 211是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信