<div class="markdown-here-wrapper" data-md-url="https://i.cnblogs.com/EditPosts.aspx?postid=9911526">
<h1 id="orm" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: black; font-size: 24px; border-bottom: 2px solid #aaaaaa;">ORM
<blockquote style="margin: 1.2em 0px; border-left: 4px solid #dddddd; padding: 0px 1em; color: #777777; quotes: none;">
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">ORM即Object Relational Mapping(对象关系映射)对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的—“虚拟对象数据库”。
: {
: ,: os.path.join(BASE_DIR,),}
}
: {
: ,:,: ,: ,: ,: ,}
}
.py文件中加上
pymysql pymysql.install_as_MySQLdb()
:
name=models.CharField(max_length=)
num=models.IntegerField()
school=models.ForeignKey(school,on_delete=models.CASCADE)
teacher=models.ManyToManyField(teacher)
:
self.name
:
name = models.CharField(max_length=)
:
self.name
<span class="hljs-class"><span class="hljs-keyword" style="color: #6666ea;">class <span class="hljs-title" style="color: #766e6b;">teacher<span class="hljs-params" style="color: #df5320;">(models.Model):
name = models.CharField(max_length=<span class="hljs-number" style="color: #df5320;">20)
<span class="hljs-function" style="color: #407ee7;"><span class="hljs-keyword" style="color: #6666ea;">def <span class="hljs-title" style="color: #766e6b;">str<span class="hljs-params" style="color: #df5320;">(self):
<span class="hljs-keyword" style="color: #6666ea;">return self.name
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">首先在models.py中简单的创建了三个表,然后需要在当前项目有manage.py文件目录下的cmd或者pycharm中的terminal下执行如下命令来同步数据库:
python manage.py migrate



