From a5a734a0910cfb727b51214bfe9a74cb3f88b99c Mon Sep 17 00:00:00 2001
From: wangrunji0408 这个程序库目前是在你的 Linux 或 macOS 上运行,但有朝一日它会成为一个真正的 OS 在裸机上运行。
为此我们需要移除对标准库的依赖,使其成为一个不依赖当前 OS 功能的库。在 现在我们可以尝试运行一下自带的单元测试,编译器可能会自动下载并安装工具链:>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(f=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(f=!0);if(f)n.allowed=r;else if(r-n.allowedt.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join("
"),i.setHtml(f),i.show(),t._signal("showGutterTooltip",i),t.on("mousewheel",c);if(e.$tooltipFollowsMouse)h(u);else{var p=u.domEvent.target,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+"px",v.top=d.bottom+"px"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t._signal("hideGutterTooltip",i),t.removeEventListener("mousewheel",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler("guttermousedown",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i=="foldWidgets")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState("selectByLines"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler("guttermousemove",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,"ace_fold-widget"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,"mouseout",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on("changeSession",c)}function a(e){o.call(this,e)}var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.moveCursorToPosition(e),S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left0&&/^\s*$/.test(r));t=r.length,/\s+$/.test(r)||(r="")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column),r;t===0&&(e!==0&&(this.session.$bidiHandler.isBidiRow(n.row,this.lead.row)?(r=this.session.$bidiHandler.getPosLeft(n.column),n.column=Math.round(r/this.session.$bidiHandler.charWidths[0])):r=n.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var i=this.session.screenToDocumentPosition(n.row+e,n.column,r);e!==0&&t===0&&i.row===this.lead.row&&i.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[i.row]&&(i.row>0||e>0)&&i.row++,this.moveCursorTo(i.row,i.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0;var i=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(i.charAt(t))&&i.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList&&e.length>1){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),ace.define("ace/tokenizer",["require","exports","module","ace/config"],function(e,t,n){"use strict";var r=e("./config"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",u=[];for(var a=0;al){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;y=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(" ",this.getTabSize()):" "},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;ti?(i0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+"px";continue}u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+"px";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+"px",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+"px"),u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+"px":u.el.style.right=""}}}).call(o.prototype),t.LineWidgets=o}),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?"unshift":"push"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e("../line_widgets").LineWidgets,i=e("../lib/dom"),s=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.widgetManager.getWidgetsAtRow(o).filter(function(e){return e.type=="errorMarker"})[0];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!="number"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement("div"),type:"errorMarker"},p=h.el.appendChild(i.createElement("div")),d=h.el.appendChild(i.createElement("div"));d.className="error_widget_arrow "+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",p.className="error_widget "+l.className,p.innerHTML=l.text.join("
"),p.appendChild(i.createElement("div"));var m=function(e,t,n){if(t===0&&(n==="esc"||n==="return"))return h.destroy(),{command:"null"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),i=e("./lib/event"),s=e("./range").Range,o=e("./editor").Editor,u=e("./edit_session").EditSession,a=e("./undomanager").UndoManager,f=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,typeof define=="function"&&(t.define=define),t.edit=function(e,n){if(typeof e=="string"){var s=e;e=document.getElementById(s);if(!e)throw new Error("ace.edit can't find div #"+s)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var u="";if(e&&/input|textarea/i.test(e.tagName)){var a=e;u=a.value,e=r.createElement("pre"),a.parentNode.replaceChild(e,a)}else e&&(u=e.textContent,e.innerHTML="");var l=t.createEditSession(u),c=new o(new f(e),l,n),h={document:l,editor:c,onResize:c.resize.bind(c,null)};return a&&(h.textarea=a),i.addListener(window,"resize",h.onResize),c.on("destroy",function(){i.removeListener(window,"resize",h.onResize),h.editor.container.env=null}),c.container.env=c.env=h,c},t.createEditSession=function(e,t){var n=new u(e,t);return n.setUndoManager(new a),n},t.Range=s,t.Editor=o,t.EditSession=u,t.UndoManager=a,t.VirtualRenderer=f,t.version="1.4.4"}); (function() {
+ ace.require(["ace/ace"], function(a) {
+ if (a) {
+ a.config.init(true);
+ a.define = ace.define;
+ }
+ if (!window.ace)
+ window.ace = a;
+ for (var key in a) if (a.hasOwnProperty(key))
+ window.ace[key] = a[key];
+ window.ace["default"] = window.ace;
+ if (typeof module == "object" && typeof exports == "object" && module) {
+ module.exports = window.ace;
+ }
+ });
+ })();
diff --git a/ch01-00-object.html b/ch01-00-object.html
index 2072808..fe65a7e 100644
--- a/ch01-00-object.html
+++ b/ch01-00-object.html
@@ -211,6 +211,12 @@
+
+
+
+
+
+
diff --git a/ch01-01-kernel-object.html b/ch01-01-kernel-object.html
index 68e5976..ad0b244 100644
--- a/ch01-01-kernel-object.html
+++ b/ch01-01-kernel-object.html
@@ -175,7 +175,8 @@ $ cd zcore
lib.rs 的第一行添加声明:#![no_std]
+// src/lib.rs
+#![no_std]
extern crate alloc;
Rust 是一门部分面向对象的语言,我们通常用它的 trait 实现接口和多态。
首先创建一个 KernelObject trait 作为内核对象的公共接口:
+-#![allow(unused)] -fn main() { -/// 内核对象公共接口 +// src/object/mod.rs +/// 内核对象公共接口 pub trait KernelObject: Send + Sync { /// 获取对象 ID fn id(&self) -> KoID; @@ -210,14 +209,14 @@ pub trait KernelObject: Send + Sync { /// 对象 ID 类型 pub type KoID = u64; -} -
这里的 Send + Sync 是一个约束所有 KernelObject 都要满足的前提条件,即它必须是一个并发对象。
所谓并发对象指的是可以安全地被多线程共享访问。事实上我们的内核本身就是一个共享地址空间的多线程程序,在裸机上每个 CPU 核都可以被视为一个并发执行的线程。
由于内核对象可能被多个线程同时访问,因此它必须是并发对象。
接下来我们实现一个最简单的空对象 DummyObject,并为它实现 KernelObject 接口:
use spin::Mutex;
+// src/object/object.rs
+use spin::Mutex;
/// 空对象
#[derive(Debug)]
@@ -240,7 +239,8 @@ struct DummyObjectInner {
spin = "0.5"
然后我们为新对象实现构造函数:
-use alloc::sync::Arc;
+// src/object/object.rs
+use alloc::sync::Arc;
use core::sync::atomic::*;
impl DummyObject {
@@ -263,7 +263,8 @@ impl DummyObject {
ID 类型使用 u64,保证了数值空间足够大,在有生之年都不用担心溢出问题。在 Zircon 中 ID 从 1024 开始分配,1024 以下保留作内核内部使用。
另外注意这里 new 函数返回类型不是 Self 而是 Arc<Self>,这是为了以后方便而做的统一约定。
最后我们为它实现 KernelObject 接口:
-impl KernelObject for DummyObject {
+// src/object/object.rs
+impl KernelObject for DummyObject {
fn id(&self) -> KoID {
self.id
}
@@ -281,7 +282,8 @@ ID 类型使用 u64,保证了数值空间足够大,在有生之
到此为止,我们已经迈出了万里长征第一步,实现了一个最简单的功能。有实现,就要有测试!即使最简单的代码也要保证它的行为符合我们预期。
只有对现有代码进行充分测试,在未来做添加和修改的时候,我们才有信心不会把事情搞砸。俗话讲"万丈高楼平地起",把地基打好才能盖摩天大楼。
为了证明上面代码的正确性,我们写一个简单的单元测试,替换掉自带的 it_works 函数:
-#[cfg(test)]
+// src/object/object.rs
+#[cfg(test)]
mod tests {
use super::*;
#[test]
@@ -321,11 +323,9 @@ DummyObject *dummy = dynamic_cast<DummyObject*>(base);
但在 Rust 中,由于其 trait 模型的限制,向下转换并不是一件容易的事情。
虽然标准库中提供了 Any trait,部分实现了动态类型的功能,但实际操作起来却困难重重。
不信邪的同学可以自己折腾一下:
-
-#![allow(unused)]
-fn main() {
-use std::any::Any;
-use std::sync::Arc;
+use core::any::Any;
+use alloc::sync::Arc;
+
trait KernelObject: Any + Send + Sync {}
fn downcast_v1<T: KernelObject>(object: Arc<dyn KernelObject>) -> Arc<T> {
object.downcast::<T>().unwrap()
@@ -334,15 +334,15 @@ fn downcast_v2<T: KernelObject>(object: Arc<dyn KernelObject>) ->
let object: Arc<dyn Any + Send + Sync + 'static> = object;
object.downcast::<T>().unwrap()
}
-}
-
+
当然这个问题也困扰了 Rust 社区中的很多人。目前已经有人提出了一套不错的解决方案,就是我们接下来要引入的 downcast-rs 库:
[dependencies]
downcast-rs = { version = "1.2.0", default-features = false }
-(题外话:这个库原来是不支持 no_std 的,zCore 有这个需求,于是就顺便帮他实现了一把)
+(题外话:这个库原来是不支持 no_std 的,zCore 有这个需求,于是就顺便帮他实现了一把)
按照它文档的描述,我们要为自己的接口实现向下转换,只需以下修改:
-use core::fmt::Debug;
+// src/object/mod.rs
+use core::fmt::Debug;
use downcast_rs::{impl_downcast, DowncastSync};
pub trait KernelObject: DowncastSync + Debug {...}
@@ -350,7 +350,8 @@ impl_downcast!(sync KernelObject);
其中 DowncastSync 代替了原来的 Send + Sync,Debug 用于出错时输出调试信息。
impl_downcast! 宏用来帮我们自动生成转换函数,然后就可以用 downcast_arc 来对 Arc 做向下转换了。我们直接来测试一把:
-#[test]
+// src/object/object.rs
+#[test]
fn downcast() {
let dummy = DummyObject::new();
let object: Arc<dyn KernelObject> = dummy;
@@ -382,7 +383,8 @@ test object::tests::dummy_object ... ok
为子类实现 trait 接口,所有方法直接委托给内部 struct 完成。这部分使用宏来自动生成模板代码。
而所谓的内部 struct,其实就是我们上面实现的 DummyObject。为了更好地体现它的功能,我们给他改个名叫 KObjectBase:
-/// 内核对象核心结构
+// src/object/mod.rs
+/// 内核对象核心结构
pub struct KObjectBase {
/// 对象 ID
pub id: KoID,
@@ -396,7 +398,8 @@ struct KObjectBaseInner {
}
接下来我们把它的构造函数改为实现 Default trait,并且公共属性和方法都指定为 pub:
-impl Default for KObjectBase {
+// src/object/mod.rs
+impl Default for KObjectBase {
/// 创建一个新 `KObjectBase`
fn default() -> Self {
KObjectBase {
@@ -415,7 +418,8 @@ impl KObjectBase {
}
最后来写一个魔法的宏!
-/// 为内核对象 struct 自动实现 `KernelObject` trait 的宏。
+// src/object/mod.rs
+/// 为内核对象 struct 自动实现 `KernelObject` trait 的宏。
#[macro_export] // 导出宏,可在 crate 外部使用
macro_rules! impl_kobject {
// 匹配类型名,并可以提供函数覆盖默认实现
@@ -458,7 +462,8 @@ macro_rules! impl_kobject {
}
轮子已经造好了!让我们看看如何用它方便地实现一个内核对象,仍以 DummyObject 为例:
-/// 空对象
+// src/object/mod.rs
+/// 空对象
pub struct DummyObject {
// 其中必须包含一个名为 `base` 的 `KObjectBase`
base: KObjectBase,
@@ -477,7 +482,8 @@ impl DummyObject {
}
是不是方便了很多?最后按照惯例,用单元测试检验实现的正确性:
-#[test]
+// src/object/mod.rs
+#[test]
fn impl_kobject() {
use alloc::format;
let dummy = DummyObject::new();
@@ -493,7 +499,7 @@ fn impl_kobject() {
let _result: Arc<DummyObject> = object.downcast_arc::<DummyObject>().unwrap();
}
-有兴趣的读者可以继续探索使用功能更强大的 过程宏(proc_macro),进一步简化实现新内核对象所需的模板代码。
+
有兴趣的读者可以继续探索使用功能更强大的 过程宏(proc_macro),进一步简化实现新内核对象所需的模板代码。
如果能把上面的代码块缩小成下面这两行,就更加完美了:
#[KernelObject]
pub struct DummyObject;
@@ -560,6 +566,12 @@ pub struct DummyObject;
+
+
+
+
+
+
diff --git a/ch01-02-process-object.html b/ch01-02-process-object.html
index 1eee1f4..1abcafb 100644
--- a/ch01-02-process-object.html
+++ b/ch01-02-process-object.html
@@ -211,6 +211,12 @@
+
+
+
+
+
+
diff --git a/ch01-03-channel-object.html b/ch01-03-channel-object.html
index d683966..7dbbecb 100644
--- a/ch01-03-channel-object.html
+++ b/ch01-03-channel-object.html
@@ -209,6 +209,12 @@
+
+
+
+
+
+
diff --git a/ch02-00-task.html b/ch02-00-task.html
index 75a9c12..c0412ee 100644
--- a/ch02-00-task.html
+++ b/ch02-00-task.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch02-01-zircon-task.html b/ch02-01-zircon-task.html
index eaee16d..1017576 100644
--- a/ch02-01-zircon-task.html
+++ b/ch02-01-zircon-task.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch02-02-hal-async.html b/ch02-02-hal-async.html
index 9c2b705..e30d29b 100644
--- a/ch02-02-hal-async.html
+++ b/ch02-02-hal-async.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch02-03-thread-object.html b/ch02-03-thread-object.html
index ce5f3d9..d46e6c6 100644
--- a/ch02-03-thread-object.html
+++ b/ch02-03-thread-object.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch02-04-process-job-object.html b/ch02-04-process-job-object.html
index 488e0e0..5b0c162 100644
--- a/ch02-04-process-job-object.html
+++ b/ch02-04-process-job-object.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch03-00-memory.html b/ch03-00-memory.html
index a533800..ae5b01c 100644
--- a/ch03-00-memory.html
+++ b/ch03-00-memory.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch03-01-zircon-memory.html b/ch03-01-zircon-memory.html
index dc3947d..6ed38e2 100644
--- a/ch03-01-zircon-memory.html
+++ b/ch03-01-zircon-memory.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch03-02-vmo.html b/ch03-02-vmo.html
index 00a0e73..fba29c2 100644
--- a/ch03-02-vmo.html
+++ b/ch03-02-vmo.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch03-03-vmar.html b/ch03-03-vmar.html
index abf2b70..26cbe6d 100644
--- a/ch03-03-vmar.html
+++ b/ch03-03-vmar.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch04-00-userspace.html b/ch04-00-userspace.html
index 7bd8163..a12b596 100644
--- a/ch04-00-userspace.html
+++ b/ch04-00-userspace.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch04-01-user-program.html b/ch04-01-user-program.html
index d2b543e..877b825 100644
--- a/ch04-01-user-program.html
+++ b/ch04-01-user-program.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch04-02-load-elf.html b/ch04-02-load-elf.html
index 3cad169..e0b2997 100644
--- a/ch04-02-load-elf.html
+++ b/ch04-02-load-elf.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch04-03-context-switch.html b/ch04-03-context-switch.html
index 8b0d3db..fad8eda 100644
--- a/ch04-03-context-switch.html
+++ b/ch04-03-context-switch.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/ch04-04-syscall.html b/ch04-04-syscall.html
index 076e172..c86b50c 100644
--- a/ch04-04-syscall.html
+++ b/ch04-04-syscall.html
@@ -199,6 +199,12 @@
+
+
+
+
+
+
diff --git a/editor.js b/editor.js
new file mode 100644
index 0000000..464790c
--- /dev/null
+++ b/editor.js
@@ -0,0 +1,29 @@
+"use strict";
+window.editors = [];
+(function(editors) {
+ if (typeof(ace) === 'undefined' || !ace) {
+ return;
+ }
+
+ Array.from(document.querySelectorAll('.editable')).forEach(function(editable) {
+ let display_line_numbers = window.playground_line_numbers || false;
+
+ let editor = ace.edit(editable);
+ editor.setOptions({
+ highlightActiveLine: false,
+ showPrintMargin: false,
+ showLineNumbers: display_line_numbers,
+ showGutter: display_line_numbers,
+ maxLines: Infinity,
+ fontSize: "0.875em" // please adjust the font size of the code in general.css
+ });
+
+ editor.$blockScrolling = Infinity;
+
+ editor.getSession().setMode("ace/mode/rust");
+
+ editor.originalCode = editor.getValue();
+
+ editors.push(editor);
+ });
+})(window.editors);
diff --git a/fuchsia.html b/fuchsia.html
index fa8e447..9bb88d0 100644
--- a/fuchsia.html
+++ b/fuchsia.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+
diff --git a/index.html b/index.html
index 26e9f0c..d18e428 100644
--- a/index.html
+++ b/index.html
@@ -208,6 +208,12 @@
+
+
+
+
+
+
diff --git a/mode-rust.js b/mode-rust.js
new file mode 100644
index 0000000..efe35ba
--- /dev/null
+++ b/mode-rust.js
@@ -0,0 +1,7 @@
+ace.define("ace/mode/rust_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=/\\(?:[nrt0'"\\]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\})/.source,o=function(){this.$rules={start:[{token:"variable.other.source.rust",regex:"'[a-zA-Z_][a-zA-Z0-9_]*(?![\\'])"},{token:"string.quoted.single.source.rust",regex:"'(?:[^'\\\\]|"+s+")'"},{token:"identifier",regex:/r#[a-zA-Z_][a-zA-Z0-9_]*\b/},{stateName:"bracketedComment",onMatch:function(e,t,n){return n.unshift(this.next,e.length-1,t),"string.quoted.raw.source.rust"},regex:/r#*"/,next:[{onMatch:function(e,t,n){var r="string.quoted.raw.source.rust";return e.length>=n[1]?(e.length>n[1]&&(r="invalid"),n.shift(),n.shift(),this.next=n.shift()):this.next="",r},regex:/"#*/,next:"start"},{defaultToken:"string.quoted.raw.source.rust"}]},{token:"string.quoted.double.source.rust",regex:'"',push:[{token:"string.quoted.double.source.rust",regex:'"',next:"pop"},{token:"constant.character.escape.source.rust",regex:s},{defaultToken:"string.quoted.double.source.rust"}]},{token:["keyword.source.rust","text","entity.name.function.source.rust"],regex:"\\b(fn)(\\s+)((?:r#)?[a-zA-Z_][a-zA-Z0-9_]*)"},{token:"support.constant",regex:"\\b[a-zA-Z_][\\w\\d]*::"},{token:"keyword.source.rust",regex:"\\b(?:abstract|alignof|as|become|box|break|catch|continue|const|crate|default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\b"},{token:"storage.type.source.rust",regex:"\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\b"},{token:"variable.language.source.rust",regex:"\\bself\\b"},{token:"comment.line.doc.source.rust",regex:"//!.*$"},{token:"comment.line.double-dash.source.rust",regex:"//.*$"},{token:"comment.start.block.source.rust",regex:"/\\*",stateName:"comment",push:[{token:"comment.start.block.source.rust",regex:"/\\*",push:"comment"},{token:"comment.end.block.source.rust",regex:"\\*/",next:"pop"},{defaultToken:"comment.block.source.rust"}]},{token:"keyword.operator",regex:/\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/},{token:"punctuation.operator",regex:/[?:,;.]/},{token:"paren.lparen",regex:/[\[({]/},{token:"paren.rparen",regex:/[\])}]/},{token:"constant.language.source.rust",regex:"\\b(?:true|false|Some|None|Ok|Err)\\b"},{token:"support.constant.source.rust",regex:"\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\b"},{token:"meta.preprocessor.source.rust",regex:"\\b\\w\\(\\w\\)*!|#\\[[\\w=\\(\\)_]+\\]\\b"},{token:"constant.numeric.source.rust",regex:/\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\.))(?:[iu](?:size|8|16|32|64|128))?\b/},{token:"constant.numeric.source.rust",regex:/\b(?:[0-9][0-9_]*)(?:\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\b/}]},this.normalizeRules()};o.metaData={fileTypes:["rs","rc"],foldingStartMarker:"^.*\\bfn\\s*(\\w+\\s*)?\\([^\\)]*\\)(\\s*\\{[^\\}]*)?\\s*$",foldingStopMarker:"^\\s*\\}",name:"Rust",scopeName:"source.rust"},r.inherits(o,i),t.RustHighlightRules=o}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/rust",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/rust_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./rust_highlight_rules").RustHighlightRules,o=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/",nestable:!0},this.$quotes={'"':'"'},this.$id="ace/mode/rust"}.call(u.prototype),t.Mode=u}); (function() {
+ ace.require(["ace/mode/rust"], function(m) {
+ if (typeof module == "object" && typeof exports == "object" && module) {
+ module.exports = m;
+ }
+ });
+ })();
diff --git a/print.html b/print.html
index 55d5cdb..b6b7da0 100644
--- a/print.html
+++ b/print.html
@@ -194,7 +194,8 @@ $ cd zcore
这个程序库目前是在你的 Linux 或 macOS 上运行,但有朝一日它会成为一个真正的 OS 在裸机上运行。
为此我们需要移除对标准库的依赖,使其成为一个不依赖当前 OS 功能的库。在 lib.rs 的第一行添加声明:
-#![no_std]
+// src/lib.rs
+#![no_std]
extern crate alloc;
现在我们可以尝试运行一下自带的单元测试,编译器可能会自动下载并安装工具链:
@@ -212,10 +213,8 @@ test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
同一种方法在不同类型的对象中可能会有不同的行为,在面向对象语言中我们称其为多态(Polymorphism)。
Rust 是一门部分面向对象的语言,我们通常用它的 trait 实现接口和多态。
首先创建一个 KernelObject trait 作为内核对象的公共接口:
-
-#![allow(unused)]
-fn main() {
-/// 内核对象公共接口
+// src/object/mod.rs
+/// 内核对象公共接口
pub trait KernelObject: Send + Sync {
/// 获取对象 ID
fn id(&self) -> KoID;
@@ -229,14 +228,14 @@ pub trait KernelObject: Send + Sync {
/// 对象 ID 类型
pub type KoID = u64;
-}
-
+
这里的 Send + Sync 是一个约束所有 KernelObject 都要满足的前提条件,即它必须是一个并发对象。
所谓并发对象指的是可以安全地被多线程共享访问。事实上我们的内核本身就是一个共享地址空间的多线程程序,在裸机上每个 CPU 核都可以被视为一个并发执行的线程。
由于内核对象可能被多个线程同时访问,因此它必须是并发对象。
实现一个空对象
接下来我们实现一个最简单的空对象 DummyObject,并为它实现 KernelObject 接口:
-use spin::Mutex;
+// src/object/object.rs
+use spin::Mutex;
/// 空对象
#[derive(Debug)]
@@ -259,7 +258,8 @@ struct DummyObjectInner {
spin = "0.5"
然后我们为新对象实现构造函数:
-use alloc::sync::Arc;
+// src/object/object.rs
+use alloc::sync::Arc;
use core::sync::atomic::*;
impl DummyObject {
@@ -282,7 +282,8 @@ impl DummyObject {
ID 类型使用 u64,保证了数值空间足够大,在有生之年都不用担心溢出问题。在 Zircon 中 ID 从 1024 开始分配,1024 以下保留作内核内部使用。
另外注意这里 new 函数返回类型不是 Self 而是 Arc<Self>,这是为了以后方便而做的统一约定。
最后我们为它实现 KernelObject 接口:
-impl KernelObject for DummyObject {
+// src/object/object.rs
+impl KernelObject for DummyObject {
fn id(&self) -> KoID {
self.id
}
@@ -300,7 +301,8 @@ ID 类型使用 u64,保证了数值空间足够大,在有生之
到此为止,我们已经迈出了万里长征第一步,实现了一个最简单的功能。有实现,就要有测试!即使最简单的代码也要保证它的行为符合我们预期。
只有对现有代码进行充分测试,在未来做添加和修改的时候,我们才有信心不会把事情搞砸。俗话讲"万丈高楼平地起",把地基打好才能盖摩天大楼。
为了证明上面代码的正确性,我们写一个简单的单元测试,替换掉自带的 it_works 函数:
-#[cfg(test)]
+// src/object/object.rs
+#[cfg(test)]
mod tests {
use super::*;
#[test]
@@ -340,11 +342,9 @@ DummyObject *dummy = dynamic_cast<DummyObject*>(base);
但在 Rust 中,由于其 trait 模型的限制,向下转换并不是一件容易的事情。
虽然标准库中提供了 Any trait,部分实现了动态类型的功能,但实际操作起来却困难重重。
不信邪的同学可以自己折腾一下:
-
-#![allow(unused)]
-fn main() {
-use std::any::Any;
-use std::sync::Arc;
+use core::any::Any;
+use alloc::sync::Arc;
+
trait KernelObject: Any + Send + Sync {}
fn downcast_v1<T: KernelObject>(object: Arc<dyn KernelObject>) -> Arc<T> {
object.downcast::<T>().unwrap()
@@ -353,15 +353,15 @@ fn downcast_v2<T: KernelObject>(object: Arc<dyn KernelObject>) ->
let object: Arc<dyn Any + Send + Sync + 'static> = object;
object.downcast::<T>().unwrap()
}
-}
-
+
当然这个问题也困扰了 Rust 社区中的很多人。目前已经有人提出了一套不错的解决方案,就是我们接下来要引入的 downcast-rs 库:
[dependencies]
downcast-rs = { version = "1.2.0", default-features = false }
-(题外话:这个库原来是不支持 no_std 的,zCore 有这个需求,于是就顺便帮他实现了一把)
+(题外话:这个库原来是不支持 no_std 的,zCore 有这个需求,于是就顺便帮他实现了一把)
按照它文档的描述,我们要为自己的接口实现向下转换,只需以下修改:
-use core::fmt::Debug;
+// src/object/mod.rs
+use core::fmt::Debug;
use downcast_rs::{impl_downcast, DowncastSync};
pub trait KernelObject: DowncastSync + Debug {...}
@@ -369,7 +369,8 @@ impl_downcast!(sync KernelObject);
其中 DowncastSync 代替了原来的 Send + Sync,Debug 用于出错时输出调试信息。
impl_downcast! 宏用来帮我们自动生成转换函数,然后就可以用 downcast_arc 来对 Arc 做向下转换了。我们直接来测试一把:
-#[test]
+// src/object/object.rs
+#[test]
fn downcast() {
let dummy = DummyObject::new();
let object: Arc<dyn KernelObject> = dummy;
@@ -401,7 +402,8 @@ test object::tests::dummy_object ... ok
为子类实现 trait 接口,所有方法直接委托给内部 struct 完成。这部分使用宏来自动生成模板代码。
而所谓的内部 struct,其实就是我们上面实现的 DummyObject。为了更好地体现它的功能,我们给他改个名叫 KObjectBase:
-/// 内核对象核心结构
+// src/object/mod.rs
+/// 内核对象核心结构
pub struct KObjectBase {
/// 对象 ID
pub id: KoID,
@@ -415,7 +417,8 @@ struct KObjectBaseInner {
}
接下来我们把它的构造函数改为实现 Default trait,并且公共属性和方法都指定为 pub:
-impl Default for KObjectBase {
+// src/object/mod.rs
+impl Default for KObjectBase {
/// 创建一个新 `KObjectBase`
fn default() -> Self {
KObjectBase {
@@ -434,7 +437,8 @@ impl KObjectBase {
}
最后来写一个魔法的宏!
-/// 为内核对象 struct 自动实现 `KernelObject` trait 的宏。
+// src/object/mod.rs
+/// 为内核对象 struct 自动实现 `KernelObject` trait 的宏。
#[macro_export] // 导出宏,可在 crate 外部使用
macro_rules! impl_kobject {
// 匹配类型名,并可以提供函数覆盖默认实现
@@ -477,7 +481,8 @@ macro_rules! impl_kobject {
}
轮子已经造好了!让我们看看如何用它方便地实现一个内核对象,仍以 DummyObject 为例:
-/// 空对象
+// src/object/mod.rs
+/// 空对象
pub struct DummyObject {
// 其中必须包含一个名为 `base` 的 `KObjectBase`
base: KObjectBase,
@@ -496,7 +501,8 @@ impl DummyObject {
}
是不是方便了很多?最后按照惯例,用单元测试检验实现的正确性:
-#[test]
+// src/object/mod.rs
+#[test]
fn impl_kobject() {
use alloc::format;
let dummy = DummyObject::new();
@@ -512,7 +518,7 @@ fn impl_kobject() {
let _result: Arc<DummyObject> = object.downcast_arc::<DummyObject>().unwrap();
}
-有兴趣的读者可以继续探索使用功能更强大的 过程宏(proc_macro),进一步简化实现新内核对象所需的模板代码。
+
有兴趣的读者可以继续探索使用功能更强大的 过程宏(proc_macro),进一步简化实现新内核对象所需的模板代码。
如果能把上面的代码块缩小成下面这两行,就更加完美了:
#[KernelObject]
pub struct DummyObject;
@@ -585,6 +591,12 @@ pub struct DummyObject;
+
+
+
+
+
+
diff --git a/searchindex.js b/searchindex.js
index 4add18c..8b7f385 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Object.assign(window.search, {"doc_urls":["index.html#简明-zcore-教程","index.html#自己动手山寨操作系统自顶向下方法","zcore-intro.html#zcore-整体结构和设计模式","fuchsia.html#fuchsia-os-和-zircon-微内核","ch01-00-object.html#内核对象","ch01-01-kernel-object.html#初识内核对象","ch01-01-kernel-object.html#内核对象简介","ch01-01-kernel-object.html#建立项目","ch01-01-kernel-object.html#实现-kernelobject-接口","ch01-01-kernel-object.html#实现一个空对象","ch01-01-kernel-object.html#实现接口到具体类型的向下转换","ch01-01-kernel-object.html#模拟继承用宏自动生成接口实现代码","ch01-01-kernel-object.html#总结","ch01-02-process-object.html#对象管理器process-对象","ch01-02-process-object.html#句柄和权限","ch01-02-process-object.html#实现第一个内核对象","ch01-02-process-object.html#存储内核对象句柄","ch01-02-process-object.html#根据句柄查找内核对象","ch01-03-channel-object.html#对象传送器channel-对象","ch01-03-channel-object.html#创建一对内核对象","ch01-03-channel-object.html#实现数据传输","ch02-00-task.html#任务管理","ch02-01-zircon-task.html#zircon-任务管理体系","ch02-02-hal-async.html#硬件抽象层与异步运行时","ch02-03-thread-object.html#线程管理thread-对象","ch02-04-process-job-object.html#进程管理process-与-job-对象","ch03-00-memory.html#内存管理","ch03-01-zircon-memory.html#zircon-内存管理模型","ch03-02-vmo.html#物理内存vmo-对象","ch03-03-vmar.html#虚拟内存vmar-对象","ch04-00-userspace.html#用户程序","ch04-01-user-program.html#zircon-用户程序","ch04-02-load-elf.html#加载-elf-文件","ch04-03-context-switch.html#上下文切换","ch04-04-syscall.html#系统调用"],"index":{"documentStore":{"docInfo":{"0":{"body":0,"breadcrumbs":1,"title":1},"1":{"body":20,"breadcrumbs":0,"title":0},"10":{"body":116,"breadcrumbs":0,"title":0},"11":{"body":170,"breadcrumbs":0,"title":0},"12":{"body":7,"breadcrumbs":0,"title":0},"13":{"body":0,"breadcrumbs":1,"title":1},"14":{"body":0,"breadcrumbs":0,"title":0},"15":{"body":0,"breadcrumbs":0,"title":0},"16":{"body":0,"breadcrumbs":0,"title":0},"17":{"body":0,"breadcrumbs":0,"title":0},"18":{"body":0,"breadcrumbs":1,"title":1},"19":{"body":0,"breadcrumbs":0,"title":0},"2":{"body":0,"breadcrumbs":1,"title":1},"20":{"body":0,"breadcrumbs":0,"title":0},"21":{"body":0,"breadcrumbs":0,"title":0},"22":{"body":0,"breadcrumbs":1,"title":1},"23":{"body":0,"breadcrumbs":0,"title":0},"24":{"body":0,"breadcrumbs":1,"title":1},"25":{"body":0,"breadcrumbs":2,"title":2},"26":{"body":0,"breadcrumbs":0,"title":0},"27":{"body":0,"breadcrumbs":1,"title":1},"28":{"body":0,"breadcrumbs":1,"title":1},"29":{"body":0,"breadcrumbs":1,"title":1},"3":{"body":0,"breadcrumbs":3,"title":3},"30":{"body":0,"breadcrumbs":0,"title":0},"31":{"body":0,"breadcrumbs":1,"title":1},"32":{"body":0,"breadcrumbs":1,"title":1},"33":{"body":0,"breadcrumbs":0,"title":0},"34":{"body":0,"breadcrumbs":0,"title":0},"4":{"body":4,"breadcrumbs":0,"title":0},"5":{"body":0,"breadcrumbs":0,"title":0},"6":{"body":3,"breadcrumbs":0,"title":0},"7":{"body":66,"breadcrumbs":0,"title":0},"8":{"body":34,"breadcrumbs":1,"title":1},"9":{"body":134,"breadcrumbs":0,"title":0}},"docs":{"0":{"body":"","breadcrumbs":"简明 zCore 教程","id":"0","title":"简明 zCore 教程"},"1":{"body":"zCore 是用 Rust 语言重写的 Zircon 微内核,它是 Google 正在开发的 Fuchsia OS 中的底层内核。 本教程基于 zCore 的真实开发历史,还原其开发过程。带领读者一步一步用 Rust 实现自己的 Zircon 内核,最终能够运行原生的 shell 程序。 在此过程中我们将体会 Zircon 微内核的设计理念,感受如何用 Rust 语言以一种现代的方式编写系统软件,在项目中实现理论与实践的融合。 与传统操作系统开发不同的是,zCore 使用一种自顶向下的方法:首先基于宿主系统已有的功能,在用户态实现一个能够工作的 libOS,然后再逐步替换底层实现, \"移植\"回裸机环境中运行。因此我们更关注系统的整体设计,从高层视角看待 OS 如何为用户提供服务,而不纠结于底层硬件细节。 鉴于此,本教程假设读者了解操作系统基本概念和原理,具有常用的 Linux 系统使用经验,并且会使用 Rust 语言编写简单程序。 如果读者不熟悉操作系统和 Rust 语言,希望以自底向上方法从零构建操作系统, rCore Tutorial 可能是更好的选择。 如果你准备好了,让我们开始吧!","breadcrumbs":"自己动手山寨操作系统:自顶向下方法","id":"1","title":"自己动手山寨操作系统:自顶向下方法"},"10":{"body":"在系统调用中,用户进程会传入一个内核对象的句柄,然后内核会根据系统调用的类型,尝试将其转换成特定类型的对象。 于是这里产生了一个很重要的需求:将接口 Arc 转换成具体类型的结构 Arc where T: KernelObject。 这种操作在面向对象语言中称为 向下转换(downcast) 。 在大部分编程语言中,向下转换都是一件非常轻松的事情。例如在 C/C++ 中,我们可以这样写: struct KernelObject {...};\nstruct DummyObject: KernelObject {...}; KernelObject *base = ...;\n// C 风格:强制类型转换\nDummyObject *dummy = (DummyObject*)(base);\n// C++ 风格:动态类型转换\nDummyObject *dummy = dynamic_cast(base); 但在 Rust 中,由于其 trait 模型的限制,向下转换并不是一件容易的事情。 虽然标准库中提供了 Any trait,部分实现了动态类型的功能,但实际操作起来却困难重重。 不信邪的同学可以自己折腾一下: #use std::any::Any;\n#use std::sync::Arc;\ntrait KernelObject: Any + Send + Sync {}\nfn downcast_v1(object: Arc) -> Arc { object.downcast::().unwrap()\n}\nfn downcast_v2(object: Arc) -> Arc { let object: Arc = object; object.downcast::().unwrap()\n} 当然这个问题也困扰了 Rust 社区中的很多人。目前已经有人提出了一套不错的解决方案,就是我们接下来要引入的 downcast-rs 库: [dependencies]\ndowncast-rs = { version = \"1.2.0\", default-features = false } (题外话:这个库原来是不支持 no_std 的,zCore 有这个需求,于是就顺便帮他实现了一把) 按照它文档的描述,我们要为自己的接口实现向下转换,只需以下修改: use core::fmt::Debug;\nuse downcast_rs::{impl_downcast, DowncastSync}; pub trait KernelObject: DowncastSync + Debug {...}\nimpl_downcast!(sync KernelObject); 其中 DowncastSync 代替了原来的 Send + Sync,Debug 用于出错时输出调试信息。 impl_downcast! 宏用来帮我们自动生成转换函数,然后就可以用 downcast_arc 来对 Arc 做向下转换了。我们直接来测试一把: #[test]\nfn downcast() { let dummy = DummyObject::new(); let object: Arc = dummy; let _result: Arc = object.downcast_arc::().unwrap();\n} $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.47s Running target/debug/deps/zcore-ae1be84852989b13 running 2 tests\ntest object::downcast ... ok\ntest object::tests::dummy_object ... ok","breadcrumbs":"内核对象 » 实现接口到具体类型的向下转换","id":"10","title":"实现接口到具体类型的向下转换"},"11":{"body":"上面我们已经完整实现了一个内核对象,代码看起来很简洁。但当我们要实现更多对象的时候,就会发现一个问题: 这些对象拥有一些公共属性,接口方法也有共同的实现。 在传统 OOP 语言中,我们通常使用 继承(inheritance) 来复用这些公共代码:子类 B 可以继承父类 A,然后自动拥有父类的所有字段和方法。 继承是一个很强大的功能,但在长期实践中人们也逐渐发现了它的弊端。有兴趣的读者可以看一看知乎上的探讨: 面向对象编程的弊端是什么? 。 经典著作《设计模式》中就鼓励大家 使用组合代替继承 。而一些现代的编程语言,如 Go 和 Rust,甚至直接抛弃了继承。在 Rust 中,通常使用组合结构和 Deref trait 来部分模拟继承。 继承野蛮,trait 文明。 —— 某 Rust 爱好者 接下来我们模仿 downcast-rs 库的做法,使用一种基于宏的代码生成方案,来实现 KernelObject 的继承。 当然这只是抛砖引玉,如果读者自己实现了,或者了解到社区中有更好的解决方案,也欢迎指出。 具体做法是这样的: 使用一个 struct 来提供所有的公共属性和方法,作为所有子类的第一个成员。 为子类实现 trait 接口,所有方法直接委托给内部 struct 完成。这部分使用宏来自动生成模板代码。 而所谓的内部 struct,其实就是我们上面实现的 DummyObject。为了更好地体现它的功能,我们给他改个名叫 KObjectBase: /// 内核对象核心结构\npub struct KObjectBase { /// 对象 ID pub id: KoID, inner: Mutex,\n} /// `KObjectBase` 的内部可变部分\n#[derive(Default)]\nstruct KObjectBaseInner { name: String,\n} 接下来我们把它的构造函数改为实现 Default trait,并且公共属性和方法都指定为 pub: impl Default for KObjectBase { /// 创建一个新 `KObjectBase` fn default() -> Self { KObjectBase { id: Self::new_koid(), inner: Default::default(), } }\n}\nimpl KObjectBase { /// 生成一个唯一的 ID fn new_koid() -> KoID {...} /// 获取对象名称 pub fn name(&self) -> String {...} /// 设置对象名称 pub fn set_name(&self, name: &str) {...}\n} 最后来写一个魔法的宏! /// 为内核对象 struct 自动实现 `KernelObject` trait 的宏。\n#[macro_export] // 导出宏,可在 crate 外部使用\nmacro_rules! impl_kobject { // 匹配类型名,并可以提供函数覆盖默认实现 ($class:ident $( $fn:tt )*) => { // 为对象实现 KernelObject trait,方法直接转发到内部 struct impl KernelObject for $class { fn id(&self) -> KoID { // 直接访问内部的 pub 属性 self.base.id } fn type_name(&self) -> &str { // 用 stringify! 宏将输入转成字符串 stringify!($class) } // 注意宏里面的类型要写完整路径,例如:alloc::string::String fn name(&self) -> alloc::string::String { self.base.name() } fn set_name(&self, name: &str){ // 直接访问内部的 pub 方法 self.base.set_name(name) } // 可以传入任意数量的函数,覆盖 trait 的默认实现 $( $fn )* } // 为对象实现 Debug trait impl core::fmt::Debug for $class { fn fmt( &self, f: &mut core::fmt::Formatter<'_>, ) -> core::result::Result<(), core::fmt::Error> { // 输出对象类型、ID 和名称 f.debug_tuple(&stringify!($class)) .field(&self.id()) .field(&self.name()) .finish() } } };\n} 轮子已经造好了!让我们看看如何用它方便地实现一个内核对象,仍以 DummyObject 为例: /// 空对象\npub struct DummyObject { // 其中必须包含一个名为 `base` 的 `KObjectBase` base: KObjectBase,\n} // 使用刚才的宏,声明其为内核对象,自动生成必要的代码\nimpl_kobject!(DummyObject); impl DummyObject { /// 创建一个新 `DummyObject` pub fn new() -> Arc { Arc::new(DummyObject { base: KObjectBase::default(), }) }\n} 是不是方便了很多?最后按照惯例,用单元测试检验实现的正确性: #[test]\nfn impl_kobject() { use alloc::format; let dummy = DummyObject::new(); let object: Arc = dummy; assert_eq!(object.type_name(), \"DummyObject\"); assert_eq!(object.name(), \"\"); object.set_name(\"dummy\"); assert_eq!(object.name(), \"dummy\"); assert_eq!( format!(\"{:?}\", object), format!(\"DummyObject({}, \\\"dummy\\\")\", object.id()) ); let _result: Arc = object.downcast_arc::().unwrap();\n} 有兴趣的读者可以继续探索使用功能更强大的 过程宏(proc_macro) ,进一步简化实现新内核对象所需的模板代码。 如果能把上面的代码块缩小成下面这两行,就更加完美了: #[KernelObject]\npub struct DummyObject;","breadcrumbs":"内核对象 » 模拟继承:用宏自动生成接口实现代码","id":"11","title":"模拟继承:用宏自动生成接口实现代码"},"12":{"body":"在这一节中我们用 Rust 语言实现了 Zircon 最核心的 内核对象 概念。在此过程中涉及到 Rust 的一系列语言特性和设计模式: 使用 trait 实现接口 使用 内部可变性 模式实现并发对象 基于社区解决方案实现 trait 到 struct 的 向下转换 使用组合模拟继承,并使用 宏 实现模板代码的自动生成 由于 Rust 独特的 面向对象编程特性 ,我们在实现内核对象的过程中遇到了一定的挑战。 不过万事开头难,解决这些问题为整个项目打下了坚实基础,后面实现新的内核对象就会变得简单很多。 在下一节中,我们将介绍内核对象相关的另外两个概念:句柄和权限,并实现内核对象的存储和访问。","breadcrumbs":"内核对象 » 总结","id":"12","title":"总结"},"13":{"body":"","breadcrumbs":"内核对象 » 对象管理器:Process 对象","id":"13","title":"对象管理器:Process 对象"},"14":{"body":"","breadcrumbs":"内核对象 » 句柄和权限","id":"14","title":"句柄和权限"},"15":{"body":"","breadcrumbs":"内核对象 » 实现第一个内核对象","id":"15","title":"实现第一个内核对象"},"16":{"body":"","breadcrumbs":"内核对象 » 存储内核对象句柄","id":"16","title":"存储内核对象句柄"},"17":{"body":"","breadcrumbs":"内核对象 » 根据句柄查找内核对象","id":"17","title":"根据句柄查找内核对象"},"18":{"body":"","breadcrumbs":"内核对象 » 对象传送器:Channel 对象","id":"18","title":"对象传送器:Channel 对象"},"19":{"body":"","breadcrumbs":"内核对象 » 创建一对内核对象","id":"19","title":"创建一对内核对象"},"2":{"body":"","breadcrumbs":"zCore 整体结构和设计模式","id":"2","title":"zCore 整体结构和设计模式"},"20":{"body":"","breadcrumbs":"内核对象 » 实现数据传输","id":"20","title":"实现数据传输"},"21":{"body":"","breadcrumbs":"任务管理","id":"21","title":"任务管理"},"22":{"body":"","breadcrumbs":"任务管理 » Zircon 任务管理体系","id":"22","title":"Zircon 任务管理体系"},"23":{"body":"","breadcrumbs":"任务管理 » 硬件抽象层与异步运行时","id":"23","title":"硬件抽象层与异步运行时"},"24":{"body":"","breadcrumbs":"任务管理 » 线程管理:Thread 对象","id":"24","title":"线程管理:Thread 对象"},"25":{"body":"","breadcrumbs":"任务管理 » 进程管理:Process 与 Job 对象","id":"25","title":"进程管理:Process 与 Job 对象"},"26":{"body":"","breadcrumbs":"内存管理","id":"26","title":"内存管理"},"27":{"body":"","breadcrumbs":"内存管理 » Zircon 内存管理模型","id":"27","title":"Zircon 内存管理模型"},"28":{"body":"","breadcrumbs":"内存管理 » 物理内存:VMO 对象","id":"28","title":"物理内存:VMO 对象"},"29":{"body":"","breadcrumbs":"内存管理 » 虚拟内存:VMAR 对象","id":"29","title":"虚拟内存:VMAR 对象"},"3":{"body":"","breadcrumbs":"Fuchsia OS 和 Zircon 微内核","id":"3","title":"Fuchsia OS 和 Zircon 微内核"},"30":{"body":"","breadcrumbs":"用户程序","id":"30","title":"用户程序"},"31":{"body":"","breadcrumbs":"用户程序 » Zircon 用户程序","id":"31","title":"Zircon 用户程序"},"32":{"body":"","breadcrumbs":"用户程序 » 加载 ELF 文件","id":"32","title":"加载 ELF 文件"},"33":{"body":"","breadcrumbs":"用户程序 » 上下文切换","id":"33","title":"上下文切换"},"34":{"body":"","breadcrumbs":"用户程序 » 系统调用","id":"34","title":"系统调用"},"4":{"body":"Zircon 是一个基于内核对象的系统。系统的功能被划分到若干组内核对象中。 作为一切的开始,本章首先构造了一个内核对象框架,作为后面实现的基础。 然后我们实现第一个内核对象 —— Process,它是所有对象的容器,也是将来我们操作对象的入口点。 最后会实现一个稍微复杂但是极其重要的对象 Channel,它是进程间通信( IPC )的基础设施,也是传送对象的唯一管道。","breadcrumbs":"内核对象","id":"4","title":"内核对象"},"5":{"body":"","breadcrumbs":"内核对象 » 初识内核对象","id":"5","title":"初识内核对象"},"6":{"body":"TODO 详细内容可参考 Fuchsia 官方文档: 内核对象 。 在这一节中我们将在 Rust 中实现内核对象的概念。","breadcrumbs":"内核对象 » 内核对象简介","id":"6","title":"内核对象简介"},"7":{"body":"首先我们需要安装 Rust 工具链。在 Linux 或 macOS 系统下,只需要用一个命令下载安装 rustup 即可: $ curl https://sh.rustup.rs -sSf | sh 具体安装方法可以参考 官方文档 。 接下来我们用 cargo 创建一个 Rust 库项目: $ cargo new --lib zcore\n$ cd zcore 我们将在这个 crate 中实现所有的内核对象,以库(lib)而不是可执行文件(bin)的形式组织代码,后面我们会依赖单元测试保证代码的正确性。 由于我们会用到一些不稳定(unstable)的语言特性,需要使用 nightly 版本的工具链。在项目根目录下创建一个 rust-toolchain 文件,指明使用的工具链版本: nightly-2020-06-04 这个程序库目前是在你的 Linux 或 macOS 上运行,但有朝一日它会成为一个真正的 OS 在裸机上运行。 为此我们需要移除对标准库的依赖,使其成为一个不依赖当前 OS 功能的库。在 lib.rs 的第一行添加声明: #![no_std]\nextern crate alloc; 现在我们可以尝试运行一下自带的单元测试,编译器可能会自动下载并安装工具链: $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.52s Running target/debug/deps/zcore-dc6d43637bc5df7a running 1 test\ntest tests::it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out","breadcrumbs":"内核对象 » 建立项目","id":"7","title":"建立项目"},"8":{"body":"所有的内核对象有一系列共同的属性和方法,我们称这些方法为对象的公共 接口(Interface) 。 同一种方法在不同类型的对象中可能会有不同的行为,在面向对象语言中我们称其为 多态(Polymorphism) 。 Rust 是一门部分面向对象的语言,我们通常用它的 trait 实现接口和多态。 首先创建一个 KernelObject trait 作为内核对象的公共接口: /// 内核对象公共接口\npub trait KernelObject: Send + Sync { /// 获取对象 ID fn id(&self) -> KoID; /// 获取对象类型名 fn type_name(&self) -> &str; /// 获取对象名称 fn name(&self) -> String; /// 设置对象名称 fn set_name(&self, name: &str);\n} /// 对象 ID 类型\npub type KoID = u64; 这里的 Send + Sync 是一个约束所有 KernelObject 都要满足的前提条件,即它必须是一个 并发对象 。 所谓并发对象指的是 可以安全地被多线程共享访问 。事实上我们的内核本身就是一个共享地址空间的多线程程序,在裸机上每个 CPU 核都可以被视为一个并发执行的线程。 由于内核对象可能被多个线程同时访问,因此它必须是并发对象。","breadcrumbs":"内核对象 » 实现 KernelObject 接口","id":"8","title":"实现 KernelObject 接口"},"9":{"body":"接下来我们实现一个最简单的空对象 DummyObject,并为它实现 KernelObject 接口: use spin::Mutex; /// 空对象\n#[derive(Debug)]\npub struct DummyObject { id: KoID, inner: Mutex,\n} /// `DummyObject` 的内部可变部分\n#[derive(Default, Debug)]\nstruct DummyObjectInner { name: String,\n} 这里我们采用一种 内部可变性 的设计模式:将对象的所有可变的部分封装到一个内部对象 DummyObjectInner 中,并在原对象中用自旋锁 Mutex 把它包起来,剩下的其它字段都是不可变的。 Mutex 会用最简单的方式帮我们处理好并发访问问题:如果有其他人正在访问,我就在这里死等。 数据被 Mutex 包起来之后需要首先使用 lock() 拿到锁之后才能访问。此时并发访问已经安全,因此被包起来的结构自动具有了 Send + Sync 特性。 使用自旋锁引入了新的依赖库 spin ,需要在 Cargo.toml 中加入以下声明: [dependencies]\nspin = \"0.5\" 然后我们为新对象实现构造函数: use alloc::sync::Arc;\nuse core::sync::atomic::*; impl DummyObject { /// 创建一个新 `DummyObject` pub fn new() -> Arc { Arc::new(DummyObject { id: Self::new_koid(), inner: Default::default(), }) } /// 生成一个唯一的 ID fn new_koid() -> KoID { static NEXT_KOID: AtomicU64 = AtomicU64::new(1024); NEXT_KOID.fetch_add(1, Ordering::SeqCst) }\n} 根据文档描述,每个内核对象都有唯一的 ID。为此我们需要实现一个全局的 ID 分配方法。这里采用的方法是用一个静态变量存放下一个待分配 ID 值,每次分配就原子地 +1。 ID 类型使用 u64,保证了数值空间足够大,在有生之年都不用担心溢出问题。在 Zircon 中 ID 从 1024 开始分配,1024 以下保留作内核内部使用。 另外注意这里 new 函数返回类型不是 Self 而是 Arc,这是为了以后方便而做的统一约定。 最后我们为它实现 KernelObject 接口: impl KernelObject for DummyObject { fn id(&self) -> KoID { self.id } fn type_name(&self) -> &str { \"DummyObject\" } fn name(&self) -> String { self.inner.lock().name.clone() } fn set_name(&self, name: &str) { self.inner.lock().name = String::from(name); }\n} 到此为止,我们已经迈出了万里长征第一步,实现了一个最简单的功能。有实现,就要有测试!即使最简单的代码也要保证它的行为符合我们预期。 只有对现有代码进行充分测试,在未来做添加和修改的时候,我们才有信心不会把事情搞砸。俗话讲\"万丈高楼平地起\",把地基打好才能盖摩天大楼。 为了证明上面代码的正确性,我们写一个简单的单元测试,替换掉自带的 it_works 函数: #[cfg(test)]\nmod tests { use super::*; #[test] fn dummy_object() { let o1 = DummyObject::new(); let o2 = DummyObject::new(); assert_ne!(o1.id(), o2.id()); assert_eq!(o1.type_name(), \"DummyObject\"); assert_eq!(o1.name(), \"\"); o1.set_name(\"object1\"); assert_eq!(o1.name(), \"object1\"); }\n} $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.53s Running target/debug/deps/zcore-ae1be84852989b13 running 1 test\ntest tests::dummy_object ... ok 大功告成!让我们用 cargo fmt 命令格式化一下代码,然后记得 git commit 及时保存进展。","breadcrumbs":"内核对象 » 实现一个空对象","id":"9","title":"实现一个空对象"}},"length":35,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"4":{"7":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"5":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"3":{"df":1,"docs":{"9":{"tf":1.0}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"7":{"tf":1.0}}},"6":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"7":{"tf":2.0}}},"1":{".":{"2":{".":{"0":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"2":{"0":{"2":{"0":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}}}}}},"a":{"df":0,"docs":{},"e":{"1":{"b":{"df":0,"docs":{},"e":{"8":{"4":{"8":{"5":{"2":{"9":{"8":{"9":{"b":{"1":{"3":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}}},"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"6":{"4":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"1":{"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}},"df":1,"docs":{"11":{"tf":1.0}}},"c":{"/":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}},"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"10":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.0},"4":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{":":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"'":{"_":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"d":{"c":{"6":{"d":{"4":{"3":{"6":{"3":{"7":{"b":{"c":{"5":{"d":{"df":0,"docs":{},"f":{"7":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"11":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"1":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":2.0}}},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{")":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":2.6457513110645907},"9":{"tf":2.8284271247461903}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{">":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"f":{".":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"n":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":4,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":3.4641016151377544},"8":{"tf":2.0},"9":{"tf":2.6457513110645907}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"1":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"o":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":2.23606797749979},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"!":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"!":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":2,"docs":{"11":{"tf":2.23606797749979},"9":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"c":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.0}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":3.3166247903554},"11":{"tf":2.449489742783178},"8":{"tf":2.0},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":3.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":1,"docs":{"7":{"tf":1.0}},"o":{"df":1,"docs":{"1":{"tf":1.0}}},")":{"df":0,"docs":{},"而":{"df":0,"docs":{},"不":{"df":0,"docs":{},"是":{"df":0,"docs":{},"可":{"df":0,"docs":{},"执":{"df":0,"docs":{},"行":{"df":0,"docs":{},"文":{"df":0,"docs":{},"件":{"df":0,"docs":{},"(":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"9":{"tf":1.7320508075688772}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":3,"docs":{"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"d":{"d":{"(":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"1":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"2":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"9":{"tf":1.0}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"<":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"c":{":":{":":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"1":{"df":1,"docs":{"9":{"tf":1.0}}},":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"11":{"tf":1.0}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"s":{"df":3,"docs":{"1":{"tf":1.4142135623730951},"3":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"c":{"_":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"13":{"tf":1.0},"25":{"tf":1.0},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"s":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{")":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"n":{"d":{"df":3,"docs":{"10":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"d":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":3.0},"12":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},",":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"7":{"tf":2.23606797749979},"9":{"tf":2.449489742783178}},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.0},"11":{"tf":2.8284271247461903},"12":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"6":{"4":{"df":2,"docs":{"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":3,"docs":{"10":{"tf":2.0},"11":{"tf":1.0},"9":{"tf":2.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.0}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"0":{"tf":1.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"2":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"4":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"breadcrumbs":{"root":{"0":{".":{"4":{"7":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"5":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"3":{"df":1,"docs":{"9":{"tf":1.0}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"7":{"tf":1.0}}},"6":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"7":{"tf":2.0}}},"1":{".":{"2":{".":{"0":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"2":{"0":{"2":{"0":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}}}}}},"a":{"df":0,"docs":{},"e":{"1":{"b":{"df":0,"docs":{},"e":{"8":{"4":{"8":{"5":{"2":{"9":{"8":{"9":{"b":{"1":{"3":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}}},"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"6":{"4":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"1":{"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}},"df":1,"docs":{"11":{"tf":1.0}}},"c":{"/":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}},"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"10":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{":":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"'":{"_":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"d":{"c":{"6":{"d":{"4":{"3":{"6":{"3":{"7":{"b":{"c":{"5":{"d":{"df":0,"docs":{},"f":{"7":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"11":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"1":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":2.0}}},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{")":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":2.6457513110645907},"9":{"tf":2.8284271247461903}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{">":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"f":{".":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"n":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":4,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":3.4641016151377544},"8":{"tf":2.0},"9":{"tf":2.6457513110645907}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"1":{"tf":1.0},"3":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"o":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":2.23606797749979},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"!":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"!":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":2,"docs":{"11":{"tf":2.23606797749979},"9":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"c":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":3.3166247903554},"11":{"tf":2.449489742783178},"8":{"tf":2.23606797749979},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":3.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":1,"docs":{"7":{"tf":1.0}},"o":{"df":1,"docs":{"1":{"tf":1.0}}},")":{"df":0,"docs":{},"而":{"df":0,"docs":{},"不":{"df":0,"docs":{},"是":{"df":0,"docs":{},"可":{"df":0,"docs":{},"执":{"df":0,"docs":{},"行":{"df":0,"docs":{},"文":{"df":0,"docs":{},"件":{"df":0,"docs":{},"(":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"9":{"tf":1.7320508075688772}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":3,"docs":{"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"d":{"d":{"(":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"1":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"2":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"9":{"tf":1.0}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"<":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"c":{":":{":":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"1":{"df":1,"docs":{"9":{"tf":1.0}}},":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"11":{"tf":1.0}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"s":{"df":3,"docs":{"1":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"c":{"_":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"13":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"s":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{")":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"n":{"d":{"df":3,"docs":{"10":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"d":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":3.0},"12":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},",":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"7":{"tf":2.23606797749979},"9":{"tf":2.449489742783178}},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.0},"11":{"tf":2.8284271247461903},"12":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"6":{"4":{"df":2,"docs":{"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":3,"docs":{"10":{"tf":2.0},"11":{"tf":1.0},"9":{"tf":2.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"2":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"22":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"4":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"title":{"root":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.0}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"3":{"tf":1.0}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"13":{"tf":1.0},"25":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.0}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"0":{"tf":1.0},"2":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"22":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}});
\ No newline at end of file
+Object.assign(window.search, {"doc_urls":["index.html#简明-zcore-教程","index.html#自己动手山寨操作系统自顶向下方法","zcore-intro.html#zcore-整体结构和设计模式","fuchsia.html#fuchsia-os-和-zircon-微内核","ch01-00-object.html#内核对象","ch01-01-kernel-object.html#初识内核对象","ch01-01-kernel-object.html#内核对象简介","ch01-01-kernel-object.html#建立项目","ch01-01-kernel-object.html#实现-kernelobject-接口","ch01-01-kernel-object.html#实现一个空对象","ch01-01-kernel-object.html#实现接口到具体类型的向下转换","ch01-01-kernel-object.html#模拟继承用宏自动生成接口实现代码","ch01-01-kernel-object.html#总结","ch01-02-process-object.html#对象管理器process-对象","ch01-02-process-object.html#句柄和权限","ch01-02-process-object.html#实现第一个内核对象","ch01-02-process-object.html#存储内核对象句柄","ch01-02-process-object.html#根据句柄查找内核对象","ch01-03-channel-object.html#对象传送器channel-对象","ch01-03-channel-object.html#创建一对内核对象","ch01-03-channel-object.html#实现数据传输","ch02-00-task.html#任务管理","ch02-01-zircon-task.html#zircon-任务管理体系","ch02-02-hal-async.html#硬件抽象层与异步运行时","ch02-03-thread-object.html#线程管理thread-对象","ch02-04-process-job-object.html#进程管理process-与-job-对象","ch03-00-memory.html#内存管理","ch03-01-zircon-memory.html#zircon-内存管理模型","ch03-02-vmo.html#物理内存vmo-对象","ch03-03-vmar.html#虚拟内存vmar-对象","ch04-00-userspace.html#用户程序","ch04-01-user-program.html#zircon-用户程序","ch04-02-load-elf.html#加载-elf-文件","ch04-03-context-switch.html#上下文切换","ch04-04-syscall.html#系统调用"],"index":{"documentStore":{"docInfo":{"0":{"body":0,"breadcrumbs":1,"title":1},"1":{"body":20,"breadcrumbs":0,"title":0},"10":{"body":118,"breadcrumbs":0,"title":0},"11":{"body":175,"breadcrumbs":0,"title":0},"12":{"body":7,"breadcrumbs":0,"title":0},"13":{"body":0,"breadcrumbs":1,"title":1},"14":{"body":0,"breadcrumbs":0,"title":0},"15":{"body":0,"breadcrumbs":0,"title":0},"16":{"body":0,"breadcrumbs":0,"title":0},"17":{"body":0,"breadcrumbs":0,"title":0},"18":{"body":0,"breadcrumbs":1,"title":1},"19":{"body":0,"breadcrumbs":0,"title":0},"2":{"body":0,"breadcrumbs":1,"title":1},"20":{"body":0,"breadcrumbs":0,"title":0},"21":{"body":0,"breadcrumbs":0,"title":0},"22":{"body":0,"breadcrumbs":1,"title":1},"23":{"body":0,"breadcrumbs":0,"title":0},"24":{"body":0,"breadcrumbs":1,"title":1},"25":{"body":0,"breadcrumbs":2,"title":2},"26":{"body":0,"breadcrumbs":0,"title":0},"27":{"body":0,"breadcrumbs":1,"title":1},"28":{"body":0,"breadcrumbs":1,"title":1},"29":{"body":0,"breadcrumbs":1,"title":1},"3":{"body":0,"breadcrumbs":3,"title":3},"30":{"body":0,"breadcrumbs":0,"title":0},"31":{"body":0,"breadcrumbs":1,"title":1},"32":{"body":0,"breadcrumbs":1,"title":1},"33":{"body":0,"breadcrumbs":0,"title":0},"34":{"body":0,"breadcrumbs":0,"title":0},"4":{"body":4,"breadcrumbs":0,"title":0},"5":{"body":0,"breadcrumbs":0,"title":0},"6":{"body":3,"breadcrumbs":0,"title":0},"7":{"body":67,"breadcrumbs":0,"title":0},"8":{"body":35,"breadcrumbs":1,"title":1},"9":{"body":138,"breadcrumbs":0,"title":0}},"docs":{"0":{"body":"","breadcrumbs":"简明 zCore 教程","id":"0","title":"简明 zCore 教程"},"1":{"body":"zCore 是用 Rust 语言重写的 Zircon 微内核,它是 Google 正在开发的 Fuchsia OS 中的底层内核。 本教程基于 zCore 的真实开发历史,还原其开发过程。带领读者一步一步用 Rust 实现自己的 Zircon 内核,最终能够运行原生的 shell 程序。 在此过程中我们将体会 Zircon 微内核的设计理念,感受如何用 Rust 语言以一种现代的方式编写系统软件,在项目中实现理论与实践的融合。 与传统操作系统开发不同的是,zCore 使用一种自顶向下的方法:首先基于宿主系统已有的功能,在用户态实现一个能够工作的 libOS,然后再逐步替换底层实现, \"移植\"回裸机环境中运行。因此我们更关注系统的整体设计,从高层视角看待 OS 如何为用户提供服务,而不纠结于底层硬件细节。 鉴于此,本教程假设读者了解操作系统基本概念和原理,具有常用的 Linux 系统使用经验,并且会使用 Rust 语言编写简单程序。 如果读者不熟悉操作系统和 Rust 语言,希望以自底向上方法从零构建操作系统, rCore Tutorial 可能是更好的选择。 如果你准备好了,让我们开始吧!","breadcrumbs":"自己动手山寨操作系统:自顶向下方法","id":"1","title":"自己动手山寨操作系统:自顶向下方法"},"10":{"body":"在系统调用中,用户进程会传入一个内核对象的句柄,然后内核会根据系统调用的类型,尝试将其转换成特定类型的对象。 于是这里产生了一个很重要的需求:将接口 Arc 转换成具体类型的结构 Arc where T: KernelObject。 这种操作在面向对象语言中称为 向下转换(downcast) 。 在大部分编程语言中,向下转换都是一件非常轻松的事情。例如在 C/C++ 中,我们可以这样写: struct KernelObject {...};\nstruct DummyObject: KernelObject {...}; KernelObject *base = ...;\n// C 风格:强制类型转换\nDummyObject *dummy = (DummyObject*)(base);\n// C++ 风格:动态类型转换\nDummyObject *dummy = dynamic_cast(base); 但在 Rust 中,由于其 trait 模型的限制,向下转换并不是一件容易的事情。 虽然标准库中提供了 Any trait,部分实现了动态类型的功能,但实际操作起来却困难重重。 不信邪的同学可以自己折腾一下: # use core::any::Any;\n# use alloc::sync::Arc;\n#\ntrait KernelObject: Any + Send + Sync {}\nfn downcast_v1(object: Arc) -> Arc { object.downcast::().unwrap()\n}\nfn downcast_v2(object: Arc) -> Arc { let object: Arc = object; object.downcast::().unwrap()\n} 当然这个问题也困扰了 Rust 社区中的很多人。目前已经有人提出了一套不错的解决方案,就是我们接下来要引入的 downcast-rs 库: [dependencies]\ndowncast-rs = { version = \"1.2.0\", default-features = false } (题外话:这个库原来是不支持 no_std 的,zCore 有这个需求,于是就顺便帮他实现了一把) 按照它文档的描述,我们要为自己的接口实现向下转换,只需以下修改: // src/object/mod.rs\nuse core::fmt::Debug;\nuse downcast_rs::{impl_downcast, DowncastSync}; pub trait KernelObject: DowncastSync + Debug {...}\nimpl_downcast!(sync KernelObject); 其中 DowncastSync 代替了原来的 Send + Sync,Debug 用于出错时输出调试信息。 impl_downcast! 宏用来帮我们自动生成转换函数,然后就可以用 downcast_arc 来对 Arc 做向下转换了。我们直接来测试一把: // src/object/object.rs\n#[test]\nfn downcast() { let dummy = DummyObject::new(); let object: Arc = dummy; let _result: Arc = object.downcast_arc::().unwrap();\n} $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.47s Running target/debug/deps/zcore-ae1be84852989b13 running 2 tests\ntest object::downcast ... ok\ntest object::tests::dummy_object ... ok","breadcrumbs":"内核对象 » 实现接口到具体类型的向下转换","id":"10","title":"实现接口到具体类型的向下转换"},"11":{"body":"上面我们已经完整实现了一个内核对象,代码看起来很简洁。但当我们要实现更多对象的时候,就会发现一个问题: 这些对象拥有一些公共属性,接口方法也有共同的实现。 在传统 OOP 语言中,我们通常使用 继承(inheritance) 来复用这些公共代码:子类 B 可以继承父类 A,然后自动拥有父类的所有字段和方法。 继承是一个很强大的功能,但在长期实践中人们也逐渐发现了它的弊端。有兴趣的读者可以看一看知乎上的探讨: 面向对象编程的弊端是什么? 。 经典著作《设计模式》中就鼓励大家 使用组合代替继承 。而一些现代的编程语言,如 Go 和 Rust,甚至直接抛弃了继承。在 Rust 中,通常使用组合结构和 Deref trait 来部分模拟继承。 继承野蛮,trait 文明。 —— 某 Rust 爱好者 接下来我们模仿 downcast-rs 库的做法,使用一种基于宏的代码生成方案,来实现 KernelObject 的继承。 当然这只是抛砖引玉,如果读者自己实现了,或者了解到社区中有更好的解决方案,也欢迎指出。 具体做法是这样的: 使用一个 struct 来提供所有的公共属性和方法,作为所有子类的第一个成员。 为子类实现 trait 接口,所有方法直接委托给内部 struct 完成。这部分使用宏来自动生成模板代码。 而所谓的内部 struct,其实就是我们上面实现的 DummyObject。为了更好地体现它的功能,我们给他改个名叫 KObjectBase: // src/object/mod.rs\n/// 内核对象核心结构\npub struct KObjectBase { /// 对象 ID pub id: KoID, inner: Mutex,\n} /// `KObjectBase` 的内部可变部分\n#[derive(Default)]\nstruct KObjectBaseInner { name: String,\n} 接下来我们把它的构造函数改为实现 Default trait,并且公共属性和方法都指定为 pub: // src/object/mod.rs\nimpl Default for KObjectBase { /// 创建一个新 `KObjectBase` fn default() -> Self { KObjectBase { id: Self::new_koid(), inner: Default::default(), } }\n}\nimpl KObjectBase { /// 生成一个唯一的 ID fn new_koid() -> KoID {...} /// 获取对象名称 pub fn name(&self) -> String {...} /// 设置对象名称 pub fn set_name(&self, name: &str) {...}\n} 最后来写一个魔法的宏! // src/object/mod.rs\n/// 为内核对象 struct 自动实现 `KernelObject` trait 的宏。\n#[macro_export] // 导出宏,可在 crate 外部使用\nmacro_rules! impl_kobject { // 匹配类型名,并可以提供函数覆盖默认实现 ($class:ident $( $fn:tt )*) => { // 为对象实现 KernelObject trait,方法直接转发到内部 struct impl KernelObject for $class { fn id(&self) -> KoID { // 直接访问内部的 pub 属性 self.base.id } fn type_name(&self) -> &str { // 用 stringify! 宏将输入转成字符串 stringify!($class) } // 注意宏里面的类型要写完整路径,例如:alloc::string::String fn name(&self) -> alloc::string::String { self.base.name() } fn set_name(&self, name: &str){ // 直接访问内部的 pub 方法 self.base.set_name(name) } // 可以传入任意数量的函数,覆盖 trait 的默认实现 $( $fn )* } // 为对象实现 Debug trait impl core::fmt::Debug for $class { fn fmt( &self, f: &mut core::fmt::Formatter<'_>, ) -> core::result::Result<(), core::fmt::Error> { // 输出对象类型、ID 和名称 f.debug_tuple(&stringify!($class)) .field(&self.id()) .field(&self.name()) .finish() } } };\n} 轮子已经造好了!让我们看看如何用它方便地实现一个内核对象,仍以 DummyObject 为例: // src/object/mod.rs\n/// 空对象\npub struct DummyObject { // 其中必须包含一个名为 `base` 的 `KObjectBase` base: KObjectBase,\n} // 使用刚才的宏,声明其为内核对象,自动生成必要的代码\nimpl_kobject!(DummyObject); impl DummyObject { /// 创建一个新 `DummyObject` pub fn new() -> Arc { Arc::new(DummyObject { base: KObjectBase::default(), }) }\n} 是不是方便了很多?最后按照惯例,用单元测试检验实现的正确性: // src/object/mod.rs\n#[test]\nfn impl_kobject() { use alloc::format; let dummy = DummyObject::new(); let object: Arc = dummy; assert_eq!(object.type_name(), \"DummyObject\"); assert_eq!(object.name(), \"\"); object.set_name(\"dummy\"); assert_eq!(object.name(), \"dummy\"); assert_eq!( format!(\"{:?}\", object), format!(\"DummyObject({}, \\\"dummy\\\")\", object.id()) ); let _result: Arc = object.downcast_arc::().unwrap();\n} 有兴趣的读者可以继续探索使用功能更强大的 过程宏(proc_macro) ,进一步简化实现新内核对象所需的模板代码。 如果能把上面的代码块缩小成下面这两行,就更加完美了: #[KernelObject]\npub struct DummyObject;","breadcrumbs":"内核对象 » 模拟继承:用宏自动生成接口实现代码","id":"11","title":"模拟继承:用宏自动生成接口实现代码"},"12":{"body":"在这一节中我们用 Rust 语言实现了 Zircon 最核心的 内核对象 概念。在此过程中涉及到 Rust 的一系列语言特性和设计模式: 使用 trait 实现接口 使用 内部可变性 模式实现并发对象 基于社区解决方案实现 trait 到 struct 的 向下转换 使用组合模拟继承,并使用 宏 实现模板代码的自动生成 由于 Rust 独特的 面向对象编程特性 ,我们在实现内核对象的过程中遇到了一定的挑战。 不过万事开头难,解决这些问题为整个项目打下了坚实基础,后面实现新的内核对象就会变得简单很多。 在下一节中,我们将介绍内核对象相关的另外两个概念:句柄和权限,并实现内核对象的存储和访问。","breadcrumbs":"内核对象 » 总结","id":"12","title":"总结"},"13":{"body":"","breadcrumbs":"内核对象 » 对象管理器:Process 对象","id":"13","title":"对象管理器:Process 对象"},"14":{"body":"","breadcrumbs":"内核对象 » 句柄和权限","id":"14","title":"句柄和权限"},"15":{"body":"","breadcrumbs":"内核对象 » 实现第一个内核对象","id":"15","title":"实现第一个内核对象"},"16":{"body":"","breadcrumbs":"内核对象 » 存储内核对象句柄","id":"16","title":"存储内核对象句柄"},"17":{"body":"","breadcrumbs":"内核对象 » 根据句柄查找内核对象","id":"17","title":"根据句柄查找内核对象"},"18":{"body":"","breadcrumbs":"内核对象 » 对象传送器:Channel 对象","id":"18","title":"对象传送器:Channel 对象"},"19":{"body":"","breadcrumbs":"内核对象 » 创建一对内核对象","id":"19","title":"创建一对内核对象"},"2":{"body":"","breadcrumbs":"zCore 整体结构和设计模式","id":"2","title":"zCore 整体结构和设计模式"},"20":{"body":"","breadcrumbs":"内核对象 » 实现数据传输","id":"20","title":"实现数据传输"},"21":{"body":"","breadcrumbs":"任务管理","id":"21","title":"任务管理"},"22":{"body":"","breadcrumbs":"任务管理 » Zircon 任务管理体系","id":"22","title":"Zircon 任务管理体系"},"23":{"body":"","breadcrumbs":"任务管理 » 硬件抽象层与异步运行时","id":"23","title":"硬件抽象层与异步运行时"},"24":{"body":"","breadcrumbs":"任务管理 » 线程管理:Thread 对象","id":"24","title":"线程管理:Thread 对象"},"25":{"body":"","breadcrumbs":"任务管理 » 进程管理:Process 与 Job 对象","id":"25","title":"进程管理:Process 与 Job 对象"},"26":{"body":"","breadcrumbs":"内存管理","id":"26","title":"内存管理"},"27":{"body":"","breadcrumbs":"内存管理 » Zircon 内存管理模型","id":"27","title":"Zircon 内存管理模型"},"28":{"body":"","breadcrumbs":"内存管理 » 物理内存:VMO 对象","id":"28","title":"物理内存:VMO 对象"},"29":{"body":"","breadcrumbs":"内存管理 » 虚拟内存:VMAR 对象","id":"29","title":"虚拟内存:VMAR 对象"},"3":{"body":"","breadcrumbs":"Fuchsia OS 和 Zircon 微内核","id":"3","title":"Fuchsia OS 和 Zircon 微内核"},"30":{"body":"","breadcrumbs":"用户程序","id":"30","title":"用户程序"},"31":{"body":"","breadcrumbs":"用户程序 » Zircon 用户程序","id":"31","title":"Zircon 用户程序"},"32":{"body":"","breadcrumbs":"用户程序 » 加载 ELF 文件","id":"32","title":"加载 ELF 文件"},"33":{"body":"","breadcrumbs":"用户程序 » 上下文切换","id":"33","title":"上下文切换"},"34":{"body":"","breadcrumbs":"用户程序 » 系统调用","id":"34","title":"系统调用"},"4":{"body":"Zircon 是一个基于内核对象的系统。系统的功能被划分到若干组内核对象中。 作为一切的开始,本章首先构造了一个内核对象框架,作为后面实现的基础。 然后我们实现第一个内核对象 —— Process,它是所有对象的容器,也是将来我们操作对象的入口点。 最后会实现一个稍微复杂但是极其重要的对象 Channel,它是进程间通信( IPC )的基础设施,也是传送对象的唯一管道。","breadcrumbs":"内核对象","id":"4","title":"内核对象"},"5":{"body":"","breadcrumbs":"内核对象 » 初识内核对象","id":"5","title":"初识内核对象"},"6":{"body":"TODO 详细内容可参考 Fuchsia 官方文档: 内核对象 。 在这一节中我们将在 Rust 中实现内核对象的概念。","breadcrumbs":"内核对象 » 内核对象简介","id":"6","title":"内核对象简介"},"7":{"body":"首先我们需要安装 Rust 工具链。在 Linux 或 macOS 系统下,只需要用一个命令下载安装 rustup 即可: $ curl https://sh.rustup.rs -sSf | sh 具体安装方法可以参考 官方文档 。 接下来我们用 cargo 创建一个 Rust 库项目: $ cargo new --lib zcore\n$ cd zcore 我们将在这个 crate 中实现所有的内核对象,以库(lib)而不是可执行文件(bin)的形式组织代码,后面我们会依赖单元测试保证代码的正确性。 由于我们会用到一些不稳定(unstable)的语言特性,需要使用 nightly 版本的工具链。在项目根目录下创建一个 rust-toolchain 文件,指明使用的工具链版本: nightly-2020-06-04 这个程序库目前是在你的 Linux 或 macOS 上运行,但有朝一日它会成为一个真正的 OS 在裸机上运行。 为此我们需要移除对标准库的依赖,使其成为一个不依赖当前 OS 功能的库。在 lib.rs 的第一行添加声明: // src/lib.rs\n#![no_std]\nextern crate alloc; 现在我们可以尝试运行一下自带的单元测试,编译器可能会自动下载并安装工具链: $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.52s Running target/debug/deps/zcore-dc6d43637bc5df7a running 1 test\ntest tests::it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out","breadcrumbs":"内核对象 » 建立项目","id":"7","title":"建立项目"},"8":{"body":"所有的内核对象有一系列共同的属性和方法,我们称这些方法为对象的公共 接口(Interface) 。 同一种方法在不同类型的对象中可能会有不同的行为,在面向对象语言中我们称其为 多态(Polymorphism) 。 Rust 是一门部分面向对象的语言,我们通常用它的 trait 实现接口和多态。 首先创建一个 KernelObject trait 作为内核对象的公共接口: // src/object/mod.rs\n/// 内核对象公共接口\npub trait KernelObject: Send + Sync { /// 获取对象 ID fn id(&self) -> KoID; /// 获取对象类型名 fn type_name(&self) -> &str; /// 获取对象名称 fn name(&self) -> String; /// 设置对象名称 fn set_name(&self, name: &str);\n} /// 对象 ID 类型\npub type KoID = u64; 这里的 Send + Sync 是一个约束所有 KernelObject 都要满足的前提条件,即它必须是一个 并发对象 。 所谓并发对象指的是 可以安全地被多线程共享访问 。事实上我们的内核本身就是一个共享地址空间的多线程程序,在裸机上每个 CPU 核都可以被视为一个并发执行的线程。 由于内核对象可能被多个线程同时访问,因此它必须是并发对象。","breadcrumbs":"内核对象 » 实现 KernelObject 接口","id":"8","title":"实现 KernelObject 接口"},"9":{"body":"接下来我们实现一个最简单的空对象 DummyObject,并为它实现 KernelObject 接口: // src/object/object.rs\nuse spin::Mutex; /// 空对象\n#[derive(Debug)]\npub struct DummyObject { id: KoID, inner: Mutex,\n} /// `DummyObject` 的内部可变部分\n#[derive(Default, Debug)]\nstruct DummyObjectInner { name: String,\n} 这里我们采用一种 内部可变性 的设计模式:将对象的所有可变的部分封装到一个内部对象 DummyObjectInner 中,并在原对象中用自旋锁 Mutex 把它包起来,剩下的其它字段都是不可变的。 Mutex 会用最简单的方式帮我们处理好并发访问问题:如果有其他人正在访问,我就在这里死等。 数据被 Mutex 包起来之后需要首先使用 lock() 拿到锁之后才能访问。此时并发访问已经安全,因此被包起来的结构自动具有了 Send + Sync 特性。 使用自旋锁引入了新的依赖库 spin ,需要在 Cargo.toml 中加入以下声明: [dependencies]\nspin = \"0.5\" 然后我们为新对象实现构造函数: // src/object/object.rs\nuse alloc::sync::Arc;\nuse core::sync::atomic::*; impl DummyObject { /// 创建一个新 `DummyObject` pub fn new() -> Arc { Arc::new(DummyObject { id: Self::new_koid(), inner: Default::default(), }) } /// 生成一个唯一的 ID fn new_koid() -> KoID { static NEXT_KOID: AtomicU64 = AtomicU64::new(1024); NEXT_KOID.fetch_add(1, Ordering::SeqCst) }\n} 根据文档描述,每个内核对象都有唯一的 ID。为此我们需要实现一个全局的 ID 分配方法。这里采用的方法是用一个静态变量存放下一个待分配 ID 值,每次分配就原子地 +1。 ID 类型使用 u64,保证了数值空间足够大,在有生之年都不用担心溢出问题。在 Zircon 中 ID 从 1024 开始分配,1024 以下保留作内核内部使用。 另外注意这里 new 函数返回类型不是 Self 而是 Arc,这是为了以后方便而做的统一约定。 最后我们为它实现 KernelObject 接口: // src/object/object.rs\nimpl KernelObject for DummyObject { fn id(&self) -> KoID { self.id } fn type_name(&self) -> &str { \"DummyObject\" } fn name(&self) -> String { self.inner.lock().name.clone() } fn set_name(&self, name: &str) { self.inner.lock().name = String::from(name); }\n} 到此为止,我们已经迈出了万里长征第一步,实现了一个最简单的功能。有实现,就要有测试!即使最简单的代码也要保证它的行为符合我们预期。 只有对现有代码进行充分测试,在未来做添加和修改的时候,我们才有信心不会把事情搞砸。俗话讲\"万丈高楼平地起\",把地基打好才能盖摩天大楼。 为了证明上面代码的正确性,我们写一个简单的单元测试,替换掉自带的 it_works 函数: // src/object/object.rs\n#[cfg(test)]\nmod tests { use super::*; #[test] fn dummy_object() { let o1 = DummyObject::new(); let o2 = DummyObject::new(); assert_ne!(o1.id(), o2.id()); assert_eq!(o1.type_name(), \"DummyObject\"); assert_eq!(o1.name(), \"\"); o1.set_name(\"object1\"); assert_eq!(o1.name(), \"object1\"); }\n} $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.53s Running target/debug/deps/zcore-ae1be84852989b13 running 1 test\ntest tests::dummy_object ... ok 大功告成!让我们用 cargo fmt 命令格式化一下代码,然后记得 git commit 及时保存进展。","breadcrumbs":"内核对象 » 实现一个空对象","id":"9","title":"实现一个空对象"}},"length":35,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"4":{"7":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"5":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"3":{"df":1,"docs":{"9":{"tf":1.0}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"7":{"tf":1.0}}},"6":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"7":{"tf":2.0}}},"1":{".":{"2":{".":{"0":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"2":{"0":{"2":{"0":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}}}}}},"a":{"df":0,"docs":{},"e":{"1":{"b":{"df":0,"docs":{},"e":{"8":{"4":{"8":{"5":{"2":{"9":{"8":{"9":{"b":{"1":{"3":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}}},"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"6":{"4":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"1":{"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}},"df":1,"docs":{"11":{"tf":1.0}}},"c":{"/":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}},"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"10":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.0},"4":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{":":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"'":{"_":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"d":{"c":{"6":{"d":{"4":{"3":{"6":{"3":{"7":{"b":{"c":{"5":{"d":{"df":0,"docs":{},"f":{"7":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"11":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"1":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":2.0}}},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{")":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":2.6457513110645907},"9":{"tf":2.8284271247461903}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{">":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"f":{".":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"n":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":4,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":3.4641016151377544},"8":{"tf":2.0},"9":{"tf":2.6457513110645907}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"1":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"o":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":2.23606797749979},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"!":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"!":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":2,"docs":{"11":{"tf":2.23606797749979},"9":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"c":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.0}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":3.3166247903554},"11":{"tf":2.449489742783178},"8":{"tf":2.0},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":3.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":1,"docs":{"7":{"tf":1.0}},"o":{"df":1,"docs":{"1":{"tf":1.0}}},")":{"df":0,"docs":{},"而":{"df":0,"docs":{},"不":{"df":0,"docs":{},"是":{"df":0,"docs":{},"可":{"df":0,"docs":{},"执":{"df":0,"docs":{},"行":{"df":0,"docs":{},"文":{"df":0,"docs":{},"件":{"df":0,"docs":{},"(":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"9":{"tf":1.7320508075688772}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":3,"docs":{"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"d":{"d":{"(":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"1":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"2":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"9":{"tf":1.0}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"<":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"c":{":":{":":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"1":{"df":1,"docs":{"9":{"tf":1.0}}},":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"11":{"tf":1.0}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"s":{"df":3,"docs":{"1":{"tf":1.4142135623730951},"3":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"c":{"_":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"13":{"tf":1.0},"25":{"tf":1.0},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"s":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{")":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"n":{"d":{"df":3,"docs":{"10":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}},"r":{"c":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":2.23606797749979},"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":2.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":3.0},"12":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},",":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"7":{"tf":2.23606797749979},"9":{"tf":2.449489742783178}},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.0},"11":{"tf":2.8284271247461903},"12":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"6":{"4":{"df":2,"docs":{"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":3,"docs":{"10":{"tf":2.0},"11":{"tf":1.0},"9":{"tf":2.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.0}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"0":{"tf":1.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"2":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"4":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"breadcrumbs":{"root":{"0":{".":{"4":{"7":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"5":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"3":{"df":1,"docs":{"9":{"tf":1.0}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"7":{"tf":1.0}}},"6":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"7":{"tf":2.0}}},"1":{".":{"2":{".":{"0":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"2":{"0":{"2":{"0":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}}}}}},"a":{"df":0,"docs":{},"e":{"1":{"b":{"df":0,"docs":{},"e":{"8":{"4":{"8":{"5":{"2":{"9":{"8":{"9":{"b":{"1":{"3":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}}},"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"6":{"4":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"1":{"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}},"df":1,"docs":{"11":{"tf":1.0}}},"c":{"/":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}},"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"10":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{":":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"'":{"_":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"d":{"c":{"6":{"d":{"4":{"3":{"6":{"3":{"7":{"b":{"c":{"5":{"d":{"df":0,"docs":{},"f":{"7":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"11":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"1":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":2.0}}},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{")":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":2.6457513110645907},"9":{"tf":2.8284271247461903}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{">":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"f":{".":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"n":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":4,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":3.4641016151377544},"8":{"tf":2.0},"9":{"tf":2.6457513110645907}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"1":{"tf":1.0},"3":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"o":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":2.23606797749979},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"!":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"!":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":2,"docs":{"11":{"tf":2.23606797749979},"9":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"c":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":3.3166247903554},"11":{"tf":2.449489742783178},"8":{"tf":2.23606797749979},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":3.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":1,"docs":{"7":{"tf":1.0}},"o":{"df":1,"docs":{"1":{"tf":1.0}}},")":{"df":0,"docs":{},"而":{"df":0,"docs":{},"不":{"df":0,"docs":{},"是":{"df":0,"docs":{},"可":{"df":0,"docs":{},"执":{"df":0,"docs":{},"行":{"df":0,"docs":{},"文":{"df":0,"docs":{},"件":{"df":0,"docs":{},"(":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"9":{"tf":1.7320508075688772}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":3,"docs":{"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"d":{"d":{"(":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"1":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"2":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"9":{"tf":1.0}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"<":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"c":{":":{":":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"1":{"df":1,"docs":{"9":{"tf":1.0}}},":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"11":{"tf":1.0}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"s":{"df":3,"docs":{"1":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"c":{"_":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"13":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"s":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{")":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"n":{"d":{"df":3,"docs":{"10":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}},"r":{"c":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":2.23606797749979},"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":2.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":3.0},"12":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},",":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"7":{"tf":2.23606797749979},"9":{"tf":2.449489742783178}},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.0},"11":{"tf":2.8284271247461903},"12":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"6":{"4":{"df":2,"docs":{"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":3,"docs":{"10":{"tf":2.0},"11":{"tf":1.0},"9":{"tf":2.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"2":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"22":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"4":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"title":{"root":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.0}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"3":{"tf":1.0}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"13":{"tf":1.0},"25":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.0}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"0":{"tf":1.0},"2":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"22":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}});
\ No newline at end of file
diff --git a/searchindex.json b/searchindex.json
index 82a9c1d..b8b84d4 100644
--- a/searchindex.json
+++ b/searchindex.json
@@ -1 +1 @@
-{"doc_urls":["index.html#简明-zcore-教程","index.html#自己动手山寨操作系统自顶向下方法","zcore-intro.html#zcore-整体结构和设计模式","fuchsia.html#fuchsia-os-和-zircon-微内核","ch01-00-object.html#内核对象","ch01-01-kernel-object.html#初识内核对象","ch01-01-kernel-object.html#内核对象简介","ch01-01-kernel-object.html#建立项目","ch01-01-kernel-object.html#实现-kernelobject-接口","ch01-01-kernel-object.html#实现一个空对象","ch01-01-kernel-object.html#实现接口到具体类型的向下转换","ch01-01-kernel-object.html#模拟继承用宏自动生成接口实现代码","ch01-01-kernel-object.html#总结","ch01-02-process-object.html#对象管理器process-对象","ch01-02-process-object.html#句柄和权限","ch01-02-process-object.html#实现第一个内核对象","ch01-02-process-object.html#存储内核对象句柄","ch01-02-process-object.html#根据句柄查找内核对象","ch01-03-channel-object.html#对象传送器channel-对象","ch01-03-channel-object.html#创建一对内核对象","ch01-03-channel-object.html#实现数据传输","ch02-00-task.html#任务管理","ch02-01-zircon-task.html#zircon-任务管理体系","ch02-02-hal-async.html#硬件抽象层与异步运行时","ch02-03-thread-object.html#线程管理thread-对象","ch02-04-process-job-object.html#进程管理process-与-job-对象","ch03-00-memory.html#内存管理","ch03-01-zircon-memory.html#zircon-内存管理模型","ch03-02-vmo.html#物理内存vmo-对象","ch03-03-vmar.html#虚拟内存vmar-对象","ch04-00-userspace.html#用户程序","ch04-01-user-program.html#zircon-用户程序","ch04-02-load-elf.html#加载-elf-文件","ch04-03-context-switch.html#上下文切换","ch04-04-syscall.html#系统调用"],"index":{"documentStore":{"docInfo":{"0":{"body":0,"breadcrumbs":1,"title":1},"1":{"body":20,"breadcrumbs":0,"title":0},"10":{"body":116,"breadcrumbs":0,"title":0},"11":{"body":170,"breadcrumbs":0,"title":0},"12":{"body":7,"breadcrumbs":0,"title":0},"13":{"body":0,"breadcrumbs":1,"title":1},"14":{"body":0,"breadcrumbs":0,"title":0},"15":{"body":0,"breadcrumbs":0,"title":0},"16":{"body":0,"breadcrumbs":0,"title":0},"17":{"body":0,"breadcrumbs":0,"title":0},"18":{"body":0,"breadcrumbs":1,"title":1},"19":{"body":0,"breadcrumbs":0,"title":0},"2":{"body":0,"breadcrumbs":1,"title":1},"20":{"body":0,"breadcrumbs":0,"title":0},"21":{"body":0,"breadcrumbs":0,"title":0},"22":{"body":0,"breadcrumbs":1,"title":1},"23":{"body":0,"breadcrumbs":0,"title":0},"24":{"body":0,"breadcrumbs":1,"title":1},"25":{"body":0,"breadcrumbs":2,"title":2},"26":{"body":0,"breadcrumbs":0,"title":0},"27":{"body":0,"breadcrumbs":1,"title":1},"28":{"body":0,"breadcrumbs":1,"title":1},"29":{"body":0,"breadcrumbs":1,"title":1},"3":{"body":0,"breadcrumbs":3,"title":3},"30":{"body":0,"breadcrumbs":0,"title":0},"31":{"body":0,"breadcrumbs":1,"title":1},"32":{"body":0,"breadcrumbs":1,"title":1},"33":{"body":0,"breadcrumbs":0,"title":0},"34":{"body":0,"breadcrumbs":0,"title":0},"4":{"body":4,"breadcrumbs":0,"title":0},"5":{"body":0,"breadcrumbs":0,"title":0},"6":{"body":3,"breadcrumbs":0,"title":0},"7":{"body":66,"breadcrumbs":0,"title":0},"8":{"body":34,"breadcrumbs":1,"title":1},"9":{"body":134,"breadcrumbs":0,"title":0}},"docs":{"0":{"body":"","breadcrumbs":"简明 zCore 教程","id":"0","title":"简明 zCore 教程"},"1":{"body":"zCore 是用 Rust 语言重写的 Zircon 微内核,它是 Google 正在开发的 Fuchsia OS 中的底层内核。 本教程基于 zCore 的真实开发历史,还原其开发过程。带领读者一步一步用 Rust 实现自己的 Zircon 内核,最终能够运行原生的 shell 程序。 在此过程中我们将体会 Zircon 微内核的设计理念,感受如何用 Rust 语言以一种现代的方式编写系统软件,在项目中实现理论与实践的融合。 与传统操作系统开发不同的是,zCore 使用一种自顶向下的方法:首先基于宿主系统已有的功能,在用户态实现一个能够工作的 libOS,然后再逐步替换底层实现, \"移植\"回裸机环境中运行。因此我们更关注系统的整体设计,从高层视角看待 OS 如何为用户提供服务,而不纠结于底层硬件细节。 鉴于此,本教程假设读者了解操作系统基本概念和原理,具有常用的 Linux 系统使用经验,并且会使用 Rust 语言编写简单程序。 如果读者不熟悉操作系统和 Rust 语言,希望以自底向上方法从零构建操作系统, rCore Tutorial 可能是更好的选择。 如果你准备好了,让我们开始吧!","breadcrumbs":"自己动手山寨操作系统:自顶向下方法","id":"1","title":"自己动手山寨操作系统:自顶向下方法"},"10":{"body":"在系统调用中,用户进程会传入一个内核对象的句柄,然后内核会根据系统调用的类型,尝试将其转换成特定类型的对象。 于是这里产生了一个很重要的需求:将接口 Arc 转换成具体类型的结构 Arc where T: KernelObject。 这种操作在面向对象语言中称为 向下转换(downcast) 。 在大部分编程语言中,向下转换都是一件非常轻松的事情。例如在 C/C++ 中,我们可以这样写: struct KernelObject {...};\nstruct DummyObject: KernelObject {...}; KernelObject *base = ...;\n// C 风格:强制类型转换\nDummyObject *dummy = (DummyObject*)(base);\n// C++ 风格:动态类型转换\nDummyObject *dummy = dynamic_cast(base); 但在 Rust 中,由于其 trait 模型的限制,向下转换并不是一件容易的事情。 虽然标准库中提供了 Any trait,部分实现了动态类型的功能,但实际操作起来却困难重重。 不信邪的同学可以自己折腾一下: #use std::any::Any;\n#use std::sync::Arc;\ntrait KernelObject: Any + Send + Sync {}\nfn downcast_v1(object: Arc) -> Arc { object.downcast::().unwrap()\n}\nfn downcast_v2(object: Arc) -> Arc { let object: Arc = object; object.downcast::().unwrap()\n} 当然这个问题也困扰了 Rust 社区中的很多人。目前已经有人提出了一套不错的解决方案,就是我们接下来要引入的 downcast-rs 库: [dependencies]\ndowncast-rs = { version = \"1.2.0\", default-features = false } (题外话:这个库原来是不支持 no_std 的,zCore 有这个需求,于是就顺便帮他实现了一把) 按照它文档的描述,我们要为自己的接口实现向下转换,只需以下修改: use core::fmt::Debug;\nuse downcast_rs::{impl_downcast, DowncastSync}; pub trait KernelObject: DowncastSync + Debug {...}\nimpl_downcast!(sync KernelObject); 其中 DowncastSync 代替了原来的 Send + Sync,Debug 用于出错时输出调试信息。 impl_downcast! 宏用来帮我们自动生成转换函数,然后就可以用 downcast_arc 来对 Arc 做向下转换了。我们直接来测试一把: #[test]\nfn downcast() { let dummy = DummyObject::new(); let object: Arc = dummy; let _result: Arc = object.downcast_arc::().unwrap();\n} $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.47s Running target/debug/deps/zcore-ae1be84852989b13 running 2 tests\ntest object::downcast ... ok\ntest object::tests::dummy_object ... ok","breadcrumbs":"内核对象 » 实现接口到具体类型的向下转换","id":"10","title":"实现接口到具体类型的向下转换"},"11":{"body":"上面我们已经完整实现了一个内核对象,代码看起来很简洁。但当我们要实现更多对象的时候,就会发现一个问题: 这些对象拥有一些公共属性,接口方法也有共同的实现。 在传统 OOP 语言中,我们通常使用 继承(inheritance) 来复用这些公共代码:子类 B 可以继承父类 A,然后自动拥有父类的所有字段和方法。 继承是一个很强大的功能,但在长期实践中人们也逐渐发现了它的弊端。有兴趣的读者可以看一看知乎上的探讨: 面向对象编程的弊端是什么? 。 经典著作《设计模式》中就鼓励大家 使用组合代替继承 。而一些现代的编程语言,如 Go 和 Rust,甚至直接抛弃了继承。在 Rust 中,通常使用组合结构和 Deref trait 来部分模拟继承。 继承野蛮,trait 文明。 —— 某 Rust 爱好者 接下来我们模仿 downcast-rs 库的做法,使用一种基于宏的代码生成方案,来实现 KernelObject 的继承。 当然这只是抛砖引玉,如果读者自己实现了,或者了解到社区中有更好的解决方案,也欢迎指出。 具体做法是这样的: 使用一个 struct 来提供所有的公共属性和方法,作为所有子类的第一个成员。 为子类实现 trait 接口,所有方法直接委托给内部 struct 完成。这部分使用宏来自动生成模板代码。 而所谓的内部 struct,其实就是我们上面实现的 DummyObject。为了更好地体现它的功能,我们给他改个名叫 KObjectBase: /// 内核对象核心结构\npub struct KObjectBase { /// 对象 ID pub id: KoID, inner: Mutex,\n} /// `KObjectBase` 的内部可变部分\n#[derive(Default)]\nstruct KObjectBaseInner { name: String,\n} 接下来我们把它的构造函数改为实现 Default trait,并且公共属性和方法都指定为 pub: impl Default for KObjectBase { /// 创建一个新 `KObjectBase` fn default() -> Self { KObjectBase { id: Self::new_koid(), inner: Default::default(), } }\n}\nimpl KObjectBase { /// 生成一个唯一的 ID fn new_koid() -> KoID {...} /// 获取对象名称 pub fn name(&self) -> String {...} /// 设置对象名称 pub fn set_name(&self, name: &str) {...}\n} 最后来写一个魔法的宏! /// 为内核对象 struct 自动实现 `KernelObject` trait 的宏。\n#[macro_export] // 导出宏,可在 crate 外部使用\nmacro_rules! impl_kobject { // 匹配类型名,并可以提供函数覆盖默认实现 ($class:ident $( $fn:tt )*) => { // 为对象实现 KernelObject trait,方法直接转发到内部 struct impl KernelObject for $class { fn id(&self) -> KoID { // 直接访问内部的 pub 属性 self.base.id } fn type_name(&self) -> &str { // 用 stringify! 宏将输入转成字符串 stringify!($class) } // 注意宏里面的类型要写完整路径,例如:alloc::string::String fn name(&self) -> alloc::string::String { self.base.name() } fn set_name(&self, name: &str){ // 直接访问内部的 pub 方法 self.base.set_name(name) } // 可以传入任意数量的函数,覆盖 trait 的默认实现 $( $fn )* } // 为对象实现 Debug trait impl core::fmt::Debug for $class { fn fmt( &self, f: &mut core::fmt::Formatter<'_>, ) -> core::result::Result<(), core::fmt::Error> { // 输出对象类型、ID 和名称 f.debug_tuple(&stringify!($class)) .field(&self.id()) .field(&self.name()) .finish() } } };\n} 轮子已经造好了!让我们看看如何用它方便地实现一个内核对象,仍以 DummyObject 为例: /// 空对象\npub struct DummyObject { // 其中必须包含一个名为 `base` 的 `KObjectBase` base: KObjectBase,\n} // 使用刚才的宏,声明其为内核对象,自动生成必要的代码\nimpl_kobject!(DummyObject); impl DummyObject { /// 创建一个新 `DummyObject` pub fn new() -> Arc { Arc::new(DummyObject { base: KObjectBase::default(), }) }\n} 是不是方便了很多?最后按照惯例,用单元测试检验实现的正确性: #[test]\nfn impl_kobject() { use alloc::format; let dummy = DummyObject::new(); let object: Arc = dummy; assert_eq!(object.type_name(), \"DummyObject\"); assert_eq!(object.name(), \"\"); object.set_name(\"dummy\"); assert_eq!(object.name(), \"dummy\"); assert_eq!( format!(\"{:?}\", object), format!(\"DummyObject({}, \\\"dummy\\\")\", object.id()) ); let _result: Arc = object.downcast_arc::().unwrap();\n} 有兴趣的读者可以继续探索使用功能更强大的 过程宏(proc_macro) ,进一步简化实现新内核对象所需的模板代码。 如果能把上面的代码块缩小成下面这两行,就更加完美了: #[KernelObject]\npub struct DummyObject;","breadcrumbs":"内核对象 » 模拟继承:用宏自动生成接口实现代码","id":"11","title":"模拟继承:用宏自动生成接口实现代码"},"12":{"body":"在这一节中我们用 Rust 语言实现了 Zircon 最核心的 内核对象 概念。在此过程中涉及到 Rust 的一系列语言特性和设计模式: 使用 trait 实现接口 使用 内部可变性 模式实现并发对象 基于社区解决方案实现 trait 到 struct 的 向下转换 使用组合模拟继承,并使用 宏 实现模板代码的自动生成 由于 Rust 独特的 面向对象编程特性 ,我们在实现内核对象的过程中遇到了一定的挑战。 不过万事开头难,解决这些问题为整个项目打下了坚实基础,后面实现新的内核对象就会变得简单很多。 在下一节中,我们将介绍内核对象相关的另外两个概念:句柄和权限,并实现内核对象的存储和访问。","breadcrumbs":"内核对象 » 总结","id":"12","title":"总结"},"13":{"body":"","breadcrumbs":"内核对象 » 对象管理器:Process 对象","id":"13","title":"对象管理器:Process 对象"},"14":{"body":"","breadcrumbs":"内核对象 » 句柄和权限","id":"14","title":"句柄和权限"},"15":{"body":"","breadcrumbs":"内核对象 » 实现第一个内核对象","id":"15","title":"实现第一个内核对象"},"16":{"body":"","breadcrumbs":"内核对象 » 存储内核对象句柄","id":"16","title":"存储内核对象句柄"},"17":{"body":"","breadcrumbs":"内核对象 » 根据句柄查找内核对象","id":"17","title":"根据句柄查找内核对象"},"18":{"body":"","breadcrumbs":"内核对象 » 对象传送器:Channel 对象","id":"18","title":"对象传送器:Channel 对象"},"19":{"body":"","breadcrumbs":"内核对象 » 创建一对内核对象","id":"19","title":"创建一对内核对象"},"2":{"body":"","breadcrumbs":"zCore 整体结构和设计模式","id":"2","title":"zCore 整体结构和设计模式"},"20":{"body":"","breadcrumbs":"内核对象 » 实现数据传输","id":"20","title":"实现数据传输"},"21":{"body":"","breadcrumbs":"任务管理","id":"21","title":"任务管理"},"22":{"body":"","breadcrumbs":"任务管理 » Zircon 任务管理体系","id":"22","title":"Zircon 任务管理体系"},"23":{"body":"","breadcrumbs":"任务管理 » 硬件抽象层与异步运行时","id":"23","title":"硬件抽象层与异步运行时"},"24":{"body":"","breadcrumbs":"任务管理 » 线程管理:Thread 对象","id":"24","title":"线程管理:Thread 对象"},"25":{"body":"","breadcrumbs":"任务管理 » 进程管理:Process 与 Job 对象","id":"25","title":"进程管理:Process 与 Job 对象"},"26":{"body":"","breadcrumbs":"内存管理","id":"26","title":"内存管理"},"27":{"body":"","breadcrumbs":"内存管理 » Zircon 内存管理模型","id":"27","title":"Zircon 内存管理模型"},"28":{"body":"","breadcrumbs":"内存管理 » 物理内存:VMO 对象","id":"28","title":"物理内存:VMO 对象"},"29":{"body":"","breadcrumbs":"内存管理 » 虚拟内存:VMAR 对象","id":"29","title":"虚拟内存:VMAR 对象"},"3":{"body":"","breadcrumbs":"Fuchsia OS 和 Zircon 微内核","id":"3","title":"Fuchsia OS 和 Zircon 微内核"},"30":{"body":"","breadcrumbs":"用户程序","id":"30","title":"用户程序"},"31":{"body":"","breadcrumbs":"用户程序 » Zircon 用户程序","id":"31","title":"Zircon 用户程序"},"32":{"body":"","breadcrumbs":"用户程序 » 加载 ELF 文件","id":"32","title":"加载 ELF 文件"},"33":{"body":"","breadcrumbs":"用户程序 » 上下文切换","id":"33","title":"上下文切换"},"34":{"body":"","breadcrumbs":"用户程序 » 系统调用","id":"34","title":"系统调用"},"4":{"body":"Zircon 是一个基于内核对象的系统。系统的功能被划分到若干组内核对象中。 作为一切的开始,本章首先构造了一个内核对象框架,作为后面实现的基础。 然后我们实现第一个内核对象 —— Process,它是所有对象的容器,也是将来我们操作对象的入口点。 最后会实现一个稍微复杂但是极其重要的对象 Channel,它是进程间通信( IPC )的基础设施,也是传送对象的唯一管道。","breadcrumbs":"内核对象","id":"4","title":"内核对象"},"5":{"body":"","breadcrumbs":"内核对象 » 初识内核对象","id":"5","title":"初识内核对象"},"6":{"body":"TODO 详细内容可参考 Fuchsia 官方文档: 内核对象 。 在这一节中我们将在 Rust 中实现内核对象的概念。","breadcrumbs":"内核对象 » 内核对象简介","id":"6","title":"内核对象简介"},"7":{"body":"首先我们需要安装 Rust 工具链。在 Linux 或 macOS 系统下,只需要用一个命令下载安装 rustup 即可: $ curl https://sh.rustup.rs -sSf | sh 具体安装方法可以参考 官方文档 。 接下来我们用 cargo 创建一个 Rust 库项目: $ cargo new --lib zcore\n$ cd zcore 我们将在这个 crate 中实现所有的内核对象,以库(lib)而不是可执行文件(bin)的形式组织代码,后面我们会依赖单元测试保证代码的正确性。 由于我们会用到一些不稳定(unstable)的语言特性,需要使用 nightly 版本的工具链。在项目根目录下创建一个 rust-toolchain 文件,指明使用的工具链版本: nightly-2020-06-04 这个程序库目前是在你的 Linux 或 macOS 上运行,但有朝一日它会成为一个真正的 OS 在裸机上运行。 为此我们需要移除对标准库的依赖,使其成为一个不依赖当前 OS 功能的库。在 lib.rs 的第一行添加声明: #![no_std]\nextern crate alloc; 现在我们可以尝试运行一下自带的单元测试,编译器可能会自动下载并安装工具链: $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.52s Running target/debug/deps/zcore-dc6d43637bc5df7a running 1 test\ntest tests::it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out","breadcrumbs":"内核对象 » 建立项目","id":"7","title":"建立项目"},"8":{"body":"所有的内核对象有一系列共同的属性和方法,我们称这些方法为对象的公共 接口(Interface) 。 同一种方法在不同类型的对象中可能会有不同的行为,在面向对象语言中我们称其为 多态(Polymorphism) 。 Rust 是一门部分面向对象的语言,我们通常用它的 trait 实现接口和多态。 首先创建一个 KernelObject trait 作为内核对象的公共接口: /// 内核对象公共接口\npub trait KernelObject: Send + Sync { /// 获取对象 ID fn id(&self) -> KoID; /// 获取对象类型名 fn type_name(&self) -> &str; /// 获取对象名称 fn name(&self) -> String; /// 设置对象名称 fn set_name(&self, name: &str);\n} /// 对象 ID 类型\npub type KoID = u64; 这里的 Send + Sync 是一个约束所有 KernelObject 都要满足的前提条件,即它必须是一个 并发对象 。 所谓并发对象指的是 可以安全地被多线程共享访问 。事实上我们的内核本身就是一个共享地址空间的多线程程序,在裸机上每个 CPU 核都可以被视为一个并发执行的线程。 由于内核对象可能被多个线程同时访问,因此它必须是并发对象。","breadcrumbs":"内核对象 » 实现 KernelObject 接口","id":"8","title":"实现 KernelObject 接口"},"9":{"body":"接下来我们实现一个最简单的空对象 DummyObject,并为它实现 KernelObject 接口: use spin::Mutex; /// 空对象\n#[derive(Debug)]\npub struct DummyObject { id: KoID, inner: Mutex,\n} /// `DummyObject` 的内部可变部分\n#[derive(Default, Debug)]\nstruct DummyObjectInner { name: String,\n} 这里我们采用一种 内部可变性 的设计模式:将对象的所有可变的部分封装到一个内部对象 DummyObjectInner 中,并在原对象中用自旋锁 Mutex 把它包起来,剩下的其它字段都是不可变的。 Mutex 会用最简单的方式帮我们处理好并发访问问题:如果有其他人正在访问,我就在这里死等。 数据被 Mutex 包起来之后需要首先使用 lock() 拿到锁之后才能访问。此时并发访问已经安全,因此被包起来的结构自动具有了 Send + Sync 特性。 使用自旋锁引入了新的依赖库 spin ,需要在 Cargo.toml 中加入以下声明: [dependencies]\nspin = \"0.5\" 然后我们为新对象实现构造函数: use alloc::sync::Arc;\nuse core::sync::atomic::*; impl DummyObject { /// 创建一个新 `DummyObject` pub fn new() -> Arc { Arc::new(DummyObject { id: Self::new_koid(), inner: Default::default(), }) } /// 生成一个唯一的 ID fn new_koid() -> KoID { static NEXT_KOID: AtomicU64 = AtomicU64::new(1024); NEXT_KOID.fetch_add(1, Ordering::SeqCst) }\n} 根据文档描述,每个内核对象都有唯一的 ID。为此我们需要实现一个全局的 ID 分配方法。这里采用的方法是用一个静态变量存放下一个待分配 ID 值,每次分配就原子地 +1。 ID 类型使用 u64,保证了数值空间足够大,在有生之年都不用担心溢出问题。在 Zircon 中 ID 从 1024 开始分配,1024 以下保留作内核内部使用。 另外注意这里 new 函数返回类型不是 Self 而是 Arc,这是为了以后方便而做的统一约定。 最后我们为它实现 KernelObject 接口: impl KernelObject for DummyObject { fn id(&self) -> KoID { self.id } fn type_name(&self) -> &str { \"DummyObject\" } fn name(&self) -> String { self.inner.lock().name.clone() } fn set_name(&self, name: &str) { self.inner.lock().name = String::from(name); }\n} 到此为止,我们已经迈出了万里长征第一步,实现了一个最简单的功能。有实现,就要有测试!即使最简单的代码也要保证它的行为符合我们预期。 只有对现有代码进行充分测试,在未来做添加和修改的时候,我们才有信心不会把事情搞砸。俗话讲\"万丈高楼平地起\",把地基打好才能盖摩天大楼。 为了证明上面代码的正确性,我们写一个简单的单元测试,替换掉自带的 it_works 函数: #[cfg(test)]\nmod tests { use super::*; #[test] fn dummy_object() { let o1 = DummyObject::new(); let o2 = DummyObject::new(); assert_ne!(o1.id(), o2.id()); assert_eq!(o1.type_name(), \"DummyObject\"); assert_eq!(o1.name(), \"\"); o1.set_name(\"object1\"); assert_eq!(o1.name(), \"object1\"); }\n} $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.53s Running target/debug/deps/zcore-ae1be84852989b13 running 1 test\ntest tests::dummy_object ... ok 大功告成!让我们用 cargo fmt 命令格式化一下代码,然后记得 git commit 及时保存进展。","breadcrumbs":"内核对象 » 实现一个空对象","id":"9","title":"实现一个空对象"}},"length":35,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"4":{"7":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"5":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"3":{"df":1,"docs":{"9":{"tf":1.0}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"7":{"tf":1.0}}},"6":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"7":{"tf":2.0}}},"1":{".":{"2":{".":{"0":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"2":{"0":{"2":{"0":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}}}}}},"a":{"df":0,"docs":{},"e":{"1":{"b":{"df":0,"docs":{},"e":{"8":{"4":{"8":{"5":{"2":{"9":{"8":{"9":{"b":{"1":{"3":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}}},"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"6":{"4":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"1":{"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}},"df":1,"docs":{"11":{"tf":1.0}}},"c":{"/":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}},"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"10":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.0},"4":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{":":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"'":{"_":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"d":{"c":{"6":{"d":{"4":{"3":{"6":{"3":{"7":{"b":{"c":{"5":{"d":{"df":0,"docs":{},"f":{"7":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"11":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"1":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":2.0}}},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{")":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":2.6457513110645907},"9":{"tf":2.8284271247461903}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{">":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"f":{".":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"n":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":4,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":3.4641016151377544},"8":{"tf":2.0},"9":{"tf":2.6457513110645907}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"1":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"o":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":2.23606797749979},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"!":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"!":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":2,"docs":{"11":{"tf":2.23606797749979},"9":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"c":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.0}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":3.3166247903554},"11":{"tf":2.449489742783178},"8":{"tf":2.0},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":3.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":1,"docs":{"7":{"tf":1.0}},"o":{"df":1,"docs":{"1":{"tf":1.0}}},")":{"df":0,"docs":{},"而":{"df":0,"docs":{},"不":{"df":0,"docs":{},"是":{"df":0,"docs":{},"可":{"df":0,"docs":{},"执":{"df":0,"docs":{},"行":{"df":0,"docs":{},"文":{"df":0,"docs":{},"件":{"df":0,"docs":{},"(":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"9":{"tf":1.7320508075688772}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":3,"docs":{"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"d":{"d":{"(":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"1":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"2":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"9":{"tf":1.0}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"<":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"c":{":":{":":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"1":{"df":1,"docs":{"9":{"tf":1.0}}},":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"11":{"tf":1.0}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"s":{"df":3,"docs":{"1":{"tf":1.4142135623730951},"3":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"c":{"_":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"13":{"tf":1.0},"25":{"tf":1.0},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"s":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{")":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"n":{"d":{"df":3,"docs":{"10":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"d":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":3.0},"12":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},",":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"7":{"tf":2.23606797749979},"9":{"tf":2.449489742783178}},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.0},"11":{"tf":2.8284271247461903},"12":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"6":{"4":{"df":2,"docs":{"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":3,"docs":{"10":{"tf":2.0},"11":{"tf":1.0},"9":{"tf":2.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.0}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"0":{"tf":1.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"2":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"4":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"breadcrumbs":{"root":{"0":{".":{"4":{"7":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"5":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"3":{"df":1,"docs":{"9":{"tf":1.0}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"7":{"tf":1.0}}},"6":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"7":{"tf":2.0}}},"1":{".":{"2":{".":{"0":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"2":{"0":{"2":{"0":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}}}}}},"a":{"df":0,"docs":{},"e":{"1":{"b":{"df":0,"docs":{},"e":{"8":{"4":{"8":{"5":{"2":{"9":{"8":{"9":{"b":{"1":{"3":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}}},"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"6":{"4":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"1":{"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}},"df":1,"docs":{"11":{"tf":1.0}}},"c":{"/":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}},"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"10":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{":":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"'":{"_":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"d":{"c":{"6":{"d":{"4":{"3":{"6":{"3":{"7":{"b":{"c":{"5":{"d":{"df":0,"docs":{},"f":{"7":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"11":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"1":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":2.0}}},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{")":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":2.6457513110645907},"9":{"tf":2.8284271247461903}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{">":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"f":{".":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"n":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":4,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":3.4641016151377544},"8":{"tf":2.0},"9":{"tf":2.6457513110645907}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"1":{"tf":1.0},"3":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"o":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":2.23606797749979},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"!":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"!":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":2,"docs":{"11":{"tf":2.23606797749979},"9":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"c":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":3.3166247903554},"11":{"tf":2.449489742783178},"8":{"tf":2.23606797749979},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":3.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":1,"docs":{"7":{"tf":1.0}},"o":{"df":1,"docs":{"1":{"tf":1.0}}},")":{"df":0,"docs":{},"而":{"df":0,"docs":{},"不":{"df":0,"docs":{},"是":{"df":0,"docs":{},"可":{"df":0,"docs":{},"执":{"df":0,"docs":{},"行":{"df":0,"docs":{},"文":{"df":0,"docs":{},"件":{"df":0,"docs":{},"(":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"9":{"tf":1.7320508075688772}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":3,"docs":{"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"d":{"d":{"(":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"1":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"2":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"9":{"tf":1.0}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"<":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"c":{":":{":":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"1":{"df":1,"docs":{"9":{"tf":1.0}}},":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"11":{"tf":1.0}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"s":{"df":3,"docs":{"1":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"c":{"_":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"13":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"s":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{")":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"n":{"d":{"df":3,"docs":{"10":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"d":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":3.0},"12":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},",":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"7":{"tf":2.23606797749979},"9":{"tf":2.449489742783178}},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.0},"11":{"tf":2.8284271247461903},"12":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"6":{"4":{"df":2,"docs":{"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":3,"docs":{"10":{"tf":2.0},"11":{"tf":1.0},"9":{"tf":2.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"2":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"22":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"4":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"title":{"root":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.0}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"3":{"tf":1.0}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"13":{"tf":1.0},"25":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.0}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"0":{"tf":1.0},"2":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"22":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}}
\ No newline at end of file
+{"doc_urls":["index.html#简明-zcore-教程","index.html#自己动手山寨操作系统自顶向下方法","zcore-intro.html#zcore-整体结构和设计模式","fuchsia.html#fuchsia-os-和-zircon-微内核","ch01-00-object.html#内核对象","ch01-01-kernel-object.html#初识内核对象","ch01-01-kernel-object.html#内核对象简介","ch01-01-kernel-object.html#建立项目","ch01-01-kernel-object.html#实现-kernelobject-接口","ch01-01-kernel-object.html#实现一个空对象","ch01-01-kernel-object.html#实现接口到具体类型的向下转换","ch01-01-kernel-object.html#模拟继承用宏自动生成接口实现代码","ch01-01-kernel-object.html#总结","ch01-02-process-object.html#对象管理器process-对象","ch01-02-process-object.html#句柄和权限","ch01-02-process-object.html#实现第一个内核对象","ch01-02-process-object.html#存储内核对象句柄","ch01-02-process-object.html#根据句柄查找内核对象","ch01-03-channel-object.html#对象传送器channel-对象","ch01-03-channel-object.html#创建一对内核对象","ch01-03-channel-object.html#实现数据传输","ch02-00-task.html#任务管理","ch02-01-zircon-task.html#zircon-任务管理体系","ch02-02-hal-async.html#硬件抽象层与异步运行时","ch02-03-thread-object.html#线程管理thread-对象","ch02-04-process-job-object.html#进程管理process-与-job-对象","ch03-00-memory.html#内存管理","ch03-01-zircon-memory.html#zircon-内存管理模型","ch03-02-vmo.html#物理内存vmo-对象","ch03-03-vmar.html#虚拟内存vmar-对象","ch04-00-userspace.html#用户程序","ch04-01-user-program.html#zircon-用户程序","ch04-02-load-elf.html#加载-elf-文件","ch04-03-context-switch.html#上下文切换","ch04-04-syscall.html#系统调用"],"index":{"documentStore":{"docInfo":{"0":{"body":0,"breadcrumbs":1,"title":1},"1":{"body":20,"breadcrumbs":0,"title":0},"10":{"body":118,"breadcrumbs":0,"title":0},"11":{"body":175,"breadcrumbs":0,"title":0},"12":{"body":7,"breadcrumbs":0,"title":0},"13":{"body":0,"breadcrumbs":1,"title":1},"14":{"body":0,"breadcrumbs":0,"title":0},"15":{"body":0,"breadcrumbs":0,"title":0},"16":{"body":0,"breadcrumbs":0,"title":0},"17":{"body":0,"breadcrumbs":0,"title":0},"18":{"body":0,"breadcrumbs":1,"title":1},"19":{"body":0,"breadcrumbs":0,"title":0},"2":{"body":0,"breadcrumbs":1,"title":1},"20":{"body":0,"breadcrumbs":0,"title":0},"21":{"body":0,"breadcrumbs":0,"title":0},"22":{"body":0,"breadcrumbs":1,"title":1},"23":{"body":0,"breadcrumbs":0,"title":0},"24":{"body":0,"breadcrumbs":1,"title":1},"25":{"body":0,"breadcrumbs":2,"title":2},"26":{"body":0,"breadcrumbs":0,"title":0},"27":{"body":0,"breadcrumbs":1,"title":1},"28":{"body":0,"breadcrumbs":1,"title":1},"29":{"body":0,"breadcrumbs":1,"title":1},"3":{"body":0,"breadcrumbs":3,"title":3},"30":{"body":0,"breadcrumbs":0,"title":0},"31":{"body":0,"breadcrumbs":1,"title":1},"32":{"body":0,"breadcrumbs":1,"title":1},"33":{"body":0,"breadcrumbs":0,"title":0},"34":{"body":0,"breadcrumbs":0,"title":0},"4":{"body":4,"breadcrumbs":0,"title":0},"5":{"body":0,"breadcrumbs":0,"title":0},"6":{"body":3,"breadcrumbs":0,"title":0},"7":{"body":67,"breadcrumbs":0,"title":0},"8":{"body":35,"breadcrumbs":1,"title":1},"9":{"body":138,"breadcrumbs":0,"title":0}},"docs":{"0":{"body":"","breadcrumbs":"简明 zCore 教程","id":"0","title":"简明 zCore 教程"},"1":{"body":"zCore 是用 Rust 语言重写的 Zircon 微内核,它是 Google 正在开发的 Fuchsia OS 中的底层内核。 本教程基于 zCore 的真实开发历史,还原其开发过程。带领读者一步一步用 Rust 实现自己的 Zircon 内核,最终能够运行原生的 shell 程序。 在此过程中我们将体会 Zircon 微内核的设计理念,感受如何用 Rust 语言以一种现代的方式编写系统软件,在项目中实现理论与实践的融合。 与传统操作系统开发不同的是,zCore 使用一种自顶向下的方法:首先基于宿主系统已有的功能,在用户态实现一个能够工作的 libOS,然后再逐步替换底层实现, \"移植\"回裸机环境中运行。因此我们更关注系统的整体设计,从高层视角看待 OS 如何为用户提供服务,而不纠结于底层硬件细节。 鉴于此,本教程假设读者了解操作系统基本概念和原理,具有常用的 Linux 系统使用经验,并且会使用 Rust 语言编写简单程序。 如果读者不熟悉操作系统和 Rust 语言,希望以自底向上方法从零构建操作系统, rCore Tutorial 可能是更好的选择。 如果你准备好了,让我们开始吧!","breadcrumbs":"自己动手山寨操作系统:自顶向下方法","id":"1","title":"自己动手山寨操作系统:自顶向下方法"},"10":{"body":"在系统调用中,用户进程会传入一个内核对象的句柄,然后内核会根据系统调用的类型,尝试将其转换成特定类型的对象。 于是这里产生了一个很重要的需求:将接口 Arc 转换成具体类型的结构 Arc where T: KernelObject。 这种操作在面向对象语言中称为 向下转换(downcast) 。 在大部分编程语言中,向下转换都是一件非常轻松的事情。例如在 C/C++ 中,我们可以这样写: struct KernelObject {...};\nstruct DummyObject: KernelObject {...}; KernelObject *base = ...;\n// C 风格:强制类型转换\nDummyObject *dummy = (DummyObject*)(base);\n// C++ 风格:动态类型转换\nDummyObject *dummy = dynamic_cast(base); 但在 Rust 中,由于其 trait 模型的限制,向下转换并不是一件容易的事情。 虽然标准库中提供了 Any trait,部分实现了动态类型的功能,但实际操作起来却困难重重。 不信邪的同学可以自己折腾一下: # use core::any::Any;\n# use alloc::sync::Arc;\n#\ntrait KernelObject: Any + Send + Sync {}\nfn downcast_v1(object: Arc) -> Arc { object.downcast::().unwrap()\n}\nfn downcast_v2(object: Arc) -> Arc { let object: Arc = object; object.downcast::().unwrap()\n} 当然这个问题也困扰了 Rust 社区中的很多人。目前已经有人提出了一套不错的解决方案,就是我们接下来要引入的 downcast-rs 库: [dependencies]\ndowncast-rs = { version = \"1.2.0\", default-features = false } (题外话:这个库原来是不支持 no_std 的,zCore 有这个需求,于是就顺便帮他实现了一把) 按照它文档的描述,我们要为自己的接口实现向下转换,只需以下修改: // src/object/mod.rs\nuse core::fmt::Debug;\nuse downcast_rs::{impl_downcast, DowncastSync}; pub trait KernelObject: DowncastSync + Debug {...}\nimpl_downcast!(sync KernelObject); 其中 DowncastSync 代替了原来的 Send + Sync,Debug 用于出错时输出调试信息。 impl_downcast! 宏用来帮我们自动生成转换函数,然后就可以用 downcast_arc 来对 Arc 做向下转换了。我们直接来测试一把: // src/object/object.rs\n#[test]\nfn downcast() { let dummy = DummyObject::new(); let object: Arc = dummy; let _result: Arc = object.downcast_arc::().unwrap();\n} $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.47s Running target/debug/deps/zcore-ae1be84852989b13 running 2 tests\ntest object::downcast ... ok\ntest object::tests::dummy_object ... ok","breadcrumbs":"内核对象 » 实现接口到具体类型的向下转换","id":"10","title":"实现接口到具体类型的向下转换"},"11":{"body":"上面我们已经完整实现了一个内核对象,代码看起来很简洁。但当我们要实现更多对象的时候,就会发现一个问题: 这些对象拥有一些公共属性,接口方法也有共同的实现。 在传统 OOP 语言中,我们通常使用 继承(inheritance) 来复用这些公共代码:子类 B 可以继承父类 A,然后自动拥有父类的所有字段和方法。 继承是一个很强大的功能,但在长期实践中人们也逐渐发现了它的弊端。有兴趣的读者可以看一看知乎上的探讨: 面向对象编程的弊端是什么? 。 经典著作《设计模式》中就鼓励大家 使用组合代替继承 。而一些现代的编程语言,如 Go 和 Rust,甚至直接抛弃了继承。在 Rust 中,通常使用组合结构和 Deref trait 来部分模拟继承。 继承野蛮,trait 文明。 —— 某 Rust 爱好者 接下来我们模仿 downcast-rs 库的做法,使用一种基于宏的代码生成方案,来实现 KernelObject 的继承。 当然这只是抛砖引玉,如果读者自己实现了,或者了解到社区中有更好的解决方案,也欢迎指出。 具体做法是这样的: 使用一个 struct 来提供所有的公共属性和方法,作为所有子类的第一个成员。 为子类实现 trait 接口,所有方法直接委托给内部 struct 完成。这部分使用宏来自动生成模板代码。 而所谓的内部 struct,其实就是我们上面实现的 DummyObject。为了更好地体现它的功能,我们给他改个名叫 KObjectBase: // src/object/mod.rs\n/// 内核对象核心结构\npub struct KObjectBase { /// 对象 ID pub id: KoID, inner: Mutex,\n} /// `KObjectBase` 的内部可变部分\n#[derive(Default)]\nstruct KObjectBaseInner { name: String,\n} 接下来我们把它的构造函数改为实现 Default trait,并且公共属性和方法都指定为 pub: // src/object/mod.rs\nimpl Default for KObjectBase { /// 创建一个新 `KObjectBase` fn default() -> Self { KObjectBase { id: Self::new_koid(), inner: Default::default(), } }\n}\nimpl KObjectBase { /// 生成一个唯一的 ID fn new_koid() -> KoID {...} /// 获取对象名称 pub fn name(&self) -> String {...} /// 设置对象名称 pub fn set_name(&self, name: &str) {...}\n} 最后来写一个魔法的宏! // src/object/mod.rs\n/// 为内核对象 struct 自动实现 `KernelObject` trait 的宏。\n#[macro_export] // 导出宏,可在 crate 外部使用\nmacro_rules! impl_kobject { // 匹配类型名,并可以提供函数覆盖默认实现 ($class:ident $( $fn:tt )*) => { // 为对象实现 KernelObject trait,方法直接转发到内部 struct impl KernelObject for $class { fn id(&self) -> KoID { // 直接访问内部的 pub 属性 self.base.id } fn type_name(&self) -> &str { // 用 stringify! 宏将输入转成字符串 stringify!($class) } // 注意宏里面的类型要写完整路径,例如:alloc::string::String fn name(&self) -> alloc::string::String { self.base.name() } fn set_name(&self, name: &str){ // 直接访问内部的 pub 方法 self.base.set_name(name) } // 可以传入任意数量的函数,覆盖 trait 的默认实现 $( $fn )* } // 为对象实现 Debug trait impl core::fmt::Debug for $class { fn fmt( &self, f: &mut core::fmt::Formatter<'_>, ) -> core::result::Result<(), core::fmt::Error> { // 输出对象类型、ID 和名称 f.debug_tuple(&stringify!($class)) .field(&self.id()) .field(&self.name()) .finish() } } };\n} 轮子已经造好了!让我们看看如何用它方便地实现一个内核对象,仍以 DummyObject 为例: // src/object/mod.rs\n/// 空对象\npub struct DummyObject { // 其中必须包含一个名为 `base` 的 `KObjectBase` base: KObjectBase,\n} // 使用刚才的宏,声明其为内核对象,自动生成必要的代码\nimpl_kobject!(DummyObject); impl DummyObject { /// 创建一个新 `DummyObject` pub fn new() -> Arc { Arc::new(DummyObject { base: KObjectBase::default(), }) }\n} 是不是方便了很多?最后按照惯例,用单元测试检验实现的正确性: // src/object/mod.rs\n#[test]\nfn impl_kobject() { use alloc::format; let dummy = DummyObject::new(); let object: Arc = dummy; assert_eq!(object.type_name(), \"DummyObject\"); assert_eq!(object.name(), \"\"); object.set_name(\"dummy\"); assert_eq!(object.name(), \"dummy\"); assert_eq!( format!(\"{:?}\", object), format!(\"DummyObject({}, \\\"dummy\\\")\", object.id()) ); let _result: Arc = object.downcast_arc::().unwrap();\n} 有兴趣的读者可以继续探索使用功能更强大的 过程宏(proc_macro) ,进一步简化实现新内核对象所需的模板代码。 如果能把上面的代码块缩小成下面这两行,就更加完美了: #[KernelObject]\npub struct DummyObject;","breadcrumbs":"内核对象 » 模拟继承:用宏自动生成接口实现代码","id":"11","title":"模拟继承:用宏自动生成接口实现代码"},"12":{"body":"在这一节中我们用 Rust 语言实现了 Zircon 最核心的 内核对象 概念。在此过程中涉及到 Rust 的一系列语言特性和设计模式: 使用 trait 实现接口 使用 内部可变性 模式实现并发对象 基于社区解决方案实现 trait 到 struct 的 向下转换 使用组合模拟继承,并使用 宏 实现模板代码的自动生成 由于 Rust 独特的 面向对象编程特性 ,我们在实现内核对象的过程中遇到了一定的挑战。 不过万事开头难,解决这些问题为整个项目打下了坚实基础,后面实现新的内核对象就会变得简单很多。 在下一节中,我们将介绍内核对象相关的另外两个概念:句柄和权限,并实现内核对象的存储和访问。","breadcrumbs":"内核对象 » 总结","id":"12","title":"总结"},"13":{"body":"","breadcrumbs":"内核对象 » 对象管理器:Process 对象","id":"13","title":"对象管理器:Process 对象"},"14":{"body":"","breadcrumbs":"内核对象 » 句柄和权限","id":"14","title":"句柄和权限"},"15":{"body":"","breadcrumbs":"内核对象 » 实现第一个内核对象","id":"15","title":"实现第一个内核对象"},"16":{"body":"","breadcrumbs":"内核对象 » 存储内核对象句柄","id":"16","title":"存储内核对象句柄"},"17":{"body":"","breadcrumbs":"内核对象 » 根据句柄查找内核对象","id":"17","title":"根据句柄查找内核对象"},"18":{"body":"","breadcrumbs":"内核对象 » 对象传送器:Channel 对象","id":"18","title":"对象传送器:Channel 对象"},"19":{"body":"","breadcrumbs":"内核对象 » 创建一对内核对象","id":"19","title":"创建一对内核对象"},"2":{"body":"","breadcrumbs":"zCore 整体结构和设计模式","id":"2","title":"zCore 整体结构和设计模式"},"20":{"body":"","breadcrumbs":"内核对象 » 实现数据传输","id":"20","title":"实现数据传输"},"21":{"body":"","breadcrumbs":"任务管理","id":"21","title":"任务管理"},"22":{"body":"","breadcrumbs":"任务管理 » Zircon 任务管理体系","id":"22","title":"Zircon 任务管理体系"},"23":{"body":"","breadcrumbs":"任务管理 » 硬件抽象层与异步运行时","id":"23","title":"硬件抽象层与异步运行时"},"24":{"body":"","breadcrumbs":"任务管理 » 线程管理:Thread 对象","id":"24","title":"线程管理:Thread 对象"},"25":{"body":"","breadcrumbs":"任务管理 » 进程管理:Process 与 Job 对象","id":"25","title":"进程管理:Process 与 Job 对象"},"26":{"body":"","breadcrumbs":"内存管理","id":"26","title":"内存管理"},"27":{"body":"","breadcrumbs":"内存管理 » Zircon 内存管理模型","id":"27","title":"Zircon 内存管理模型"},"28":{"body":"","breadcrumbs":"内存管理 » 物理内存:VMO 对象","id":"28","title":"物理内存:VMO 对象"},"29":{"body":"","breadcrumbs":"内存管理 » 虚拟内存:VMAR 对象","id":"29","title":"虚拟内存:VMAR 对象"},"3":{"body":"","breadcrumbs":"Fuchsia OS 和 Zircon 微内核","id":"3","title":"Fuchsia OS 和 Zircon 微内核"},"30":{"body":"","breadcrumbs":"用户程序","id":"30","title":"用户程序"},"31":{"body":"","breadcrumbs":"用户程序 » Zircon 用户程序","id":"31","title":"Zircon 用户程序"},"32":{"body":"","breadcrumbs":"用户程序 » 加载 ELF 文件","id":"32","title":"加载 ELF 文件"},"33":{"body":"","breadcrumbs":"用户程序 » 上下文切换","id":"33","title":"上下文切换"},"34":{"body":"","breadcrumbs":"用户程序 » 系统调用","id":"34","title":"系统调用"},"4":{"body":"Zircon 是一个基于内核对象的系统。系统的功能被划分到若干组内核对象中。 作为一切的开始,本章首先构造了一个内核对象框架,作为后面实现的基础。 然后我们实现第一个内核对象 —— Process,它是所有对象的容器,也是将来我们操作对象的入口点。 最后会实现一个稍微复杂但是极其重要的对象 Channel,它是进程间通信( IPC )的基础设施,也是传送对象的唯一管道。","breadcrumbs":"内核对象","id":"4","title":"内核对象"},"5":{"body":"","breadcrumbs":"内核对象 » 初识内核对象","id":"5","title":"初识内核对象"},"6":{"body":"TODO 详细内容可参考 Fuchsia 官方文档: 内核对象 。 在这一节中我们将在 Rust 中实现内核对象的概念。","breadcrumbs":"内核对象 » 内核对象简介","id":"6","title":"内核对象简介"},"7":{"body":"首先我们需要安装 Rust 工具链。在 Linux 或 macOS 系统下,只需要用一个命令下载安装 rustup 即可: $ curl https://sh.rustup.rs -sSf | sh 具体安装方法可以参考 官方文档 。 接下来我们用 cargo 创建一个 Rust 库项目: $ cargo new --lib zcore\n$ cd zcore 我们将在这个 crate 中实现所有的内核对象,以库(lib)而不是可执行文件(bin)的形式组织代码,后面我们会依赖单元测试保证代码的正确性。 由于我们会用到一些不稳定(unstable)的语言特性,需要使用 nightly 版本的工具链。在项目根目录下创建一个 rust-toolchain 文件,指明使用的工具链版本: nightly-2020-06-04 这个程序库目前是在你的 Linux 或 macOS 上运行,但有朝一日它会成为一个真正的 OS 在裸机上运行。 为此我们需要移除对标准库的依赖,使其成为一个不依赖当前 OS 功能的库。在 lib.rs 的第一行添加声明: // src/lib.rs\n#![no_std]\nextern crate alloc; 现在我们可以尝试运行一下自带的单元测试,编译器可能会自动下载并安装工具链: $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.52s Running target/debug/deps/zcore-dc6d43637bc5df7a running 1 test\ntest tests::it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out","breadcrumbs":"内核对象 » 建立项目","id":"7","title":"建立项目"},"8":{"body":"所有的内核对象有一系列共同的属性和方法,我们称这些方法为对象的公共 接口(Interface) 。 同一种方法在不同类型的对象中可能会有不同的行为,在面向对象语言中我们称其为 多态(Polymorphism) 。 Rust 是一门部分面向对象的语言,我们通常用它的 trait 实现接口和多态。 首先创建一个 KernelObject trait 作为内核对象的公共接口: // src/object/mod.rs\n/// 内核对象公共接口\npub trait KernelObject: Send + Sync { /// 获取对象 ID fn id(&self) -> KoID; /// 获取对象类型名 fn type_name(&self) -> &str; /// 获取对象名称 fn name(&self) -> String; /// 设置对象名称 fn set_name(&self, name: &str);\n} /// 对象 ID 类型\npub type KoID = u64; 这里的 Send + Sync 是一个约束所有 KernelObject 都要满足的前提条件,即它必须是一个 并发对象 。 所谓并发对象指的是 可以安全地被多线程共享访问 。事实上我们的内核本身就是一个共享地址空间的多线程程序,在裸机上每个 CPU 核都可以被视为一个并发执行的线程。 由于内核对象可能被多个线程同时访问,因此它必须是并发对象。","breadcrumbs":"内核对象 » 实现 KernelObject 接口","id":"8","title":"实现 KernelObject 接口"},"9":{"body":"接下来我们实现一个最简单的空对象 DummyObject,并为它实现 KernelObject 接口: // src/object/object.rs\nuse spin::Mutex; /// 空对象\n#[derive(Debug)]\npub struct DummyObject { id: KoID, inner: Mutex,\n} /// `DummyObject` 的内部可变部分\n#[derive(Default, Debug)]\nstruct DummyObjectInner { name: String,\n} 这里我们采用一种 内部可变性 的设计模式:将对象的所有可变的部分封装到一个内部对象 DummyObjectInner 中,并在原对象中用自旋锁 Mutex 把它包起来,剩下的其它字段都是不可变的。 Mutex 会用最简单的方式帮我们处理好并发访问问题:如果有其他人正在访问,我就在这里死等。 数据被 Mutex 包起来之后需要首先使用 lock() 拿到锁之后才能访问。此时并发访问已经安全,因此被包起来的结构自动具有了 Send + Sync 特性。 使用自旋锁引入了新的依赖库 spin ,需要在 Cargo.toml 中加入以下声明: [dependencies]\nspin = \"0.5\" 然后我们为新对象实现构造函数: // src/object/object.rs\nuse alloc::sync::Arc;\nuse core::sync::atomic::*; impl DummyObject { /// 创建一个新 `DummyObject` pub fn new() -> Arc { Arc::new(DummyObject { id: Self::new_koid(), inner: Default::default(), }) } /// 生成一个唯一的 ID fn new_koid() -> KoID { static NEXT_KOID: AtomicU64 = AtomicU64::new(1024); NEXT_KOID.fetch_add(1, Ordering::SeqCst) }\n} 根据文档描述,每个内核对象都有唯一的 ID。为此我们需要实现一个全局的 ID 分配方法。这里采用的方法是用一个静态变量存放下一个待分配 ID 值,每次分配就原子地 +1。 ID 类型使用 u64,保证了数值空间足够大,在有生之年都不用担心溢出问题。在 Zircon 中 ID 从 1024 开始分配,1024 以下保留作内核内部使用。 另外注意这里 new 函数返回类型不是 Self 而是 Arc,这是为了以后方便而做的统一约定。 最后我们为它实现 KernelObject 接口: // src/object/object.rs\nimpl KernelObject for DummyObject { fn id(&self) -> KoID { self.id } fn type_name(&self) -> &str { \"DummyObject\" } fn name(&self) -> String { self.inner.lock().name.clone() } fn set_name(&self, name: &str) { self.inner.lock().name = String::from(name); }\n} 到此为止,我们已经迈出了万里长征第一步,实现了一个最简单的功能。有实现,就要有测试!即使最简单的代码也要保证它的行为符合我们预期。 只有对现有代码进行充分测试,在未来做添加和修改的时候,我们才有信心不会把事情搞砸。俗话讲\"万丈高楼平地起\",把地基打好才能盖摩天大楼。 为了证明上面代码的正确性,我们写一个简单的单元测试,替换掉自带的 it_works 函数: // src/object/object.rs\n#[cfg(test)]\nmod tests { use super::*; #[test] fn dummy_object() { let o1 = DummyObject::new(); let o2 = DummyObject::new(); assert_ne!(o1.id(), o2.id()); assert_eq!(o1.type_name(), \"DummyObject\"); assert_eq!(o1.name(), \"\"); o1.set_name(\"object1\"); assert_eq!(o1.name(), \"object1\"); }\n} $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.53s Running target/debug/deps/zcore-ae1be84852989b13 running 1 test\ntest tests::dummy_object ... ok 大功告成!让我们用 cargo fmt 命令格式化一下代码,然后记得 git commit 及时保存进展。","breadcrumbs":"内核对象 » 实现一个空对象","id":"9","title":"实现一个空对象"}},"length":35,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"4":{"7":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"5":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"3":{"df":1,"docs":{"9":{"tf":1.0}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"7":{"tf":1.0}}},"6":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"7":{"tf":2.0}}},"1":{".":{"2":{".":{"0":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"2":{"0":{"2":{"0":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}}}}}},"a":{"df":0,"docs":{},"e":{"1":{"b":{"df":0,"docs":{},"e":{"8":{"4":{"8":{"5":{"2":{"9":{"8":{"9":{"b":{"1":{"3":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}}},"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"6":{"4":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"1":{"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}},"df":1,"docs":{"11":{"tf":1.0}}},"c":{"/":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}},"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"10":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.0},"4":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{":":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"'":{"_":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"d":{"c":{"6":{"d":{"4":{"3":{"6":{"3":{"7":{"b":{"c":{"5":{"d":{"df":0,"docs":{},"f":{"7":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"11":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"1":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":2.0}}},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{")":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":2.6457513110645907},"9":{"tf":2.8284271247461903}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{">":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"f":{".":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"n":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":4,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":3.4641016151377544},"8":{"tf":2.0},"9":{"tf":2.6457513110645907}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"1":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"o":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":2.23606797749979},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"!":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"!":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":2,"docs":{"11":{"tf":2.23606797749979},"9":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"c":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.0}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":3.3166247903554},"11":{"tf":2.449489742783178},"8":{"tf":2.0},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":3.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":1,"docs":{"7":{"tf":1.0}},"o":{"df":1,"docs":{"1":{"tf":1.0}}},")":{"df":0,"docs":{},"而":{"df":0,"docs":{},"不":{"df":0,"docs":{},"是":{"df":0,"docs":{},"可":{"df":0,"docs":{},"执":{"df":0,"docs":{},"行":{"df":0,"docs":{},"文":{"df":0,"docs":{},"件":{"df":0,"docs":{},"(":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"9":{"tf":1.7320508075688772}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":3,"docs":{"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"d":{"d":{"(":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"1":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"2":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"9":{"tf":1.0}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"<":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"c":{":":{":":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"1":{"df":1,"docs":{"9":{"tf":1.0}}},":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"11":{"tf":1.0}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"s":{"df":3,"docs":{"1":{"tf":1.4142135623730951},"3":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"c":{"_":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"13":{"tf":1.0},"25":{"tf":1.0},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"s":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{")":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"n":{"d":{"df":3,"docs":{"10":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}},"r":{"c":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":2.23606797749979},"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":2.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":3.0},"12":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},",":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"7":{"tf":2.23606797749979},"9":{"tf":2.449489742783178}},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.0},"11":{"tf":2.8284271247461903},"12":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"6":{"4":{"df":2,"docs":{"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":3,"docs":{"10":{"tf":2.0},"11":{"tf":1.0},"9":{"tf":2.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.0}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"0":{"tf":1.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"2":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"4":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"breadcrumbs":{"root":{"0":{".":{"4":{"7":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"5":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"3":{"df":1,"docs":{"9":{"tf":1.0}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"7":{"tf":1.0}}},"6":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"7":{"tf":2.0}}},"1":{".":{"2":{".":{"0":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"2":{"0":{"2":{"0":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}}}}}},"a":{"df":0,"docs":{},"e":{"1":{"b":{"df":0,"docs":{},"e":{"8":{"4":{"8":{"5":{"2":{"9":{"8":{"9":{"b":{"1":{"3":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"r":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}}},"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"!":{"(":{"df":0,"docs":{},"o":{"1":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"6":{"4":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"1":{"0":{"2":{"4":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}},"df":1,"docs":{"11":{"tf":1.0}}},"c":{"/":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}},"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":1,"docs":{"10":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{":":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{":":{":":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"'":{"_":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"d":{"c":{"6":{"d":{"4":{"3":{"6":{"3":{"7":{"b":{"c":{"5":{"d":{"df":0,"docs":{},"f":{"7":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"11":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"1":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"2":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"10":{"tf":2.0},"11":{"tf":2.0}}},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{")":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":2.6457513110645907},"9":{"tf":2.8284271247461903}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"*":{">":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"f":{".":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"t":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}}},"n":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":4,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":3.4641016151377544},"8":{"tf":2.0},"9":{"tf":2.6457513110645907}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"!":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":3,"docs":{"1":{"tf":1.0},"3":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"o":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"d":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":2.23606797749979},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"!":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"!":{"(":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":2,"docs":{"11":{"tf":2.23606797749979},"9":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"c":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":3.3166247903554},"11":{"tf":2.449489742783178},"8":{"tf":2.23606797749979},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":3.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":1,"docs":{"7":{"tf":1.0}},"o":{"df":1,"docs":{"1":{"tf":1.0}}},")":{"df":0,"docs":{},"而":{"df":0,"docs":{},"不":{"df":0,"docs":{},"是":{"df":0,"docs":{},"可":{"df":0,"docs":{},"执":{"df":0,"docs":{},"行":{"df":0,"docs":{},"文":{"df":0,"docs":{},"件":{"df":0,"docs":{},"(":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"1":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"11":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"9":{"tf":1.7320508075688772}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":3,"docs":{"11":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"d":{"d":{"(":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"1":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"1":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":1,"docs":{"9":{"tf":1.0}}},"2":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"9":{"tf":1.0}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"<":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"r":{"c":{":":{":":{"<":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{">":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"\"":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"1":{"df":1,"docs":{"9":{"tf":1.0}}},":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"11":{"tf":1.0}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"s":{"df":3,"docs":{"1":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"c":{"_":{"df":0,"docs":{},"m":{"a":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"13":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":4,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"s":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"9":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"(":{")":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"11":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"11":{"tf":1.4142135623730951},"9":{"tf":1.0}}}},"n":{"d":{"df":3,"docs":{"10":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"h":{"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}},"r":{"c":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{".":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":2.23606797749979},"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":2.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"10":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"(":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":3,"docs":{"11":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}},"y":{"!":{"(":{"$":{"c":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"11":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":3.0},"12":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},",":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"10":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"7":{"tf":2.23606797749979},"9":{"tf":2.449489742783178}},"s":{":":{":":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":2.0},"11":{"tf":2.8284271247461903},"12":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"11":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"6":{"4":{"df":2,"docs":{"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"10":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":3,"docs":{"10":{"tf":2.0},"11":{"tf":1.0},"9":{"tf":2.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"10":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.7320508075688772},"10":{"tf":1.0},"2":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"22":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"4":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"title":{"root":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"32":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"25":{"tf":1.0}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"3":{"tf":1.0}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"13":{"tf":1.0},"25":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"28":{"tf":1.0}}}}},"z":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"0":{"tf":1.0},"2":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"22":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}}
\ No newline at end of file
diff --git a/theme-dawn.js b/theme-dawn.js
new file mode 100644
index 0000000..af391d0
--- /dev/null
+++ b/theme-dawn.js
@@ -0,0 +1,7 @@
+ace.define("ace/theme/dawn",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-dawn",t.cssText=".ace-dawn .ace_gutter {background: #ebebeb;color: #333}.ace-dawn .ace_print-margin {width: 1px;background: #e8e8e8}.ace-dawn {background-color: #F9F9F9;color: #080808}.ace-dawn .ace_cursor {color: #000000}.ace-dawn .ace_marker-layer .ace_selection {background: rgba(39, 95, 255, 0.30)}.ace-dawn.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #F9F9F9;}.ace-dawn .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-dawn .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(75, 75, 126, 0.50)}.ace-dawn .ace_marker-layer .ace_active-line {background: rgba(36, 99, 180, 0.12)}.ace-dawn .ace_gutter-active-line {background-color : #dcdcdc}.ace-dawn .ace_marker-layer .ace_selected-word {border: 1px solid rgba(39, 95, 255, 0.30)}.ace-dawn .ace_invisible {color: rgba(75, 75, 126, 0.50)}.ace-dawn .ace_keyword,.ace-dawn .ace_meta {color: #794938}.ace-dawn .ace_constant,.ace-dawn .ace_constant.ace_character,.ace-dawn .ace_constant.ace_character.ace_escape,.ace-dawn .ace_constant.ace_other {color: #811F24}.ace-dawn .ace_invalid.ace_illegal {text-decoration: underline;font-style: italic;color: #F8F8F8;background-color: #B52A1D}.ace-dawn .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #B52A1D}.ace-dawn .ace_support {color: #691C97}.ace-dawn .ace_support.ace_constant {color: #B4371F}.ace-dawn .ace_fold {background-color: #794938;border-color: #080808}.ace-dawn .ace_list,.ace-dawn .ace_markup.ace_list,.ace-dawn .ace_support.ace_function {color: #693A17}.ace-dawn .ace_storage {font-style: italic;color: #A71D5D}.ace-dawn .ace_string {color: #0B6125}.ace-dawn .ace_string.ace_regexp {color: #CF5628}.ace-dawn .ace_comment {font-style: italic;color: #5A525F}.ace-dawn .ace_heading,.ace-dawn .ace_markup.ace_heading {color: #19356D}.ace-dawn .ace_variable {color: #234A97}.ace-dawn .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}); (function() {
+ ace.require(["ace/theme/dawn"], function(m) {
+ if (typeof module == "object" && typeof exports == "object" && module) {
+ module.exports = m;
+ }
+ });
+ })();
diff --git a/theme-tomorrow_night.js b/theme-tomorrow_night.js
new file mode 100644
index 0000000..7620b2a
--- /dev/null
+++ b/theme-tomorrow_night.js
@@ -0,0 +1,7 @@
+ace.define("ace/theme/tomorrow_night",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-tomorrow-night",t.cssText=".ace-tomorrow-night .ace_gutter {background: #25282c;color: #C5C8C6}.ace-tomorrow-night .ace_print-margin {width: 1px;background: #25282c}.ace-tomorrow-night {background-color: #1D1F21;color: #C5C8C6}.ace-tomorrow-night .ace_cursor {color: #AEAFAD}.ace-tomorrow-night .ace_marker-layer .ace_selection {background: #373B41}.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1D1F21;}.ace-tomorrow-night .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #4B4E55}.ace-tomorrow-night .ace_marker-layer .ace_active-line {background: #282A2E}.ace-tomorrow-night .ace_gutter-active-line {background-color: #282A2E}.ace-tomorrow-night .ace_marker-layer .ace_selected-word {border: 1px solid #373B41}.ace-tomorrow-night .ace_invisible {color: #4B4E55}.ace-tomorrow-night .ace_keyword,.ace-tomorrow-night .ace_meta,.ace-tomorrow-night .ace_storage,.ace-tomorrow-night .ace_storage.ace_type,.ace-tomorrow-night .ace_support.ace_type {color: #B294BB}.ace-tomorrow-night .ace_keyword.ace_operator {color: #8ABEB7}.ace-tomorrow-night .ace_constant.ace_character,.ace-tomorrow-night .ace_constant.ace_language,.ace-tomorrow-night .ace_constant.ace_numeric,.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night .ace_support.ace_constant,.ace-tomorrow-night .ace_variable.ace_parameter {color: #DE935F}.ace-tomorrow-night .ace_constant.ace_other {color: #CED1CF}.ace-tomorrow-night .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night .ace_fold {background-color: #81A2BE;border-color: #C5C8C6}.ace-tomorrow-night .ace_entity.ace_name.ace_function,.ace-tomorrow-night .ace_support.ace_function,.ace-tomorrow-night .ace_variable {color: #81A2BE}.ace-tomorrow-night .ace_support.ace_class,.ace-tomorrow-night .ace_support.ace_type {color: #F0C674}.ace-tomorrow-night .ace_heading,.ace-tomorrow-night .ace_markup.ace_heading,.ace-tomorrow-night .ace_string {color: #B5BD68}.ace-tomorrow-night .ace_entity.ace_name.ace_tag,.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night .ace_meta.ace_tag,.ace-tomorrow-night .ace_string.ace_regexp,.ace-tomorrow-night .ace_variable {color: #CC6666}.ace-tomorrow-night .ace_comment {color: #969896}.ace-tomorrow-night .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}); (function() {
+ ace.require(["ace/theme/tomorrow_night"], function(m) {
+ if (typeof module == "object" && typeof exports == "object" && module) {
+ module.exports = m;
+ }
+ });
+ })();
diff --git a/zcore-intro.html b/zcore-intro.html
index d801a51..99ab737 100644
--- a/zcore-intro.html
+++ b/zcore-intro.html
@@ -207,6 +207,12 @@
+
+
+
+
+
+