blog.models *
,num=,school=school_obj)
或者
student.objects.create(**{:,=,=obj
name=<span class="hljs-string" style="color: #5ab738;">"student1",school=school_obj
)
student_obk.save()
或者
student_obj=student()
student_obj.name=<span class="hljs-string" style="color: #5ab738;">"student1"
student_obj.num=<span class="hljs-number" style="color: #df5320;">1
student_obj.school=school_obj
<h6 id="2-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">2.一对多关系的字段
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">直接设置外键的id在student.objects.create中加
)
student.objects.create(**{:,:,:obj})
)
teacher2=teacher.objects.get(id=)
student1=student.objects.get(id=)
student1.teacher.add(teacher1,teacher2)
,id__lt=)
student1=student.objects.get(id=)
student1.teacher.add(*teacher1)
)[]
student1=student.objects.filter(id__gt=)
teacher1.student_set.add(*student1)
)[]
student1.teacher.add()
)[].delete()
)[]
student1.teacher.clear()
)
student1.name=
student1.save()
``
或者
student1=student.objects.filter(id=<span class="hljs-number" style="color: #df5320;">2</span>).update(name=<span class="hljs-string" style="color: #5ab738;">"sfencs"</span>)
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">update是queryset的方法,可以更新多行数据。save方法是将一行的所有字段都重新存储一遍,update方法只将要改变的字段存储,效率更高。</p>
<h6 id="2-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">2.多对多表的字段的修改</h6>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student_obj.teacher.set([<span class="hljs-number" style="color: #df5320;">1</span>,<span class="hljs-number" style="color: #df5320;">2</span>,<span class="hljs-number" style="color: #df5320;">3</span>])<span class="hljs-comment" style="color: #766e6b;"># set里是一个列表</span>
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">先删除,再添加</p>
<h3 id="4-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: black; font-size: 20px; border-bottom: 1px solid #aaaaaa;">4.查询</h3>
<h6 id="1-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">1.查询的有关函数</h6>
<ul style="margin: 1.2em 0px; padding-left: 2em; list-style-type: square; font-size: 16px;">
<li style="margin: 0.5em 0px; font-size: 16px;">filter(**kwargs)筛选</li>
<li style="margin: 0.5em 0px; font-size: 16px;">all()所有结果</li>
<li style="margin: 0.5em 0px; font-size: 16px;">get(**kwargs)得到一个结果,如果结果多于一个或没有都会报错</li>
</ul>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">如果查询结果是一个结果集,即QuerySet对象,那么它还有以下方法</p>
<ul style="margin: 1.2em 0px; padding-left: 2em; list-style-type: square; font-size: 16px;">
<li style="margin: 0.5em 0px; font-size: 16px;">values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列</li>
<li style="margin: 0.5em 0px; font-size: 16px;">exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象</li>
<li style="margin: 0.5em 0px; font-size: 16px;">order_by(*field): 对查询结果排序</li>
<li style="margin: 0.5em 0px; font-size: 16px;">reverse(): 对查询结果反向排序</li>
<li style="margin: 0.5em 0px; font-size: 16px;">distinct(): 从返回结果中剔除重复纪录</li>
<li style="margin: 0.5em 0px; font-size: 16px;">values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列</li>
<li style="margin: 0.5em 0px; font-size: 16px;">count(): 返回数据库中匹配查询(QuerySet)的对象数量。</li>
<li style="margin: 0.5em 0px; font-size: 16px;">first(): 返回第一条记录</li>
<li style="margin: 0.5em 0px; font-size: 16px;">last(): 返回最后一条记录</li>
<li style="margin: 0.5em 0px; font-size: 16px;">exists(): 如果QuerySet包含数据,就返回True,否则返回False。</li>
</ul>
<h6 id="2-queryset-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">2.QuerySet对象</h6>
<ul style="margin: 1.2em 0px; padding-left: 2em; list-style-type: square; font-size: 16px;">
<li style="margin: 0.5em 0px; font-size: 16px;">查询的结果集就是一个QuerySet对象</li>
<li style="margin: 0.5em 0px; font-size: 16px;">QuerySet对象就像是一个列表,列表存储着查询出的结果,可以迭代,可以切片</li>
<li style="margin: 0.5em 0px; font-size: 16px;">Django中QuerySet对象是惰性的,即你得到这个对象的时候并没有真正的在数据库中执行SQL语句,只有用到了QuerySet对象中的数据才会执行SQL语句</li>
<li style="margin: 0.5em 0px; font-size: 16px;">想判断QuerySet对象中是否有数据,若写成</li>
</ul>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
<span class="hljs-keyword" style="color: #6666ea;">if</span> obj:
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">仍然会执行SQL语句,若使用</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
<span class="hljs-keyword" style="color: #6666ea;">if</span> obj.exists():
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">就可以避免这种问题。</p>
<ul style="margin: 1.2em 0px; padding-left: 2em; list-style-type: square; font-size: 16px;">
<li style="margin: 0.5em 0px; font-size: 16px;">QuerySet对象的使用是有cache缓存的,即遍历第二次QuerySet对象的时候数据是从缓存中拿的,不会执行SQL语句</li>
<li style="margin: 0.5em 0px; font-size: 16px;">如果QuerySet对象数据量特别大,遍历时为了避免占用大量cache空间,可以将QuerySet对象转换成一个迭代器</li>
</ul>
<h6 id="3-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">3.基础查找</h6>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">得到对象后,查找字段</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student1=student.objects.filter(school_id=<span class="hljs-number" style="color: #df5320;">1</span>)[<span class="hljs-number" style="color: #df5320;">0</span>]
print(student1.num)
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">拿时外键对象的字段</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student1 = student.objects.filter(id=<span class="hljs-number" style="color: #df5320;">2</span>)[<span class="hljs-number" style="color: #df5320;">0</span>]
print(student1.school.name)
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">拿多对多关系的字段因为是多对多关系,得到的会是一个QuerySet对象</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student1=student.objects.filter(id=<span class="hljs-number" style="color: #df5320;">2</span>)[<span class="hljs-number" style="color: #df5320;">0</span>]
print(student1.teacher.values(<span class="hljs-string" style="color: #5ab738;">'name'</span>))
</code></pre>
<h6 id="4-__-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">4.使用’__’进行的查找</h6>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">一对多school_name为外键对象的字段school为student表中设置的外键字段</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student1=student.objects.filter(id=<span class="hljs-number" style="color: #df5320;">2</span>).values(<span class="hljs-string" style="color: #5ab738;">'school__name'</span>)
print(student1)
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">多对多和一对多的查询方式一样teacher为student表中设置的外键字段</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student1=student.objects.filter(id=<span class="hljs-number" style="color: #df5320;">2</span>).values(<span class="hljs-string" style="color: #5ab738;">'teacher__name'</span>)
print(student1)
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">反向一对多student__name中的student为表名</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=school.objects.filter(student__name=<span class="hljs-string" style="color: #5ab738;">'student1'</span>).values(<span class="hljs-string" style="color: #5ab738;">'name'</span>)
print(result)
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">反向多对多也和反向多对多一样</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=teacher.objects.filter(student__id=<span class="hljs-number" style="color: #df5320;">2</span>).values(<span class="hljs-string" style="color: #5ab738;">'name'</span>)
print(result)
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">其他查询条件</p>
<ul style="margin: 1.2em 0px; padding-left: 2em; list-style-type: square; font-size: 16px;">
<li style="margin: 0.5em 0px; font-size: 16px;">id__lt=3 表示id小于3</li>
<li style="margin: 0.5em 0px; font-size: 16px;">id__gt=1 表示id大于1</li>
<li style="margin: 0.5em 0px; font-size: 16px;">id__in=[1,2,3] 表示id在列表中</li>
<li style="margin: 0.5em 0px; font-size: 16px;">name__contains=”fenc” 表示name中包含fenc</li>
<li style="margin: 0.5em 0px; font-size: 16px;">name__icontains=”ven” 表示不区分大小写的包含</li>
<li style="margin: 0.5em 0px; font-size: 16px;">id__range=[1,3] 表示id在1到3之间,包括1,3</li>
<li style="margin: 0.5em 0px; font-size: 16px;">name__startswith=’cs’ 表示以cs开头的</li>
<li style="margin: 0.5em 0px; font-size: 16px;">name__endswith=’cs’ 表示以cs结尾的</li>
<li style="margin: 0.5em 0px; font-size: 16px;">name__istartswith 不区分大小写</li>
<li style="margin: 0.5em 0px; font-size: 16px;">name__iendswith 不区分大小写</li>
<li style="margin: 0.5em 0px; font-size: 16px;">等等</li>
</ul>
<h6 id="5-aggregate" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">5.聚合查询aggregate</h6>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">聚合查询是对QuerySet对象进行计算得到一个结果值作为字典中的值放到一个字典中这里先引入一些聚合方法</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
<span class="hljs-keyword" style="color: #6666ea;">from</span> django.db.models <span class="hljs-keyword" style="color: #6666ea;">import</span> Avg,Min,Sum,Max
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">举例:</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=student.objects.all().aggregate(Max(<span class="hljs-string" style="color: #5ab738;">'num'</span>))
print(result)
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">得到的是一个字典:{‘num__max’: 3}若你想给这个字典的key换一个名字,可以使用:</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=student.objects.all().aggregate(new_name=Max(<span class="hljs-string" style="color: #5ab738;">'num'</span>))
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">输出:{‘new_name’: 3}也可以同时进行多个聚合查询</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=student.objects.all().aggregate(Avg(<span class="hljs-string" style="color: #5ab738;">'num'</span>),Min(<span class="hljs-string" style="color: #5ab738;">'num'</span>),new_name=Max(<span class="hljs-string" style="color: #5ab738;">'num'</span>))
</code></pre>
<h6 id="6-annotate" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">6.分组查询annotate</h6>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">分组查询就像是SQL语句中的group by可以如下使用,即以school_id分组,计算每组的max(num)</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=student.objects.values(<span class="hljs-string" style="color: #5ab738;">'school_id'</span>).annotate(Max(<span class="hljs-string" style="color: #5ab738;">'num'</span>))
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">也可以对QuerySet对象使用在查询得出的结果集中进行分组</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=student.objects.filter(school_id__lt=<span class="hljs-number" style="color: #df5320;">2</span>).values(<span class="hljs-string" style="color: #5ab738;">'school_id'</span>).annotate(Max(<span class="hljs-string" style="color: #5ab738;">'num'</span>))
</code></pre>
<h6 id="7-f-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">7.F查询</h6>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">执行F查询前还得先引入</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
<span class="hljs-keyword" style="color: #6666ea;">from</span> django.db.models <span class="hljs-keyword" style="color: #6666ea;">import</span> F
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">F查询可以将对象中的值作为变量使用,例如:</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=student.objects.filter(id__gt=F(<span class="hljs-string" style="color: #5ab738;">'school_id'</span>))
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">或者</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
result=student.objects.update(num=F(<span class="hljs-string" style="color: #5ab738;">'school_id'</span>)+<span class="hljs-number" style="color: #df5320;">1</span>)
</code></pre>
<h6 id="8-q-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">8.Q查询</h6>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">惯例先引入</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
<span class="hljs-keyword" style="color: #6666ea;">from</span> django.db.models <span class="hljs-keyword" style="color: #6666ea;">import</span> Q
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">Q查询是应用在查询条件上的。在普通的查询当中,且可以用逗号‘,’表示,可是如果我们想使用或的关系怎么办,使用Q来完成它</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student1=student.objects.filter(Q(num=<span class="hljs-number" style="color: #df5320;">1</span>) | Q(school_id=<span class="hljs-number" style="color: #df5320;">1</span>))
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">相当于用Q将条件封装,在Q对象之间使用&或者|或者~如果想将普通发关键字参数查询与Q查询一起使用,必须将关键字参数查询放到Q的后边</p>
<h6 id="9-extra" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">9.扩展查询extra</h6>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">Django 的查询语法难以简练地表达复杂的 WHERE 子句,于是使用扩展查询extra,其原理相当于给SQL语句中添加子语句extra(select=None,where=None,params=None,tables=None,order_by=None,select_params=None)这些参数都是可写可不写的简单举例:直接暴力上中文了</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student1=student.objects.extra(select={<span class="hljs-string" style="color: #5ab738;">'是否大于2'</span>:<span class="hljs-string" style="color: #5ab738;">'num>2'</span>})
print(student1.values(<span class="hljs-string" style="color: #5ab738;">'是否大于2'</span>)[<span class="hljs-number" style="color: #df5320;">0</span>][<span class="hljs-string" style="color: #5ab738;">'是否大于2'</span>])
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">SQL语句其实执行的是SELECT (num>2) AS <code style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; display: inline;">是否大于2</code> FROM `blog_student可以为select传递参数</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
student1=student.objects.extra(select=({<span class="hljs-string" style="color: #5ab738;">'是否大于2'</span>:<span class="hljs-string" style="color: #5ab738;">'num>%s'</span>}),select_params = (<span class="hljs-string" style="color: #5ab738;">'2'</span>,))
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">可以排序加‘-’为从大到小,不加为从小到大</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,))
student1=student1.extra(order_by=[<span class="hljs-string" style="color: #5ab738;">'-是否大于2'</span>])
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">语句中会添加SELECT (num>’2’) AS <code style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; display: inline;">是否大于2</code> FROM <code style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; display: inline;">blog_student</code> ORDER BY <code style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; display: inline;">是否大于2</code> DESC也可以设置where条件,并且给where设置参数</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,),where=[<span class="hljs-string" style="color: #5ab738;">'id<%s'</span>],params=[<span class="hljs-string" style="color: #5ab738;">'4'</span>])
</code></pre>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">SQL语句为SELECT (num>’2’) AS <code style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; display: inline;">blog_student</code> WHERE (id<’4’) ORDER BY <code style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; display: inline;">是否大于2</code> DESC</p>
<h6 id="10-sql-" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: #777777; font-size: 16px;">10.日志查看对应执行的SQL语句</h6>
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">在setting.py中加上下边的代码</p>
<pre><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas,monospace; margin: 0px 0.15em; padding: 0.5em; white-space: pre; border: 1px solid #cccccc; background-color: #f8f8f8; border-radius: 3px; display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">LOGGING = {
<span class="hljs-string" style="color: #5ab738;">'version'</span>: <span class="hljs-number" style="color: #df5320;">1</span>,<span class="hljs-string" style="color: #5ab738;">'disable_existing_loggers'</span>: <span class="hljs-keyword" style="color: #6666ea;">False</span>,<span class="hljs-string" style="color: #5ab738;">'handlers'</span>: {
<span class="hljs-string" style="color: #5ab738;">'console'</span>:{
<span class="hljs-string" style="color: #5ab738;">'level'</span>:<span class="hljs-string" style="color: #5ab738;">'DEBUG'</span>,<span class="hljs-string" style="color: #5ab738;">'class'</span>:<span class="hljs-string" style="color: #5ab738;">'logging.StreamHandler'</span>,},<span class="hljs-string" style="color: #5ab738;">'loggers'</span>: {
<span class="hljs-string" style="color: #5ab738;">'django.db.backends'</span>: {
<span class="hljs-string" style="color: #5ab738;">'handlers'</span>: [<span class="hljs-string" style="color: #5ab738;">'console'</span>],<span class="hljs-string" style="color: #5ab738;">'propagate'</span>: <span class="hljs-keyword" style="color: #6666ea;">True</span>,<span class="hljs-string" style="color: #5ab738;">'level'</span>:<span class="hljs-string" style="color: #5ab738;">'DEBUG'</span>,}
}
LOGGING
</code></pre>
<div style="height: 0; width: 0; max-height: 0; max-width: 0; overflow: hidden; font-size: 0em; padding: 0; margin: 0;" title="MDH:PHA+I09STTwvcD48cD4mZ3Q7T1JN5Y2zT2JqZWN0IFJlbGF0aW9uYWwgTWFwcGluZ++8iOWvueix
oeWFs+ezu+aYoOWwhO+8iTwvcD48cD7lr7nosaHlhbPns7vmmKDlsITvvIjoi7Hor63vvJooT2Jq
ZWN0IFJlbGF0aW9uYWwgTWFwcGluZ++8jOeugOensE9STe+8jOaIlk8vUk3vvIzmiJZPL1IgbWFw
cGluZ++8ie+8jOaYr+S4gOenjeeoi+W6j+aKgOacr++8jOeUqOS6juWunueOsOmdouWQkeWvueix
oee8lueoi+ivreiogOmHjOS4jeWQjOexu+Wei+ezu+e7n+eahOaVsOaNruS5i+mXtOeahOi9rOaN
ojxzcGFuIGNsYXNzPSJzdXAtLW5vcm1hbCIgZGF0YS1zdXA9IjEiPiZuYnNwOzxhIGNsYXNzPSJz
dXAtYW5jaG9yIG1jZUl0ZW1BbmNob3IiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZm
OyIgbmFtZT0icmVmX1sxXV8xOTc5NTEiIGRhdGEtbWNlLXN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9y
OiAjZmZmZmZmOyI+PC9hPiZuYnNwO+OAguS7juaViOaenOS4iuivtO+8jOWug+WFtuWunuaYr+WI
m+W7uuS6huS4gOS4quWPr+WcqOe8lueoi+ivreiogOmHjOS9v+eUqOeahC0t4oCc6Jma5ouf5a+5
6LGh5pWw5o2u5bqT4oCd44CCPC9zcGFuPjwvcD48cD4mbmJzcDs8L3A+PHA+5ZyoRGphbmdv5Lit
5YW35L2T55qE5a+55bqU5pa55byP5Li677yaPC9wPjxwPiombmJzcDvnsbvlkI3lr7nlupTmlbDm
ja7lupPkuK3nmoTooajlkI08L3A+PHA+KiDnsbvlkI3lr7nlupTmlbDmja7lupPkuK3nmoTooajl
kI08L3A+PHA+KiDnsbvlsZ7mgKflr7nlupTmlbDmja7lupPph4znmoTlrZfmrrU8L3A+PHA+KiDn
sbvlrp7kvovlr7nlupTmlbDmja7lupPooajph4znmoTkuIDooYzmlbDmja48L3A+PHA+KiDnsbvl
rp7kvovlr7nosaHnmoTlsZ7mgKflr7nlupTov5nooYzkuK3nmoTlrZfmrrXnmoTlgLw8L3A+PHA+
Jm5ic3A7PC9wPjxwPiPkuIAu5pWw5o2u5bqT55qE6L+e5o6lPC9wPjxwPkRqYW5nb+m7mOiupOS9
v+eUqOeahOaYr3NxbGl0Ze+8jOWmguaenOaDs+S9v+eUqG15c3Fs5p2l5a2Y5YKo5pWw5o2u77yM
6ZyA6KaB5pS55Y+Y5oiQ55u45bqU55qE5pWw5o2u5bqT5byV5pOO77yM5YW35L2T5aaC5LiL77ya
PC9wPjxwPiMjIyMjIzEu5L+u5pS5c2V0dGluZ+aWh+S7tjwvcD48cD7lsIY8L3A+PHA+YGBgcHl0
aG9uPC9wPjxwcmU+REFUQUJBU0VTID0gezxicj4gICAgJ2RlZmF1bHQnOiB7PGJyPiAgICAgICAg
J0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsPGJyPiAgICAgICAgJ05BTUUn
OiBvcy5wYXRoLmpvaW4oQkFTRV9ESVIsICdkYi5zcWxpdGUzJyksPGJyPiAgICB9PGJyPn08L3By
ZT48cD5gYGA8L3A+PHA+5pS55oiQPC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPkRBVEFCQVNFUyA9
IHs8YnI+ICAgICAgJ2RlZmF1bHQnOiB7PGJyPiAgICAgICdFTkdJTkUnOiAnZGphbmdvLmRiLmJh
Y2tlbmRzLm15c3FsJyw8YnI+ICAgICAgJ05BTUUnOidteXNpdGUnLDxicj4gICAgICAnVVNFUic6
ICdyb290Jyw8YnI+ICAgICAgJ1BBU1NXT1JEJzogJzAwMDAwMCcsPGJyPiAgICAgICdIT1NUJzog
JzEyNy4wLjAuMScsPGJyPiAgICAgICdQT1JUJzogJzMzMDYnLDxicj4gICAgfTxicj59PC9wcmU+
PHA+YGBgPC9wPjxwPiMjIyMjIzIu5byV5YWlcHlteXNxbOmpseWKqDwvcD48cD7lnKhfX2luaXRf
Xy5weeaWh+S7tuS4reWKoOS4ijwvcD48cD5gYGBweXRob248L3A+PHByZT5pbXBvcnQgcHlteXNx
bApweW15c3FsLmluc3RhbGxfYXNfTXlTUUxkYigpPC9wcmU+PHA+YGBgPC9wPjxwPiPkuowu6KGo
55qE5Yib5bu6PC9wPjxwPiMjIzEu5LiA5Liq566A5Y2V55qE5Yib5bu6PC9wPjxwPuaVsOaNruW6
k+ihqOeahOWIm+W7uuWcqE9STeS4reWwseaYr+exu+eahOWIm+W7uuOAgjwvcD48cD5gYGBweXRo
b248L3A+PHByZT5jbGFzcyBzdHVkZW50KG1vZGVscy5Nb2RlbCk6PGJyPiAgICBuYW1lPW1vZGVs
cy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMCk8YnI+ICAgIG51bT1tb2RlbHMuSW50ZWdlckZpZWxk
KCk8YnI+ICAgIHNjaG9vbD1tb2RlbHMuRm9yZWlnbktleShzY2hvb2wsb25fZGVsZXRlPW1vZGVs
cy5DQVNDQURFKTxicj4gICAgdGVhY2hlcj1tb2RlbHMuTWFueVRvTWFueUZpZWxkKHRlYWNoZXIp
PGJyPiAgICBkZWYgX19zdHJfXyhzZWxmKTo8YnI+ICAgICAgICByZXR1cm4gc2VsZi5uYW1lPC9w
cmU+PHA+YGBgPC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPmNsYXNzIHNjaG9vbChtb2RlbHMuTW9k
ZWwpOjxicj4gICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMCk8YnI+ICAg
IGRlZiBfX3N0cl9fKHNlbGYpOjxicj4gICAgICAgIHJldHVybiBzZWxmLm5hbWU8YnI+PGJyPjxi
cj5jbGFzcyB0ZWFjaGVyKG1vZGVscy5Nb2RlbCk6PGJyPiAgICBuYW1lID0gbW9kZWxzLkNoYXJG
aWVsZChtYXhfbGVuZ3RoPTIwKTxicj4gICAgZGVmIF9fc3RyX18oc2VsZik6PGJyPiAgICAgICAg
cmV0dXJuIHNlbGYubmFtZTwvcHJlPjxwPmBgYDwvcD48cD7pppblhYjlnKhtb2RlbHMucHnkuK3n
roDljZXnmoTliJvlu7rkuobkuInkuKrooajvvIznhLblkI7pnIDopoHlnKjlvZPliY3pobnnm67m
nIltYW5hZ2UucHnmlofku7bnm67lvZXkuIvnmoRjbWTmiJbogIVweWNoYXJt5Lit55qEdGVybWlu
YWzkuIvmiafooYzlpoLkuIvlkb3ku6TmnaXlkIzmraXmlbDmja7lupPvvJo8L3A+PHA+YGBgcHl0
aG9uPC9wPjxwPnB5dGhvbiBtYW5hZ2UucHkgbWFrZW1pZ3JhdGlvbnMmbmJzcDsgI+S4uuaooeWe
i+aUueWPmOeUn+aIkOi/geenu+aWh+S7tjwvcD48cD5weXRob24gbWFuYWdlLnB5IG1pZ3JhdGUm
bmJzcDsgJm5ic3A7ICPlupTnlKjmlbDmja7lupPov4Hnp7s8L3A+PHA+YGBgPC9wPjxwPui/meaX
tuWcqOaVsOaNruW6k+S4reWwseS8muaYvuekuuaciei/mTPlvKDooajkuoY8L3A+PHA+PGltZyBz
cmM9Imh0dHBzOi8vaW1nMjAxOC5jbmJsb2dzLmNvbS9ibG9nLzE0NjkwMTUvMjAxODExLzE0Njkw
MTUtMjAxODExMDUyMTM3MzAxMTMtMTcwMzc4ODA0Ni5wbmciIGFsdD0iIiBkYXRhLW1jZS1zcmM9
Imh0dHBzOi8vaW1nMjAxOC5jbmJsb2dzLmNvbS9ibG9nLzE0NjkwMTUvMjAxODExLzE0NjkwMTUt
MjAxODExMDUyMTM3MzAxMTMtMTcwMzc4ODA0Ni5wbmciPjwvcD48cD4mbmJzcDsjIyMyLuWtl+au
teeahOexu+Wei+S4juWPguaVsDwvcD48cD7lh6DkuKrluLjnlKjnmoTnsbvlnovvvJo8L3A+PHA+
KiZuYnNwO0NoYXJGaWVsZDwvcD48cD4qJm5ic3A7SW50ZWdlckZpZWxkPC9wPjxwPiombmJzcDtU
ZXh0RmllbGQ8L3A+PHA+KiDnrYnnrYk8L3A+PHA+Jm5ic3A7PC9wPjxwPuWHoOS4quW4uOeUqOea
hOWPguaVsO+8mjwvcD48cD4qIG51bGw8L3A+PHA+KiBkZWZhdWx0PC9wPjxwPiogcHJpbWFyeV9r
ZXk8L3A+PHA+KiB1bmlxdWU8L3A+PHA+KiDnrYnnrYk8L3A+PHA+Jm5ic3A7PC9wPjxwPuWFt+S9
k+WPguiAg0RqYW5nb+WumOaWueaWh+ahozxhIGhyZWY9Imh0dHBzOi8vZG9jcy5kamFuZ29wcm9q
ZWN0LmNvbS9lbi8yLjEvcmVmL21vZGVscy9maWVsZHMvIiB0YXJnZXQ9Il9ibGFuayIgZGF0YS1t
Y2UtaHJlZj0iaHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzIuMS9yZWYvbW9kZWxz
L2ZpZWxkcy8iPmh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8yLjEvcmVmL21vZGVs
cy9maWVsZHMvPC9hPjwvcD48cD4jIyMzLuihqOS4juihqOS5i+mXtOeahOWFs+iBlDwvcD48cD4j
IyMjIyMxLuWklumUrjwvcD48cD7ljbPkuIDlr7nlpJrnmoTlhbPns7s8L3A+PHA+YGBgcHl0aG9u
PC9wPjxwcmU+c2Nob29sPW1vZGVscy5Gb3JlaWduS2V5KHNjaG9vbCxvbl9kZWxldGU9bW9kZWxz
LkNBU0NBREUpPC9wcmU+PHA+YGBgPC9wPjxwPuWcqOW7uuihqOaXtuS4unNjaG9vbOa3u+WKoOWk
lumUrue6puadn++8jOWcqOaVsOaNruW6k+S4reeahOaYvuekuuS4ujwvcD48cD48aW1nIHNyYz0i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTQ2OTAxNS8yMDE4MTEvMTQ2OTAxNS0y
MDE4MTEwNjExMTE0NzE2OC04OTE3MDA3MzYucG5nIiBhbHQ9IiIgZGF0YS1tY2Utc3JjPSJodHRw
czovL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNDY5MDE1LzIwMTgxMS8xNDY5MDE1LTIwMTgx
MTA2MTExMTQ3MTY4LTg5MTcwMDczNi5wbmciPjwvcD48cD7ov5nph4znmoRpZOaYr+iHquWKqOWI
m+W7uueahO+8jHNjaG9vbF9pZOaYr3NjaG9vbOa3u+WKoOWklumUruS6p+eUn+eahDwvcD48cD7l
poLmnpzmg7PopoHkuI7lj6bkuIDlvKDooajnmoTlhbbku5blrZfmrrXmt7vliqDlpJbplK7vvIzp
nIDopoHlnKjliqDkuIrlj4LmlbB0b19maWxlZD0n5a2X5q615ZCNJ++8jOWQjOaXtui/meS4quWt
l+auteW/hemhu+aYr3VuaXF1ZT1UcnVlPC9wPjxwPiMjIyMjIzIu5LiA5a+55LiAPC9wPjxwPuS4
gOWvueS4gOeahOWIm+W7uuWNs+WcqOWklumUruWIm+W7uuWlveWQjue7mXNjaG9vbF9pZOa3u+WK
oFVOSVFVRe+8nVRydWXnmoTlsZ7mgKc8L3A+PHA+IyMjIyMjMy7lpJrlr7nlpJo8L3A+PHA+YGBg
cHl0aG9uPC9wPjxwcmU+dGVhY2hlcj1tb2RlbHMuTWFueVRvTWFueUZpZWxkKHRlYWNoZXIpPC9w
cmU+PHA+YGBgPC9wPjxwPui/meagt0RqYW5nb+S8mum7mOiupOa3u+WKoOS4gOW8oOihqOS4ujwv
cD48cD48aW1nIHNyYz0iaHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTQ2OTAxNS8y
MDE4MTEvMTQ2OTAxNS0yMDE4MTEwNjExMTkzOTY2NC0xODc5NDcwMzE3LnBuZyIgYWx0PSIiIGRh
dGEtbWNlLXNyYz0iaHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTQ2OTAxNS8yMDE4
MTEvMTQ2OTAxNS0yMDE4MTEwNjExMTkzOTY2NC0xODc5NDcwMzE3LnBuZyI+PC9wPjxwPuihqOek
uuWkmuWvueWkmueahOWFs+ezu+OAgjwvcD48cD7pmaTkuobov5nnp43mlrnlvI/kuZ/lj6/ku6Xm
iYvliqjliJvlu7rkuIDkuKrooajvvIzmiYvliqjmt7vliqDkuKTkuKrlpJbplK7mnaXlrp7njrDl
pJrlr7nlpJrjgII8L3A+PHA+I+S4iS7lop7liKDmlLnmn6U8L3A+PHA+5aKe5Yig5pS55p+l55qE
5pON5L2c5Lya5Zyo6KeG5Zu+5Ye95pWw5Lit6L+b6KGM77yM5omA5Lul6KaB5YWI5byV5YWl5Yiw
dmlld3MucHnkuK08L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+ZnJvbSBibG9nLm1vZGVscyBpbXBv
cnQgKjwvcHJlPjxwPmBgYDwvcD48cD4jIyMxLuWinuWKoDwvcD48cD4jIyMjIyMxLuaZrumAmuWt
l+autTwvcD48cD5jcmVhdGXmlrnlvI88L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+c3R1ZGVudC5v
YmplY3RzLmNyZWF0ZShuYW1lPSJzdHVkZW50MSIsbnVtPTEsc2Nob29sPXNjaG9vbF9vYmopPGJy
PuaIluiAhTxicj5zdHVkZW50Lm9iamVjdHMuY3JlYXRlKCoqeyJuYW1lIjoic3R1ZGVudDEiLCJu
dW0iPSIxIiwic2Nob29sIj1vYmoifSk8L3ByZT48cD5gYGA8L3A+PHA+c2F2ZeaWueW8jzwvcD48
cD5gYGBweXRob248L3A+PHA+c3R1ZGVudF9vYmo9c3R1ZGVudCg8L3A+PHByZT5uYW1lPSJzdHVk
ZW50MSIsbnVtPTEsc2Nob29sPXNjaG9vbF9vYmo8L3ByZT48cD4pPC9wPjxwPnN0dWRlbnRfb2Jr
LnNhdmUoKTwvcD48cD7miJbogIU8L3A+PHA+c3R1ZGVudF9vYmo9c3R1ZGVudCgpPC9wPjxwPnN0
dWRlbnRfb2JqLm5hbWU9InN0dWRlbnQxIjwvcD48cD5zdHVkZW50X29iai5udW09MTwvcD48cD5z
dHVkZW50X29iai5zY2hvb2w9c2Nob29sX29iajwvcD48cD5gYGA8L3A+PHA+IyMjIyMjMi7kuIDl
r7nlpJrlhbPns7vnmoTlrZfmrrU8L3A+PHA+55u05o6l6K6+572u5aSW6ZSu55qEaWQ8L3A+PHA+
5Zyoc3R1ZGVudC5vYmplY3RzLmNyZWF0ZeS4reWKoDwvcD48cD5gYGBweXRob248L3A+PHA+c2No
b29sX2lkPTE8L3A+PHA+YGBgPC9wPjxwPumAmui/h+iOt+WPluWklumUruWvueixoeiuvue9rjwv
cD48cD5gYGBweXRob248L3A+PHByZT5vYmogPSBzY2hvb2wub2JqZWN0cy5nZXQobmFtZT0ic2No
b29sMSIpPGJyPnN0dWRlbnQub2JqZWN0cy5jcmVhdGUoKip7Im5hbWUiOiJzdHVkZW50MiIsIm51
bSI6Miwic2Nob29sIjpvYmp9KTwvcHJlPjxwPmBgYDwvcD48cD4jIyMjIyMzLuWkmuWvueWkmuWF
s+ezu+eahOWtl+autTwvcD48cD5gYGBweXRob248L3A+PHByZT50ZWFjaGVyMT10ZWFjaGVyLm9i
amVjdHMuZ2V0KGlkPTEpPGJyPnRlYWNoZXIyPXRlYWNoZXIub2JqZWN0cy5nZXQoaWQ9Mik8YnI+
c3R1ZGVudDE9c3R1ZGVudC5vYmplY3RzLmdldChpZD0xKTxicj5zdHVkZW50MS50ZWFjaGVyLmFk
ZCh0ZWFjaGVyMSx0ZWFjaGVyMik8L3ByZT48cD5gYGA8L3A+PHA+5oiWPC9wPjxwPmBgYHB5dGhv
bjwvcD48cHJlPnRlYWNoZXIxPXRlYWNoZXIub2JqZWN0cy5maWx0ZXIoaWRfX2d0PTEsaWRfX2x0
PTEwKTxicj5zdHVkZW50MT1zdHVkZW50Lm9iamVjdHMuZ2V0KGlkPTEpPGJyPnN0dWRlbnQxLnRl
YWNoZXIuYWRkKCp0ZWFjaGVyMSk8L3ByZT48cD5gYGA8L3A+PHA+5oiWPC9wPjxwPmBgYHB5dGhv
bjwvcD48cHJlPnRlYWNoZXIxPXRlYWNoZXIub2JqZWN0cy5maWx0ZXIoaWQ9MSlbMF08YnI+c3R1
ZGVudDE9c3R1ZGVudC5vYmplY3RzLmZpbHRlcihpZF9fZ3Q9MSk8YnI+dGVhY2hlcjEuc3R1ZGVu
dF9zZXQuYWRkKCpzdHVkZW50MSk8L3ByZT48cD5gYGA8L3A+PHA+5oiWPC9wPjxwPmBgYHB5dGhv
bjwvcD48cHJlPnN0dWRlbnQxPXN0dWRlbnQub2JqZWN0cy5maWx0ZXIoaWQ9MSlbMF08YnI+c3R1
ZGVudDEudGVhY2hlci5hZGQoMik8L3ByZT48cD5gYGA8L3A+PHA+5aaC5p6c5aSa5a+55aSa5YWz
57O755qE6KGo5piv6Ieq5bex5omL5Yqo5Yib5bu655qE77yM6YKj5LmI6L+Y5Y+v5Lul55u05o6l
5re75Yqg6K+l6KGo55qE5a2X5q6177yM5Yip55So5Lik5Liq5aSW6ZSu55qE5pa55byP5re75Yqg
44CCPC9wPjxwPiMjIzIu5Yig6ZmkPC9wPjxwPiMjIyMjIzEu5Yig6Zmk5pmu6YCa6KGo5L+h5oGv
PC9wPjxwPuWFiOaJvuWIsO+8jOWGjeWIoOmZpDwvcD48cD5gYGBweXRob248L3A+PHByZT5zdHVk
ZW50MT1zdHVkZW50Lm9iamVjdHMuZmlsdGVyKGlkPTEpWzBdLmRlbGV0ZSgpPC9wcmU+PHA+YGBg
PC9wPjxwPueUseS6jmRqYW5nb+eahOe6p+iBlOWIoOmZpO+8jOWFtuS7luihqOS4reWmgnN0dWRl
bnRfdGVhY2hlcuihqOS4reaciXN0dWRlbnQx55qE5L+h5oGv55qE5pWw5o2u5Lmf5Lya5Yig6Zmk
PC9wPjxwPiMjIyMjIzIu5Yig6Zmk5aSa5a+55aSa6KGo55qE5L+h5oGvPC9wPjxwPmBgYHB5dGhv
bjwvcD48cHJlPnN0dWRlbnQxPXN0dWRlbnQub2JqZWN0cy5maWx0ZXIoaWQ9MSlbMF08YnI+c3R1
ZGVudDEudGVhY2hlci5jbGVhcigpI+WIoOmZpOWkmuWvueWkmuihqOS4rXN0dWRlbnRfaWTkuLpz
dHVkZW50MeeahGlk55qE5pWw5o2uPGJyPnN0dWRlbnQxLnRlYWNoZXIucmVtb3ZlKDIpI+WIoOmZ
pOWkmuWvueWkmuihqOS4rXRlYWNoZXJfaWTkuLoy55qE5pWw5o2uPGJyPnN0dWRlbnQxLnRlYWNo
ZXIucmVtb3ZlKCpsaXN0KSPov5nph4zkuZ/lj6/ku6XkuLrkuIDkuKrliJfooag8L3ByZT48cD5g
YGA8L3A+PHA+5Y+N5ZCR5Y2z5L2/55Soc3R1ZGVudF9zZXQs5YW25LuW5ZKM5q2j5ZCR5ZCM5qC3
6YGT55CGPC9wPjxwPiMjIzMu5L+u5pS5PC9wPjxwPiMjIyMjIzEu5pmu6YCa5a2X5q6155qE5L+u
5pS5PC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPnN0dWRlbnQxPXN0dWRlbnQub2JqZWN0cy5nZXQo
aWQ9Mik8YnI+c3R1ZGVudDEubmFtZT0ic2ZlbmNzIjxicj5zdHVkZW50MS5zYXZlKCk8L3ByZT48
cD5gYDwvcD48cD7miJbogIU8L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+c3R1ZGVudDE9c3R1ZGVu
dC5vYmplY3RzLmZpbHRlcihpZD0yKS51cGRhdGUobmFtZT0ic2ZlbmNzIik8L3ByZT48cD5gYGA8
L3A+PHA+dXBkYXRl5pivcXVlcnlzZXTnmoTmlrnms5XvvIzlj6/ku6Xmm7TmlrDlpJrooYzmlbDm
ja7jgII8L3A+PHA+c2F2ZeaWueazleaYr+WwhuS4gOihjOeahOaJgOacieWtl+autemDvemHjeaW
sOWtmOWCqOS4gOmBje+8jHVwZGF0ZeaWueazleWPquWwhuimgeaUueWPmOeahOWtl+auteWtmOWC
qO+8jOaViOeOh+abtOmrmOOAgjwvcD48cD4jIyMjIyMyLuWkmuWvueWkmuihqOeahOWtl+auteea
hOS/ruaUuTwvcD48cD5gYGBweXRob248L3A+PHByZT5zdHVkZW50X29iai50ZWFjaGVyLnNldChb
MSwyLDNdKSMgc2V06YeM5piv5LiA5Liq5YiX6KGoPC9wcmU+PHA+YGBgPC9wPjxwPuWFiOWIoOmZ
pO+8jOWGjea3u+WKoDwvcD48cD4jIyM0LuafpeivojwvcD48cD4jIyMjIyMxLuafpeivoueahOac
ieWFs+WHveaVsDwvcD48cD4qJm5ic3A7ZmlsdGVyKCoqa3dhcmdzKeetm+mAiTwvcD48cD4qJm5i
c3A7YWxsKCnmiYDmnInnu5Pmnpw8L3A+PHA+KiZuYnNwO2dldCgqKmt3YXJncynlvpfliLDkuIDk
uKrnu5PmnpzvvIzlpoLmnpznu5PmnpzlpJrkuo7kuIDkuKrmiJbmsqHmnInpg73kvJrmiqXplJk8
L3A+PHA+Jm5ic3A7PC9wPjxwPuWmguaenOafpeivoue7k+aenOaYr+S4gOS4que7k+aenOmbhu+8
jOWNs1F1ZXJ5U2V05a+56LGh77yM6YKj5LmI5a6D6L+Y5pyJ5Lul5LiL5pa55rOVPC9wPjxwPiog
dmFsdWVzKCpmaWVsZCk6IOi/lOWbnuS4gOS4qlZhbHVlUXVlcnlTZXTigJTigJTkuIDkuKrnibnm
rornmoRRdWVyeVNldO+8jOi/kOihjOWQjuW+l+WIsOeahOW5tuS4jeaYr+S4gOezu+WIlyBtb2Rl
bOeahOWunuS+i+WMluWvueixoe+8jOiAjOaYr+S4gOS4quWPr+i/reS7o+eahOWtl+WFuOW6j+WI
lzxicj4qIGV4Y2x1ZGUoKiprd2FyZ3MpOiAgICAg5a6D5YyF5ZCr5LqG5LiO5omA57uZ562b6YCJ
5p2h5Lu25LiN5Yy56YWN55qE5a+56LGhPGJyPiogb3JkZXJfYnkoKmZpZWxkKTogICAgICDlr7nm
n6Xor6Lnu5PmnpzmjpLluo88YnI+KiZuYnNwO3JldmVyc2UoKTogICAgICAgICAgICAg5a+55p+l
6K+i57uT5p6c5Y+N5ZCR5o6S5bqPPGJyPiombmJzcDtkaXN0aW5jdCgpOiAgICAgICAgICAgIOS7
jui/lOWbnue7k+aenOS4reWJlOmZpOmHjeWkjee6quW9lTxicj4qJm5ic3A7dmFsdWVzX2xpc3Qo
KmZpZWxkKTogICDlroPkuI52YWx1ZXMoKemdnuW4uOebuOS8vO+8jOWug+i/lOWbnueahOaYr+S4
gOS4quWFg+e7hOW6j+WIl++8jHZhbHVlc+i/lOWbnueahOaYr+S4gOS4quWtl+WFuOW6j+WIlzxi
cj4qJm5ic3A7Y291bnQoKTogICAgICAgICAgICAgIOi/lOWbnuaVsOaNruW6k+S4reWMuemFjeaf
peivoihRdWVyeVNldCnnmoTlr7nosaHmlbDph4/jgII8YnI+KiZuYnNwO2ZpcnN0KCk6ICAgICAg
ICAgICAgICAg6L+U5Zue56ys5LiA5p2h6K6w5b2VPGJyPiombmJzcDtsYXN0KCk6ICAgICAgICAg
ICAgICAgIOi/lOWbnuacgOWQjuS4gOadoeiusOW9lTxicj4qJm5ic3A7ZXhpc3RzKCk6ICAgICAg
ICAgICAgIOWmguaenFF1ZXJ5U2V05YyF5ZCr5pWw5o2u77yM5bCx6L+U5ZueVHJ1Ze+8jOWQpuWI
mei/lOWbnkZhbHNl44CCPC9wPjxwPiZuYnNwOzwvcD48cD4jIyMjIyMyLlF1ZXJ5U2V05a+56LGh
PC9wPjxwPiog5p+l6K+i55qE57uT5p6c6ZuG5bCx5piv5LiA5LiqUXVlcnlTZXTlr7nosaE8L3A+
PHA+KiBRdWVyeVNldOWvueixoeWwseWDj+aYr+S4gOS4quWIl+ihqO+8jOWIl+ihqOWtmOWCqOed
gOafpeivouWHuueahOe7k+aenO+8jOWPr+S7pei/reS7o++8jOWPr+S7peWIh+eJhzwvcD48cD4q
IERqYW5nb+S4rVF1ZXJ5U2V05a+56LGh5piv5oOw5oCn55qE77yM5Y2z5L2g5b6X5Yiw6L+Z5Liq
5a+56LGh55qE5pe25YCZ5bm25rKh5pyJ55yf5q2j55qE5Zyo5pWw5o2u5bqT5Lit5omn6KGMU1FM
6K+t5Y+l77yM5Y+q5pyJ55So5Yiw5LqGUXVlcnlTZXTlr7nosaHkuK3nmoTmlbDmja7miY3kvJrm
iafooYxTUUzor63lj6U8L3A+PHA+KiDmg7PliKTmlq1RdWVyeVNldOWvueixoeS4reaYr+WQpuac
ieaVsOaNru+8jOiLpeWGmeaIkDwvcD48cD4mbmJzcDs8L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+
aWYgb2JqOjwvcHJlPjxwPmBgYDwvcD48cD7ku43nhLbkvJrmiafooYxTUUzor63lj6XvvIzoi6Xk
vb/nlKg8L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+aWYgb2JqLmV4aXN0cygpOjwvcHJlPjxwPmBg
YDwvcD48cD7lsLHlj6/ku6Xpgb/lhY3ov5nnp43pl67popjjgII8L3A+PHA+KiZuYnNwO1F1ZXJ5
U2V05a+56LGh55qE5L2/55So5piv5pyJY2FjaGXnvJPlrZjnmoTvvIzljbPpgY3ljobnrKzkuozm
rKFRdWVyeVNldOWvueixoeeahOaXtuWAmeaVsOaNruaYr+S7jue8k+WtmOS4reaLv+eahO+8jOS4
jeS8muaJp+ihjFNRTOivreWPpTwvcD48cD4qIOWmguaenFF1ZXJ5U2V05a+56LGh5pWw5o2u6YeP
54m55Yir5aSn77yM6YGN5Y6G5pe25Li65LqG6YG/5YWN5Y2g55So5aSn6YePY2FjaGXnqbrpl7Tv
vIzlj6/ku6XlsIZRdWVyeVNldOWvueixoei9rOaNouaIkOS4gOS4qui/reS7o+WZqDwvcD48cD4m
bmJzcDs8L3A+PHA+IyMjIyMjMy7ln7rnoYDmn6Xmib48L3A+PHA+5b6X5Yiw5a+56LGh5ZCO77yM
5p+l5om+5a2X5q61PC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPnN0dWRlbnQxPXN0dWRlbnQub2Jq
ZWN0cy5maWx0ZXIoc2Nob29sX2lkPTEpWzBdPGJyPnByaW50KHN0dWRlbnQxLm51bSk8L3ByZT48
cD5gYGA8L3A+PHA+5ou/5pe25aSW6ZSu5a+56LGh55qE5a2X5q61PC9wPjxwPmBgYHB5dGhvbjwv
cD48cHJlPnN0dWRlbnQxID0gc3R1ZGVudC5vYmplY3RzLmZpbHRlcihpZD0yKVswXTxicj5wcmlu
dChzdHVkZW50MS5zY2hvb2wubmFtZSk8L3ByZT48cD5gYGA8L3A+PHA+5ou/5aSa5a+55aSa5YWz
57O755qE5a2X5q61PC9wPjxwPuWboOS4uuaYr+WkmuWvueWkmuWFs+ezu++8jOW+l+WIsOeahOS8
muaYr+S4gOS4qlF1ZXJ5U2V05a+56LGhPC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPnN0dWRlbnQx
PXN0dWRlbnQub2JqZWN0cy5maWx0ZXIoaWQ9MilbMF08YnI+cHJpbnQoc3R1ZGVudDEudGVhY2hl
ci52YWx1ZXMoJ25hbWUnKSk8L3ByZT48cD5gYGA8L3A+PHA+IyMjIyMjNC7kvb/nlKgnX18n6L+b
6KGM55qE5p+l5om+PC9wPjxwPuS4gOWvueWkmjwvcD48cD5zY2hvb2xfbmFtZeS4uuWklumUruWv
ueixoeeahOWtl+autTwvcD48cD5zY2hvb2zkuLpzdHVkZW506KGo5Lit6K6+572u55qE5aSW6ZSu
5a2X5q61PC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPnN0dWRlbnQxPXN0dWRlbnQub2JqZWN0cy5m
aWx0ZXIoaWQ9MikudmFsdWVzKCdzY2hvb2xfX25hbWUnKTxicj5wcmludChzdHVkZW50MSk8L3By
ZT48cD5gYGA8L3A+PHA+5aSa5a+55aSaPC9wPjxwPuWSjOS4gOWvueWkmueahOafpeivouaWueW8
j+S4gOagtzwvcD48cD50ZWFjaGVy5Li6c3R1ZGVudOihqOS4reiuvue9rueahOWklumUruWtl+au
tTwvcD48cD5gYGBweXRob248L3A+PHByZT5zdHVkZW50MT1zdHVkZW50Lm9iamVjdHMuZmlsdGVy
KGlkPTIpLnZhbHVlcygndGVhY2hlcl9fbmFtZScpPGJyPnByaW50KHN0dWRlbnQxKTwvcHJlPjxw
PmBgYDwvcD48cD7lj43lkJHkuIDlr7nlpJo8L3A+PHA+c3R1ZGVudF9fbmFtZeS4reeahHN0dWRl
bnTkuLrooajlkI08L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+cmVzdWx0PXNjaG9vbC5vYmplY3Rz
LmZpbHRlcihzdHVkZW50X19uYW1lPSdzdHVkZW50MScpLnZhbHVlcygnbmFtZScpPGJyPnByaW50
KHJlc3VsdCk8L3ByZT48cD5gYGA8L3A+PHA+5Y+N5ZCR5aSa5a+55aSaPC9wPjxwPuS5n+WSjOWP
jeWQkeWkmuWvueWkmuS4gOagtzwvcD48cD5gYGBweXRob248L3A+PHByZT5yZXN1bHQ9dGVhY2hl
ci5vYmplY3RzLmZpbHRlcihzdHVkZW50X19pZD0yKS52YWx1ZXMoJ25hbWUnKTxicj5wcmludChy
ZXN1bHQpPC9wcmU+PHA+YGBgPC9wPjxwPuWFtuS7luafpeivouadoeS7tjwvcD48cD4qJm5ic3A7
aWRfX2x0PTMg6KGo56S6aWTlsI/kuo4zPC9wPjxwPiombmJzcDtpZF9fZ3Q9MSDooajnpLppZOWk
p+S6jjE8L3A+PHA+KiZuYnNwO2lkX19pbj1bMSwgMiwgM10g6KGo56S6aWTlnKjliJfooajkuK08
L3A+PHA+KiZuYnNwO25hbWVfX2NvbnRhaW5zPSJmZW5jIiDooajnpLpuYW1l5Lit5YyF5ZCrZmVu
YzwvcD48cD4qJm5ic3A7bmFtZV9faWNvbnRhaW5zPSJ2ZW4iIOihqOekuuS4jeWMuuWIhuWkp+Ww
j+WGmeeahOWMheWQqzwvcD48cD4qJm5ic3A7aWRfX3JhbmdlPVsxLDNdIOihqOekumlk5ZyoMeWI
sDPkuYvpl7TvvIzljIXmi6wxLDM8L3A+PHA+KiBuYW1lX19zdGFydHN3aXRoPSdjcycg6KGo56S6
5LulY3PlvIDlpLTnmoQ8L3A+PHA+KiBuYW1lX19lbmRzd2l0aD0nY3MnIOihqOekuuS7pWNz57uT
5bC+55qEPC9wPjxwPiombmJzcDtuYW1lX19pc3RhcnRzd2l0aCZuYnNwOyDkuI3ljLrliIblpKfl
sI/lhpk8L3A+PHA+KiBuYW1lX19pZW5kc3dpdGgg5LiN5Yy65YiG5aSn5bCP5YaZPC9wPjxwPiog
562J562JPC9wPjxwPiZuYnNwOzwvcD48cD4jIyMjIyM1LuiBmuWQiOafpeivojxzdHJvbmc+YWdn
cmVnYXRlPC9zdHJvbmc+PC9wPjxwPuiBmuWQiOafpeivouaYr+WvuVF1ZXJ5U2V05a+56LGh6L+b
6KGM6K6h566X5b6X5Yiw5LiA5Liq57uT5p6c5YC85L2c5Li65a2X5YW45Lit55qE5YC85pS+5Yiw
5LiA5Liq5a2X5YW45LitPC9wPjxwPui/memHjOWFiOW8leWFpeS4gOS6m+iBmuWQiOaWueazlTwv
cD48cD5gYGBweXRob248L3A+PHByZT5mcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IEF2ZyxN
aW4sU3VtLE1heDwvcHJlPjxwPmBgYDwvcD48cD7kuL7kvovvvJo8L3A+PHA+YGBgcHl0aG9uPC9w
PjxwcmU+cmVzdWx0PXN0dWRlbnQub2JqZWN0cy5hbGwoKS5hZ2dyZWdhdGUoTWF4KCdudW0nKSk8
YnI+cHJpbnQocmVzdWx0KTwvcHJlPjxwPmBgYDwvcD48cD7lvpfliLDnmoTmmK/kuIDkuKrlrZfl
hbjvvJp7J251bV9fbWF4JzogM308L3A+PHA+6Iul5L2g5oOz57uZ6L+Z5Liq5a2X5YW455qEa2V5
5o2i5LiA5Liq5ZCN5a2X77yM5Y+v5Lul5L2/55So77yaPC9wPjxwPmBgYHB5dGhvbjwvcD48cHJl
PnJlc3VsdD1zdHVkZW50Lm9iamVjdHMuYWxsKCkuYWdncmVnYXRlKG5ld19uYW1lPU1heCgnbnVt
JykpPC9wcmU+PHA+YGBgPC9wPjxwPui+k+WHuu+8mnsnbmV3X25hbWUnOiAzfTwvcD48cD7kuZ/l
j6/ku6XlkIzml7bov5vooYzlpJrkuKrogZrlkIjmn6Xor6I8L3A+PHA+YGBgcHl0aG9uPC9wPjxw
cmU+cmVzdWx0PXN0dWRlbnQub2JqZWN0cy5hbGwoKS5hZ2dyZWdhdGUoQXZnKCdudW0nKSxNaW4o
J251bScpLG5ld19uYW1lPU1heCgnbnVtJykpPC9wcmU+PHA+YGBgPC9wPjxwPiMjIyMjIzYu5YiG
57uE5p+l6K+iPHN0cm9uZz5hbm5vdGF0ZTwvc3Ryb25nPjwvcD48cD7liIbnu4Tmn6Xor6LlsLHl
g4/mmK9TUUzor63lj6XkuK3nmoRncm91cCBieTwvcD48cD7lj6/ku6XlpoLkuIvkvb/nlKjvvIzl
jbPku6VzY2hvb2xfaWTliIbnu4TvvIzorqHnrpfmr4/nu4TnmoRtYXjvvIhudW3vvIk8L3A+PHA+
YGBgcHl0aG9uPC9wPjxwcmU+cmVzdWx0PXN0dWRlbnQub2JqZWN0cy52YWx1ZXMoJ3NjaG9vbF9p
ZCcpLmFubm90YXRlKE1heCgnbnVtJykpPC9wcmU+PHA+YGBgPC9wPjxwPuS5n+WPr+S7peWvuVF1
ZXJ5U2V05a+56LGh5L2/55SoPC9wPjxwPuWcqOafpeivouW+l+WHuueahOe7k+aenOmbhuS4rei/
m+ihjOWIhue7hDwvcD48cD5gYGBweXRob248L3A+PHByZT5yZXN1bHQ9c3R1ZGVudC5vYmplY3Rz
LmZpbHRlcihzY2hvb2xfaWRfX2x0PTIpLnZhbHVlcygnc2Nob29sX2lkJykuYW5ub3RhdGUoTWF4
KCdudW0nKSk8L3ByZT48cD5gYGA8L3A+PHA+IyMjIyMjNy5G5p+l6K+iPHN0cm9uZz48YnI+PC9z
dHJvbmc+PC9wPjxwPuaJp+ihjEbmn6Xor6LliY3ov5jlvpflhYjlvJXlhaU8L3A+PHA+YGBgcHl0
aG9uPC9wPjxwcmU+ZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBGPC9wcmU+PHA+YGBgPC9w
PjxwPkbmn6Xor6Llj6/ku6XlsIblr7nosaHkuK3nmoTlgLzkvZzkuLrlj5jph4/kvb/nlKjvvIzk
vovlpoLvvJo8L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+cmVzdWx0PXN0dWRlbnQub2JqZWN0cy5m
aWx0ZXIoaWRfX2d0PUYoJ3NjaG9vbF9pZCcpKTwvcHJlPjxwPmBgYDwvcD48cD7miJbogIU8L3A+
PHA+YGBgcHl0aG9uPC9wPjxwcmU+cmVzdWx0PXN0dWRlbnQub2JqZWN0cy51cGRhdGUobnVtPUYo
J3NjaG9vbF9pZCcpKzEpPC9wcmU+PHA+YGBgPC9wPjxwPiMjIyMjIzguUeafpeivojwvcD48cD7m
g6/kvovlhYjlvJXlhaU8L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+ICBmcm9tIGRqYW5nby5kYi5t
b2RlbHMgaW1wb3J0IFE8L3ByZT48cD5gYGA8L3A+PHA+UeafpeivouaYr+W6lOeUqOWcqOafpeiv
ouadoeS7tuS4iueahOOAgjwvcD48cD7lnKjmma7pgJrnmoTmn6Xor6LlvZPkuK3vvIzkuJTlj6/k
u6XnlKjpgJflj7figJjvvIzigJnooajnpLrvvIzlj6/mmK/lpoLmnpzmiJHku6zmg7Pkvb/nlKjm
iJbnmoTlhbPns7vmgI7kuYjlip7vvIzkvb/nlKhR5p2l5a6M5oiQ5a6DPC9wPjxwPmBgYHB5dGhv
bjwvcD48cHJlPnN0dWRlbnQxPXN0dWRlbnQub2JqZWN0cy5maWx0ZXIoUShudW09MSkgfCBRKHNj
aG9vbF9pZD0xKSk8L3ByZT48cD5gYGA8L3A+PHA+55u45b2T5LqO55SoUeWwhuadoeS7tuWwgeij
he+8jOWcqFHlr7nosaHkuYvpl7Tkvb/nlKgmYW1wO+aIluiAhXzmiJbogIV+PC9wPjxwPuWmguae
nOaDs+WwhuaZrumAmuWPkeWFs+mUruWtl+WPguaVsOafpeivouS4jlHmn6Xor6LkuIDotbfkvb/n
lKjvvIzlv4XpobvlsIblhbPplK7lrZflj4LmlbDmn6Xor6LmlL7liLBR55qE5ZCO6L65PC9wPjxw
PiMjIyMjIzku5omp5bGV5p+l6K+iZXh0cmE8L3A+PHA+RGphbmdvIOeahOafpeivouivreazlema
vuS7peeugOe7g+WcsOihqOi+vuWkjeadgueahCBXSEVSRSDlrZDlj6XvvIzkuo7mmK/kvb/nlKjm
ianlsZXmn6Xor6JleHRyYe+8jOWFtuWOn+eQhuebuOW9k+S6jue7mVNRTOivreWPpeS4rea3u+WK
oOWtkOivreWPpTwvcD48cD5leHRyYShzZWxlY3Q9Tm9uZSwgd2hlcmU9Tm9uZSwgcGFyYW1zPU5v
bmUsIHRhYmxlcz1Ob25lLCBvcmRlcl9ieT1Ob25lLCBzZWxlY3RfcGFyYW1zPU5vbmUpPC9wPjxw
Pui/meS6m+WPguaVsOmDveaYr+WPr+WGmeWPr+S4jeWGmeeahDwvcD48cD7nroDljZXkuL7kvovv
vJo8L3A+PHA+55u05o6l5pq05Yqb5LiK5Lit5paH5LqGPC9wPjxwPmBgYHB5dGhvbjwvcD48cHJl
PnN0dWRlbnQxPXN0dWRlbnQub2JqZWN0cy5leHRyYShzZWxlY3Q9eyfmmK/lkKblpKfkuo4yJzon
bnVtJmd0OzInfSk8YnI+cHJpbnQoc3R1ZGVudDEudmFsdWVzKCfmmK/lkKblpKfkuo4yJylbMF1b
J+aYr+WQpuWkp+S6jjInXSk8L3ByZT48cD5gYGA8L3A+PHA+U1FM6K+t5Y+l5YW25a6e5omn6KGM
55qE5pivU0VMRUNUIChudW0mZ3Q7MikgQVMgYOaYr+WQpuWkp+S6jjJgIEZST00gYGJsb2dfc3R1
ZGVudDwvcD48cD7lj6/ku6XkuLpzZWxlY3TkvKDpgJLlj4LmlbA8L3A+PHA+YGBgcHl0aG9uPC9w
PjxwcmU+c3R1ZGVudDE9c3R1ZGVudC5vYmplY3RzLmV4dHJhKHNlbGVjdD0oeyfmmK/lkKblpKfk
uo4yJzonbnVtJmd0OyVzJ30pLHNlbGVjdF9wYXJhbXMgPSAoJzInLCkpPC9wcmU+PHA+YGBgPC9w
PjxwPuWPr+S7peaOkuW6jzwvcD48cD7liqDigJgt4oCZ5Li65LuO5aSn5Yiw5bCP77yM5LiN5Yqg
5Li65LuO5bCP5Yiw5aSnPC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPnN0dWRlbnQxPXN0dWRlbnQu
b2JqZWN0cy5leHRyYShzZWxlY3Q9KHsn5piv5ZCm5aSn5LqOMic6J251bSZndDslcyd9KSxzZWxl
Y3RfcGFyYW1zID0gKCcyJywpKTxicj5zdHVkZW50MT1zdHVkZW50MS5leHRyYShvcmRlcl9ieT1b
Jy3mmK/lkKblpKfkuo4yJ10pPC9wcmU+PHA+YGBgPC9wPjxwPuivreWPpeS4reS8mua3u+WKoFNF
TEVDVCAobnVtJmd0OycyJykgQVMgYOaYr+WQpuWkp+S6jjJgIEZST00gYGJsb2dfc3R1ZGVudGAg
T1JERVIgQlkgYOaYr+WQpuWkp+S6jjJgIERFU0M8L3A+PHA+5Lmf5Y+v5Lul6K6+572ud2hlcmXm
naHku7Ys5bm25LiU57uZd2hlcmXorr7nva7lj4LmlbA8L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+
c3R1ZGVudDE9c3R1ZGVudC5vYmplY3RzLmV4dHJhKHNlbGVjdD0oeyfmmK/lkKblpKfkuo4yJzon
bnVtJmd0OyVzJ30pLHNlbGVjdF9wYXJhbXMgPSAoJzInLCksd2hlcmU9WydpZCZsdDslcyddLHBh
cmFtcz1bJzQnXSk8L3ByZT48cD5gYGA8L3A+PHA+Jm5ic3A7U1FM6K+t5Y+l5Li6U0VMRUNUIChu
dW0mZ3Q7JzInKSBBUyBg5piv5ZCm5aSn5LqOMmAgRlJPTSBgYmxvZ19zdHVkZW50YCBXSEVSRSAo
aWQmbHQ7JzQnKSBPUkRFUiBCWSBg5piv5ZCm5aSn5LqOMmAgREVTQzwvcD48cD4jIyMjIyMxMC7m
l6Xlv5fmn6XnnIvlr7nlupTmiafooYznmoRTUUzor63lj6U8L3A+PHA+5Zyoc2V0dGluZy5weeS4
reWKoOS4iuS4i+i+ueeahOS7o+eggTwvcD48cD5gYGBweXRob248L3A+PHA+TE9HR0lORyA9IHs8
YnI+ICAgICd2ZXJzaW9uJzogMSw8YnI+ICAgICdkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnMnOiBG
YWxzZSw8YnI+ICAgICdoYW5kbGVycyc6IHs8YnI+ICAgICAgICAnY29uc29sZSc6ezxicj4gICAg
ICAgICAgICAnbGV2ZWwnOidERUJVRycsPGJyPiAgICAgICAgICAgICdjbGFzcyc6J2xvZ2dpbmcu
U3RyZWFtSGFuZGxlcicsPGJyPiAgICAgICAgfSw8YnI+ICAgIH0sPGJyPiAgICAnbG9nZ2Vycyc6
IHs8YnI+ICAgICAgICAnZGphbmdvLmRiLmJhY2tlbmRzJzogezxicj4gICAgICAgICAgICAnaGFu
ZGxlcnMnOiBbJ2NvbnNvbGUnXSw8YnI+ICAgICAgICAgICAgJ3Byb3BhZ2F0ZSc6IFRydWUsPGJy
PiAgICAgICAgICAgICdsZXZlbCc6J0RFQlVHJyw8YnI+ICAgICAgICB9LDxicj4gICAgfTxicj59
PC9wPjxwPkxPR0dJTkc8L3A+PHA+YGBgPC9wPg==">?</div>
</div> (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|